Showing preview only (3,457K chars total). Download the full file or copy to clipboard to get everything.
Repository: tenngoxars/WeMD
Branch: main
Commit: 95c2d684ee46
Files: 289
Total size: 3.2 MB
Directory structure:
gitextract_mzu2v0jt/
├── .dockerignore
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yml
│ │ ├── config.yml
│ │ ├── feature-request.yml
│ │ ├── optimization.yml
│ │ └── suspected-bug.yml
│ └── workflows/
│ ├── close-external-prs.yml
│ ├── docker-image.yml
│ └── release.yml
├── .gitignore
├── .husky/
│ └── pre-commit
├── Dockerfile
├── LICENSE
├── README.md
├── apps/
│ ├── electron/
│ │ ├── README.md
│ │ ├── assets/
│ │ │ └── icon.icns
│ │ ├── electron-builder.json
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── main.ts
│ │ │ ├── preload.ts
│ │ │ ├── updater.ts
│ │ │ └── utils/
│ │ │ ├── frontmatter.test.ts
│ │ │ └── frontmatter.ts
│ │ └── tsconfig.json
│ ├── server/
│ │ ├── .prettierrc
│ │ ├── COS_SETUP.md
│ │ ├── README.md
│ │ ├── eslint.config.mjs
│ │ ├── nest-cli.json
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── app.controller.spec.ts
│ │ │ ├── app.controller.ts
│ │ │ ├── app.module.ts
│ │ │ ├── app.service.ts
│ │ │ ├── main.ts
│ │ │ ├── services/
│ │ │ │ └── cos.service.ts
│ │ │ └── upload/
│ │ │ ├── dto/
│ │ │ │ ├── create-upload.dto.ts
│ │ │ │ └── update-upload.dto.ts
│ │ │ ├── entities/
│ │ │ │ └── upload.entity.ts
│ │ │ ├── upload.controller.ts
│ │ │ ├── upload.module.ts
│ │ │ └── upload.service.ts
│ │ ├── test/
│ │ │ ├── app.e2e-spec.ts
│ │ │ └── jest-e2e.json
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ └── web/
│ ├── .gitignore
│ ├── README.md
│ ├── index.html
│ ├── package.json
│ ├── public/
│ │ ├── fonts/
│ │ │ └── local-fonts.css
│ │ └── libs/
│ │ └── mathjax/
│ │ └── tex-svg.js
│ ├── src/
│ │ ├── App.css
│ │ ├── App.tsx
│ │ ├── __tests__/
│ │ │ ├── bootstrap/
│ │ │ │ └── installPreloadErrorHandler.test.ts
│ │ │ ├── components/
│ │ │ │ ├── FileSystemHistory.test.tsx
│ │ │ │ ├── Header.test.tsx
│ │ │ │ ├── MobileToolbar.test.tsx
│ │ │ │ ├── ThemePanel.test.tsx
│ │ │ │ ├── mouseSelectionStyle.test.ts
│ │ │ │ ├── searchPanel.test.ts
│ │ │ │ ├── sortUtils.test.ts
│ │ │ │ └── themeDesignerVariables.test.ts
│ │ │ ├── core/
│ │ │ │ └── MarkdownParser.test.ts
│ │ │ ├── hooks/
│ │ │ │ ├── useFileSystemEffectGate.test.ts
│ │ │ │ ├── useFileSystemEffects.test.ts
│ │ │ │ └── useWindowControls.test.ts
│ │ │ ├── services/
│ │ │ │ ├── autoCompressImage.test.ts
│ │ │ │ ├── cssVariableExpander.test.ts
│ │ │ │ ├── htmlCopyService.test.ts
│ │ │ │ ├── imageUploadFlow.integration.test.ts
│ │ │ │ ├── wechatCopyCssIntegration.test.ts
│ │ │ │ ├── wechatCopyNormalizer.test.ts
│ │ │ │ ├── wechatCopyService.test.ts
│ │ │ │ ├── wechatCounterCompat.test.ts
│ │ │ │ ├── wechatMermaidRenderer.test.ts
│ │ │ │ └── wechatMermaidSvgText.test.ts
│ │ │ ├── storage/
│ │ │ │ └── FileSystemAdapter.test.ts
│ │ │ └── utils/
│ │ │ ├── assetPath.test.ts
│ │ │ ├── fileName.test.ts
│ │ │ ├── markdownFileMeta.test.ts
│ │ │ └── newArticleTheme.test.ts
│ │ ├── bootstrap/
│ │ │ └── installPreloadErrorHandler.ts
│ │ ├── components/
│ │ │ ├── Editor/
│ │ │ │ ├── MarkdownEditor.css
│ │ │ │ ├── MarkdownEditor.tsx
│ │ │ │ ├── SaveIndicator.tsx
│ │ │ │ ├── SearchPanel.css
│ │ │ │ ├── SearchPanel.tsx
│ │ │ │ ├── SyntaxHelpPopover.css
│ │ │ │ ├── SyntaxHelpPopover.tsx
│ │ │ │ ├── Toolbar.css
│ │ │ │ ├── Toolbar.tsx
│ │ │ │ ├── ToolbarState.ts
│ │ │ │ ├── editorShortcuts.ts
│ │ │ │ ├── markdownTheme.ts
│ │ │ │ ├── markdownUnderline.ts
│ │ │ │ ├── mouseSelectionStyle.ts
│ │ │ │ └── toolbarConfigs.ts
│ │ │ ├── ErrorBoundary/
│ │ │ │ └── ErrorBoundary.tsx
│ │ │ ├── Header/
│ │ │ │ ├── Header.css
│ │ │ │ └── Header.tsx
│ │ │ ├── History/
│ │ │ │ ├── FileSystemHistory.tsx
│ │ │ │ ├── HistoryManager.tsx
│ │ │ │ ├── HistoryPanel.css
│ │ │ │ ├── HistoryPanel.tsx
│ │ │ │ └── IndexedHistoryPanel.tsx
│ │ │ ├── Preview/
│ │ │ │ ├── MarkdownPreview.css
│ │ │ │ └── MarkdownPreview.tsx
│ │ │ ├── Settings/
│ │ │ │ ├── ImageHostSettings.css
│ │ │ │ ├── ImageHostSettings.tsx
│ │ │ │ └── ImageHostSettingsPanels.tsx
│ │ │ ├── Sidebar/
│ │ │ │ ├── ContextMenu.tsx
│ │ │ │ ├── FileSidebar.css
│ │ │ │ ├── FileSidebar.tsx
│ │ │ │ ├── SidebarFooter.css
│ │ │ │ ├── SidebarFooter.tsx
│ │ │ │ ├── SidebarModals.tsx
│ │ │ │ ├── sidebarStateHelpers.ts
│ │ │ │ ├── sortUtils.ts
│ │ │ │ └── useSidebarState.ts
│ │ │ ├── StorageModeSelector/
│ │ │ │ ├── StorageModeSelector.css
│ │ │ │ └── StorageModeSelector.tsx
│ │ │ ├── Theme/
│ │ │ │ ├── ColorSelector.tsx
│ │ │ │ ├── MobileThemeSelector.css
│ │ │ │ ├── MobileThemeSelector.tsx
│ │ │ │ ├── ThemeDesigner/
│ │ │ │ │ ├── SliderInput.tsx
│ │ │ │ │ ├── Switch.tsx
│ │ │ │ │ ├── VARIABLES.md
│ │ │ │ │ ├── defaults.ts
│ │ │ │ │ ├── generateCSS.ts
│ │ │ │ │ ├── generators/
│ │ │ │ │ │ ├── codeTheme.ts
│ │ │ │ │ │ ├── components.ts
│ │ │ │ │ │ ├── extras.ts
│ │ │ │ │ │ ├── global.ts
│ │ │ │ │ │ ├── presets.ts
│ │ │ │ │ │ ├── typography.ts
│ │ │ │ │ │ └── variables.ts
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── sections/
│ │ │ │ │ │ ├── CodeSection.tsx
│ │ │ │ │ │ ├── GlobalSection.tsx
│ │ │ │ │ │ ├── HeadingSection.tsx
│ │ │ │ │ │ ├── ImageSection.tsx
│ │ │ │ │ │ ├── ListSection.tsx
│ │ │ │ │ │ ├── MermaidSection.tsx
│ │ │ │ │ │ ├── OtherSection.tsx
│ │ │ │ │ │ ├── ParagraphSection.tsx
│ │ │ │ │ │ ├── QuoteSection.tsx
│ │ │ │ │ │ ├── TableHrSection.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── ThemeDesigner.css
│ │ │ │ ├── ThemeLivePreview.tsx
│ │ │ │ ├── ThemePanel.css
│ │ │ │ ├── ThemePanel.tsx
│ │ │ │ └── ThemePanelView.tsx
│ │ │ ├── UpdateModal/
│ │ │ │ ├── UpdateModal.css
│ │ │ │ └── UpdateModal.tsx
│ │ │ ├── Welcome/
│ │ │ │ ├── Welcome.css
│ │ │ │ └── Welcome.tsx
│ │ │ └── common/
│ │ │ ├── FloatingToolbarButton.tsx
│ │ │ ├── MobileToolbar.css
│ │ │ ├── MobileToolbar.tsx
│ │ │ ├── Modal.css
│ │ │ ├── Modal.tsx
│ │ │ └── index.ts
│ │ ├── config/
│ │ │ └── styleOptions.ts
│ │ ├── hooks/
│ │ │ ├── useFileSystem.ts
│ │ │ ├── useFileSystemEffects.ts
│ │ │ ├── useFileSystemFolderActions.ts
│ │ │ ├── useFileSystemHelpers.ts
│ │ │ ├── useMobileView.ts
│ │ │ ├── useStorage.ts
│ │ │ ├── useUITheme.ts
│ │ │ └── useWindowControls.ts
│ │ ├── index.css
│ │ ├── lib/
│ │ │ └── platformAdapter.ts
│ │ ├── main.tsx
│ │ ├── services/
│ │ │ ├── cssVarParser.ts
│ │ │ ├── cssVariableExpander.ts
│ │ │ ├── htmlCopyService.ts
│ │ │ ├── image/
│ │ │ │ ├── ImageUploader.ts
│ │ │ │ ├── README.md
│ │ │ │ ├── autoCompressImage.ts
│ │ │ │ ├── compressSearch.ts
│ │ │ │ ├── imageUploadFlow.ts
│ │ │ │ └── uploaders/
│ │ │ │ ├── AliyunUploader.ts
│ │ │ │ ├── OfficialUploader.ts
│ │ │ │ ├── QiniuUploader.ts
│ │ │ │ ├── S3Uploader.ts
│ │ │ │ └── TencentUploader.ts
│ │ │ ├── inlineStyleVarResolver.ts
│ │ │ ├── wechatCopyNormalizer.ts
│ │ │ ├── wechatCopyService.ts
│ │ │ ├── wechatCounterCompat.ts
│ │ │ ├── wechatMermaidRenderer.ts
│ │ │ ├── wechatMermaidSvgText.ts
│ │ │ └── wechatTableRenderer.ts
│ │ ├── storage/
│ │ │ ├── StorageAdapter.ts
│ │ │ ├── StorageContext.tsx
│ │ │ ├── StorageManager.ts
│ │ │ ├── adapters/
│ │ │ │ ├── FileSystemAdapter.ts
│ │ │ │ ├── IndexedDBAdapter.ts
│ │ │ │ └── fileSystemAdapterHelpers.ts
│ │ │ └── types.ts
│ │ ├── store/
│ │ │ ├── editorStore.ts
│ │ │ ├── fileStore.ts
│ │ │ ├── fileTypes.ts
│ │ │ ├── historyDb.ts
│ │ │ ├── historyStore.ts
│ │ │ ├── historyTypes.ts
│ │ │ ├── themeStore.ts
│ │ │ └── themes/
│ │ │ └── builtInThemes.ts
│ │ ├── styles/
│ │ │ ├── global.css
│ │ │ └── local-fonts.css
│ │ ├── test/
│ │ │ └── setup.ts
│ │ ├── types/
│ │ │ ├── electron.d.ts
│ │ │ ├── env.d.ts
│ │ │ ├── filesystem.d.ts
│ │ │ └── raw-modules.d.ts
│ │ └── utils/
│ │ ├── assetPath.ts
│ │ ├── fileName.ts
│ │ ├── findMatches.ts
│ │ ├── katexRenderer.ts
│ │ ├── linkFootnote.ts
│ │ ├── markdownFileMeta.ts
│ │ ├── mathJaxLoader.ts
│ │ ├── mermaidConfig.ts
│ │ ├── newArticleTheme.ts
│ │ └── wordCount.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vite.config.ts
│ └── vitest.config.ts
├── docker-compose.yml
├── eslint.config.mjs
├── nginx.conf
├── package.json
├── packages/
│ └── core/
│ ├── package.json
│ ├── src/
│ │ ├── MarkdownParser.ts
│ │ ├── ThemeProcessor.ts
│ │ ├── __tests__/
│ │ │ ├── MarkdownParser.test.ts
│ │ │ ├── ThemeProcessor.test.ts
│ │ │ └── wechatDarkMode.test.ts
│ │ ├── index.ts
│ │ ├── plugins/
│ │ │ ├── markdown-it-checkbox-emoji.ts
│ │ │ ├── markdown-it-github-alert.ts
│ │ │ ├── markdown-it-imageflow.ts
│ │ │ ├── markdown-it-li.ts
│ │ │ ├── markdown-it-linkfoot.ts
│ │ │ ├── markdown-it-math.ts
│ │ │ ├── markdown-it-multiquote.ts
│ │ │ ├── markdown-it-span.ts
│ │ │ ├── markdown-it-table-container.ts
│ │ │ └── markdown-it-underline.ts
│ │ ├── themes/
│ │ │ ├── academic-paper.ts
│ │ │ ├── aurora-glass.ts
│ │ │ ├── basic.ts
│ │ │ ├── bauhaus.ts
│ │ │ ├── code-github.ts
│ │ │ ├── custom-default.ts
│ │ │ ├── cyberpunk-neon.ts
│ │ │ ├── index.ts
│ │ │ ├── knowledge-base.ts
│ │ │ ├── luxury-gold.ts
│ │ │ ├── morandi-forest.ts
│ │ │ ├── neo-brutalism.ts
│ │ │ ├── receipt.ts
│ │ │ ├── sunset-film.ts
│ │ │ └── template.ts
│ │ ├── types/
│ │ │ └── markdown-it-plugins.d.ts
│ │ ├── utils/
│ │ │ └── langHighlight.ts
│ │ └── wechatDarkMode.ts
│ ├── tsconfig.json
│ └── vitest.config.ts
├── pnpm-workspace.yaml
├── scripts/
│ └── run-desktop-dev.mjs
├── templates/
│ ├── Academic-Paper.css
│ ├── Aurora-Glass.css
│ ├── Bauhaus.css
│ ├── Cyberpunk-Neon.css
│ ├── Knowledge-Base.css
│ ├── Luxury-Gold.css
│ ├── Morandi-Forest.css
│ ├── Neo-Brutalism.css
│ ├── Receipt.css
│ ├── Sunset-Film.css
│ └── Template.css
└── turbo.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
# Dependencies
node_modules/
**/node_modules/
# Build outputs
**/dist/
**/.turbo/
# Development files
.git/
.github/
.vscode/
*.md
*.log
# Electron (not needed for web Docker)
apps/electron/
# Server (not needed for web-only Docker)
apps/server/
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: Bug 报告
description: 报告一个影响使用的 Bug
title: "[Bug]: "
labels: ["Bug"]
assignees:
- tenngoxars
body:
- type: textarea
id: description
attributes:
label: 内容
description: 请详细描述问题
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: 新功能建议
description: 提出版本没有的新功能点
title: "[新功能]: "
labels: ["新功能"]
assignees:
- tenngoxars
body:
- type: textarea
id: description
attributes:
label: 内容
description: 请描述你的建议
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/optimization.yml
================================================
name: 现有功能优化
description: 对现有功能提出更好的解决方案
title: "[优化]: "
labels: ["现有功能优化"]
assignees:
- tenngoxars
body:
- type: textarea
id: description
attributes:
label: 内容
description: 请描述优化建议
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/suspected-bug.yml
================================================
name: 疑似 Bug
description: 不知道算不算问题,问问看
title: "[疑似 Bug]: "
labels: ["疑似 Bug"]
assignees:
- tenngoxars
body:
- type: textarea
id: description
attributes:
label: 内容
description: 请描述遇到的现象
validations:
required: true
================================================
FILE: .github/workflows/close-external-prs.yml
================================================
name: Auto Close External PRs
on:
pull_request_target:
types: [opened]
jobs:
close-external-pr:
runs-on: ubuntu-latest
steps:
- name: Check if author is a collaborator
id: check
uses: actions/github-script@v7
with:
script: |
const { owner, repo } = context.repo;
const author = context.payload.pull_request.user.login;
try {
const { data } = await github.rest.repos.getCollaboratorPermissionLevel({
owner,
repo,
username: author,
});
// 如果有 write 或 admin 权限,则是协作者
const isCollaborator = ['admin', 'write'].includes(data.permission);
core.setOutput('is_collaborator', isCollaborator);
} catch (error) {
// 如果请求失败,说明不是协作者
core.setOutput('is_collaborator', false);
}
- name: Close PR if not collaborator
if: steps.check.outputs.is_collaborator == 'false'
uses: actions/github-script@v7
with:
script: |
const { owner, repo } = context.repo;
const prNumber = context.payload.pull_request.number;
const author = context.payload.pull_request.user.login;
// 添加评论
await github.rest.issues.createComment({
owner,
repo,
issue_number: prNumber,
body: `👋 你好 @${author},感谢你的贡献意愿!\n\n目前本项目暂不接受外部 Pull Request。如果你有好的想法或发现了 Bug,欢迎通过 [Issue](https://github.com/${owner}/${repo}/issues) 反馈。\n\n感谢理解!`
});
// 关闭 PR
await github.rest.pulls.update({
owner,
repo,
pull_number: prNumber,
state: 'closed'
});
console.log(`Closed PR #${prNumber} from external contributor ${author}`);
================================================
FILE: .github/workflows/docker-image.yml
================================================
name: docker-image
on:
push:
branches:
- main
tags:
- "v*"
paths:
- ".github/workflows/docker-image.yml"
- "Dockerfile"
- "nginx.conf"
- "apps/web/**"
- "packages/**"
- "package.json"
- "pnpm-lock.yaml"
- "pnpm-workspace.yaml"
- "turbo.json"
pull_request:
branches:
- main
paths:
- ".github/workflows/docker-image.yml"
- "Dockerfile"
- "nginx.conf"
- "apps/web/**"
- "packages/**"
- "package.json"
- "pnpm-lock.yaml"
- "pnpm-workspace.yaml"
- "turbo.json"
workflow_dispatch:
permissions:
contents: read
packages: write
env:
IMAGE_NAME: ghcr.io/tenngoxars/wemd-web
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate image metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_NAME }}
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=ref,event=branch
type=ref,event=tag
type=sha,prefix=sha-
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
push: ${{ github.event_name != 'pull_request' }}
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
================================================
FILE: .github/workflows/release.yml
================================================
name: desktop-release
on:
push:
tags:
- 'v*'
workflow_dispatch:
permissions:
contents: write
jobs:
build-macos:
runs-on: macos-latest
env:
DEBUG_DMG: true
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup PNPM
uses: pnpm/action-setup@v3
with:
version: 9
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
cache: pnpm
- name: Install workspace dependencies
run: pnpm install --frozen-lockfile
- name: Build web frontend
run: pnpm --filter @wemd/web run build
- name: Install Electron deps
run: cd apps/electron && pnpm install --frozen-lockfile
- name: Sync disk before build
run: sync
- name: Build Electron (macOS)
uses: nick-fields/retry@v3
with:
timeout_minutes: 15
max_attempts: 3
retry_wait_seconds: 30
command: cd apps/electron && pnpm run build:mac
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: wemd-macos
path: apps/electron/release/*.dmg
- name: Publish GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v1
with:
name: WeMD ${{ github.ref_name }}
generate_release_notes: true
files: apps/electron/release/*.dmg
build-windows:
runs-on: windows-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup PNPM
uses: pnpm/action-setup@v3
with:
version: 9
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
cache: pnpm
- name: Install workspace dependencies
run: pnpm install --frozen-lockfile
- name: Build web frontend
run: pnpm --filter @wemd/web run build
- name: Install Electron deps
run: cd apps/electron && pnpm install --frozen-lockfile
- name: Build Electron (Windows)
run: cd apps/electron && pnpm run build:win
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: wemd-windows
path: apps/electron/release/*.exe
- name: Publish GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v1
with:
files: apps/electron/release/*.exe
build-linux:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup PNPM
uses: pnpm/action-setup@v3
with:
version: 9
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
cache: pnpm
- name: Install workspace dependencies
run: pnpm install --frozen-lockfile
- name: Build web frontend
run: pnpm --filter @wemd/web run build
- name: Install Electron deps
run: cd apps/electron && pnpm install --frozen-lockfile
- name: Build Electron (Linux)
run: cd apps/electron && pnpm run build:linux
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: wemd-linux
path: apps/electron/release/*.AppImage
- name: Publish GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v1
with:
files: apps/electron/release/*.AppImage
================================================
FILE: .gitignore
================================================
legacy/
node_modules/
.DS_Store
.turbo/
.pnpm-store/
dist/
.env
.npmrc
apps/macos/
# Electron
apps/electron/node_modules/
apps/electron/dist/
apps/electron/web-dist/
apps/electron/release/
.tmp/
# AI Agent files
.agentdocs/
.gemini/
.claude/
================================================
FILE: .husky/pre-commit
================================================
npx lint-staged
================================================
FILE: Dockerfile
================================================
# 构建阶段
FROM node:22-bookworm-slim AS builder
WORKDIR /build
# 复制依赖相关文件
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json turbo.json ./
COPY packages/ ./packages/
COPY apps/web/ ./apps/web/
# 使用与仓库一致的 pnpm 版本,避免 latest 带来不兼容
RUN corepack enable && \
corepack prepare pnpm@9.0.2 --activate && \
pnpm install --frozen-lockfile && \
pnpm --filter @wemd/web run build
# 运行阶段 - 使用 nginx 提供静态文件服务
FROM nginx:alpine
# 复制构建产物
COPY --from=builder /build/apps/web/dist /usr/share/nginx/html
# 复制 nginx 配置(支持 SPA 路由)
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2025 WeMD Team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
<p align="center">
<img src="apps/web/public/favicon-dark.svg" width="80" height="80" alt="WeMD Logo" />
</p>
<h1 align="center">WeMD</h1>
<p align="center">
<strong>更优雅的 Markdown 公众号排版工具</strong>
</p>
<p align="center">
告别复杂工具。Markdown 写作,一键复制到公众号。<br>
专为公众号创作者设计的<b>本地优先</b>编辑器。
</p>
<p align="center">
<a href="https://wemd.app">🌐 官网</a> •
<a href="https://edit.wemd.app">✏️ 在线使用</a> •
<a href="https://wemd.app/docs">📖 文档</a> •
<a href="https://github.com/tenngoxars/WeMD/releases">📦 下载桌面版</a>
</p>
<p align="center">
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-4CAF50?style=for-the-badge" alt="License: MIT" /></a>
<img src="https://img.shields.io/badge/React-18-61DAFB?style=for-the-badge&logo=react&logoColor=black" alt="React 18" />
<img src="https://img.shields.io/badge/TypeScript-5-3178C6?style=for-the-badge&logo=typescript&logoColor=white" alt="TypeScript 5" />
<img src="https://img.shields.io/badge/Electron-28-47848F?style=for-the-badge&logo=electron&logoColor=white" alt="Electron" />
<img src="https://img.shields.io/badge/pnpm-9-F69220?style=for-the-badge&logo=pnpm&logoColor=white" alt="pnpm" />
</p>
---
## ✨ 特性
| | 功能 | 说明 |
| --- | ----------------- | ------------------------------------------------------ |
| 📝 | **Markdown 语法** | 支持 GFM、表格、代码高亮、数学公式 |
| 🎨 | **主题切换** | 内置十余款精美主题,支持可视化设计器或自定义 CSS |
| 📋 | **一键复制** | 完美兼容微信公众号,所见即所得 |
| 🖼️ | **多图床支持** | 官方图床 / 七牛云 / 阿里云 / 腾讯云 / S3 兼容 |
| 💾 | **本地优先** | 数据存储在本地,无需登录,隐私安全 |
| 📱 | **跨平台** | Web 端 + 桌面端(macOS / Windows / Linux) |
| 🌙 | **界面风格** | 亮色 / 深色 双模式可选 |
| 👁️ | **深色模式预览** | 预览微信深色模式效果,还原度达 98%+ |
| 🔍 | **高级搜索** | 支持正则匹配、全词匹配、批量替换 |
| 🎞️ | **滑动图组** | 支持水平滑动的多图展示组件,丰富视觉体验 |
| 📊 | **Mermaid 图表** | 内置流程图、时序图、甘特图等多种图表,自动适配主题配色 |
---
## 💡 技术亮点
### 微信深色模式预览算法
WeMD 内置了一套**色彩语义保全算法**,可在编辑器中预览微信公众号深色模式下的实际效果,还原度达 **98% 以上**。
> 该算法基于微信官方开源的 [wechatjs/mp-darkmode](https://github.com/wechatjs/mp-darkmode) 核心算法迁移并优化,旨在保证高性能 CSS 转换的同时提供最接近官方的渲染效果。
- 智能识别不同元素类型,分别优化
- HSL 色彩空间计算,确保视觉一致性
这(可能)是目前市面上除官方外唯一针对微信公众号深色模式预览的开源解决方案。
👉 **[查看算法详细原理解析](https://wemd.app/docs/reference/dark-mode-algorithm.html)** | **[查看算法源码](packages/core/src/wechatDarkMode.ts)**
---
## 🚀 快速开始
### 在线使用
直接访问 **[edit.wemd.app](https://edit.wemd.app)** 即可开始写作,无需安装,同样支持纯本地存储。
### 桌面版下载
前往 [Releases](https://github.com/tenngoxars/WeMD/releases) 下载对应平台安装包:
- **macOS**: `.dmg`(Intel 版)/ `-arm64.dmg`(Apple Silicon 版)
- **Windows**: `.exe`
- **Linux**: `.AppImage`
> ⚠️ **macOS 用户注意**:首次打开时如提示"应用已损坏",请在终端执行:
>
> ```bash
> xattr -cr /Applications/WeMD.app
> ```
>
> ⚠️ **Windows 用户注意**:如 SmartScreen 提示"未知发布者",点击「更多信息」→「仍要运行」
>
> ⚠️ **Linux 用户注意**:运行前需设置可执行权限:`chmod +x WeMD.AppImage`
### Docker 部署
```bash
docker compose pull
docker compose up -d
```
访问 `http://localhost:8080` 即可使用。
默认会拉取 `ghcr.io/tenngoxars/wemd-web:latest`。
如需指定版本镜像,可覆盖环境变量:
```bash
WEMD_IMAGE=ghcr.io/tenngoxars/wemd-web:<版本号> docker compose up -d
```
---
## 🛠️ 本地开发
### 环境要求
- Node.js ≥ 18
- pnpm ≥ 9(推荐 `corepack enable pnpm`)
### 安装与运行
```bash
# 安装依赖
pnpm install
# 启动 Web 开发服务器
pnpm dev:web
# 启动桌面端(需先启动 Web)
pnpm dev:desktop
```
### 构建
```bash
# 构建 Web
pnpm --filter @wemd/web build
# 构建桌面应用
pnpm --filter wemd-electron run build:mac # macOS
pnpm --filter wemd-electron run build:win # Windows
```
---
## 📁 项目结构
```
WeMD/
├── apps/
│ ├── web/ # React + Vite 前端
│ ├── electron/ # Electron 桌面端
│ └── server/ # NestJS 图片上传服务
├── packages/
│ └── core/ # Markdown 解析 / 主题 / 工具
├── templates/ # 主题 CSS 模板
└── turbo.json # Turborepo 配置
```
---
## 📸 截图

---
## 💬 反馈
如有问题或建议,欢迎提交 [Issue](https://github.com/tenngoxars/WeMD/issues)。
---
## 🤝 致谢
本项目的微信深色模式预览算法深度参考了微信官方开源的 [wechatjs/mp-darkmode](https://github.com/wechatjs/mp-darkmode) 核心逻辑。感谢微信团队为开发者提供的优秀解决方案!
---
## 📄 License
[MIT](LICENSE) © WeMD Team
================================================
FILE: apps/electron/README.md
================================================
# WeMD Electron App
基于 Electron 的 WeMD 桌面应用,完全复用 Web 端代码。
## 开发
### 前置条件
确保 Web 应用的开发服务器正在运行:
```bash
# 在项目根目录或 apps/web 目录
cd apps/web
npm run dev
```
### 启动 Electron
```bash
cd apps/electron
npm run dev
```
Electron 会自动加载 `http://localhost:5173`。
## 生产构建
### 1. 构建 Web 应用
```bash
cd apps/web
npm run build
```
### 2. 打包 Electron
#### macOS
```bash
cd apps/electron
npm run build:mac
```
生成的 `.dmg` 和 `.zip` 文件在 `apps/electron/dist/` 目录。
#### Windows
```bash
npm run build:win
```
#### Linux
```bash
npm run build:linux
```
## 功能特性
- ✅ 完全复用 Web 端代码和样式
- ✅ 支持所有微信公众号自定义 CSS
- ✅ 原生 macOS 窗口体验
- ✅ 中文菜单
- ✅ 开发模式热重载
## 目录结构
```
apps/electron/
├── main.js # Electron 主进程
├── preload.js # 预加载脚本
├── package.json # 依赖配置
├── electron-builder.json # 打包配置
└── dist/ # 构建产物(打包后生成)
```
## 注意事项
1. **开发模式**:必须先启动 Web 开发服务器(`npm run dev` in apps/web)
2. **生产构建**:必须先构建 Web 应用(`npm run build` in apps/web)
3. **图标**:如需自定义图标,请在 `apps/electron/assets/` 目录放置图标文件
================================================
FILE: apps/electron/electron-builder.json
================================================
{
"appId": "com.wemd.app",
"productName": "WeMD",
"directories": {
"output": "release"
},
"files": ["dist/**/*", "assets/**/*", "package.json", "!**/.DS_Store"],
"extraResources": [
{
"from": "../web/dist",
"to": "web-dist",
"filter": ["**/*", "!**/.DS_Store"]
}
],
"mac": {
"category": "public.app-category.productivity",
"target": [
{
"target": "dmg",
"arch": ["x64", "arm64"]
},
{
"target": "zip",
"arch": ["x64", "arm64"]
}
],
"icon": "assets/icon.icns"
},
"dmg": {
"title": "WeMD ${version}",
"backgroundColor": "#ffffff",
"icon": "assets/icon.icns",
"contents": [
{
"x": 130,
"y": 150,
"type": "file"
},
{
"x": 410,
"y": 150,
"type": "link",
"path": "/Applications"
}
],
"window": {
"width": 540,
"height": 380
}
},
"win": {
"target": ["nsis", "zip"],
"icon": "assets/icon.ico"
},
"nsis": {
"oneClick": false,
"allowToChangeInstallationDirectory": true,
"perMachine": false,
"createDesktopShortcut": true,
"createStartMenuShortcut": true
},
"linux": {
"target": ["AppImage", "deb"],
"category": "Office",
"icon": "assets/icon.png",
"maintainer": "WeMD Team"
}
}
================================================
FILE: apps/electron/package.json
================================================
{
"name": "wemd-electron",
"version": "1.2.10",
"description": "WeMD - 更优雅的 Markdown 公众号排版工具",
"main": "dist/main.js",
"homepage": "https://wemd.app",
"author": "WeMD Team",
"scripts": {
"build": "rimraf dist && tsc",
"test": "rimraf dist && tsc && node --test dist/**/*.test.js",
"dev": "rimraf dist && tsc && electron .",
"start": "electron .",
"build:mac": "npm run build && electron-builder --mac -c electron-builder.json",
"build:win": "npm run build && electron-builder --win -c electron-builder.json",
"build:linux": "npm run build && electron-builder --linux -c electron-builder.json"
},
"keywords": [
"markdown",
"wechat",
"editor"
],
"license": "MIT",
"devDependencies": {
"@types/node": "^20.0.0",
"electron": "^28.0.0",
"electron-builder": "^24.13.3",
"rimraf": "^6.0.0",
"typescript": "^5.0.0"
}
}
================================================
FILE: apps/electron/src/main.ts
================================================
import { app, BrowserWindow, Menu, dialog, ipcMain, nativeImage, IpcMainInvokeEvent, shell, clipboard } from 'electron';
import * as path from 'path';
import * as fs from 'fs';
import { checkForUpdates, openReleasesPage } from './updater';
import { extractFrontmatterMeta } from './utils/frontmatter';
// 判断是否为开发模式 - 使用 app.isPackaged 是最可靠的方式
// 注意:app.isPackaged 只能在 app ready 之后使用,这里用延迟判断
let isDev = !app.isPackaged || process.argv.includes('--dev') || !!process.env.ELECTRON_START_URL;
app.setName('WeMD');
app.setAppUserModelId('com.wemd.app');
let mainWindow: BrowserWindow | null = null;
let workspaceDir: string | null = null;
let fileWatcher: fs.FSWatcher | null = null;
let watcherDebounceTimer: NodeJS.Timeout | null = null;
// --- 文件监听器 ---
function startWatching(dir: string) {
if (fileWatcher) {
fileWatcher.close();
fileWatcher = null;
}
if (!dir || !fs.existsSync(dir)) return;
try {
fileWatcher = fs.watch(dir, { recursive: false }, (_eventType, filename) => {
if (!filename) return;
// 忽略隐藏文件和非 md 文件
if (filename.startsWith('.') || !filename.endsWith('.md')) return;
// 防抖发送更新事件
if (watcherDebounceTimer) clearTimeout(watcherDebounceTimer);
watcherDebounceTimer = setTimeout(() => {
if (mainWindow && !mainWindow.isDestroyed()) {
mainWindow.webContents.send('file:refresh');
}
}, 300); // 300ms 防抖
});
} catch (error) {
console.error('Failed to watch directory:', error);
}
}
function stopWatching() {
if (fileWatcher) {
fileWatcher.close();
fileWatcher = null;
}
}
// --- 辅助函数 ---
function getWindowIcon() {
// 方案 1: 当前脚本同级 assets 目录
let iconPath = path.join(__dirname, 'assets', 'icon.png');
// 方案 2: 父级 assets 目录 (dist 场景)
if (!fs.existsSync(iconPath)) {
iconPath = path.join(__dirname, '..', 'assets', 'icon.png');
}
// 方案 3: 绝对开发路径回退 (开发环境可选)
// omit for now.
const img = nativeImage.createFromPath(iconPath);
return img.isEmpty() ? null : img;
}
// 检查文件是否存在并生成带编号的唯一路径
function getUniqueFilePath(targetPath: string): string {
const dir = path.dirname(targetPath);
const ext = path.extname(targetPath);
const name = path.basename(targetPath, ext); // 不含扩展名的文件名
let candidate = targetPath;
let counter = 1;
while (fs.existsSync(candidate)) {
candidate = path.join(dir, `${name} (${counter})${ext}`);
counter += 1;
}
return candidate;
}
function isPathInsideWorkspace(targetPath: string): boolean {
if (!workspaceDir) return false;
const workspaceResolvedRaw = path.resolve(workspaceDir);
const workspaceRoot = path.parse(workspaceResolvedRaw).root;
const workspaceResolved =
workspaceResolvedRaw === workspaceRoot
? workspaceResolvedRaw
: workspaceResolvedRaw.replace(/[\\/]+$/, '');
const targetResolved = path.resolve(targetPath);
const normalizedWorkspace = process.platform === 'win32'
? workspaceResolved.toLowerCase()
: workspaceResolved;
const normalizedTarget = process.platform === 'win32'
? targetResolved.toLowerCase()
: targetResolved;
const workspacePrefix = normalizedWorkspace.endsWith(path.sep)
? normalizedWorkspace
: normalizedWorkspace + path.sep;
return normalizedTarget === normalizedWorkspace || normalizedTarget.startsWith(workspacePrefix);
}
interface FileEntry {
name: string;
path: string;
isDirectory: boolean;
createdAt: Date;
updatedAt: Date;
size: number;
title?: string;
themeName: string;
children?: FileEntry[]; // 用于文件夹
}
// 读取单个 md 文件并提取 themeName
function readFileEntry(fullPath: string, name: string): FileEntry {
const stats = fs.statSync(fullPath);
let themeName = '默认主题';
let title: string | undefined;
try {
const fd = fs.openSync(fullPath, 'r');
const buffer = Buffer.alloc(1200);
const bytesRead = fs.readSync(fd, buffer, 0, 1200, 0);
fs.closeSync(fd);
const content = buffer.toString('utf8', 0, bytesRead);
const parsed = extractFrontmatterMeta(content);
themeName = parsed.themeName;
title = parsed.title;
} catch (e) { /* 忽略 */ }
return {
name,
path: fullPath,
isDirectory: false,
createdAt: stats.birthtime,
updatedAt: stats.mtime,
size: stats.size,
title,
themeName,
};
}
function scanWorkspace(dir: string): FileEntry[] {
if (!dir || !fs.existsSync(dir)) return [];
try {
const entries = fs.readdirSync(dir, { withFileTypes: true });
const results: FileEntry[] = [];
// 先处理文件夹
const folders = entries
.filter(e => e.isDirectory() && !e.name.startsWith('.'))
.sort((a, b) => a.name.localeCompare(b.name));
for (const folder of folders) {
const folderPath = path.join(dir, folder.name);
const stats = fs.statSync(folderPath);
const children = scanWorkspace(folderPath); // 递归
results.push({
name: folder.name,
path: folderPath,
isDirectory: true,
createdAt: stats.birthtime,
updatedAt: stats.mtime,
size: 0,
themeName: '',
children,
});
}
// 再处理 md 文件
const mdFiles = entries
.filter(e => e.isFile() && e.name.endsWith('.md') && !e.name.startsWith('.'))
.map(e => readFileEntry(path.join(dir, e.name), e.name))
.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
results.push(...mdFiles);
return results;
} catch (error) {
console.error('Scan workspace failed:', error);
return [];
}
}
// --- 窗口管理 ---
function createWindow() {
const windowIcon = getWindowIcon() || undefined;
const isWindows = process.platform === 'win32';
mainWindow = new BrowserWindow({
width: 1200,
height: 800,
minWidth: 1024,
minHeight: 640,
title: 'WeMD',
icon: windowIcon,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: false,
contextIsolation: true,
},
titleBarStyle: 'hidden',
frame: !isWindows, // Windows 完全无边框
titleBarOverlay: isWindows ? false : {
color: '#f5f7f9',
symbolColor: '#2c2c2c',
height: 48,
},
trafficLightPosition: { x: 20, y: 28 },
show: false, // 延迟显示,避免闪烁
});
const startUrl = process.env.ELECTRON_START_URL
? process.env.ELECTRON_START_URL
: isDev
? 'http://localhost:5173'
: `file://${path.join(process.resourcesPath, 'web-dist', 'index.html')}`;
console.log('[WeMD] Loading URL:', startUrl);
console.log('[WeMD] isDev:', isDev);
console.log('[WeMD] resourcesPath:', process.resourcesPath);
mainWindow.loadURL(startUrl);
// 准备就绪后显示并最大化,解决 macOS 启动不最大化问题
mainWindow.once('ready-to-show', () => {
if (!mainWindow) return;
mainWindow.maximize();
mainWindow.show();
});
mainWindow.on('closed', () => {
mainWindow = null;
stopWatching();
});
}
// --- IPC 处理器 ---
// 窗口控制 (用于 Windows 自定义标题栏)
ipcMain.handle('window:minimize', () => mainWindow?.minimize());
ipcMain.handle('window:maximize', () => {
if (mainWindow?.isMaximized()) mainWindow.unmaximize();
else mainWindow?.maximize();
});
ipcMain.handle('window:close', () => mainWindow?.close());
ipcMain.handle('window:isMaximized', () => mainWindow?.isMaximized());
// 工作区管理
ipcMain.handle('workspace:select', async () => {
if (!mainWindow) return { success: false, error: 'Window not initialized' };
const result = await dialog.showOpenDialog(mainWindow, {
properties: ['openDirectory', 'createDirectory'],
message: '选择 WeMD 工作区文件夹'
});
if (result.canceled || result.filePaths.length === 0) {
return { success: false, canceled: true };
}
const dir = result.filePaths[0];
workspaceDir = dir;
startWatching(dir);
return { success: true, path: dir };
});
ipcMain.handle('workspace:current', async () => {
// 这里可以结合 electron-store 持久化,暂时由前端传过来校验
return { success: true, path: workspaceDir };
});
ipcMain.handle('workspace:set', async (_event: IpcMainInvokeEvent, dir: string) => {
if (!dir || !fs.existsSync(dir)) {
return { success: false, error: 'Directory not found' };
}
workspaceDir = dir;
startWatching(dir);
return { success: true, path: dir };
});
ipcMain.handle('file:list', async (_event: IpcMainInvokeEvent, dir?: string) => {
const targetDir = dir || workspaceDir;
if (!targetDir) return { success: false, error: 'No workspace selected' };
if (!isPathInsideWorkspace(targetDir)) {
return { success: false, error: '非法路径' };
}
const files = scanWorkspace(targetDir);
return { success: true, files };
});
ipcMain.handle('file:read', async (_event: IpcMainInvokeEvent, filePath: string) => {
try {
if (!isPathInsideWorkspace(filePath)) {
return { success: false, error: '非法路径' };
}
if (!fs.existsSync(filePath)) {
return { success: false, error: 'File not found' };
}
const content = fs.readFileSync(filePath, 'utf-8');
return { success: true, content, filePath };
} catch (error: any) {
return { success: false, error: error.message };
}
});
ipcMain.handle('file:create', async (_event: IpcMainInvokeEvent, payload: { filename?: string; content?: string }) => {
if (!workspaceDir) return { success: false, error: 'No workspace' };
const { filename, content } = payload || {};
let targetPath = '';
if (filename) {
if (path.isAbsolute(filename)) {
targetPath = filename;
} else {
targetPath = path.join(workspaceDir, filename);
}
} else {
targetPath = path.join(workspaceDir, '未命名文章.md');
}
if (!isPathInsideWorkspace(targetPath)) {
return { success: false, error: '非法路径' };
}
// 自动处理重名
targetPath = getUniqueFilePath(targetPath);
try {
const dir = path.dirname(targetPath);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
fs.writeFileSync(targetPath, content || '', 'utf-8');
return { success: true, filePath: targetPath, filename: path.basename(targetPath) };
} catch (error: any) {
return { success: false, error: error.message };
}
});
ipcMain.handle('file:save', async (_event: IpcMainInvokeEvent, payload: { filePath: string; content: string }) => {
const { filePath, content } = payload;
if (!filePath) return { success: false, error: 'File path required' };
try {
if (!isPathInsideWorkspace(filePath)) {
return { success: false, error: '非法路径' };
}
// 检查内容是否变更,避免不必要的写入
let existingContent = '';
if (fs.existsSync(filePath)) {
existingContent = fs.readFileSync(filePath, 'utf-8');
}
// 仅当内容不同才写入
if (existingContent !== content) {
fs.writeFileSync(filePath, content, 'utf-8');
}
return { success: true, filePath };
} catch (error: any) {
return { success: false, error: error.message };
}
});
ipcMain.handle('file:rename', async (_event: IpcMainInvokeEvent, payload: { oldPath: string; newName: string }) => {
const { oldPath, newName } = payload;
if (!oldPath || !newName) return { success: false, error: 'Invalid arguments' };
if (!isPathInsideWorkspace(oldPath)) {
return { success: false, error: '非法路径' };
}
const dir = path.dirname(oldPath);
// 确保新名字以 .md 结尾
const trimmedName = newName.trim();
const safeName = trimmedName.endsWith('.md') ? trimmedName : `${trimmedName}.md`;
const safeBaseName = path.basename(safeName);
const newPath = path.join(dir, safeName);
if (oldPath === newPath) return { success: true, filePath: newPath };
// 检查目标是否存在 (且不是大小写变名)
if (fs.existsSync(newPath) && oldPath.toLowerCase() !== newPath.toLowerCase()) {
return { success: false, error: '文件名已存在' };
}
try {
const finalPath = path.join(dir, safeBaseName);
if (!isPathInsideWorkspace(finalPath)) {
return { success: false, error: '非法路径' };
}
if (fs.existsSync(finalPath) && oldPath.toLowerCase() !== finalPath.toLowerCase()) {
return { success: false, error: '文件名已存在' };
}
fs.renameSync(oldPath, finalPath);
return { success: true, filePath: finalPath };
} catch (error: any) {
return { success: false, error: error.message };
}
});
ipcMain.handle('file:delete', async (_event: IpcMainInvokeEvent, filePath: string) => {
if (!filePath) return { success: false, error: 'Path required' };
try {
if (!isPathInsideWorkspace(filePath)) {
return { success: false, error: '非法路径' };
}
if (fs.existsSync(filePath)) {
// 尝试移动到回收站
await shell.trashItem(filePath);
}
return { success: true };
} catch (error) {
// 如果回收站失败,尝试物理删除
try {
if (fs.existsSync(filePath)) fs.unlinkSync(filePath);
return { success: true };
} catch (e: any) {
return { success: false, error: e.message };
}
}
});
ipcMain.handle('file:reveal', async (_event: IpcMainInvokeEvent, filePath: string) => {
if (filePath) {
if (!isPathInsideWorkspace(filePath)) return;
shell.showItemInFolder(filePath);
}
});
// --- 文件夹管理 ---
ipcMain.handle('folder:create', async (_event: IpcMainInvokeEvent, folderPathArg: string) => {
if (!workspaceDir) return { success: false, error: 'No workspace' };
if (!folderPathArg || folderPathArg.trim() === '') {
return { success: false, error: '文件夹名称不能为空' };
}
let targetPath = folderPathArg.trim();
if (!path.isAbsolute(targetPath)) {
targetPath = path.join(workspaceDir, targetPath);
}
if (!isPathInsideWorkspace(targetPath)) {
return { success: false, error: '非法路径' };
}
if (fs.existsSync(targetPath)) {
return { success: false, error: '文件夹已存在' };
}
try {
fs.mkdirSync(targetPath, { recursive: true });
return { success: true, path: targetPath, name: path.basename(targetPath) };
} catch (error: any) {
return { success: false, error: error.message };
}
});
ipcMain.handle('folder:rename', async (_event: IpcMainInvokeEvent, payload: { folderPath: string; newName: string }) => {
const { folderPath, newName } = payload;
if (!folderPath || !newName) return { success: false, error: 'Invalid arguments' };
if (!isPathInsideWorkspace(folderPath)) return { success: false, error: '非法路径' };
if (!fs.existsSync(folderPath)) {
return { success: false, error: '文件夹不存在' };
}
const stats = fs.statSync(folderPath);
if (!stats.isDirectory()) {
return { success: false, error: '不是文件夹' };
}
const safeBaseName = path.basename(newName.trim());
if (!safeBaseName) {
return { success: false, error: '文件夹名称不能为空' };
}
const dir = path.dirname(folderPath);
const newPath = path.join(dir, safeBaseName);
if (!isPathInsideWorkspace(newPath)) {
return { success: false, error: '非法路径' };
}
if (folderPath === newPath) {
return { success: true, newPath };
}
if (fs.existsSync(newPath)) {
return { success: false, error: '文件夹已存在' };
}
try {
fs.renameSync(folderPath, newPath);
return { success: true, newPath };
} catch (error: any) {
return { success: false, error: error.message };
}
});
ipcMain.handle('folder:move-folder', async (_event: IpcMainInvokeEvent, payload: { folderPath: string; targetFolder: string }) => {
const { folderPath, targetFolder } = payload;
if (!folderPath) return { success: false, error: 'Path required' };
if (!isPathInsideWorkspace(folderPath)) {
return { success: false, error: '非法路径' };
}
if (!fs.existsSync(folderPath)) {
return { success: false, error: '文件夹不存在' };
}
const stats = fs.statSync(folderPath);
if (!stats.isDirectory()) {
return { success: false, error: '不是文件夹' };
}
const targetDir = targetFolder ? targetFolder : workspaceDir;
if (!targetDir) return { success: false, error: 'No workspace' };
if (!isPathInsideWorkspace(targetDir)) {
return { success: false, error: '非法路径' };
}
if (!fs.existsSync(targetDir) || !fs.statSync(targetDir).isDirectory()) {
return { success: false, error: '目标文件夹不存在' };
}
const folderName = path.basename(folderPath);
const newPath = path.join(targetDir, folderName);
if (folderPath === newPath) return { success: true, newPath };
const resolvedOld = path.resolve(folderPath);
const resolvedNew = path.resolve(newPath);
if (resolvedNew.startsWith(resolvedOld + path.sep)) {
return { success: false, error: '不能移动到子文件夹' };
}
if (fs.existsSync(newPath)) {
return { success: false, error: '目标位置已存在同名文件夹' };
}
try {
fs.renameSync(folderPath, newPath);
return { success: true, newPath };
} catch (error: any) {
return { success: false, error: error.message };
}
});
ipcMain.handle('folder:move', async (_event: IpcMainInvokeEvent, payload: { filePath: string; targetFolder: string }) => {
const { filePath, targetFolder } = payload;
if (!filePath) return { success: false, error: 'File path required' };
// targetFolder 为空字符串表示移动到根目录
const targetDir = targetFolder ? targetFolder : workspaceDir;
if (!targetDir) return { success: false, error: 'No workspace' };
if (!isPathInsideWorkspace(filePath) || !isPathInsideWorkspace(targetDir)) {
return { success: false, error: '非法路径' };
}
const fileName = path.basename(filePath);
const newPath = path.join(targetDir, fileName);
if (filePath === newPath) return { success: true, newPath };
if (fs.existsSync(newPath)) {
return { success: false, error: '目标位置已存在同名文件' };
}
try {
fs.renameSync(filePath, newPath);
return { success: true, newPath };
} catch (error: any) {
return { success: false, error: error.message };
}
});
ipcMain.handle('folder:inspect', async (_event: IpcMainInvokeEvent, folderPath: string) => {
if (!folderPath) return { success: false, error: 'Path required' };
try {
if (!isPathInsideWorkspace(folderPath)) {
return { success: false, error: '非法路径' };
}
if (!fs.existsSync(folderPath)) {
return { success: false, error: '文件夹不存在' };
}
const stats = fs.statSync(folderPath);
if (!stats.isDirectory()) {
return { success: false, error: '不是文件夹' };
}
const entries = fs.readdirSync(folderPath, { withFileTypes: true });
const extraEntries = entries
.filter((entry) => {
if (entry.name.startsWith('.')) return true;
return entry.isFile() && !entry.name.endsWith('.md');
})
.map((entry) => entry.name);
return { success: true, entries: extraEntries };
} catch (error: any) {
return { success: false, error: error.message };
}
});
ipcMain.handle(
'folder:delete',
async (
_event: IpcMainInvokeEvent,
payload: string | { folderPath: string; recursive?: boolean }
) => {
const folderPath = typeof payload === 'string' ? payload : payload?.folderPath;
const recursive = typeof payload === 'string' ? false : payload?.recursive === true;
if (!folderPath) return { success: false, error: 'Path required' };
try {
if (!isPathInsideWorkspace(folderPath)) {
return { success: false, error: '非法路径' };
}
if (!fs.existsSync(folderPath)) {
return { success: true }; // 已经不存在
}
const stats = fs.statSync(folderPath);
if (!stats.isDirectory()) {
return { success: false, error: '不是文件夹' };
}
if (recursive) {
try {
await shell.trashItem(folderPath);
return { success: true };
} catch {
fs.rmSync(folderPath, { recursive: true, force: true });
return { success: true };
}
}
// 检查是否为空文件夹
const contents = fs.readdirSync(folderPath);
if (contents.length > 0) {
return { success: false, error: '文件夹不为空,请先移出或删除其中的文件' };
}
fs.rmdirSync(folderPath);
return { success: true };
} catch (error: any) {
return { success: false, error: error.message };
}
}
);
ipcMain.handle('shell:openExternal', async (_event: IpcMainInvokeEvent, url: string) => {
if (url && (url.startsWith('http://') || url.startsWith('https://'))) {
await shell.openExternal(url);
}
});
ipcMain.handle(
'clipboard:writeHTML',
async (
_event: IpcMainInvokeEvent,
payload: { html?: string; text?: string }
) => {
const html = payload?.html ?? '';
const text = payload?.text ?? '';
if (!html.trim()) {
return { success: false, error: 'HTML 不能为空' };
}
try {
clipboard.write({ html, text });
return { success: true };
} catch (error: any) {
return { success: false, error: error?.message ?? '写入剪贴板失败' };
}
}
);
ipcMain.handle('clipboard:writeText', async (_event: IpcMainInvokeEvent, text: string) => {
if (!text?.trim()) {
return { success: false, error: '文本不能为空' };
}
try {
clipboard.writeText(text);
return { success: true };
} catch (error: any) {
return { success: false, error: error?.message ?? '写入剪贴板失败' };
}
});
// 更新相关
ipcMain.handle('update:openReleases', () => {
openReleasesPage();
});
// 创建应用菜单
function createMenu() {
const template: Electron.MenuItemConstructorOptions[] = [
{
label: 'WeMD',
submenu: [
{ role: 'about', label: '关于 WeMD' },
{ type: 'separator' },
{ role: 'hide', label: '隐藏 WeMD' },
{ role: 'hideOthers', label: '隐藏其他' },
{ role: 'unhide', label: '显示全部' },
{ type: 'separator' },
{ role: 'quit', label: '退出 WeMD' },
],
},
{
label: '文件',
submenu: [
{
label: '新建文章',
accelerator: 'CmdOrCtrl+N',
click: () => mainWindow && mainWindow.webContents.send('menu:new-file')
},
{ type: 'separator' },
{
label: '保存',
accelerator: 'CmdOrCtrl+S',
click: () => mainWindow && mainWindow.webContents.send('menu:save')
},
{ type: 'separator' },
{
label: '切换工作区...',
click: async () => {
mainWindow && mainWindow.webContents.send('menu:switch-workspace');
}
}
],
},
{
label: '编辑',
submenu: [
{ role: 'undo', label: '撤销' },
{ role: 'redo', label: '重做' },
{ type: 'separator' },
{ role: 'cut', label: '剪切' },
{ role: 'copy', label: '复制' },
{ role: 'paste', label: '粘贴' },
{ role: 'selectAll', label: '全选' },
],
},
{
label: '查看',
submenu: [
{ role: 'reload', label: '重新加载' },
{ role: 'forceReload', label: '强制重新加载' },
{ role: 'toggleDevTools', label: '开发者工具' },
{ type: 'separator' },
{ role: 'resetZoom', label: '实际大小' },
{ role: 'zoomIn', label: '放大' },
{ role: 'zoomOut', label: '缩小' },
{ type: 'separator' },
{ role: 'togglefullscreen', label: '全屏' },
],
},
{
label: '窗口',
submenu: [
{ role: 'minimize', label: '最小化' },
{ role: 'zoom', label: '缩放' },
{ type: 'separator' },
{ role: 'front', label: '前置全部窗口' },
],
},
{
label: '帮助',
submenu: [
{
label: '检查更新...',
click: () => checkForUpdates(mainWindow, true),
},
{ type: 'separator' },
{
label: '访问官网',
click: () => shell.openExternal('https://wemd.app'),
},
{
label: 'GitHub 仓库',
click: () => shell.openExternal('https://github.com/tenngoxars/WeMD'),
},
],
},
];
const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
}
app.whenReady().then(() => {
// macOS 会自动使用 app bundle 中的 icon.icns 作为 dock 图标
createWindow();
createMenu();
// 延迟 3 秒检查更新,避免阻塞启动
setTimeout(() => {
checkForUpdates(mainWindow);
}, 3000);
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
================================================
FILE: apps/electron/src/preload.ts
================================================
import { contextBridge, ipcRenderer, IpcRendererEvent } from 'electron';
contextBridge.exposeInMainWorld('electron', {
isElectron: true,
platform: process.platform,
fs: {
selectWorkspace: () => ipcRenderer.invoke('workspace:select'),
setWorkspace: (dir: string) => ipcRenderer.invoke('workspace:set', dir),
listFiles: (dir?: string) => ipcRenderer.invoke('file:list', dir),
readFile: (filePath: string) => ipcRenderer.invoke('file:read', filePath),
createFile: (payload: { filename?: string; content?: string }) => ipcRenderer.invoke('file:create', payload),
saveFile: (payload: { filePath: string; content: string }) => ipcRenderer.invoke('file:save', payload),
renameFile: (payload: { oldPath: string; newName: string }) => ipcRenderer.invoke('file:rename', payload),
deleteFile: (filePath: string) => ipcRenderer.invoke('file:delete', filePath),
revealInFinder: (filePath: string) => ipcRenderer.invoke('file:reveal', filePath),
// 文件夹管理
createFolder: (folderName: string) => ipcRenderer.invoke('folder:create', folderName),
moveFile: (payload: { filePath: string; targetFolder: string }) => ipcRenderer.invoke('folder:move', payload),
inspectFolder: (folderPath: string) => ipcRenderer.invoke('folder:inspect', folderPath),
deleteFolder: (payload: string | { folderPath: string; recursive?: boolean }) =>
ipcRenderer.invoke('folder:delete', payload),
renameFolder: (payload: { folderPath: string; newName: string }) => ipcRenderer.invoke('folder:rename', payload),
moveFolder: (payload: { folderPath: string; targetFolder: string }) => ipcRenderer.invoke('folder:move-folder', payload),
onRefresh: (callback: () => void) => {
const handler = (_event: IpcRendererEvent) => callback();
ipcRenderer.on('file:refresh', handler);
return handler;
},
removeRefreshListener: (handler: (event: IpcRendererEvent, ...args: any[]) => void) => {
ipcRenderer.removeListener('file:refresh', handler);
},
onMenuNewFile: (callback: () => void) => {
const handler = (_event: IpcRendererEvent) => callback();
ipcRenderer.on('menu:new-file', handler);
return handler;
},
onMenuSave: (callback: () => void) => {
const handler = (_event: IpcRendererEvent) => callback();
ipcRenderer.on('menu:save', handler);
return handler;
},
onMenuSwitchWorkspace: (callback: () => void) => {
const handler = (_event: IpcRendererEvent) => callback();
ipcRenderer.on('menu:switch-workspace', handler);
return handler;
},
removeAllListeners: () => {
ipcRenderer.removeAllListeners('file:refresh');
ipcRenderer.removeAllListeners('menu:new-file');
ipcRenderer.removeAllListeners('menu:save');
ipcRenderer.removeAllListeners('menu:switch-workspace');
}
},
// 窗口控制 (用于 Windows 自定义标题栏)
window: {
minimize: () => ipcRenderer.invoke('window:minimize'),
maximize: () => ipcRenderer.invoke('window:maximize'),
close: () => ipcRenderer.invoke('window:close'),
isMaximized: () => ipcRenderer.invoke('window:isMaximized'),
},
// 更新相关
update: {
onUpdateAvailable: (callback: (data: {
latestVersion: string;
currentVersion: string;
releaseUrl: string;
releaseNotes: string;
force: boolean;
}) => void) => {
const handler = (_event: IpcRendererEvent, data: any) => callback(data);
ipcRenderer.on('update:available', handler);
return handler;
},
onUpToDate: (callback: (data: { currentVersion: string }) => void) => {
const handler = (_event: IpcRendererEvent, data: any) => callback(data);
ipcRenderer.on('update:upToDate', handler);
return handler;
},
onUpdateError: (callback: () => void) => {
const handler = (_event: IpcRendererEvent) => callback();
ipcRenderer.on('update:error', handler);
return handler;
},
removeUpdateListener: (handler: any) => {
ipcRenderer.removeListener('update:available', handler);
ipcRenderer.removeListener('update:upToDate', handler);
ipcRenderer.removeListener('update:error', handler);
},
openReleases: () => ipcRenderer.invoke('update:openReleases'),
},
shell: {
openExternal: (url: string) => ipcRenderer.invoke('shell:openExternal', url),
},
clipboard: {
writeHTML: (payload: { html: string; text: string }) =>
ipcRenderer.invoke('clipboard:writeHTML', payload),
writeText: (text: string) => ipcRenderer.invoke('clipboard:writeText', text),
},
});
================================================
FILE: apps/electron/src/updater.ts
================================================
import { app, shell, BrowserWindow } from 'electron';
const GITHUB_REPO = 'tenngoxars/WeMD';
const RELEASES_URL = `https://github.com/${GITHUB_REPO}/releases`;
const API_URL = `https://api.github.com/repos/${GITHUB_REPO}/releases/latest`;
export interface UpdateInfo {
latestVersion: string;
currentVersion: string;
releaseUrl: string;
releaseNotes: string;
}
/**
* 检查 GitHub Releases 是否有新版本
* @param mainWindow 主窗口
* @param force 是否强制检查(忽略跳过的版本)
*/
export async function checkForUpdates(
mainWindow: BrowserWindow | null,
force: boolean = false
): Promise<void> {
try {
const response = await fetch(API_URL, {
headers: { 'User-Agent': 'WeMD-Electron' }
});
if (!response.ok) return;
const data = await response.json();
const latestVersion = data.tag_name?.replace(/^v/, '');
const currentVersion = app.getVersion();
const releaseNotes = data.body || '';
if (latestVersion && isNewerVersion(latestVersion, currentVersion)) {
// 发送 IPC 消息到渲染进程
if (mainWindow && !mainWindow.isDestroyed()) {
mainWindow.webContents.send('update:available', {
latestVersion,
currentVersion,
releaseUrl: RELEASES_URL,
releaseNotes,
force, // 是否为手动检查(强制显示)
});
}
} else if (force && mainWindow && !mainWindow.isDestroyed()) {
// 手动检查但没有新版本,通知用户
mainWindow.webContents.send('update:upToDate', {
currentVersion,
});
}
} catch (error) {
console.error('Update check failed:', error);
if (force && mainWindow && !mainWindow.isDestroyed()) {
mainWindow.webContents.send('update:error');
}
}
}
/**
* 比较版本号,判断 latest 是否比 current 新
*/
function isNewerVersion(latest: string, current: string): boolean {
const latestParts = latest.split('.').map(Number);
const currentParts = current.split('.').map(Number);
for (let i = 0; i < 3; i++) {
if ((latestParts[i] || 0) > (currentParts[i] || 0)) return true;
if ((latestParts[i] || 0) < (currentParts[i] || 0)) return false;
}
return false;
}
/**
* 打开 Releases 页面(供渲染进程调用)
*/
export function openReleasesPage(): void {
shell.openExternal(RELEASES_URL);
}
================================================
FILE: apps/electron/src/utils/frontmatter.test.ts
================================================
import test from 'node:test';
import assert from 'node:assert/strict';
import { extractFrontmatterMeta } from './frontmatter';
test('支持 CRLF 与 BOM 的 frontmatter 解析', () => {
const content = "\uFEFF---\r\ntitle: 标题\r\nthemeName: \"森林绿\"\r\n---\r\n\r\n正文";
const parsed = extractFrontmatterMeta(content);
assert.equal(parsed.themeName, '森林绿');
assert.equal(parsed.title, '标题');
});
test('无 frontmatter 时返回默认主题', () => {
const parsed = extractFrontmatterMeta('正文内容');
assert.equal(parsed.themeName, '默认主题');
assert.equal(parsed.title, undefined);
});
================================================
FILE: apps/electron/src/utils/frontmatter.ts
================================================
export interface FrontmatterMeta {
themeName: string;
title?: string;
}
const FRONTMATTER_REGEX = /^(\uFEFF)?---(\r?\n)([\s\S]*?)\2---(?:\r?\n|$)/;
function parseFrontmatterValue(raw?: string): string | undefined {
if (!raw) return undefined;
const trimmed = raw.trim();
if ((trimmed.startsWith('"') && trimmed.endsWith('"')) || (trimmed.startsWith("'") && trimmed.endsWith("'"))) {
const quote = trimmed[0];
const inner = trimmed.slice(1, -1);
if (quote === '"') {
return inner.replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
return inner.replace(/\\'/g, "'");
}
return trimmed;
}
export function extractFrontmatterMeta(content: string): FrontmatterMeta {
const fallback: FrontmatterMeta = { themeName: '默认主题' };
const match = content.match(FRONTMATTER_REGEX);
if (!match) return fallback;
const frontmatter = match[3];
const themeMatch = frontmatter.match(/themeName:\s*(.+)/);
const titleMatch = frontmatter.match(/title:\s*(.+)/);
return {
themeName: parseFrontmatterValue(themeMatch?.[1]) || fallback.themeName,
title: parseFrontmatterValue(titleMatch?.[1]) || undefined,
};
}
================================================
FILE: apps/electron/tsconfig.json
================================================
{
"compilerOptions": {
"target": "ES2022",
"module": "CommonJS",
"moduleResolution": "Node",
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true
},
"include": ["src/**/*"]
}
================================================
FILE: apps/server/.prettierrc
================================================
{
"singleQuote": true,
"trailingComma": "all"
}
================================================
FILE: apps/server/COS_SETUP.md
================================================
# 腾讯云 COS 配置指南
## 📋 前置准备
你已经完成:
- ✅ 创建了 COS 存储桶:`wemd-1302564514`
- ✅ 区域:广州 (`ap-guangzhou`)
## 🔑 获取访问密钥
1. 访问腾讯云控制台:https://console.cloud.tencent.com/cam/capi
2. 点击"新建密钥"(如果还没有)
3. 记下 **SecretId** 和 **SecretKey**
## ⚙️ 配置步骤
### 1. 编辑环境变量文件
打开 `apps/server/.env` 文件,填入你的密钥:
```env
# 服务器端口
PORT=4000
# 腾讯云 COS 配置
COS_SECRET_ID=你的SecretId
COS_SECRET_KEY=你的SecretKey
COS_BUCKET=wemd-1302564514
COS_REGION=ap-guangzhou
# 存储模式: local | cos
STORAGE_MODE=cos
```
### 2. 重启后端服务
```bash
cd apps/server
pnpm run dev
```
### 3. 测试上传
1. 打开前端(http://localhost:5173)
2. 在编辑器中粘贴一张图片
3. 查看返回的 URL,应该是:
```
https://wemd-1302564514.cos.ap-guangzhou.myqcloud.com/images/xxx.jpg
```
## 🔄 切换存储模式
### 使用本地存储
```env
STORAGE_MODE=local
```
### 使用腾讯云 COS
```env
STORAGE_MODE=cos
```
## 💰 费用说明
- **存储费用**:0.118元/GB/月
- **流量费用**:0.5元/GB(外网下行)
- **请求费用**:0.01元/万次
**预估**:存 100 张图片(约 10GB),每月约 6-7 元
## ⚠️ 注意事项
1. **不要提交 `.env` 文件到 Git**
- `.env` 已经在 `.gitignore` 中
- 只提交 `.env.example` 作为模板
2. **生产环境配置**
- 部署到服务器时,在服务器上创建 `.env` 文件
- 或使用环境变量注入(推荐)
3. **安全建议**
- 定期更换 SecretKey
- 使用子账号密钥,限制权限范围
================================================
FILE: apps/server/README.md
================================================
<p align="center">
<a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="120" alt="Nest Logo" /></a>
</p>
[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456
[circleci-url]: https://circleci.com/gh/nestjs/nest
<p align="center">A progressive <a href="http://nodejs.org" target="_blank">Node.js</a> framework for building efficient and scalable server-side applications.</p>
<p align="center">
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a>
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a>
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/dm/@nestjs/common.svg" alt="NPM Downloads" /></a>
<a href="https://circleci.com/gh/nestjs/nest" target="_blank"><img src="https://img.shields.io/circleci/build/github/nestjs/nest/master" alt="CircleCI" /></a>
<a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a>
<a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
<a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>
<a href="https://paypal.me/kamilmysliwiec" target="_blank"><img src="https://img.shields.io/badge/Donate-PayPal-ff3f59.svg" alt="Donate us"/></a>
<a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://img.shields.io/badge/Support%20us-Open%20Collective-41B883.svg" alt="Support us"></a>
<a href="https://twitter.com/nestframework" target="_blank"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow" alt="Follow us on Twitter"></a>
</p>
<!--[](https://opencollective.com/nest#backer)
[](https://opencollective.com/nest#sponsor)-->
## Description
[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository.
## Project setup
```bash
$ pnpm install
```
## Compile and run the project
```bash
# development
$ pnpm run start
# watch mode
$ pnpm run start:dev
# production mode
$ pnpm run start:prod
```
## Run tests
```bash
# unit tests
$ pnpm run test
# e2e tests
$ pnpm run test:e2e
# test coverage
$ pnpm run test:cov
```
## Deployment
When you're ready to deploy your NestJS application to production, there are some key steps you can take to ensure it runs as efficiently as possible. Check out the [deployment documentation](https://docs.nestjs.com/deployment) for more information.
If you are looking for a cloud-based platform to deploy your NestJS application, check out [Mau](https://mau.nestjs.com), our official platform for deploying NestJS applications on AWS. Mau makes deployment straightforward and fast, requiring just a few simple steps:
```bash
$ pnpm install -g @nestjs/mau
$ mau deploy
```
With Mau, you can deploy your application in just a few clicks, allowing you to focus on building features rather than managing infrastructure.
## Resources
Check out a few resources that may come in handy when working with NestJS:
- Visit the [NestJS Documentation](https://docs.nestjs.com) to learn more about the framework.
- For questions and support, please visit our [Discord channel](https://discord.gg/G7Qnnhy).
- To dive deeper and get more hands-on experience, check out our official video [courses](https://courses.nestjs.com/).
- Deploy your application to AWS with the help of [NestJS Mau](https://mau.nestjs.com) in just a few clicks.
- Visualize your application graph and interact with the NestJS application in real-time using [NestJS Devtools](https://devtools.nestjs.com).
- Need help with your project (part-time to full-time)? Check out our official [enterprise support](https://enterprise.nestjs.com).
- To stay in the loop and get updates, follow us on [X](https://x.com/nestframework) and [LinkedIn](https://linkedin.com/company/nestjs).
- Looking for a job, or have a job to offer? Check out our official [Jobs board](https://jobs.nestjs.com).
## Support
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
## Stay in touch
- Author - [Kamil Myśliwiec](https://twitter.com/kammysliwiec)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)
## License
Nest is [MIT licensed](https://github.com/nestjs/nest/blob/master/LICENSE).
================================================
FILE: apps/server/eslint.config.mjs
================================================
// @ts-check
import eslint from '@eslint/js';
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import globals from 'globals';
import tseslint from 'typescript-eslint';
export default tseslint.config(
{
ignores: ['eslint.config.mjs'],
},
eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked,
eslintPluginPrettierRecommended,
{
languageOptions: {
globals: {
...globals.node,
...globals.jest,
},
sourceType: 'commonjs',
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
},
{
rules: {
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-floating-promises': 'warn',
'@typescript-eslint/no-unsafe-argument': 'warn',
"prettier/prettier": ["error", { endOfLine: "auto" }],
},
},
);
================================================
FILE: apps/server/nest-cli.json
================================================
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"deleteOutDir": true
}
}
================================================
FILE: apps/server/package.json
================================================
{
"name": "@wemd/server",
"version": "1.1.8",
"description": "",
"author": "",
"private": true,
"license": "UNLICENSED",
"scripts": {
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start",
"dev": "nest start --watch",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@nestjs/common": "^11.0.1",
"@nestjs/config": "^4.0.2",
"@nestjs/core": "^11.0.1",
"@nestjs/mapped-types": "*",
"@nestjs/platform-express": "^11.0.1",
"cos-nodejs-sdk-v5": "^2.15.4",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.1"
},
"devDependencies": {
"@eslint/eslintrc": "^3.2.0",
"@eslint/js": "^9.18.0",
"@nestjs/cli": "^11.0.0",
"@nestjs/schematics": "^11.0.0",
"@nestjs/testing": "^11.0.1",
"@types/express": "^5.0.0",
"@types/jest": "^30.0.0",
"@types/multer": "^2.0.0",
"@types/node": "^22.10.7",
"@types/supertest": "^6.0.2",
"eslint": "^9.18.0",
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-prettier": "^5.2.2",
"globals": "^16.0.0",
"jest": "^30.0.0",
"prettier": "^3.4.2",
"source-map-support": "^0.5.21",
"supertest": "^7.0.0",
"ts-jest": "^29.2.5",
"ts-loader": "^9.5.2",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.7.3",
"typescript-eslint": "^8.20.0"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
}
================================================
FILE: apps/server/src/app.controller.spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';
describe('AppController', () => {
let appController: AppController;
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [AppController],
providers: [AppService],
}).compile();
appController = app.get<AppController>(AppController);
});
describe('root', () => {
it('should return "Hello World!"', () => {
expect(appController.getHello()).toBe('Hello World!');
});
});
});
================================================
FILE: apps/server/src/app.controller.ts
================================================
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
================================================
FILE: apps/server/src/app.module.ts
================================================
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UploadModule } from './upload/upload.module';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
UploadModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
================================================
FILE: apps/server/src/app.service.ts
================================================
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
================================================
FILE: apps/server/src/main.ts
================================================
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
app.enableCors();
app.setGlobalPrefix('api');
// 配置静态文件服务
app.useStaticAssets(join(__dirname, '..', 'uploads'), {
prefix: '/uploads/',
});
await app.listen(process.env.PORT ?? 4000);
console.log(`Server is running on http://localhost:4000`);
}
void bootstrap();
================================================
FILE: apps/server/src/services/cos.service.ts
================================================
import COS from 'cos-nodejs-sdk-v5';
type COSPutObjectParams = {
Bucket: string;
Region: string;
Key: string;
Body: Buffer;
};
type COSPutObjectCallback = (err: Error | null, data: unknown) => void;
interface COSClient {
putObject(params: COSPutObjectParams, callback: COSPutObjectCallback): void;
}
type COSConstructor = new (options: {
SecretId: string;
SecretKey: string;
}) => COSClient;
const COSConstructor = COS as unknown as COSConstructor;
export interface COSConfig {
secretId: string;
secretKey: string;
bucket: string;
region: string;
customDomain?: string; // 自定义域名,如 https://img.wemd.top
}
export class COSService {
private cos: COSClient;
private bucket: string;
private region: string;
private customDomain?: string;
constructor(config: COSConfig) {
this.cos = new COSConstructor({
SecretId: config.secretId,
SecretKey: config.secretKey,
});
this.bucket = config.bucket;
this.region = config.region;
this.customDomain = config.customDomain;
}
async uploadFile(
file: Buffer,
filename: string,
): Promise<{ url: string; key: string }> {
const key = `images/${filename}`;
return new Promise((resolve, reject) => {
this.cos.putObject(
{
Bucket: this.bucket,
Region: this.region,
Key: key,
Body: file,
},
(err) => {
if (err) {
const error = err instanceof Error ? err : new Error(String(err));
reject(error);
return;
}
// 如果配置了自定义域名,使用自定义域名
const url = this.customDomain
? `${this.customDomain}/${key}`
: `https://${this.bucket}.cos.${this.region}.myqcloud.com/${key}`;
resolve({ url, key });
},
);
});
}
}
================================================
FILE: apps/server/src/upload/dto/create-upload.dto.ts
================================================
export class CreateUploadDto {}
================================================
FILE: apps/server/src/upload/dto/update-upload.dto.ts
================================================
import { PartialType } from '@nestjs/mapped-types';
import { CreateUploadDto } from './create-upload.dto';
export class UpdateUploadDto extends PartialType(CreateUploadDto) {}
================================================
FILE: apps/server/src/upload/entities/upload.entity.ts
================================================
export class Upload {}
================================================
FILE: apps/server/src/upload/upload.controller.ts
================================================
import {
Controller,
Post,
UploadedFile,
UseInterceptors,
BadRequestException,
} from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { ConfigService } from '@nestjs/config';
import { memoryStorage } from 'multer';
import { extname } from 'path';
import { COSService } from '../services/cos.service';
import { writeFileSync } from 'fs';
type StorageMode = 'local' | 'cos';
@Controller('upload')
export class UploadController {
private cosService: COSService | null = null;
private storageMode: StorageMode;
constructor(private configService: ConfigService) {
const configuredMode = this.configService.get<string>('STORAGE_MODE');
this.storageMode = configuredMode === 'cos' ? 'cos' : 'local';
if (this.storageMode === 'cos') {
const secretId = this.configService.get<string>('COS_SECRET_ID');
const secretKey = this.configService.get<string>('COS_SECRET_KEY');
const bucket = this.configService.get<string>('COS_BUCKET');
const region = this.configService.get<string>('COS_REGION');
const customDomain = this.configService.get<string>('COS_CUSTOM_DOMAIN');
if (secretId && secretKey && bucket && region) {
this.cosService = new COSService({
secretId,
secretKey,
bucket,
region,
customDomain,
});
}
}
}
@Post()
@UseInterceptors(
FileInterceptor('file', {
storage: memoryStorage(), // 使用内存存储以保留 buffer
fileFilter: (req, file, callback) => {
if (!file.mimetype.match(/\/(jpg|jpeg|png|gif|webp)$/)) {
return callback(new BadRequestException('只支持图片文件'), false);
}
callback(null, true);
},
limits: {
fileSize: 5 * 1024 * 1024, // 5MB
},
}),
)
async uploadFile(@UploadedFile() file: Express.Multer.File) {
if (!file) {
throw new BadRequestException('请上传文件');
}
// Multer 默认按 latin1 解码文件名,这里转成 UTF-8,避免中文乱码
const originalName = Buffer.from(file.originalname, 'latin1').toString(
'utf8',
);
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1e9);
const ext = extname(file.originalname);
const filename = `${uniqueSuffix}${ext}`;
// 如果使用 COS 存储
if (this.storageMode === 'cos' && this.cosService) {
try {
const result = await this.cosService.uploadFile(file.buffer, filename);
return {
url: result.url,
filename: originalName,
};
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
throw new BadRequestException(`上传到云存储失败: ${message}`);
}
}
// 默认使用本地存储
const localPath = `./uploads/${filename}`;
writeFileSync(localPath, file.buffer);
const url = `http://localhost:4000/uploads/${filename}`;
return {
url,
filename: originalName,
};
}
}
================================================
FILE: apps/server/src/upload/upload.module.ts
================================================
import { Module } from '@nestjs/common';
import { UploadService } from './upload.service';
import { UploadController } from './upload.controller';
@Module({
controllers: [UploadController],
providers: [UploadService],
})
export class UploadModule {}
================================================
FILE: apps/server/src/upload/upload.service.ts
================================================
import { Injectable } from '@nestjs/common';
import { CreateUploadDto } from './dto/create-upload.dto';
import { UpdateUploadDto } from './dto/update-upload.dto';
@Injectable()
export class UploadService {
create(createUploadDto: CreateUploadDto) {
void createUploadDto;
return 'This action adds a new upload';
}
findAll() {
return `This action returns all upload`;
}
findOne(id: number) {
return `This action returns a #${id} upload`;
}
update(id: number, updateUploadDto: UpdateUploadDto) {
void updateUploadDto;
return `This action updates a #${id} upload`;
}
remove(id: number) {
return `This action removes a #${id} upload`;
}
}
================================================
FILE: apps/server/test/app.e2e-spec.ts
================================================
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import request from 'supertest';
import { App } from 'supertest/types';
import { AppModule } from './../src/app.module';
describe('AppController (e2e)', () => {
let app: INestApplication<App>;
beforeEach(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleFixture.createNestApplication();
await app.init();
});
it('/ (GET)', () => {
return request(app.getHttpServer())
.get('/')
.expect(200)
.expect('Hello World!');
});
});
================================================
FILE: apps/server/test/jest-e2e.json
================================================
{
"moduleFileExtensions": ["js", "json", "ts"],
"rootDir": ".",
"testEnvironment": "node",
"testRegex": ".e2e-spec.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
}
}
================================================
FILE: apps/server/tsconfig.build.json
================================================
{
"extends": "./tsconfig.json",
"exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}
================================================
FILE: apps/server/tsconfig.json
================================================
{
"compilerOptions": {
"module": "nodenext",
"moduleResolution": "nodenext",
"resolvePackageJsonExports": true,
"esModuleInterop": true,
"isolatedModules": true,
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "ES2023",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
"skipLibCheck": true,
"strictNullChecks": true,
"forceConsistentCasingInFileNames": true,
"noImplicitAny": false,
"strictBindCallApply": false,
"noFallthroughCasesInSwitch": false
}
}
================================================
FILE: apps/web/.gitignore
================================================
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
================================================
FILE: apps/web/README.md
================================================
# React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
## React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
## Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
```js
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
```
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
```js
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
```
================================================
FILE: apps/web/index.html
================================================
<!doctype html>
<html lang="zh-CN">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-ZX315WS5VE"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-ZX315WS5VE');
</script>
<meta charset="UTF-8" />
<link rel="icon" type="image/png" href="/favicon-dark.png" />
<link rel="icon" type="image/svg+xml" href="/favicon-dark.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>WeMD - 微信公众号 Markdown 排版编辑器 | 开源免费</title>
<meta name="description" content="WeMD 是一款专为微信公众号设计的 Markdown 编辑器,支持一键复制到公众号,多种精美主题可选,开源免费,本地优先,无需登录即可使用。" />
<meta name="keywords" content="公众号 Markdown编辑器,微信 Markdown 编辑器,微信公众号排版,公众号编辑器,Markdown排版,WeMD,开源编辑器" />
<!-- Open Graph -->
<meta property="og:title" content="WeMD - 微信公众号 Markdown 排版编辑器" />
<meta property="og:description" content="专为微信公众号设计的 Markdown 编辑器,一键复制到公众号,多种精美主题可选,开源免费。" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://edit.wemd.app" />
<meta property="og:image" content="https://wemd.app/og-image.png" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="WeMD - 微信公众号 Markdown 排版编辑器" />
<meta name="twitter:description" content="专为微信公众号设计的 Markdown 编辑器,一键复制到公众号,多种精美主题可选,开源免费。" />
<!-- MathJax will be loaded dynamically when formulas are detected -->
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
================================================
FILE: apps/web/package.json
================================================
{
"name": "@wemd/web",
"private": true,
"version": "1.2.10",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview",
"test": "vitest",
"test:ui": "vitest --ui"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.956.0",
"@babel/runtime": "^7.28.4",
"@codemirror/commands": "^6.10.1",
"@codemirror/lang-markdown": "^6.5.0",
"@codemirror/language": "^6.11.3",
"@codemirror/search": "^6.5.11",
"@codemirror/state": "^6.5.2",
"@codemirror/view": "^6.38.8",
"@lezer/markdown": "^1.6.0",
"@lezer/highlight": "^1.2.3",
"@uiw/codemirror-theme-github": "^4.25.3",
"@wemd/core": "workspace:*",
"codemirror": "^6.0.2",
"cos-js-sdk-v5": "^1.10.1",
"crypto-js": "^4.2.0",
"idb": "^8.0.3",
"katex": "^0.16.27",
"lucide-react": "^0.555.0",
"mermaid": "^11.12.2",
"qiniu-js": "^3.4.3",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-hot-toast": "^2.6.0",
"tiny-oss": "^0.5.1",
"zustand": "^5.0.8"
},
"devDependencies": {
"@eslint/js": "^9.17.0",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.1",
"@types/crypto-js": "^4.2.2",
"@types/node": "^25.0.3",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@vitejs/plugin-react": "^4.3.4",
"eslint": "^9.17.0",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.16",
"globals": "^15.14.0",
"jsdom": "^27.3.0",
"typescript": "~5.6.2",
"typescript-eslint": "^8.18.2",
"vite": "^6.0.5",
"vitest": "^4.0.16"
}
}
================================================
FILE: apps/web/public/fonts/local-fonts.css
================================================
/* 本地字体定义 - 替代 Google Fonts */
/* Inter */
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/inter/inter-latin-regular.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/fonts/inter/inter-latin-500.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/fonts/inter/inter-latin-600.woff2") format("woff2");
}
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/fonts/inter/inter-latin-700.woff2") format("woff2");
}
/* JetBrains Mono */
@font-face {
font-family: "JetBrains Mono";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/jetbrains-mono/jetbrains-mono-latin-regular.woff2")
format("woff2");
}
@font-face {
font-family: "JetBrains Mono";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/fonts/jetbrains-mono/jetbrains-mono-latin-500.woff2")
format("woff2");
}
/* Space Grotesk */
@font-face {
font-family: "Space Grotesk";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/space-grotesk/space-grotesk-latin-regular.woff2")
format("woff2");
}
@font-face {
font-family: "Space Grotesk";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/fonts/space-grotesk/space-grotesk-latin-500.woff2") format("woff2");
}
@font-face {
font-family: "Space Grotesk";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/fonts/space-grotesk/space-grotesk-latin-600.woff2") format("woff2");
}
@font-face {
font-family: "Space Grotesk";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/fonts/space-grotesk/space-grotesk-latin-700.woff2") format("woff2");
}
/* Noto Serif SC */
@font-face {
font-family: "Noto Serif SC";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/noto-serif-sc/noto-serif-sc-chinese-regular.woff2")
format("woff2");
}
@font-face {
font-family: "Noto Serif SC";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/fonts/noto-serif-sc/noto-serif-sc-chinese-700.woff2")
format("woff2");
}
================================================
FILE: apps/web/public/libs/mathjax/tex-svg.js
================================================
(function(){"use strict";var __webpack_modules__={351:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},Q=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),Q=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)Q.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return Q},T=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},s=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AssistiveMmlHandler=e.AssistiveMmlMathDocumentMixin=e.AssistiveMmlMathItemMixin=e.LimitedMmlVisitor=void 0;var a=r(4474),l=r(9259),c=r(7233),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.getAttributes=function(e){return t.prototype.getAttributes.call(this,e).replace(/ ?id=".*?"/,"")},e}(l.SerializedMmlVisitor);function p(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.assistiveMml=function(t,e){if(void 0===e&&(e=!1),!(this.state()>=a.STATE.ASSISTIVEMML)){if(!this.isEscaped&&(t.options.enableAssistiveMml||e)){var r=t.adaptor,n=t.toMML(this.root).replace(/\n */g,"").replace(/<!--.*?-->/g,""),o=r.firstChild(r.body(r.parse(n,"text/html"))),i=r.node("mjx-assistive-mml",{unselectable:"on",display:this.display?"block":"inline"},[o]);r.setAttribute(r.firstChild(this.typesetRoot),"aria-hidden","true"),r.setStyle(this.typesetRoot,"position","relative"),r.append(this.typesetRoot,i)}this.state(a.STATE.ASSISTIVEMML)}},e}(t)}function h(t){var e;return e=function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var n=t.apply(this,T([],Q(e),!1))||this,o=n.constructor,i=o.ProcessBits;return i.has("assistive-mml")||i.allocate("assistive-mml"),n.visitor=new u(n.mmlFactory),n.options.MathItem=p(n.options.MathItem),"addStyles"in n&&n.addStyles(o.assistiveStyles),n}return o(e,t),e.prototype.toMML=function(t){return this.visitor.visitTree(t)},e.prototype.assistiveMml=function(){var t,e;if(!this.processed.isSet("assistive-mml")){try{for(var r=s(this.math),n=r.next();!n.done;n=r.next()){n.value.assistiveMml(this)}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}this.processed.set("assistive-mml")}return this},e.prototype.state=function(e,r){return void 0===r&&(r=!1),t.prototype.state.call(this,e,r),e<a.STATE.ASSISTIVEMML&&this.processed.clear("assistive-mml"),this},e}(t),e.OPTIONS=i(i({},t.OPTIONS),{enableAssistiveMml:!0,renderActions:(0,c.expandable)(i(i({},t.OPTIONS.renderActions),{assistiveMml:[a.STATE.ASSISTIVEMML]}))}),e.assistiveStyles={"mjx-assistive-mml":{position:"absolute !important",top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)",padding:"1px 0px 0px 0px !important",border:"0px !important",display:"block !important",width:"auto !important",overflow:"hidden !important","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none"},'mjx-assistive-mml[display="block"]':{width:"100% !important"}},e}e.LimitedMmlVisitor=u,(0,a.newState)("ASSISTIVEMML",153),e.AssistiveMmlMathItemMixin=p,e.AssistiveMmlMathDocumentMixin=h,e.AssistiveMmlHandler=function(t){return t.documentClass=h(t.documentClass),t}},5282:function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var r=new Map;e.default=r},5445:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},Q=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function Q(t){try{s(n.next(t))}catch(t){i(t)}}function T(t){try{s(n.throw(t))}catch(t){i(t)}}function s(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(Q,T)}s((n=n.apply(t,e||[])).next())}))},T=this&&this.__generator||function(t,e){var r,n,o,i,Q={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:T(0),throw:T(1),return:T(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function T(i){return function(T){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;Q;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return Q.label++,{value:i[1],done:!1};case 5:Q.label++,n=i[1],i=[0];continue;case 7:i=Q.ops.pop(),Q.trys.pop();continue;default:if(!(o=Q.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){Q=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){Q.label=i[1];break}if(6===i[0]&&Q.label<o[1]){Q.label=o[1],o=i;break}if(o&&Q.label<o[2]){Q.label=o[2],Q.ops.push(i);break}o[2]&&Q.ops.pop(),Q.trys.pop();continue}i=e.call(t,Q)}catch(t){i=[6,t],n=0}finally{r=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,T])}}},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.sreReady=e.Sre=void 0;var a,l=i(r(2998)),c=i(r(3362)),u=i(r(9552)),p=i(r(4440)),h=s(r(5897)),d=r(8504),f=i(r(3090)),L=r(1377),m=s(r(5282));!function(t){t.locales=L.Variables.LOCALES,t.sreReady=l.engineReady,t.setupEngine=l.setupEngine,t.engineSetup=l.engineSetup,t.toEnriched=l.toEnriched,t.toSpeech=l.toSpeech,t.clearspeakPreferences=d.ClearspeakPreferences,t.getHighlighter=f.highlighter,t.getSpeechGenerator=u.generator,t.getWalker=c.walker,t.clearspeakStyle=function(){return p.DOMAIN_TO_STYLES.clearspeak},t.preloadLocales=function(t){return Q(this,void 0,void 0,(function(){var e;return T(this,(function(r){return[2,(e=m.default.get(t))?new Promise((function(t,r){return t(JSON.stringify(e))})):l.localeLoader()(t)]}))}))}}(a=e.Sre||(e.Sre={})),e.sreReady=a.sreReady,h.default.getInstance().delay=!0,e.default=a},444:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.HTMLAdaptor=void 0;var Q=function(t){function e(e){var r=t.call(this,e.document)||this;return r.window=e,r.parser=new e.DOMParser,r}return o(e,t),e.prototype.parse=function(t,e){return void 0===e&&(e="text/html"),this.parser.parseFromString(t,e)},e.prototype.create=function(t,e){return e?this.document.createElementNS(e,t):this.document.createElement(t)},e.prototype.text=function(t){return this.document.createTextNode(t)},e.prototype.head=function(t){return t.head||t},e.prototype.body=function(t){return t.body||t},e.prototype.root=function(t){return t.documentElement||t},e.prototype.doctype=function(t){return t.doctype?"<!DOCTYPE ".concat(t.doctype.name,">"):""},e.prototype.tags=function(t,e,r){void 0===r&&(r=null);var n=r?t.getElementsByTagNameNS(r,e):t.getElementsByTagName(e);return Array.from(n)},e.prototype.getElements=function(t,e){var r,n,o=[];try{for(var Q=i(t),T=Q.next();!T.done;T=Q.next()){var s=T.value;"string"==typeof s?o=o.concat(Array.from(this.document.querySelectorAll(s))):Array.isArray(s)||s instanceof this.window.NodeList||s instanceof this.window.HTMLCollection?o=o.concat(Array.from(s)):o.push(s)}}catch(t){r={error:t}}finally{try{T&&!T.done&&(n=Q.return)&&n.call(Q)}finally{if(r)throw r.error}}return o},e.prototype.contains=function(t,e){return t.contains(e)},e.prototype.parent=function(t){return t.parentNode},e.prototype.append=function(t,e){return t.appendChild(e)},e.prototype.insert=function(t,e){return this.parent(e).insertBefore(t,e)},e.prototype.remove=function(t){return this.parent(t).removeChild(t)},e.prototype.replace=function(t,e){return this.parent(e).replaceChild(t,e)},e.prototype.clone=function(t){return t.cloneNode(!0)},e.prototype.split=function(t,e){return t.splitText(e)},e.prototype.next=function(t){return t.nextSibling},e.prototype.previous=function(t){return t.previousSibling},e.prototype.firstChild=function(t){return t.firstChild},e.prototype.lastChild=function(t){return t.lastChild},e.prototype.childNodes=function(t){return Array.from(t.childNodes)},e.prototype.childNode=function(t,e){return t.childNodes[e]},e.prototype.kind=function(t){var e=t.nodeType;return 1===e||3===e||8===e?t.nodeName.toLowerCase():""},e.prototype.value=function(t){return t.nodeValue||""},e.prototype.textContent=function(t){return t.textContent},e.prototype.innerHTML=function(t){return t.innerHTML},e.prototype.outerHTML=function(t){return t.outerHTML},e.prototype.serializeXML=function(t){return(new this.window.XMLSerializer).serializeToString(t)},e.prototype.setAttribute=function(t,e,r,n){return void 0===n&&(n=null),n?(e=n.replace(/.*\//,"")+":"+e.replace(/^.*:/,""),t.setAttributeNS(n,e,r)):t.setAttribute(e,r)},e.prototype.getAttribute=function(t,e){return t.getAttribute(e)},e.prototype.removeAttribute=function(t,e){return t.removeAttribute(e)},e.prototype.hasAttribute=function(t,e){return t.hasAttribute(e)},e.prototype.allAttributes=function(t){return Array.from(t.attributes).map((function(t){return{name:t.name,value:t.value}}))},e.prototype.addClass=function(t,e){t.classList?t.classList.add(e):t.className=(t.className+" "+e).trim()},e.prototype.removeClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.split(/ /).filter((function(t){return t!==e})).join(" ")},e.prototype.hasClass=function(t,e){return t.classList?t.classList.contains(e):t.className.split(/ /).indexOf(e)>=0},e.prototype.setStyle=function(t,e,r){t.style[e]=r},e.prototype.getStyle=function(t,e){return t.style[e]},e.prototype.allStyles=function(t){return t.style.cssText},e.prototype.insertRules=function(t,e){var r,n;try{for(var o=i(e.reverse()),Q=o.next();!Q.done;Q=o.next()){var T=Q.value;try{t.sheet.insertRule(T,0)}catch(t){console.warn("MathJax: can't insert css rule '".concat(T,"': ").concat(t.message))}}}catch(t){r={error:t}}finally{try{Q&&!Q.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},e.prototype.fontSize=function(t){var e=this.window.getComputedStyle(t);return parseFloat(e.fontSize)},e.prototype.fontFamily=function(t){return this.window.getComputedStyle(t).fontFamily||""},e.prototype.nodeSize=function(t,e,r){if(void 0===e&&(e=1),void 0===r&&(r=!1),r&&t.getBBox){var n=t.getBBox();return[n.width/e,n.height/e]}return[t.offsetWidth/e,t.offsetHeight/e]},e.prototype.nodeBBox=function(t){var e=t.getBoundingClientRect();return{left:e.left,right:e.right,top:e.top,bottom:e.bottom}},e}(r(5009).AbstractDOMAdaptor);e.HTMLAdaptor=Q},6191:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.browserAdaptor=void 0;var n=r(444);e.browserAdaptor=function(){return new n.HTMLAdaptor(window)}},9515:function(t,e,r){var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MathJax=e.combineWithMathJax=e.combineDefaults=e.combineConfig=e.isObject=void 0;var o=r(3282);function i(t){return"object"==typeof t&&null!==t}function Q(t,e){var r,o;try{for(var T=n(Object.keys(e)),s=T.next();!s.done;s=T.next()){var a=s.value;"__esModule"!==a&&(!i(t[a])||!i(e[a])||e[a]instanceof Promise?null!==e[a]&&void 0!==e[a]&&(t[a]=e[a]):Q(t[a],e[a]))}}catch(t){r={error:t}}finally{try{s&&!s.done&&(o=T.return)&&o.call(T)}finally{if(r)throw r.error}}return t}e.isObject=i,e.combineConfig=Q,e.combineDefaults=function t(e,r,o){var Q,T;e[r]||(e[r]={}),e=e[r];try{for(var s=n(Object.keys(o)),a=s.next();!a.done;a=s.next()){var l=a.value;i(e[l])&&i(o[l])?t(e,l,o[l]):null==e[l]&&null!=o[l]&&(e[l]=o[l])}}catch(t){Q={error:t}}finally{try{a&&!a.done&&(T=s.return)&&T.call(s)}finally{if(Q)throw Q.error}}return e},e.combineWithMathJax=function(t){return Q(e.MathJax,t)},void 0===r.g.MathJax&&(r.g.MathJax={}),r.g.MathJax.version||(r.g.MathJax={version:o.VERSION,_:{},config:r.g.MathJax}),e.MathJax=r.g.MathJax},235:function(t,e,r){var n,o,i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CONFIG=e.MathJax=e.Loader=e.PathFilters=e.PackageError=e.Package=void 0;var Q=r(9515),T=r(265),s=r(265);Object.defineProperty(e,"Package",{enumerable:!0,get:function(){return s.Package}}),Object.defineProperty(e,"PackageError",{enumerable:!0,get:function(){return s.PackageError}});var a,l=r(7525);if(e.PathFilters={source:function(t){return e.CONFIG.source.hasOwnProperty(t.name)&&(t.name=e.CONFIG.source[t.name]),!0},normalize:function(t){var e=t.name;return e.match(/^(?:[a-z]+:\/)?\/|[a-z]:\\|\[/i)||(t.name="[mathjax]/"+e.replace(/^\.\//,"")),t.addExtension&&!e.match(/\.[^\/]+$/)&&(t.name+=".js"),!0},prefix:function(t){for(var r;(r=t.name.match(/^\[([^\]]*)\]/))&&e.CONFIG.paths.hasOwnProperty(r[1]);)t.name=e.CONFIG.paths[r[1]]+t.name.substr(r[0].length);return!0}},function(t){var r=Q.MathJax.version;t.versions=new Map,t.ready=function(){for(var t,e,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];0===r.length&&(r=Array.from(T.Package.packages.keys()));var o=[];try{for(var Q=i(r),s=Q.next();!s.done;s=Q.next()){var a=s.value,l=T.Package.packages.get(a)||new T.Package(a,!0);o.push(l.promise)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}return Promise.all(o)},t.load=function(){for(var r,n,o=[],Q=0;Q<arguments.length;Q++)o[Q]=arguments[Q];if(0===o.length)return Promise.resolve();var s=[],a=function(r){var n=T.Package.packages.get(r);n||(n=new T.Package(r)).provides(e.CONFIG.provides[r]),n.checkNoLoad(),s.push(n.promise.then((function(){e.CONFIG.versionWarnings&&n.isLoaded&&!t.versions.has(T.Package.resolvePath(r))&&console.warn("No version information available for component ".concat(r))})))};try{for(var l=i(o),c=l.next();!c.done;c=l.next()){var u=c.value;a(u)}}catch(t){r={error:t}}finally{try{c&&!c.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}return T.Package.loadAll(),Promise.all(s)},t.preLoad=function(){for(var t,r,n=[],o=0;o<arguments.length;o++)n[o]=arguments[o];try{for(var Q=i(n),s=Q.next();!s.done;s=Q.next()){var a=s.value,l=T.Package.packages.get(a);l||(l=new T.Package(a,!0)).provides(e.CONFIG.provides[a]),l.loaded()}}catch(e){t={error:e}}finally{try{s&&!s.done&&(r=Q.return)&&r.call(Q)}finally{if(t)throw t.error}}},t.defaultReady=function(){void 0!==e.MathJax.startup&&e.MathJax.config.startup.ready()},t.getRoot=function(){var t="//../../es5";if("undefined"!=typeof document){var e=document.currentScript||document.getElementById("MathJax-script");e&&(t=e.src.replace(/\/[^\/]*$/,""))}return t},t.checkVersion=function(n,o,i){return t.versions.set(T.Package.resolvePath(n),r),!(!e.CONFIG.versionWarnings||o===r)&&(console.warn("Component ".concat(n," uses ").concat(o," of MathJax; version in use is ").concat(r)),!0)},t.pathFilters=new l.FunctionList,t.pathFilters.add(e.PathFilters.source,0),t.pathFilters.add(e.PathFilters.normalize,10),t.pathFilters.add(e.PathFilters.prefix,20)}(a=e.Loader||(e.Loader={})),e.MathJax=Q.MathJax,void 0===e.MathJax.loader){(0,Q.combineDefaults)(e.MathJax.config,"loader",{paths:{mathjax:a.getRoot()},source:{},dependencies:{},provides:{},load:[],ready:a.defaultReady.bind(a),failed:function(t){return console.log("MathJax(".concat(t.package||"?","): ").concat(t.message))},require:null,pathFilters:[],versionWarnings:!0}),(0,Q.combineWithMathJax)({loader:a});try{for(var c=i(e.MathJax.config.loader.pathFilters),u=c.next();!u.done;u=c.next()){var p=u.value;Array.isArray(p)?a.pathFilters.add(p[0],p[1]):a.pathFilters.add(p)}}catch(t){n={error:t}}finally{try{u&&!u.done&&(o=c.return)&&o.call(c)}finally{if(n)throw n.error}}}e.CONFIG=e.MathJax.config.loader},265:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},Q=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),Q=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)Q.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return Q},T=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))};Object.defineProperty(e,"__esModule",{value:!0}),e.Package=e.PackageError=void 0;var s=r(235),a=function(t){function e(e,r){var n=t.call(this,e)||this;return n.package=r,n}return o(e,t),e}(Error);e.PackageError=a;var l=function(){function t(e,r){void 0===r&&(r=!1),this.isLoaded=!1,this.isLoading=!1,this.hasFailed=!1,this.dependents=[],this.dependencies=[],this.dependencyCount=0,this.provided=[],this.name=e,this.noLoad=r,t.packages.set(e,this),this.promise=this.makePromise(this.makeDependencies())}return Object.defineProperty(t.prototype,"canLoad",{get:function(){return 0===this.dependencyCount&&!this.noLoad&&!this.isLoading&&!this.hasFailed},enumerable:!1,configurable:!0}),t.resolvePath=function(t,e){void 0===e&&(e=!0);var r={name:t,original:t,addExtension:e};return s.Loader.pathFilters.execute(r),r.name},t.loadAll=function(){var t,e;try{for(var r=i(this.packages.values()),n=r.next();!n.done;n=r.next()){var o=n.value;o.canLoad&&o.load()}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},t.prototype.makeDependencies=function(){var e,r,n=[],o=t.packages,a=this.noLoad,l=this.name,c=[];s.CONFIG.dependencies.hasOwnProperty(l)?c.push.apply(c,T([],Q(s.CONFIG.dependencies[l]),!1)):"core"!==l&&c.push("core");try{for(var u=i(c),p=u.next();!p.done;p=u.next()){var h=p.value,d=o.get(h)||new t(h,a);this.dependencies.indexOf(d)<0&&(d.addDependent(this,a),this.dependencies.push(d),d.isLoaded||(this.dependencyCount++,n.push(d.promise)))}}catch(t){e={error:t}}finally{try{p&&!p.done&&(r=u.return)&&r.call(u)}finally{if(e)throw e.error}}return n},t.prototype.makePromise=function(t){var e=this,r=new Promise((function(t,r){e.resolve=t,e.reject=r})),n=s.CONFIG[this.name]||{};return n.ready&&(r=r.then((function(t){return n.ready(e.name)}))),t.length&&(t.push(r),r=Promise.all(t).then((function(t){return t.join(", ")}))),n.failed&&r.catch((function(t){return n.failed(new a(t,e.name))})),r},t.prototype.load=function(){if(!this.isLoaded&&!this.isLoading&&!this.noLoad){this.isLoading=!0;var e=t.resolvePath(this.name);s.CONFIG.require?this.loadCustom(e):this.loadScript(e)}},t.prototype.loadCustom=function(t){var e=this;try{var r=s.CONFIG.require(t);r instanceof Promise?r.then((function(){return e.checkLoad()})).catch((function(r){return e.failed("Can't load \""+t+'"\n'+r.message.trim())})):this.checkLoad()}catch(t){this.failed(t.message)}},t.prototype.loadScript=function(t){var e=this,r=document.createElement("script");r.src=t,r.charset="UTF-8",r.onload=function(t){return e.checkLoad()},r.onerror=function(r){return e.failed("Can't load \""+t+'"')},document.head.appendChild(r)},t.prototype.loaded=function(){var t,e,r,n;this.isLoaded=!0,this.isLoading=!1;try{for(var o=i(this.dependents),Q=o.next();!Q.done;Q=o.next()){Q.value.requirementSatisfied()}}catch(e){t={error:e}}finally{try{Q&&!Q.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}try{for(var T=i(this.provided),s=T.next();!s.done;s=T.next()){s.value.loaded()}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=T.return)&&n.call(T)}finally{if(r)throw r.error}}this.resolve(this.name)},t.prototype.failed=function(t){this.hasFailed=!0,this.isLoading=!1,this.reject(new a(t,this.name))},t.prototype.checkLoad=function(){var t=this;((s.CONFIG[this.name]||{}).checkReady||function(){return Promise.resolve()})().then((function(){return t.loaded()})).catch((function(e){return t.failed(e)}))},t.prototype.requirementSatisfied=function(){this.dependencyCount&&(this.dependencyCount--,this.canLoad&&this.load())},t.prototype.provides=function(e){var r,n;void 0===e&&(e=[]);try{for(var o=i(e),Q=o.next();!Q.done;Q=o.next()){var T=Q.value,a=t.packages.get(T);a||(s.CONFIG.dependencies[T]||(s.CONFIG.dependencies[T]=[]),s.CONFIG.dependencies[T].push(T),(a=new t(T,!0)).isLoading=!0),this.provided.push(a)}}catch(t){r={error:t}}finally{try{Q&&!Q.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},t.prototype.addDependent=function(t,e){this.dependents.push(t),e||this.checkNoLoad()},t.prototype.checkNoLoad=function(){var t,e;if(this.noLoad){this.noLoad=!1;try{for(var r=i(this.dependencies),n=r.next();!n.done;n=r.next()){n.value.checkNoLoad()}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}}},t.packages=new Map,t}();e.Package=l},2388:function(t,e,r){var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),Q=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)Q.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return Q},Q=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))};Object.defineProperty(e,"__esModule",{value:!0}),e.CONFIG=e.MathJax=e.Startup=void 0;var T,s=r(9515),a=r(8666),l=r(7233);!function(t){var T,s,l=new a.PrioritizedList;function u(e){return T.visitTree(e,t.document)}function p(){T=new e.MathJax._.core.MmlTree.SerializedMmlVisitor.SerializedMmlVisitor,s=e.MathJax._.mathjax.mathjax,t.input=y(),t.output=H(),t.adaptor=g(),t.handler&&s.handlers.unregister(t.handler),t.handler=b(),t.handler&&(s.handlers.register(t.handler),t.document=v())}function h(){var e,r;t.input&&t.output&&d();var n=t.output?t.output.name.toLowerCase():"";try{for(var i=o(t.input),Q=i.next();!Q.done;Q=i.next()){var T=Q.value,s=T.name.toLowerCase();L(s,T),m(s,T),t.output&&f(s,n,T)}}catch(t){e={error:t}}finally{try{Q&&!Q.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}}function d(){e.MathJax.typeset=function(e){void 0===e&&(e=null),t.document.options.elements=e,t.document.reset(),t.document.render()},e.MathJax.typesetPromise=function(e){return void 0===e&&(e=null),t.document.options.elements=e,t.document.reset(),s.handleRetriesFor((function(){t.document.render()}))},e.MathJax.typesetClear=function(e){void 0===e&&(e=null),e?t.document.clearMathItemsWithin(e):t.document.clear()}}function f(r,n,o){var i=r+"2"+n;e.MathJax[i]=function(e,r){return void 0===r&&(r={}),r.format=o.name,t.document.convert(e,r)},e.MathJax[i+"Promise"]=function(e,r){return void 0===r&&(r={}),r.format=o.name,s.handleRetriesFor((function(){return t.document.convert(e,r)}))},e.MathJax[n+"Stylesheet"]=function(){return t.output.styleSheet(t.document)},"getMetricsFor"in t.output&&(e.MathJax.getMetricsFor=function(e,r){return t.output.getMetricsFor(e,r)})}function L(r,n){var o=e.MathJax._.core.MathItem.STATE;e.MathJax[r+"2mml"]=function(e,r){return void 0===r&&(r={}),r.end=o.CONVERT,r.format=n.name,u(t.document.convert(e,r))},e.MathJax[r+"2mmlPromise"]=function(e,r){return void 0===r&&(r={}),r.end=o.CONVERT,r.format=n.name,s.handleRetriesFor((function(){return u(t.document.convert(e,r))}))}}function m(t,r){e.MathJax[t+"Reset"]=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return r.reset.apply(r,Q([],i(t),!1))}}function y(){var r,n,i=[];try{for(var Q=o(e.CONFIG.input),T=Q.next();!T.done;T=Q.next()){var s=T.value,a=t.constructors[s];if(!a)throw Error('Input Jax "'+s+'" is not defined (has it been loaded?)');i.push(new a(e.MathJax.config[s]))}}catch(t){r={error:t}}finally{try{T&&!T.done&&(n=Q.return)&&n.call(Q)}finally{if(r)throw r.error}}return i}function H(){var r=e.CONFIG.output;if(!r)return null;var n=t.constructors[r];if(!n)throw Error('Output Jax "'+r+'" is not defined (has it been loaded?)');return new n(e.MathJax.config[r])}function g(){var r=e.CONFIG.adaptor;if(!r||"none"===r)return null;var n=t.constructors[r];if(!n)throw Error('DOMAdaptor "'+r+'" is not defined (has it been loaded?)');return n(e.MathJax.config[r])}function b(){var r,n,i=e.CONFIG.handler;if(!i||"none"===i||!t.adaptor)return null;var Q=t.constructors[i];if(!Q)throw Error('Handler "'+i+'" is not defined (has it been loaded?)');var T=new Q(t.adaptor,5);try{for(var s=o(l),a=s.next();!a.done;a=s.next()){T=a.value.item(T)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return T}function v(r){return void 0===r&&(r=null),s.document(r||e.CONFIG.document,n(n({},e.MathJax.config.options),{InputJax:t.input,OutputJax:t.output}))}t.constructors={},t.input=[],t.output=null,t.handler=null,t.adaptor=null,t.elements=null,t.document=null,t.promise=new Promise((function(e,r){t.promiseResolve=e,t.promiseReject=r})),t.pagePromise=new Promise((function(t,e){var n=r.g.document;if(n&&n.readyState&&"complete"!==n.readyState&&"interactive"!==n.readyState){var o=function(){return t()};n.defaultView.addEventListener("load",o,!0),n.defaultView.addEventListener("DOMContentLoaded",o,!0)}else t()})),t.toMML=u,t.registerConstructor=function(e,r){t.constructors[e]=r},t.useHandler=function(t,r){void 0===r&&(r=!1),e.CONFIG.handler&&!r||(e.CONFIG.handler=t)},t.useAdaptor=function(t,r){void 0===r&&(r=!1),e.CONFIG.adaptor&&!r||(e.CONFIG.adaptor=t)},t.useInput=function(t,r){void 0===r&&(r=!1),c&&!r||e.CONFIG.input.push(t)},t.useOutput=function(t,r){void 0===r&&(r=!1),e.CONFIG.output&&!r||(e.CONFIG.output=t)},t.extendHandler=function(t,e){void 0===e&&(e=10),l.add(t,e)},t.defaultReady=function(){p(),h(),t.pagePromise.then((function(){return e.CONFIG.pageReady()})).then((function(){return t.promiseResolve()})).catch((function(e){return t.promiseReject(e)}))},t.defaultPageReady=function(){return e.CONFIG.typeset&&e.MathJax.typesetPromise?e.MathJax.typesetPromise(e.CONFIG.elements):Promise.resolve()},t.getComponents=p,t.makeMethods=h,t.makeTypesetMethods=d,t.makeOutputMethods=f,t.makeMmlMethods=L,t.makeResetMethod=m,t.getInputJax=y,t.getOutputJax=H,t.getAdaptor=g,t.getHandler=b,t.getDocument=v}(T=e.Startup||(e.Startup={})),e.MathJax=s.MathJax,void 0===e.MathJax._.startup&&((0,s.combineDefaults)(e.MathJax.config,"startup",{input:[],output:"",handler:null,adaptor:null,document:"undefined"==typeof document?"":document,elements:null,typeset:!0,ready:T.defaultReady.bind(T),pageReady:T.defaultPageReady.bind(T)}),(0,s.combineWithMathJax)({startup:T,options:{}}),e.MathJax.config.startup.invalidOption&&(l.OPTIONS.invalidOption=e.MathJax.config.startup.invalidOption),e.MathJax.config.startup.optionError&&(l.OPTIONS.optionError=e.MathJax.config.startup.optionError)),e.CONFIG=e.MathJax.config.startup;var c=0!==e.CONFIG.input.length},3282:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.VERSION=void 0,e.VERSION="3.2.2"},5009:function(t,e){var r=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractDOMAdaptor=void 0;var n=function(){function t(t){void 0===t&&(t=null),this.document=t}return t.prototype.node=function(t,e,n,o){var i,Q;void 0===e&&(e={}),void 0===n&&(n=[]);var T=this.create(t,o);this.setAttributes(T,e);try{for(var s=r(n),a=s.next();!a.done;a=s.next()){var l=a.value;this.append(T,l)}}catch(t){i={error:t}}finally{try{a&&!a.done&&(Q=s.return)&&Q.call(s)}finally{if(i)throw i.error}}return T},t.prototype.setAttributes=function(t,e){var n,o,i,Q,T,s;if(e.style&&"string"!=typeof e.style)try{for(var a=r(Object.keys(e.style)),l=a.next();!l.done;l=a.next()){var c=l.value;this.setStyle(t,c.replace(/-([a-z])/g,(function(t,e){return e.toUpperCase()})),e.style[c])}}catch(t){n={error:t}}finally{try{l&&!l.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}if(e.properties)try{for(var u=r(Object.keys(e.properties)),p=u.next();!p.done;p=u.next()){t[c=p.value]=e.properties[c]}}catch(t){i={error:t}}finally{try{p&&!p.done&&(Q=u.return)&&Q.call(u)}finally{if(i)throw i.error}}try{for(var h=r(Object.keys(e)),d=h.next();!d.done;d=h.next()){"style"===(c=d.value)&&"string"!=typeof e.style||"properties"===c||this.setAttribute(t,c,e[c])}}catch(t){T={error:t}}finally{try{d&&!d.done&&(s=h.return)&&s.call(h)}finally{if(T)throw T.error}}},t.prototype.replace=function(t,e){return this.insert(t,e),this.remove(e),e},t.prototype.childNode=function(t,e){return this.childNodes(t)[e]},t.prototype.allClasses=function(t){var e=this.getAttribute(t,"class");return e?e.replace(/ +/g," ").replace(/^ /,"").replace(/ $/,"").split(/ /):[]},t}();e.AbstractDOMAdaptor=n},3494:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractFindMath=void 0;var n=r(7233),o=function(){function t(t){var e=this.constructor;this.options=(0,n.userOptions)((0,n.defaultOptions)({},e.OPTIONS),t)}return t.OPTIONS={},t}();e.AbstractFindMath=o},3670:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractHandler=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(r(5722).AbstractMathDocument),Q=function(){function t(t,e){void 0===e&&(e=5),this.documentClass=i,this.adaptor=t,this.priority=e}return Object.defineProperty(t.prototype,"name",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),t.prototype.handlesDocument=function(t){return!1},t.prototype.create=function(t,e){return new this.documentClass(t,this.adaptor,e)},t.NAME="generic",t}();e.AbstractHandler=Q},805:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.HandlerList=void 0;var Q=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.register=function(t){return this.add(t,t.priority)},e.prototype.unregister=function(t){this.remove(t)},e.prototype.handlesDocument=function(t){var e,r;try{for(var n=i(this),o=n.next();!o.done;o=n.next()){var Q=o.value.item;if(Q.handlesDocument(t))return Q}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}throw new Error("Can't find handler for document")},e.prototype.document=function(t,e){return void 0===e&&(e=null),this.handlesDocument(t).create(t,e)},e}(r(8666).PrioritizedList);e.HandlerList=Q},9206:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractInputJax=void 0;var n=r(7233),o=r(7525),i=function(){function t(t){void 0===t&&(t={}),this.adaptor=null,this.mmlFactory=null;var e=this.constructor;this.options=(0,n.userOptions)((0,n.defaultOptions)({},e.OPTIONS),t),this.preFilters=new o.FunctionList,this.postFilters=new o.FunctionList}return Object.defineProperty(t.prototype,"name",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),t.prototype.setAdaptor=function(t){this.adaptor=t},t.prototype.setMmlFactory=function(t){this.mmlFactory=t},t.prototype.initialize=function(){},t.prototype.reset=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e]},Object.defineProperty(t.prototype,"processStrings",{get:function(){return!0},enumerable:!1,configurable:!0}),t.prototype.findMath=function(t,e){return[]},t.prototype.executeFilters=function(t,e,r,n){var o={math:e,document:r,data:n};return t.execute(o),o.data},t.NAME="generic",t.OPTIONS={},t}();e.AbstractInputJax=i},5722:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},Q=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),Q=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)Q.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return Q},T=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))};Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractMathDocument=e.resetAllOptions=e.resetOptions=e.RenderList=void 0;var s=r(7233),a=r(9206),l=r(2975),c=r(9e3),u=r(4474),p=r(3909),h=r(6751),d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.create=function(t){var e,r,n=new this;try{for(var o=i(Object.keys(t)),T=o.next();!T.done;T=o.next()){var s=T.value,a=Q(this.action(s,t[s]),2),l=a[0],c=a[1];c&&n.add(l,c)}}catch(t){e={error:t}}finally{try{T&&!T.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return n},e.action=function(t,e){var r,n,o,i,T,s,a=!0,l=e[0];if(1===e.length||"boolean"==typeof e[1])2===e.length&&(a=e[1]),T=(r=Q(this.methodActions(t),2))[0],s=r[1];else if("string"==typeof e[1])if("string"==typeof e[2]){4===e.length&&(a=e[3]);var c=Q(e.slice(1),2),u=c[0],p=c[1];T=(n=Q(this.methodActions(u,p),2))[0],s=n[1]}else 3===e.length&&(a=e[2]),T=(o=Q(this.methodActions(e[1]),2))[0],s=o[1];else 4===e.length&&(a=e[3]),T=(i=Q(e.slice(1),2))[0],s=i[1];return[{id:t,renderDoc:T,renderMath:s,convert:a},l]},e.methodActions=function(t,e){return void 0===e&&(e=t),[function(e){return t&&e[t](),!1},function(t,r){return e&&t[e](r),!1}]},e.prototype.renderDoc=function(t,e){var r,n;void 0===e&&(e=u.STATE.UNPROCESSED);try{for(var o=i(this.items),Q=o.next();!Q.done;Q=o.next()){var T=Q.value;if(T.priority>=e&&T.item.renderDoc(t))return}}catch(t){r={error:t}}finally{try{Q&&!Q.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},e.prototype.renderMath=function(t,e,r){var n,o;void 0===r&&(r=u.STATE.UNPROCESSED);try{for(var Q=i(this.items),T=Q.next();!T.done;T=Q.next()){var s=T.value;if(s.priority>=r&&s.item.renderMath(t,e))return}}catch(t){n={error:t}}finally{try{T&&!T.done&&(o=Q.return)&&o.call(Q)}finally{if(n)throw n.error}}},e.prototype.renderConvert=function(t,e,r){var n,o;void 0===r&&(r=u.STATE.LAST);try{for(var Q=i(this.items),T=Q.next();!T.done;T=Q.next()){var s=T.value;if(s.priority>r)return;if(s.item.convert&&s.item.renderMath(t,e))return}}catch(t){n={error:t}}finally{try{T&&!T.done&&(o=Q.return)&&o.call(Q)}finally{if(n)throw n.error}}},e.prototype.findID=function(t){var e,r;try{for(var n=i(this.items),o=n.next();!o.done;o=n.next()){var Q=o.value;if(Q.item.id===t)return Q.item}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return null},e}(r(8666).PrioritizedList);e.RenderList=d,e.resetOptions={all:!1,processed:!1,inputJax:null,outputJax:null},e.resetAllOptions={all:!0,processed:!0,inputJax:[],outputJax:[]};var f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.compile=function(t){return null},e}(a.AbstractInputJax),L=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.typeset=function(t,e){return void 0===e&&(e=null),null},e.prototype.escaped=function(t,e){return null},e}(l.AbstractOutputJax),m=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(c.AbstractMathList),y=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(u.AbstractMathItem),H=function(){function t(e,r,n){var o=this,i=this.constructor;this.document=e,this.options=(0,s.userOptions)((0,s.defaultOptions)({},i.OPTIONS),n),this.math=new(this.options.MathList||m),this.renderActions=d.create(this.options.renderActions),this.processed=new t.ProcessBits,this.outputJax=this.options.OutputJax||new L;var Q=this.options.InputJax||[new f];Array.isArray(Q)||(Q=[Q]),this.inputJax=Q,this.adaptor=r,this.outputJax.setAdaptor(r),this.inputJax.map((function(t){return t.setAdaptor(r)})),this.mmlFactory=this.options.MmlFactory||new p.MmlFactory,this.inputJax.map((function(t){return t.setMmlFactory(o.mmlFactory)})),this.outputJax.initialize(),this.inputJax.map((function(t){return t.initialize()}))}return Object.defineProperty(t.prototype,"kind",{get:function(){return this.constructor.KIND},enumerable:!1,configurable:!0}),t.prototype.addRenderAction=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=Q(d.action(t,e),2),o=n[0],i=n[1];this.renderActions.add(o,i)},t.prototype.removeRenderAction=function(t){var e=this.renderActions.findID(t);e&&this.renderActions.remove(e)},t.prototype.render=function(){return this.renderActions.renderDoc(this),this},t.prototype.rerender=function(t){return void 0===t&&(t=u.STATE.RERENDER),this.state(t-1),this.render(),this},t.prototype.convert=function(t,e){void 0===e&&(e={});var r=(0,s.userOptions)({format:this.inputJax[0].name,display:!0,end:u.STATE.LAST,em:16,ex:8,containerWidth:null,lineWidth:1e6,scale:1,family:""},e),n=r.format,o=r.display,i=r.end,Q=r.ex,T=r.em,a=r.containerWidth,l=r.lineWidth,c=r.scale,p=r.family;null===a&&(a=80*Q);var h=this.inputJax.reduce((function(t,e){return e.name===n?e:t}),null),d=new this.options.MathItem(t,h,o);return d.start.node=this.adaptor.body(this.document),d.setMetrics(T,Q,a,l,c),this.outputJax.options.mtextInheritFont&&(d.outputData.mtextFamily=p),this.outputJax.options.merrorInheritFont&&(d.outputData.merrorFamily=p),d.convert(this,i),d.typesetRoot||d.root},t.prototype.findMath=function(t){return void 0===t&&(t=null),this.processed.set("findMath"),this},t.prototype.compile=function(){var t,e,r,n;if(!this.processed.isSet("compile")){var o=[];try{for(var Q=i(this.math),T=Q.next();!T.done;T=Q.next()){var s=T.value;this.compileMath(s),void 0!==s.inputData.recompile&&o.push(s)}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}try{for(var a=i(o),l=a.next();!l.done;l=a.next()){var c=(s=l.value).inputData.recompile;s.state(c.state),s.inputData.recompile=c,this.compileMath(s)}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}this.processed.set("compile")}return this},t.prototype.compileMath=function(t){try{t.compile(this)}catch(e){if(e.retry||e.restart)throw e;this.options.compileError(this,t,e),t.inputData.error=e}},t.prototype.compileError=function(t,e){t.root=this.mmlFactory.create("math",null,[this.mmlFactory.create("merror",{"data-mjx-error":e.message,title:e.message},[this.mmlFactory.create("mtext",null,[this.mmlFactory.create("text").setText("Math input error")])])]),t.display&&t.root.attributes.set("display","block"),t.inputData.error=e.message},t.prototype.typeset=function(){var t,e;if(!this.processed.isSet("typeset")){try{for(var r=i(this.math),n=r.next();!n.done;n=r.next()){var o=n.value;try{o.typeset(this)}catch(t){if(t.retry||t.restart)throw t;this.options.typesetError(this,o,t),o.outputData.error=t}}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}this.processed.set("typeset")}return this},t.prototype.typesetError=function(t,e){t.typesetRoot=this.adaptor.node("mjx-container",{class:"MathJax mjx-output-error",jax:this.outputJax.name},[this.adaptor.node("span",{"data-mjx-error":e.message,title:e.message,style:{color:"red","background-color":"yellow","line-height":"normal"}},[this.adaptor.text("Math output error")])]),t.display&&this.adaptor.setAttributes(t.typesetRoot,{style:{display:"block",margin:"1em 0","text-align":"center"}}),t.outputData.error=e.message},t.prototype.getMetrics=function(){return this.processed.isSet("getMetrics")||(this.outputJax.getMetrics(this),this.processed.set("getMetrics")),this},t.prototype.updateDocument=function(){var t,e;if(!this.processed.isSet("updateDocument")){try{for(var r=i(this.math.reversed()),n=r.next();!n.done;n=r.next()){n.value.updateDocument(this)}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}this.processed.set("updateDocument")}return this},t.prototype.removeFromDocument=function(t){return void 0===t&&(t=!1),this},t.prototype.state=function(t,e){var r,n;void 0===e&&(e=!1);try{for(var o=i(this.math),Q=o.next();!Q.done;Q=o.next()){Q.value.state(t,e)}}catch(t){r={error:t}}finally{try{Q&&!Q.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return t<u.STATE.INSERTED&&this.processed.clear("updateDocument"),t<u.STATE.TYPESET&&(this.processed.clear("typeset"),this.processed.clear("getMetrics")),t<u.STATE.COMPILED&&this.processed.clear("compile"),this},t.prototype.reset=function(t){var r;return void 0===t&&(t={processed:!0}),(t=(0,s.userOptions)(Object.assign({},e.resetOptions),t)).all&&Object.assign(t,e.resetAllOptions),t.processed&&this.processed.reset(),t.inputJax&&this.inputJax.forEach((function(e){return e.reset.apply(e,T([],Q(t.inputJax),!1))})),t.outputJax&&(r=this.outputJax).reset.apply(r,T([],Q(t.outputJax),!1)),this},t.prototype.clear=function(){return this.reset(),this.math.clear(),this},t.prototype.concat=function(t){return this.math.merge(t),this},t.prototype.clearMathItemsWithin=function(t){var e,r=this.getMathItemsWithin(t);return(e=this.math).remove.apply(e,T([],Q(r),!1)),r},t.prototype.getMathItemsWithin=function(t){var e,r,n,o;Array.isArray(t)||(t=[t]);var Q=this.adaptor,T=[],s=Q.getElements(t,this.document);try{t:for(var a=i(this.math),l=a.next();!l.done;l=a.next()){var c=l.value;try{for(var u=(n=void 0,i(s)),p=u.next();!p.done;p=u.next()){var h=p.value;if(c.start.node&&Q.contains(h,c.start.node)){T.push(c);continue t}}}catch(t){n={error:t}}finally{try{p&&!p.done&&(o=u.return)&&o.call(u)}finally{if(n)throw n.error}}}}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return T},t.KIND="MathDocument",t.OPTIONS={OutputJax:null,InputJax:null,MmlFactory:null,MathList:m,MathItem:y,compileError:function(t,e,r){t.compileError(e,r)},typesetError:function(t,e,r){t.typesetError(e,r)},renderActions:(0,s.expandable)({find:[u.STATE.FINDMATH,"findMath","",!1],compile:[u.STATE.COMPILED],metrics:[u.STATE.METRICS,"getMetrics","",!1],typeset:[u.STATE.TYPESET],update:[u.STATE.INSERTED,"updateDocument",!1]})},t.ProcessBits=(0,h.BitFieldClass)("findMath","compile","getMetrics","typeset","updateDocument"),t}();e.AbstractMathDocument=H},4474:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.newState=e.STATE=e.AbstractMathItem=e.protoItem=void 0,e.protoItem=function(t,e,r,n,o,i,Q){return void 0===Q&&(Q=null),{open:t,math:e,close:r,n:n,start:{n:o},end:{n:i},display:Q}};var r=function(){function t(t,r,n,o,i){void 0===n&&(n=!0),void 0===o&&(o={i:0,n:0,delim:""}),void 0===i&&(i={i:0,n:0,delim:""}),this.root=null,this.typesetRoot=null,this.metrics={},this.inputData={},this.outputData={},this._state=e.STATE.UNPROCESSED,this.math=t,this.inputJax=r,this.display=n,this.start=o,this.end=i,this.root=null,this.typesetRoot=null,this.metrics={},this.inputData={},this.outputData={}}return Object.defineProperty(t.prototype,"isEscaped",{get:function(){return null===this.display},enumerable:!1,configurable:!0}),t.prototype.render=function(t){t.renderActions.renderMath(this,t)},t.prototype.rerender=function(t,r){void 0===r&&(r=e.STATE.RERENDER),this.state()>=r&&this.state(r-1),t.renderActions.renderMath(this,t,r)},t.prototype.convert=function(t,r){void 0===r&&(r=e.STATE.LAST),t.renderActions.renderConvert(this,t,r)},t.prototype.compile=function(t){this.state()<e.STATE.COMPILED&&(this.root=this.inputJax.compile(this,t),this.state(e.STATE.COMPILED))},t.prototype.typeset=function(t){this.state()<e.STATE.TYPESET&&(this.typesetRoot=t.outputJax[this.isEscaped?"escaped":"typeset"](this,t),this.state(e.STATE.TYPESET))},t.prototype.updateDocument=function(t){},t.prototype.removeFromDocument=function(t){void 0===t&&(t=!1)},t.prototype.setMetrics=function(t,e,r,n,o){this.metrics={em:t,ex:e,containerWidth:r,lineWidth:n,scale:o}},t.prototype.state=function(t,r){return void 0===t&&(t=null),void 0===r&&(r=!1),null!=t&&(t<e.STATE.INSERTED&&this._state>=e.STATE.INSERTED&&this.removeFromDocument(r),t<e.STATE.TYPESET&&this._state>=e.STATE.TYPESET&&(this.outputData={}),t<e.STATE.COMPILED&&this._state>=e.STATE.COMPILED&&(this.inputData={}),this._state=t),this._state},t.prototype.reset=function(t){void 0===t&&(t=!1),this.state(e.STATE.UNPROCESSED,t)},t}();e.AbstractMathItem=r,e.STATE={UNPROCESSED:0,FINDMATH:10,COMPILED:20,CONVERT:100,METRICS:110,RERENDER:125,TYPESET:150,INSERTED:200,LAST:1e4},e.newState=function(t,r){if(t in e.STATE)throw Error("State "+t+" already exists");e.STATE[t]=r}},9e3:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractMathList=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.isBefore=function(t,e){return t.start.i<e.start.i||t.start.i===e.start.i&&t.start.n<e.start.n},e}(r(103).LinkedList);e.AbstractMathList=i},91:function(t,e){var r=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.Attributes=e.INHERIT=void 0,e.INHERIT="_inherit_";var n=function(){function t(t,e){this.global=e,this.defaults=Object.create(e),this.inherited=Object.create(this.defaults),this.attributes=Object.create(this.inherited),Object.assign(this.defaults,t)}return t.prototype.set=function(t,e){this.attributes[t]=e},t.prototype.setList=function(t){Object.assign(this.attributes,t)},t.prototype.get=function(t){var r=this.attributes[t];return r===e.INHERIT&&(r=this.global[t]),r},t.prototype.getExplicit=function(t){if(this.attributes.hasOwnProperty(t))return this.attributes[t]},t.prototype.getList=function(){for(var t,e,n=[],o=0;o<arguments.length;o++)n[o]=arguments[o];var i={};try{for(var Q=r(n),T=Q.next();!T.done;T=Q.next()){var s=T.value;i[s]=this.get(s)}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}return i},t.prototype.setInherited=function(t,e){this.inherited[t]=e},t.prototype.getInherited=function(t){return this.inherited[t]},t.prototype.getDefault=function(t){return this.defaults[t]},t.prototype.isSet=function(t){return this.attributes.hasOwnProperty(t)||this.inherited.hasOwnProperty(t)},t.prototype.hasDefault=function(t){return t in this.defaults},t.prototype.getExplicitNames=function(){return Object.keys(this.attributes)},t.prototype.getInheritedNames=function(){return Object.keys(this.inherited)},t.prototype.getDefaultNames=function(){return Object.keys(this.defaults)},t.prototype.getGlobalNames=function(){return Object.keys(this.global)},t.prototype.getAllAttributes=function(){return this.attributes},t.prototype.getAllInherited=function(){return this.inherited},t.prototype.getAllDefaults=function(){return this.defaults},t.prototype.getAllGlobals=function(){return this.global},t}();e.Attributes=n},6336:function(t,e,r){var n;Object.defineProperty(e,"__esModule",{value:!0}),e.MML=void 0;var o=r(9007),i=r(3233),Q=r(450),T=r(3050),s=r(2756),a=r(4770),l=r(6030),c=r(7265),u=r(9878),p=r(6850),h=r(7131),d=r(6145),f=r(1314),L=r(1581),m=r(7238),y=r(5741),H=r(5410),g=r(6661),b=r(9145),v=r(4461),M=r(5184),_=r(6405),V=r(1349),O=r(5022),S=r(4359),E=r(142),x=r(7590),A=r(3985),C=r(9102),N=r(3948),w=r(1334);e.MML=((n={})[i.MmlMath.prototype.kind]=i.MmlMath,n[Q.MmlMi.prototype.kind]=Q.MmlMi,n[T.MmlMn.prototype.kind]=T.MmlMn,n[s.MmlMo.prototype.kind]=s.MmlMo,n[a.MmlMtext.prototype.kind]=a.MmlMtext,n[l.MmlMspace.prototype.kind]=l.MmlMspace,n[c.MmlMs.prototype.kind]=c.MmlMs,n[u.MmlMrow.prototype.kind]=u.MmlMrow,n[u.MmlInferredMrow.prototype.kind]=u.MmlInferredMrow,n[p.MmlMfrac.prototype.kind]=p.MmlMfrac,n[h.MmlMsqrt.prototype.kind]=h.MmlMsqrt,n[d.MmlMroot.prototype.kind]=d.MmlMroot,n[f.MmlMstyle.prototype.kind]=f.MmlMstyle,n[L.MmlMerror.prototype.kind]=L.MmlMerror,n[m.MmlMpadded.prototype.kind]=m.MmlMpadded,n[y.MmlMphantom.prototype.kind]=y.MmlMphantom,n[H.MmlMfenced.prototype.kind]=H.MmlMfenced,n[g.MmlMenclose.prototype.kind]=g.MmlMenclose,n[b.MmlMaction.prototype.kind]=b.MmlMaction,n[v.MmlMsub.prototype.kind]=v.MmlMsub,n[v.MmlMsup.prototype.kind]=v.MmlMsup,n[v.MmlMsubsup.prototype.kind]=v.MmlMsubsup,n[M.MmlMunder.prototype.kind]=M.MmlMunder,n[M.MmlMover.prototype.kind]=M.MmlMover,n[M.MmlMunderover.prototype.kind]=M.MmlMunderover,n[_.MmlMmultiscripts.prototype.kind]=_.MmlMmultiscripts,n[_.MmlMprescripts.prototype.kind]=_.MmlMprescripts,n[_.MmlNone.prototype.kind]=_.MmlNone,n[V.MmlMtable.prototype.kind]=V.MmlMtable,n[O.MmlMlabeledtr.prototype.kind]=O.MmlMlabeledtr,n[O.MmlMtr.prototype.kind]=O.MmlMtr,n[S.MmlMtd.prototype.kind]=S.MmlMtd,n[E.MmlMaligngroup.prototype.kind]=E.MmlMaligngroup,n[x.MmlMalignmark.prototype.kind]=x.MmlMalignmark,n[A.MmlMglyph.prototype.kind]=A.MmlMglyph,n[C.MmlSemantics.prototype.kind]=C.MmlSemantics,n[C.MmlAnnotation.prototype.kind]=C.MmlAnnotation,n[C.MmlAnnotationXML.prototype.kind]=C.MmlAnnotationXML,n[N.TeXAtom.prototype.kind]=N.TeXAtom,n[w.MathChoice.prototype.kind]=w.MathChoice,n[o.TextNode.prototype.kind]=o.TextNode,n[o.XMLNode.prototype.kind]=o.XMLNode,n)},1759:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MathMLVisitor=void 0;var Q=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.document=null,e}return o(e,t),e.prototype.visitTree=function(t,e){this.document=e;var r=e.createElement("top");return this.visitNode(t,r),this.document=null,r.firstChild},e.prototype.visitTextNode=function(t,e){e.appendChild(this.document.createTextNode(t.getText()))},e.prototype.visitXMLNode=function(t,e){e.appendChild(t.getXML().cloneNode(!0))},e.prototype.visitInferredMrowNode=function(t,e){var r,n;try{for(var o=i(t.childNodes),Q=o.next();!Q.done;Q=o.next()){var T=Q.value;this.visitNode(T,e)}}catch(t){r={error:t}}finally{try{Q&&!Q.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},e.prototype.visitDefault=function(t,e){var r,n,o=this.document.createElement(t.kind);this.addAttributes(t,o);try{for(var Q=i(t.childNodes),T=Q.next();!T.done;T=Q.next()){var s=T.value;this.visitNode(s,o)}}catch(t){r={error:t}}finally{try{T&&!T.done&&(n=Q.return)&&n.call(Q)}finally{if(r)throw r.error}}e.appendChild(o)},e.prototype.addAttributes=function(t,e){var r,n,o=t.attributes,Q=o.getExplicitNames();try{for(var T=i(Q),s=T.next();!s.done;s=T.next()){var a=s.value;e.setAttribute(a,o.getExplicit(a).toString())}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=T.return)&&n.call(T)}finally{if(r)throw r.error}}},e}(r(6325).MmlVisitor);e.MathMLVisitor=Q},3909:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.MmlFactory=void 0;var i=r(7860),Q=r(6336),T=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"MML",{get:function(){return this.node},enumerable:!1,configurable:!0}),e.defaultNodes=Q.MML,e}(i.AbstractNodeFactory);e.MmlFactory=T},9007:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},Q=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},T=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),Q=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)Q.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return Q};Object.defineProperty(e,"__esModule",{value:!0}),e.XMLNode=e.TextNode=e.AbstractMmlEmptyNode=e.AbstractMmlBaseNode=e.AbstractMmlLayoutNode=e.AbstractMmlTokenNode=e.AbstractMmlNode=e.indentAttributes=e.TEXCLASSNAMES=e.TEXCLASS=void 0;var s=r(91),a=r(4596);e.TEXCLASS={ORD:0,OP:1,BIN:2,REL:3,OPEN:4,CLOSE:5,PUNCT:6,INNER:7,VCENTER:8,NONE:-1},e.TEXCLASSNAMES=["ORD","OP","BIN","REL","OPEN","CLOSE","PUNCT","INNER","VCENTER"];var l=["","thinmathspace","mediummathspace","thickmathspace"],c=[[0,-1,2,3,0,0,0,1],[-1,-1,0,3,0,0,0,1],[2,2,0,0,2,0,0,2],[3,3,0,0,3,0,0,3],[0,0,0,0,0,0,0,0],[0,-1,2,3,0,0,0,1],[1,1,0,1,1,1,1,1],[1,-1,2,3,1,0,1,1]];e.indentAttributes=["indentalign","indentalignfirst","indentshift","indentshiftfirst"];var u=function(t){function r(e,r,n){void 0===r&&(r={}),void 0===n&&(n=[]);var o=t.call(this,e)||this;return o.prevClass=null,o.prevLevel=null,o.texclass=null,o.arity<0&&(o.childNodes=[e.create("inferredMrow")],o.childNodes[0].parent=o),o.setChildren(n),o.attributes=new s.Attributes(e.getNodeClass(o.kind).defaults,e.getNodeClass("math").defaults),o.attributes.setList(r),o}return o(r,t),r.prototype.copy=function(t){var e,r,n,o;void 0===t&&(t=!1);var T=this.factory.create(this.kind);if(T.properties=i({},this.properties),this.attributes){var s=this.attributes.getAllAttributes();try{for(var a=Q(Object.keys(s)),l=a.next();!l.done;l=a.next()){var c=l.value;("id"!==c||t)&&T.attributes.set(c,s[c])}}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}}if(this.childNodes&&this.childNodes.length){var u=this.childNodes;1===u.length&&u[0].isInferred&&(u=u[0].childNodes);try{for(var p=Q(u),h=p.next();!h.done;h=p.next()){var d=h.value;d?T.appendChild(d.copy()):T.childNodes.push(null)}}catch(t){n={error:t}}finally{try{h&&!h.done&&(o=p.return)&&o.call(p)}finally{if(n)throw n.error}}}return T},Object.defineProperty(r.prototype,"texClass",{get:function(){return this.texclass},set:function(t){this.texclass=t},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isToken",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isEmbellished",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isSpacelike",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"linebreakContainer",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"hasNewLine",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"arity",{get:function(){return 1/0},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isInferred",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"Parent",{get:function(){for(var t=this.parent;t&&t.notParent;)t=t.Parent;return t},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"notParent",{get:function(){return!1},enumerable:!1,configurable:!0}),r.prototype.setChildren=function(e){return this.arity<0?this.childNodes[0].setChildren(e):t.prototype.setChildren.call(this,e)},r.prototype.appendChild=function(e){var r,n,o=this;if(this.arity<0)return this.childNodes[0].appendChild(e),e;if(e.isInferred){if(this.arity===1/0)return e.childNodes.forEach((function(e){return t.prototype.appendChild.call(o,e)})),e;var i=e;(e=this.factory.create("mrow")).setChildren(i.childNodes),e.attributes=i.attributes;try{for(var T=Q(i.getPropertyNames()),s=T.next();!s.done;s=T.next()){var a=s.value;e.setProperty(a,i.getProperty(a))}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=T.return)&&n.call(T)}finally{if(r)throw r.error}}}return t.prototype.appendChild.call(this,e)},r.prototype.replaceChild=function(e,r){return this.arity<0?(this.childNodes[0].replaceChild(e,r),e):t.prototype.replaceChild.call(this,e,r)},r.prototype.core=function(){return this},r.prototype.coreMO=function(){return this},r.prototype.coreIndex=function(){return 0},r.prototype.childPosition=function(){for(var t,e,r=this,n=r.parent;n&&n.notParent;)r=n,n=n.parent;if(n){var o=0;try{for(var i=Q(n.childNodes),T=i.next();!T.done;T=i.next()){if(T.value===r)return o;o++}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}}return null},r.prototype.setTeXclass=function(t){return this.getPrevClass(t),null!=this.texClass?this:t},r.prototype.updateTeXclass=function(t){t&&(this.prevClass=t.prevClass,this.prevLevel=t.prevLevel,t.prevClass=t.prevLevel=null,this.texClass=t.texClass)},r.prototype.getPrevClass=function(t){t&&(this.prevClass=t.texClass,this.prevLevel=t.attributes.get("scriptlevel"))},r.prototype.texSpacing=function(){var t=null!=this.prevClass?this.prevClass:e.TEXCLASS.NONE,r=this.texClass||e.TEXCLASS.ORD;if(t===e.TEXCLASS.NONE||r===e.TEXCLASS.NONE)return"";t===e.TEXCLASS.VCENTER&&(t=e.TEXCLASS.ORD),r===e.TEXCLASS.VCENTER&&(r=e.TEXCLASS.ORD);var n=c[t][r];return(this.prevLevel>0||this.attributes.get("scriptlevel")>0)&&n>=0?"":l[Math.abs(n)]},r.prototype.hasSpacingAttributes=function(){return this.isEmbellished&&this.coreMO().hasSpacingAttributes()},r.prototype.setInheritedAttributes=function(t,e,n,o){var i,s;void 0===t&&(t={}),void 0===e&&(e=!1),void 0===n&&(n=0),void 0===o&&(o=!1);var a=this.attributes.getAllDefaults();try{for(var l=Q(Object.keys(t)),c=l.next();!c.done;c=l.next()){var u=c.value;if(a.hasOwnProperty(u)||r.alwaysInherit.hasOwnProperty(u)){var p=T(t[u],2),h=p[0],d=p[1];((r.noInherit[h]||{})[this.kind]||{})[u]||this.attributes.setInherited(u,d)}}}catch(t){i={error:t}}finally{try{c&&!c.done&&(s=l.return)&&s.call(l)}finally{if(i)throw i.error}}void 0===this.attributes.getExplicit("displaystyle")&&this.attributes.setInherited("displaystyle",e),void 0===this.attributes.getExplicit("scriptlevel")&&this.attributes.setInherited("scriptlevel",n),o&&this.setProperty("texprimestyle",o);var f=this.arity;if(f>=0&&f!==1/0&&(1===f&&0===this.childNodes.length||1!==f&&this.childNodes.length!==f))if(f<this.childNodes.length)this.childNodes=this.childNodes.slice(0,f);else for(;this.childNodes.length<f;)this.appendChild(this.factory.create("mrow"));this.setChildInheritedAttributes(t,e,n,o)},r.prototype.setChildInheritedAttributes=function(t,e,r,n){var o,i;try{for(var T=Q(this.childNodes),s=T.next();!s.done;s=T.next()){s.value.setInheritedAttributes(t,e,r,n)}}catch(t){o={error:t}}finally{try{s&&!s.done&&(i=T.return)&&i.call(T)}finally{if(o)throw o.error}}},r.prototype.addInheritedAttributes=function(t,e){var r,n,o=i({},t);try{for(var T=Q(Object.keys(e)),s=T.next();!s.done;s=T.next()){var a=s.value;"displaystyle"!==a&&"scriptlevel"!==a&&"style"!==a&&(o[a]=[this.kind,e[a]])}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=T.return)&&n.call(T)}finally{if(r)throw r.error}}return o},r.prototype.inheritAttributesFrom=function(t){var e=t.attributes,r=e.get("displaystyle"),n=e.get("scriptlevel"),o=e.isSet("mathsize")?{mathsize:["math",e.get("mathsize")]}:{},i=t.getProperty("texprimestyle")||!1;this.setInheritedAttributes(o,r,n,i)},r.prototype.verifyTree=function(t){if(void 0===t&&(t=null),null!==t){this.verifyAttributes(t);var e=this.arity;t.checkArity&&e>=0&&e!==1/0&&(1===e&&0===this.childNodes.length||1!==e&&this.childNodes.length!==e)&&this.mError('Wrong number of children for "'+this.kind+'" node',t,!0),this.verifyChildren(t)}},r.prototype.verifyAttributes=function(t){var e,r;if(t.checkAttributes){var n=this.attributes,o=[];try{for(var i=Q(n.getExplicitNames()),T=i.next();!T.done;T=i.next()){var s=T.value;"data-"===s.substr(0,5)||void 0!==n.getDefault(s)||s.match(/^(?:class|style|id|(?:xlink:)?href)$/)||o.push(s)}}catch(t){e={error:t}}finally{try{T&&!T.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}o.length&&this.mError("Unknown attributes for "+this.kind+" node: "+o.join(", "),t)}},r.prototype.verifyChildren=function(t){var e,r;try{for(var n=Q(this.childNodes),o=n.next();!o.done;o=n.next()){o.value.verifyTree(t)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},r.prototype.mError=function(t,e,r){if(void 0===r&&(r=!1),this.parent&&this.parent.isKind("merror"))return null;var n=this.factory.create("merror");if(n.attributes.set("data-mjx-message",t),e.fullErrors||r){var o=this.factory.create("mtext"),i=this.factory.create("text");i.setText(e.fullErrors?t:this.kind),o.appendChild(i),n.appendChild(o),this.parent.replaceChild(n,this)}else this.parent.replaceChild(n,this),n.appendChild(this);return n},r.defaults={mathbackground:s.INHERIT,mathcolor:s.INHERIT,mathsize:s.INHERIT,dir:s.INHERIT},r.noInherit={mstyle:{mpadded:{width:!0,height:!0,depth:!0,lspace:!0,voffset:!0},mtable:{width:!0,height:!0,depth:!0,align:!0}},maligngroup:{mrow:{groupalign:!0},mtable:{groupalign:!0}}},r.alwaysInherit={scriptminsize:!0,scriptsizemultiplier:!0},r.verifyDefaults={checkArity:!0,checkAttributes:!1,fullErrors:!1,fixMmultiscripts:!0,fixMtables:!0},r}(a.AbstractNode);e.AbstractMmlNode=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"isToken",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.getText=function(){var t,e,r="";try{for(var n=Q(this.childNodes),o=n.next();!o.done;o=n.next()){var i=o.value;i instanceof L&&(r+=i.getText())}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return r},e.prototype.setChildInheritedAttributes=function(t,e,r,n){var o,i;try{for(var T=Q(this.childNodes),s=T.next();!s.done;s=T.next()){var a=s.value;a instanceof u&&a.setInheritedAttributes(t,e,r,n)}}catch(t){o={error:t}}finally{try{s&&!s.done&&(i=T.return)&&i.call(T)}finally{if(o)throw o.error}}},e.prototype.walkTree=function(t,e){var r,n;t(this,e);try{for(var o=Q(this.childNodes),i=o.next();!i.done;i=o.next()){var T=i.value;T instanceof u&&T.walkTree(t,e)}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return e},e.defaults=i(i({},u.defaults),{mathvariant:"normal",mathsize:s.INHERIT}),e}(u);e.AbstractMmlTokenNode=p;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"isSpacelike",{get:function(){return this.childNodes[0].isSpacelike},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isEmbellished",{get:function(){return this.childNodes[0].isEmbellished},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return-1},enumerable:!1,configurable:!0}),e.prototype.core=function(){return this.childNodes[0]},e.prototype.coreMO=function(){return this.childNodes[0].coreMO()},e.prototype.setTeXclass=function(t){return t=this.childNodes[0].setTeXclass(t),this.updateTeXclass(this.childNodes[0]),t},e.defaults=u.defaults,e}(u);e.AbstractMmlLayoutNode=h;var d=function(t){function r(){return null!==t&&t.apply(this,arguments)||this}return o(r,t),Object.defineProperty(r.prototype,"isEmbellished",{get:function(){return this.childNodes[0].isEmbellished},enumerable:!1,configurable:!0}),r.prototype.core=function(){return this.childNodes[0]},r.prototype.coreMO=function(){return this.childNodes[0].coreMO()},r.prototype.setTeXclass=function(t){var r,n;this.getPrevClass(t),this.texClass=e.TEXCLASS.ORD;var o=this.childNodes[0];o?this.isEmbellished||o.isKind("mi")?(t=o.setTeXclass(t),this.updateTeXclass(this.core())):(o.setTeXclass(null),t=this):t=this;try{for(var i=Q(this.childNodes.slice(1)),T=i.next();!T.done;T=i.next()){var s=T.value;s&&s.setTeXclass(null)}}catch(t){r={error:t}}finally{try{T&&!T.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return t},r.defaults=u.defaults,r}(u);e.AbstractMmlBaseNode=d;var f=function(t){function r(){return null!==t&&t.apply(this,arguments)||this}return o(r,t),Object.defineProperty(r.prototype,"isToken",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isEmbellished",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isSpacelike",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"linebreakContainer",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"hasNewLine",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"arity",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isInferred",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"notParent",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"Parent",{get:function(){return this.parent},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"texClass",{get:function(){return e.TEXCLASS.NONE},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"prevClass",{get:function(){return e.TEXCLASS.NONE},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"prevLevel",{get:function(){return 0},enumerable:!1,configurable:!0}),r.prototype.hasSpacingAttributes=function(){return!1},Object.defineProperty(r.prototype,"attributes",{get:function(){return null},enumerable:!1,configurable:!0}),r.prototype.core=function(){return this},r.prototype.coreMO=function(){return this},r.prototype.coreIndex=function(){return 0},r.prototype.childPosition=function(){return 0},r.prototype.setTeXclass=function(t){return t},r.prototype.texSpacing=function(){return""},r.prototype.setInheritedAttributes=function(t,e,r,n){},r.prototype.inheritAttributesFrom=function(t){},r.prototype.verifyTree=function(t){},r.prototype.mError=function(t,e,r){return void 0===r&&(r=!1),null},r}(a.AbstractEmptyNode);e.AbstractMmlEmptyNode=f;var L=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.text="",e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"text"},enumerable:!1,configurable:!0}),e.prototype.getText=function(){return this.text},e.prototype.setText=function(t){return this.text=t,this},e.prototype.copy=function(){return this.factory.create(this.kind).setText(this.getText())},e.prototype.toString=function(){return this.text},e}(f);e.TextNode=L;var m=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.xml=null,e.adaptor=null,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"XML"},enumerable:!1,configurable:!0}),e.prototype.getXML=function(){return this.xml},e.prototype.setXML=function(t,e){return void 0===e&&(e=null),this.xml=t,this.adaptor=e,this},e.prototype.getSerializedXML=function(){return this.adaptor.serializeXML(this.xml)},e.prototype.copy=function(){return this.factory.create(this.kind).setXML(this.adaptor.clone(this.xml))},e.prototype.toString=function(){return"XML data"},e}(f);e.XMLNode=m},3948:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.TeXAtom=void 0;var Q=r(9007),T=r(2756),s=function(t){function e(e,r,n){var o=t.call(this,e,r,n)||this;return o.texclass=Q.TEXCLASS.ORD,o.setProperty("texClass",o.texClass),o}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"TeXAtom"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return-1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"notParent",{get:function(){return this.childNodes[0]&&1===this.childNodes[0].childNodes.length},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){return this.childNodes[0].setTeXclass(null),this.adjustTeXclass(t)},e.prototype.adjustTeXclass=function(t){return t},e.defaults=i({},Q.AbstractMmlBaseNode.defaults),e}(Q.AbstractMmlBaseNode);e.TeXAtom=s,s.prototype.adjustTeXclass=T.MmlMo.prototype.adjustTeXclass},9145:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMaction=void 0;var Q=r(9007),T=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"maction"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"selected",{get:function(){var t=this.attributes.get("selection"),e=Math.max(1,Math.min(this.childNodes.length,t))-1;return this.childNodes[e]||this.factory.create("mrow")},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isEmbellished",{get:function(){return this.selected.isEmbellished},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isSpacelike",{get:function(){return this.selected.isSpacelike},enumerable:!1,configurable:!0}),e.prototype.core=function(){return this.selected.core()},e.prototype.coreMO=function(){return this.selected.coreMO()},e.prototype.verifyAttributes=function(e){(t.prototype.verifyAttributes.call(this,e),"toggle"!==this.attributes.get("actiontype")&&void 0!==this.attributes.getExplicit("selection"))&&delete this.attributes.getAllAttributes().selection},e.prototype.setTeXclass=function(t){"tooltip"===this.attributes.get("actiontype")&&this.childNodes[1]&&this.childNodes[1].setTeXclass(null);var e=this.selected;return t=e.setTeXclass(t),this.updateTeXclass(e),t},e.prototype.nextToggleSelection=function(){var t=Math.max(1,this.attributes.get("selection")+1);t>this.childNodes.length&&(t=1),this.attributes.set("selection",t)},e.defaults=i(i({},Q.AbstractMmlNode.defaults),{actiontype:"toggle",selection:1}),e}(Q.AbstractMmlNode);e.MmlMaction=T},142:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMaligngroup=void 0;var Q=r(9007),T=r(91),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"maligngroup"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isSpacelike",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(e,r,n,o){e=this.addInheritedAttributes(e,this.attributes.getAllAttributes()),t.prototype.setChildInheritedAttributes.call(this,e,r,n,o)},e.defaults=i(i({},Q.AbstractMmlLayoutNode.defaults),{groupalign:T.INHERIT}),e}(Q.AbstractMmlLayoutNode);e.MmlMaligngroup=s},7590:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMalignmark=void 0;var Q=r(9007),T=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"malignmark"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isSpacelike",{get:function(){return!0},enumerable:!1,configurable:!0}),e.defaults=i(i({},Q.AbstractMmlNode.defaults),{edge:"left"}),e}(Q.AbstractMmlNode);e.MmlMalignmark=T},3233:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMath=void 0;var Q=r(9007),T=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"math"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"linebreakContainer",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(e,r,n,o){"display"===this.attributes.get("mode")&&this.attributes.setInherited("display","block"),e=this.addInheritedAttributes(e,this.attributes.getAllAttributes()),r=!!this.attributes.get("displaystyle")||!this.attributes.get("displaystyle")&&"block"===this.attributes.get("display"),this.attributes.setInherited("displaystyle",r),n=this.attributes.get("scriptlevel")||this.constructor.defaults.scriptlevel,t.prototype.setChildInheritedAttributes.call(this,e,r,n,o)},e.defaults=i(i({},Q.AbstractMmlLayoutNode.defaults),{mathvariant:"normal",mathsize:"normal",mathcolor:"",mathbackground:"transparent",dir:"ltr",scriptlevel:0,displaystyle:!1,display:"inline",maxwidth:"",overflow:"linebreak",altimg:"","altimg-width":"","altimg-height":"","altimg-valign":"",alttext:"",cdgroup:"",scriptsizemultiplier:1/Math.sqrt(2),scriptminsize:"8px",infixlinebreakstyle:"before",lineleading:"1ex",linebreakmultchar:"\u2062",indentshift:"auto",indentalign:"auto",indenttarget:"",indentalignfirst:"indentalign",indentshiftfirst:"indentshift",indentalignlast:"indentalign",indentshiftlast:"indentshift"}),e}(Q.AbstractMmlLayoutNode);e.MmlMath=T},1334:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MathChoice=void 0;var Q=r(9007),T=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"MathChoice"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return 4},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"notParent",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setInheritedAttributes=function(t,e,r,n){var o=e?0:Math.max(0,Math.min(r,2))+1,i=this.childNodes[o]||this.factory.create("mrow");this.parent.replaceChild(i,this),i.setInheritedAttributes(t,e,r,n)},e.defaults=i({},Q.AbstractMmlBaseNode.defaults),e}(Q.AbstractMmlBaseNode);e.MathChoice=T},6661:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMenclose=void 0;var Q=r(9007),T=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texclass=Q.TEXCLASS.ORD,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"menclose"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return-1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"linebreakContininer",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){return t=this.childNodes[0].setTeXclass(t),this.updateTeXclass(this.childNodes[0]),t},e.defaults=i(i({},Q.AbstractMmlNode.defaults),{notation:"longdiv"}),e}(Q.AbstractMmlNode);e.MmlMenclose=T},1581:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMerror=void 0;var Q=r(9007),T=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texclass=Q.TEXCLASS.ORD,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"merror"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return-1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"linebreakContainer",{get:function(){return!0},enumerable:!1,configurable:!0}),e.defaults=i({},Q.AbstractMmlNode.defaults),e}(Q.AbstractMmlNode);e.MmlMerror=T},5410:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},Q=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMfenced=void 0;var T=r(9007),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texclass=T.TEXCLASS.INNER,e.separators=[],e.open=null,e.close=null,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mfenced"},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){this.getPrevClass(t),this.open&&(t=this.open.setTeXclass(t)),this.childNodes[0]&&(t=this.childNodes[0].setTeXclass(t));for(var e=1,r=this.childNodes.length;e<r;e++)this.separators[e-1]&&(t=this.separators[e-1].setTeXclass(t)),this.childNodes[e]&&(t=this.childNodes[e].setTeXclass(t));return this.close&&(t=this.close.setTeXclass(t)),this.updateTeXclass(this.open),t},e.prototype.setChildInheritedAttributes=function(e,r,n,o){var i,T;this.addFakeNodes();try{for(var s=Q([this.open,this.close].concat(this.separators)),a=s.next();!a.done;a=s.next()){var l=a.value;l&&l.setInheritedAttributes(e,r,n,o)}}catch(t){i={error:t}}finally{try{a&&!a.done&&(T=s.return)&&T.call(s)}finally{if(i)throw i.error}}t.prototype.setChildInheritedAttributes.call(this,e,r,n,o)},e.prototype.addFakeNodes=function(){var t,e,r=this.attributes.getList("open","close","separators"),n=r.open,o=r.close,i=r.separators;if(n=n.replace(/[ \t\n\r]/g,""),o=o.replace(/[ \t\n\r]/g,""),i=i.replace(/[ \t\n\r]/g,""),n&&(this.open=this.fakeNode(n,{fence:!0,form:"prefix"},T.TEXCLASS.OPEN)),i){for(;i.length<this.childNodes.length-1;)i+=i.charAt(i.length-1);var s=0;try{for(var a=Q(this.childNodes.slice(1)),l=a.next();!l.done;l=a.next()){l.value&&this.separators.push(this.fakeNode(i.charAt(s++)))}}catch(e){t={error:e}}finally{try{l&&!l.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}}o&&(this.close=this.fakeNode(o,{fence:!0,form:"postfix"},T.TEXCLASS.CLOSE))},e.prototype.fakeNode=function(t,e,r){void 0===e&&(e={}),void 0===r&&(r=null);var n=this.factory.create("text").setText(t),o=this.factory.create("mo",e,[n]);return o.texClass=r,o.parent=this,o},e.defaults=i(i({},T.AbstractMmlNode.defaults),{open:"(",close:")",separators:","}),e}(T.AbstractMmlNode);e.MmlMfenced=s},6850:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},Q=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMfrac=void 0;var T=r(9007),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mfrac"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"linebreakContainer",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){var e,r;this.getPrevClass(t);try{for(var n=Q(this.childNodes),o=n.next();!o.done;o=n.next()){o.value.setTeXclass(null)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this},e.prototype.setChildInheritedAttributes=function(t,e,r,n){(!e||r>0)&&r++,this.childNodes[0].setInheritedAttributes(t,!1,r,n),this.childNodes[1].setInheritedAttributes(t,!1,r,!0)},e.defaults=i(i({},T.AbstractMmlBaseNode.defaults),{linethickness:"medium",numalign:"center",denomalign:"center",bevelled:!1}),e}(T.AbstractMmlBaseNode);e.MmlMfrac=s},3985:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMglyph=void 0;var Q=r(9007),T=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texclass=Q.TEXCLASS.ORD,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mglyph"},enumerable:!1,configurable:!0}),e.prototype.verifyAttributes=function(e){var r=this.attributes.getList("src","fontfamily","index"),n=r.src,o=r.fontfamily,i=r.index;""!==n||""!==o&&""!==i?t.prototype.verifyAttributes.call(this,e):this.mError("mglyph must have either src or fontfamily and index attributes",e,!0)},e.defaults=i(i({},Q.AbstractMmlTokenNode.defaults),{alt:"",src:"",index:"",width:"auto",height:"auto",valign:"0em"}),e}(Q.AbstractMmlTokenNode);e.MmlMglyph=T},450:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMi=void 0;var Q=r(9007),T=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texclass=Q.TEXCLASS.ORD,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mi"},enumerable:!1,configurable:!0}),e.prototype.setInheritedAttributes=function(r,n,o,i){void 0===r&&(r={}),void 0===n&&(n=!1),void 0===o&&(o=0),void 0===i&&(i=!1),t.prototype.setInheritedAttributes.call(this,r,n,o,i),this.getText().match(e.singleCharacter)&&!r.mathvariant&&this.attributes.setInherited("mathvariant","italic")},e.prototype.setTeXclass=function(t){this.getPrevClass(t);var r=this.getText();return r.length>1&&r.match(e.operatorName)&&"normal"===this.attributes.get("mathvariant")&&void 0===this.getProperty("autoOP")&&void 0===this.getProperty("texClass")&&(this.texClass=Q.TEXCLASS.OP,this.setProperty("autoOP",!0)),this},e.defaults=i({},Q.AbstractMmlTokenNode.defaults),e.operatorName=/^[a-z][a-z0-9]*$/i,e.singleCharacter=/^[\uD800-\uDBFF]?.[\u0300-\u036F\u1AB0-\u1ABE\u1DC0-\u1DFF\u20D0-\u20EF]*$/,e}(Q.AbstractMmlTokenNode);e.MmlMi=T},6405:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlNone=e.MmlMprescripts=e.MmlMmultiscripts=void 0;var Q=r(9007),T=r(4461),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mmultiscripts"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return 1},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(t,e,r,n){this.childNodes[0].setInheritedAttributes(t,e,r,n);for(var o=!1,i=1,Q=0;i<this.childNodes.length;i++){var T=this.childNodes[i];if(T.isKind("mprescripts")){if(!o&&(o=!0,i%2==0)){var s=this.factory.create("mrow");this.childNodes.splice(i,0,s),s.parent=this,i++}}else{var a=n||Q%2==0;T.setInheritedAttributes(t,!1,r+1,a),Q++}}this.childNodes.length%2==(o?1:0)&&(this.appendChild(this.factory.create("mrow")),this.childNodes[this.childNodes.length-1].setInheritedAttributes(t,!1,r+1,n))},e.prototype.verifyChildren=function(e){for(var r=!1,n=e.fixMmultiscripts,o=0;o<this.childNodes.length;o++){var i=this.childNodes[o];i.isKind("mprescripts")&&(r?i.mError(i.kind+" can only appear once in "+this.kind,e,!0):(r=!0,o%2!=0||n||this.mError("There must be an equal number of prescripts of each type",e)))}this.childNodes.length%2!=(r?1:0)||n||this.mError("There must be an equal number of scripts of each type",e),t.prototype.verifyChildren.call(this,e)},e.defaults=i({},T.MmlMsubsup.defaults),e}(T.MmlMsubsup);e.MmlMmultiscripts=s;var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mprescripts"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return 0},enumerable:!1,configurable:!0}),e.prototype.verifyTree=function(e){t.prototype.verifyTree.call(this,e),this.parent&&!this.parent.isKind("mmultiscripts")&&this.mError(this.kind+" must be a child of mmultiscripts",e,!0)},e.defaults=i({},Q.AbstractMmlNode.defaults),e}(Q.AbstractMmlNode);e.MmlMprescripts=a;var l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"none"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return 0},enumerable:!1,configurable:!0}),e.prototype.verifyTree=function(e){t.prototype.verifyTree.call(this,e),this.parent&&!this.parent.isKind("mmultiscripts")&&this.mError(this.kind+" must be a child of mmultiscripts",e,!0)},e.defaults=i({},Q.AbstractMmlNode.defaults),e}(Q.AbstractMmlNode);e.MmlNone=l},3050:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMn=void 0;var Q=r(9007),T=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texclass=Q.TEXCLASS.ORD,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mn"},enumerable:!1,configurable:!0}),e.defaults=i({},Q.AbstractMmlTokenNode.defaults),e}(Q.AbstractMmlTokenNode);e.MmlMn=T},2756:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},Q=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),Q=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)Q.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return Q},T=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMo=void 0;var s=r(9007),a=r(4082),l=r(505),c=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._texClass=null,e.lspace=5/18,e.rspace=5/18,e}return o(e,t),Object.defineProperty(e.prototype,"texClass",{get:function(){if(null===this._texClass){var t=this.getText(),e=Q(this.handleExplicitForm(this.getForms()),3),r=e[0],n=e[1],o=e[2],i=this.constructor.OPTABLE,T=i[r][t]||i[n][t]||i[o][t];return T?T[2]:s.TEXCLASS.REL}return this._texClass},set:function(t){this._texClass=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"kind",{get:function(){return"mo"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isEmbellished",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"hasNewLine",{get:function(){return"newline"===this.attributes.get("linebreak")},enumerable:!1,configurable:!0}),e.prototype.coreParent=function(){for(var t=this,e=this,r=this.factory.getNodeClass("math");e&&e.isEmbellished&&e.coreMO()===this&&!(e instanceof r);)t=e,e=e.parent;return t},e.prototype.coreText=function(t){if(!t)return"";if(t.isEmbellished)return t.coreMO().getText();for(;((t.isKind("mrow")||t.isKind("TeXAtom")&&t.texClass!==s.TEXCLASS.VCENTER||t.isKind("mstyle")||t.isKind("mphantom"))&&1===t.childNodes.length||t.isKind("munderover"))&&t.childNodes[0];)t=t.childNodes[0];return t.isToken?t.getText():""},e.prototype.hasSpacingAttributes=function(){return this.attributes.isSet("lspace")||this.attributes.isSet("rspace")},Object.defineProperty(e.prototype,"isAccent",{get:function(){var t=!1,e=this.coreParent().parent;if(e){var r=e.isKind("mover")?e.childNodes[e.over].coreMO()?"accent":"":e.isKind("munder")?e.childNodes[e.under].coreMO()?"accentunder":"":e.isKind("munderover")?this===e.childNodes[e.over].coreMO()?"accent":this===e.childNodes[e.under].coreMO()?"accentunder":"":"";if(r)t=void 0!==e.attributes.getExplicit(r)?t:this.attributes.get("accent")}return t},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){var e=this.attributes.getList("form","fence"),r=e.form,n=e.fence;return void 0===this.getProperty("texClass")&&(this.attributes.isSet("lspace")||this.attributes.isSet("rspace"))?null:(n&&this.texClass===s.TEXCLASS.REL&&("prefix"===r&&(this.texClass=s.TEXCLASS.OPEN),"postfix"===r&&(this.texClass=s.TEXCLASS.CLOSE)),this.adjustTeXclass(t))},e.prototype.adjustTeXclass=function(t){var e=this.texClass,r=this.prevClass;if(e===s.TEXCLASS.NONE)return t;if(t?(!t.getProperty("autoOP")||e!==s.TEXCLASS.BIN&&e!==s.TEXCLASS.REL||(r=t.texClass=s.TEXCLASS.ORD),r=this.prevClass=t.texClass||s.TEXCLASS.ORD,this.prevLevel=this.attributes.getInherited("scriptlevel")):r=this.prevClass=s.TEXCLASS.NONE,e!==s.TEXCLASS.BIN||r!==s.TEXCLASS.NONE&&r!==s.TEXCLASS.BIN&&r!==s.TEXCLASS.OP&&r!==s.TEXCLASS.REL&&r!==s.TEXCLASS.OPEN&&r!==s.TEXCLASS.PUNCT)if(r!==s.TEXCLASS.BIN||e!==s.TEXCLASS.REL&&e!==s.TEXCLASS.CLOSE&&e!==s.TEXCLASS.PUNCT){if(e===s.TEXCLASS.BIN){for(var n=this,o=this.parent;o&&o.parent&&o.isEmbellished&&(1===o.childNodes.length||!o.isKind("mrow")&&o.core()===n);)n=o,o=o.parent;o.childNodes[o.childNodes.length-1]===n&&(this.texClass=s.TEXCLASS.ORD)}}else t.texClass=this.prevClass=s.TEXCLASS.ORD;else this.texClass=s.TEXCLASS.ORD;return this},e.prototype.setInheritedAttributes=function(e,r,n,o){void 0===e&&(e={}),void 0===r&&(r=!1),void 0===n&&(n=0),void 0===o&&(o=!1),t.prototype.setInheritedAttributes.call(this,e,r,n,o);var i=this.getText();this.checkOperatorTable(i),this.checkPseudoScripts(i),this.checkPrimes(i),this.checkMathAccent(i)},e.prototype.checkOperatorTable=function(t){var e,r,n=Q(this.handleExplicitForm(this.getForms()),3),o=n[0],i=n[1],s=n[2];this.attributes.setInherited("form",o);var l=this.constructor.OPTABLE,c=l[o][t]||l[i][t]||l[s][t];if(c){void 0===this.getProperty("texClass")&&(this.texClass=c[2]);try{for(var u=T(Object.keys(c[3]||{})),p=u.next();!p.done;p=u.next()){var h=p.value;this.attributes.setInherited(h,c[3][h])}}catch(t){e={error:t}}finally{try{p&&!p.done&&(r=u.return)&&r.call(u)}finally{if(e)throw e.error}}this.lspace=(c[0]+1)/18,this.rspace=(c[1]+1)/18}else{var d=(0,a.getRange)(t);if(d){void 0===this.getProperty("texClass")&&(this.texClass=d[2]);var f=this.constructor.MMLSPACING[d[2]];this.lspace=(f[0]+1)/18,this.rspace=(f[1]+1)/18}}},e.prototype.getForms=function(){for(var t=this,e=this.parent,r=this.Parent;r&&r.isEmbellished;)t=e,e=r.parent,r=r.Parent;if(e&&e.isKind("mrow")&&1!==e.nonSpaceLength()){if(e.firstNonSpace()===t)return["prefix","infix","postfix"];if(e.lastNonSpace()===t)return["postfix","infix","prefix"]}return["infix","prefix","postfix"]},e.prototype.handleExplicitForm=function(t){if(this.attributes.isSet("form")){var e=this.attributes.get("form");t=[e].concat(t.filter((function(t){return t!==e})))}return t},e.prototype.checkPseudoScripts=function(t){var e=this.constructor.pseudoScripts;if(t.match(e)){var r=this.coreParent().Parent,n=!r||!(r.isKind("msubsup")&&!r.isKind("msub"));this.setProperty("pseudoscript",n),n&&(this.attributes.setInherited("lspace",0),this.attributes.setInherited("rspace",0))}},e.prototype.checkPrimes=function(t){var e=this.constructor.primes;if(t.match(e)){var r=this.constructor.remapPrimes,n=(0,l.unicodeString)((0,l.unicodeChars)(t).map((function(t){return r[t]})));this.setProperty("primes",n)}},e.prototype.checkMathAccent=function(t){var e=this.Parent;if(void 0===this.getProperty("mathaccent")&&e&&e.isKind("munderover")){var r=e.childNodes[0];if(!r.isEmbellished||r.coreMO()!==this){var n=this.constructor.mathaccents;t.match(n)&&this.setProperty("mathaccent",!0)}}},e.defaults=i(i({},s.AbstractMmlTokenNode.defaults),{form:"infix",fence:!1,separator:!1,lspace:"thickmathspace",rspace:"thickmathspace",stretchy:!1,symmetric:!1,maxsize:"infinity",minsize:"0em",largeop:!1,movablelimits:!1,accent:!1,linebreak:"auto",lineleading:"1ex",linebreakstyle:"before",indentalign:"auto",indentshift:"0",indenttarget:"",indentalignfirst:"indentalign",indentshiftfirst:"indentshift",indentalignlast:"indentalign",indentshiftlast:"indentshift"}),e.MMLSPACING=a.MMLSPACING,e.OPTABLE=a.OPTABLE,e.pseudoScripts=new RegExp(["^[\"'*`","\xaa","\xb0","\xb2-\xb4","\xb9","\xba","\u2018-\u201f","\u2032-\u2037\u2057","\u2070\u2071","\u2074-\u207f","\u2080-\u208e","]+$"].join("")),e.primes=new RegExp(["^[\"'`","\u2018-\u201f","]+$"].join("")),e.remapPrimes={34:8243,39:8242,96:8245,8216:8245,8217:8242,8218:8242,8219:8245,8220:8246,8221:8243,8222:8243,8223:8246},e.mathaccents=new RegExp(["^[","\xb4\u0301\u02ca","`\u0300\u02cb","\xa8\u0308","~\u0303\u02dc","\xaf\u0304\u02c9","\u02d8\u0306","\u02c7\u030c","^\u0302\u02c6","\u2192\u20d7","\u02d9\u0307","\u02da\u030a","\u20db","\u20dc","]$"].join("")),e}(s.AbstractMmlTokenNode);e.MmlMo=c},7238:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMpadded=void 0;var Q=r(9007),T=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mpadded"},enumerable:!1,configurable:!0}),e.defaults=i(i({},Q.AbstractMmlLayoutNode.defaults),{width:"",height:"",depth:"",lspace:0,voffset:0}),e}(Q.AbstractMmlLayoutNode);e.MmlMpadded=T},5741:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.c
gitextract_mzu2v0jt/ ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ ├── feature-request.yml │ │ ├── optimization.yml │ │ └── suspected-bug.yml │ └── workflows/ │ ├── close-external-prs.yml │ ├── docker-image.yml │ └── release.yml ├── .gitignore ├── .husky/ │ └── pre-commit ├── Dockerfile ├── LICENSE ├── README.md ├── apps/ │ ├── electron/ │ │ ├── README.md │ │ ├── assets/ │ │ │ └── icon.icns │ │ ├── electron-builder.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── main.ts │ │ │ ├── preload.ts │ │ │ ├── updater.ts │ │ │ └── utils/ │ │ │ ├── frontmatter.test.ts │ │ │ └── frontmatter.ts │ │ └── tsconfig.json │ ├── server/ │ │ ├── .prettierrc │ │ ├── COS_SETUP.md │ │ ├── README.md │ │ ├── eslint.config.mjs │ │ ├── nest-cli.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.controller.spec.ts │ │ │ ├── app.controller.ts │ │ │ ├── app.module.ts │ │ │ ├── app.service.ts │ │ │ ├── main.ts │ │ │ ├── services/ │ │ │ │ └── cos.service.ts │ │ │ └── upload/ │ │ │ ├── dto/ │ │ │ │ ├── create-upload.dto.ts │ │ │ │ └── update-upload.dto.ts │ │ │ ├── entities/ │ │ │ │ └── upload.entity.ts │ │ │ ├── upload.controller.ts │ │ │ ├── upload.module.ts │ │ │ └── upload.service.ts │ │ ├── test/ │ │ │ ├── app.e2e-spec.ts │ │ │ └── jest-e2e.json │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ └── web/ │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── package.json │ ├── public/ │ │ ├── fonts/ │ │ │ └── local-fonts.css │ │ └── libs/ │ │ └── mathjax/ │ │ └── tex-svg.js │ ├── src/ │ │ ├── App.css │ │ ├── App.tsx │ │ ├── __tests__/ │ │ │ ├── bootstrap/ │ │ │ │ └── installPreloadErrorHandler.test.ts │ │ │ ├── components/ │ │ │ │ ├── FileSystemHistory.test.tsx │ │ │ │ ├── Header.test.tsx │ │ │ │ ├── MobileToolbar.test.tsx │ │ │ │ ├── ThemePanel.test.tsx │ │ │ │ ├── mouseSelectionStyle.test.ts │ │ │ │ ├── searchPanel.test.ts │ │ │ │ ├── sortUtils.test.ts │ │ │ │ └── themeDesignerVariables.test.ts │ │ │ ├── core/ │ │ │ │ └── MarkdownParser.test.ts │ │ │ ├── hooks/ │ │ │ │ ├── useFileSystemEffectGate.test.ts │ │ │ │ ├── useFileSystemEffects.test.ts │ │ │ │ └── useWindowControls.test.ts │ │ │ ├── services/ │ │ │ │ ├── autoCompressImage.test.ts │ │ │ │ ├── cssVariableExpander.test.ts │ │ │ │ ├── htmlCopyService.test.ts │ │ │ │ ├── imageUploadFlow.integration.test.ts │ │ │ │ ├── wechatCopyCssIntegration.test.ts │ │ │ │ ├── wechatCopyNormalizer.test.ts │ │ │ │ ├── wechatCopyService.test.ts │ │ │ │ ├── wechatCounterCompat.test.ts │ │ │ │ ├── wechatMermaidRenderer.test.ts │ │ │ │ └── wechatMermaidSvgText.test.ts │ │ │ ├── storage/ │ │ │ │ └── FileSystemAdapter.test.ts │ │ │ └── utils/ │ │ │ ├── assetPath.test.ts │ │ │ ├── fileName.test.ts │ │ │ ├── markdownFileMeta.test.ts │ │ │ └── newArticleTheme.test.ts │ │ ├── bootstrap/ │ │ │ └── installPreloadErrorHandler.ts │ │ ├── components/ │ │ │ ├── Editor/ │ │ │ │ ├── MarkdownEditor.css │ │ │ │ ├── MarkdownEditor.tsx │ │ │ │ ├── SaveIndicator.tsx │ │ │ │ ├── SearchPanel.css │ │ │ │ ├── SearchPanel.tsx │ │ │ │ ├── SyntaxHelpPopover.css │ │ │ │ ├── SyntaxHelpPopover.tsx │ │ │ │ ├── Toolbar.css │ │ │ │ ├── Toolbar.tsx │ │ │ │ ├── ToolbarState.ts │ │ │ │ ├── editorShortcuts.ts │ │ │ │ ├── markdownTheme.ts │ │ │ │ ├── markdownUnderline.ts │ │ │ │ ├── mouseSelectionStyle.ts │ │ │ │ └── toolbarConfigs.ts │ │ │ ├── ErrorBoundary/ │ │ │ │ └── ErrorBoundary.tsx │ │ │ ├── Header/ │ │ │ │ ├── Header.css │ │ │ │ └── Header.tsx │ │ │ ├── History/ │ │ │ │ ├── FileSystemHistory.tsx │ │ │ │ ├── HistoryManager.tsx │ │ │ │ ├── HistoryPanel.css │ │ │ │ ├── HistoryPanel.tsx │ │ │ │ └── IndexedHistoryPanel.tsx │ │ │ ├── Preview/ │ │ │ │ ├── MarkdownPreview.css │ │ │ │ └── MarkdownPreview.tsx │ │ │ ├── Settings/ │ │ │ │ ├── ImageHostSettings.css │ │ │ │ ├── ImageHostSettings.tsx │ │ │ │ └── ImageHostSettingsPanels.tsx │ │ │ ├── Sidebar/ │ │ │ │ ├── ContextMenu.tsx │ │ │ │ ├── FileSidebar.css │ │ │ │ ├── FileSidebar.tsx │ │ │ │ ├── SidebarFooter.css │ │ │ │ ├── SidebarFooter.tsx │ │ │ │ ├── SidebarModals.tsx │ │ │ │ ├── sidebarStateHelpers.ts │ │ │ │ ├── sortUtils.ts │ │ │ │ └── useSidebarState.ts │ │ │ ├── StorageModeSelector/ │ │ │ │ ├── StorageModeSelector.css │ │ │ │ └── StorageModeSelector.tsx │ │ │ ├── Theme/ │ │ │ │ ├── ColorSelector.tsx │ │ │ │ ├── MobileThemeSelector.css │ │ │ │ ├── MobileThemeSelector.tsx │ │ │ │ ├── ThemeDesigner/ │ │ │ │ │ ├── SliderInput.tsx │ │ │ │ │ ├── Switch.tsx │ │ │ │ │ ├── VARIABLES.md │ │ │ │ │ ├── defaults.ts │ │ │ │ │ ├── generateCSS.ts │ │ │ │ │ ├── generators/ │ │ │ │ │ │ ├── codeTheme.ts │ │ │ │ │ │ ├── components.ts │ │ │ │ │ │ ├── extras.ts │ │ │ │ │ │ ├── global.ts │ │ │ │ │ │ ├── presets.ts │ │ │ │ │ │ ├── typography.ts │ │ │ │ │ │ └── variables.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── sections/ │ │ │ │ │ │ ├── CodeSection.tsx │ │ │ │ │ │ ├── GlobalSection.tsx │ │ │ │ │ │ ├── HeadingSection.tsx │ │ │ │ │ │ ├── ImageSection.tsx │ │ │ │ │ │ ├── ListSection.tsx │ │ │ │ │ │ ├── MermaidSection.tsx │ │ │ │ │ │ ├── OtherSection.tsx │ │ │ │ │ │ ├── ParagraphSection.tsx │ │ │ │ │ │ ├── QuoteSection.tsx │ │ │ │ │ │ ├── TableHrSection.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── ThemeDesigner.css │ │ │ │ ├── ThemeLivePreview.tsx │ │ │ │ ├── ThemePanel.css │ │ │ │ ├── ThemePanel.tsx │ │ │ │ └── ThemePanelView.tsx │ │ │ ├── UpdateModal/ │ │ │ │ ├── UpdateModal.css │ │ │ │ └── UpdateModal.tsx │ │ │ ├── Welcome/ │ │ │ │ ├── Welcome.css │ │ │ │ └── Welcome.tsx │ │ │ └── common/ │ │ │ ├── FloatingToolbarButton.tsx │ │ │ ├── MobileToolbar.css │ │ │ ├── MobileToolbar.tsx │ │ │ ├── Modal.css │ │ │ ├── Modal.tsx │ │ │ └── index.ts │ │ ├── config/ │ │ │ └── styleOptions.ts │ │ ├── hooks/ │ │ │ ├── useFileSystem.ts │ │ │ ├── useFileSystemEffects.ts │ │ │ ├── useFileSystemFolderActions.ts │ │ │ ├── useFileSystemHelpers.ts │ │ │ ├── useMobileView.ts │ │ │ ├── useStorage.ts │ │ │ ├── useUITheme.ts │ │ │ └── useWindowControls.ts │ │ ├── index.css │ │ ├── lib/ │ │ │ └── platformAdapter.ts │ │ ├── main.tsx │ │ ├── services/ │ │ │ ├── cssVarParser.ts │ │ │ ├── cssVariableExpander.ts │ │ │ ├── htmlCopyService.ts │ │ │ ├── image/ │ │ │ │ ├── ImageUploader.ts │ │ │ │ ├── README.md │ │ │ │ ├── autoCompressImage.ts │ │ │ │ ├── compressSearch.ts │ │ │ │ ├── imageUploadFlow.ts │ │ │ │ └── uploaders/ │ │ │ │ ├── AliyunUploader.ts │ │ │ │ ├── OfficialUploader.ts │ │ │ │ ├── QiniuUploader.ts │ │ │ │ ├── S3Uploader.ts │ │ │ │ └── TencentUploader.ts │ │ │ ├── inlineStyleVarResolver.ts │ │ │ ├── wechatCopyNormalizer.ts │ │ │ ├── wechatCopyService.ts │ │ │ ├── wechatCounterCompat.ts │ │ │ ├── wechatMermaidRenderer.ts │ │ │ ├── wechatMermaidSvgText.ts │ │ │ └── wechatTableRenderer.ts │ │ ├── storage/ │ │ │ ├── StorageAdapter.ts │ │ │ ├── StorageContext.tsx │ │ │ ├── StorageManager.ts │ │ │ ├── adapters/ │ │ │ │ ├── FileSystemAdapter.ts │ │ │ │ ├── IndexedDBAdapter.ts │ │ │ │ └── fileSystemAdapterHelpers.ts │ │ │ └── types.ts │ │ ├── store/ │ │ │ ├── editorStore.ts │ │ │ ├── fileStore.ts │ │ │ ├── fileTypes.ts │ │ │ ├── historyDb.ts │ │ │ ├── historyStore.ts │ │ │ ├── historyTypes.ts │ │ │ ├── themeStore.ts │ │ │ └── themes/ │ │ │ └── builtInThemes.ts │ │ ├── styles/ │ │ │ ├── global.css │ │ │ └── local-fonts.css │ │ ├── test/ │ │ │ └── setup.ts │ │ ├── types/ │ │ │ ├── electron.d.ts │ │ │ ├── env.d.ts │ │ │ ├── filesystem.d.ts │ │ │ └── raw-modules.d.ts │ │ └── utils/ │ │ ├── assetPath.ts │ │ ├── fileName.ts │ │ ├── findMatches.ts │ │ ├── katexRenderer.ts │ │ ├── linkFootnote.ts │ │ ├── markdownFileMeta.ts │ │ ├── mathJaxLoader.ts │ │ ├── mermaidConfig.ts │ │ ├── newArticleTheme.ts │ │ └── wordCount.ts │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── vite.config.ts │ └── vitest.config.ts ├── docker-compose.yml ├── eslint.config.mjs ├── nginx.conf ├── package.json ├── packages/ │ └── core/ │ ├── package.json │ ├── src/ │ │ ├── MarkdownParser.ts │ │ ├── ThemeProcessor.ts │ │ ├── __tests__/ │ │ │ ├── MarkdownParser.test.ts │ │ │ ├── ThemeProcessor.test.ts │ │ │ └── wechatDarkMode.test.ts │ │ ├── index.ts │ │ ├── plugins/ │ │ │ ├── markdown-it-checkbox-emoji.ts │ │ │ ├── markdown-it-github-alert.ts │ │ │ ├── markdown-it-imageflow.ts │ │ │ ├── markdown-it-li.ts │ │ │ ├── markdown-it-linkfoot.ts │ │ │ ├── markdown-it-math.ts │ │ │ ├── markdown-it-multiquote.ts │ │ │ ├── markdown-it-span.ts │ │ │ ├── markdown-it-table-container.ts │ │ │ └── markdown-it-underline.ts │ │ ├── themes/ │ │ │ ├── academic-paper.ts │ │ │ ├── aurora-glass.ts │ │ │ ├── basic.ts │ │ │ ├── bauhaus.ts │ │ │ ├── code-github.ts │ │ │ ├── custom-default.ts │ │ │ ├── cyberpunk-neon.ts │ │ │ ├── index.ts │ │ │ ├── knowledge-base.ts │ │ │ ├── luxury-gold.ts │ │ │ ├── morandi-forest.ts │ │ │ ├── neo-brutalism.ts │ │ │ ├── receipt.ts │ │ │ ├── sunset-film.ts │ │ │ └── template.ts │ │ ├── types/ │ │ │ └── markdown-it-plugins.d.ts │ │ ├── utils/ │ │ │ └── langHighlight.ts │ │ └── wechatDarkMode.ts │ ├── tsconfig.json │ └── vitest.config.ts ├── pnpm-workspace.yaml ├── scripts/ │ └── run-desktop-dev.mjs ├── templates/ │ ├── Academic-Paper.css │ ├── Aurora-Glass.css │ ├── Bauhaus.css │ ├── Cyberpunk-Neon.css │ ├── Knowledge-Base.css │ ├── Luxury-Gold.css │ ├── Morandi-Forest.css │ ├── Neo-Brutalism.css │ ├── Receipt.css │ ├── Sunset-Film.css │ └── Template.css └── turbo.json
Showing preview only (2,021K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2171 symbols across 147 files)
FILE: apps/electron/src/main.ts
function startWatching (line 20) | function startWatching(dir: string) {
function stopWatching (line 46) | function stopWatching() {
function getWindowIcon (line 55) | function getWindowIcon() {
function getUniqueFilePath (line 74) | function getUniqueFilePath(targetPath: string): string {
function isPathInsideWorkspace (line 88) | function isPathInsideWorkspace(targetPath: string): boolean {
type FileEntry (line 112) | interface FileEntry {
function readFileEntry (line 125) | function readFileEntry(fullPath: string, name: string): FileEntry {
function scanWorkspace (line 151) | function scanWorkspace(dir: string): FileEntry[] {
function createWindow (line 193) | function createWindow() {
function createMenu (line 705) | function createMenu() {
FILE: apps/electron/src/updater.ts
constant GITHUB_REPO (line 3) | const GITHUB_REPO = 'tenngoxars/WeMD';
constant RELEASES_URL (line 4) | const RELEASES_URL = `https://github.com/${GITHUB_REPO}/releases`;
constant API_URL (line 5) | const API_URL = `https://api.github.com/repos/${GITHUB_REPO}/releases/la...
type UpdateInfo (line 7) | interface UpdateInfo {
function checkForUpdates (line 19) | async function checkForUpdates(
function isNewerVersion (line 62) | function isNewerVersion(latest: string, current: string): boolean {
function openReleasesPage (line 75) | function openReleasesPage(): void {
FILE: apps/electron/src/utils/frontmatter.ts
type FrontmatterMeta (line 1) | interface FrontmatterMeta {
constant FRONTMATTER_REGEX (line 6) | const FRONTMATTER_REGEX = /^(\uFEFF)?---(\r?\n)([\s\S]*?)\2---(?:\r?\n|$)/;
function parseFrontmatterValue (line 8) | function parseFrontmatterValue(raw?: string): string | undefined {
function extractFrontmatterMeta (line 22) | function extractFrontmatterMeta(content: string): FrontmatterMeta {
FILE: apps/server/src/app.controller.ts
class AppController (line 5) | class AppController {
method constructor (line 6) | constructor(private readonly appService: AppService) {}
method getHello (line 9) | getHello(): string {
FILE: apps/server/src/app.module.ts
class AppModule (line 17) | class AppModule {}
FILE: apps/server/src/app.service.ts
class AppService (line 4) | class AppService {
method getHello (line 5) | getHello(): string {
FILE: apps/server/src/main.ts
function bootstrap (line 6) | async function bootstrap() {
FILE: apps/server/src/services/cos.service.ts
type COSPutObjectParams (line 3) | type COSPutObjectParams = {
type COSPutObjectCallback (line 10) | type COSPutObjectCallback = (err: Error | null, data: unknown) => void;
type COSClient (line 12) | interface COSClient {
type COSConstructor (line 16) | type COSConstructor = new (options: {
type COSConfig (line 23) | interface COSConfig {
class COSService (line 31) | class COSService {
method constructor (line 37) | constructor(config: COSConfig) {
method uploadFile (line 47) | async uploadFile(
FILE: apps/server/src/upload/dto/create-upload.dto.ts
class CreateUploadDto (line 1) | class CreateUploadDto {}
FILE: apps/server/src/upload/dto/update-upload.dto.ts
class UpdateUploadDto (line 4) | class UpdateUploadDto extends PartialType(CreateUploadDto) {}
FILE: apps/server/src/upload/entities/upload.entity.ts
class Upload (line 1) | class Upload {}
FILE: apps/server/src/upload/upload.controller.ts
type StorageMode (line 15) | type StorageMode = 'local' | 'cos';
class UploadController (line 18) | class UploadController {
method constructor (line 22) | constructor(private configService: ConfigService) {
method uploadFile (line 60) | async uploadFile(@UploadedFile() file: Express.Multer.File) {
FILE: apps/server/src/upload/upload.module.ts
class UploadModule (line 9) | class UploadModule {}
FILE: apps/server/src/upload/upload.service.ts
class UploadService (line 6) | class UploadService {
method create (line 7) | create(createUploadDto: CreateUploadDto) {
method findAll (line 12) | findAll() {
method findOne (line 16) | findOne(id: number) {
method update (line 20) | update(id: number, updateUploadDto: UpdateUploadDto) {
method remove (line 25) | remove(id: number) {
FILE: apps/web/public/libs/mathjax/tex-svg.js
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function p (line 1) | function p(t){return function(t){function e(){return null!==t&&t.apply(t...
function h (line 1) | function h(t){var e;return e=function(t){function e(){for(var e=[],r=0;r...
method constructor (line 1) | constructor(t,e){super(t,p(t)),this.context=e,this.kind=a.TrieNodeKind...
method applyTest (line 1) | applyTest(t){return this.test?this.test(t):this.context.applyQuery(t,t...
function Q (line 1) | function Q(t){try{s(n.next(t))}catch(t){i(t)}}
method markup (line 1) | markup(t){const e=i.personalityMarkup(t);let r="",o=null,Q=!1;for(let ...
method pause (line 1) | pause(t){let e;return e="number"==typeof t?t<=250?"short":t<=500?"medi...
method finalize (line 1) | finalize(t){return'<?xml version="1.0"?><speak version="1.1" xmlns="ht...
method pause (line 1) | pause(t){return'<break time="'+this.pauseValue(t[o.personalityProps.PA...
method prosodyElement (line 1) | prosodyElement(t,e){const r=(e=Math.floor(this.applyScaleFunction(e)))...
method closeTag (line 1) | closeTag(t){return"</prosody>"}
method markup (line 1) | markup(t){this.setScaleFunction(-2,2,-100,100,2);const e=o.personality...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return!!t.mathmlTree&&"line"===t.type}
method getMathml (line 1) | getMathml(){return this.semantic.contentNodes.length&&o.walkTree(this....
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return!!t.mathmlTree&&("inference"===t.type||"premises"...
method getMathml (line 1) | getMathml(){return this.semantic.childNodes.length?(this.semantic.cont...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return"punctuated"===t.type&&("text"===t.role||t.conten...
method getMathml (line 1) | getMathml(){const t=[],e=o.collapsePunctuated(this.semantic,t);return ...
method constructor (line 1) | constructor(){this.map={}}
method add (line 1) | add(t,e){const r=this.map[t];r?r.push(e):this.map[t]=[e]}
method retrieve (line 1) | retrieve(t,e){return this.map[i.key(t,e)]}
method retrieveNode (line 1) | retrieveNode(t){return this.retrieve(t.textContent,t.font)}
method copy (line 1) | copy(){const t=this.copyCollator();for(const e in this.map)t.map[e]=th...
method minimize (line 1) | minimize(){for(const t in this.map)1===this.map[t].length&&delete this...
method minimalCollator (line 1) | minimalCollator(){const t=this.copy();for(const e in t.map)1===t.map[e...
method isMultiValued (line 1) | isMultiValued(){for(const t in this.map)if(this.map[t].length>1)return...
method isEmpty (line 1) | isEmpty(){return!Object.keys(this.map).length}
method constructor (line 1) | constructor(t){this.id=t,this.mathml=[],this.parent=null,this.type="un...
method fromXml (line 1) | static fromXml(t){const e=parseInt(t.getAttribute("id"),10),r=new Q(e)...
method setAttribute (line 1) | static setAttribute(t,e,r,n){n=n||r;const o=e.getAttribute(r);o&&(t[n]...
method processChildren (line 1) | static processChildren(t,e){for(const r of n.toArray(e.childNodes)){if...
method querySelectorAll (line 1) | querySelectorAll(t){let e=[];for(let r,n=0;r=this.childNodes[n];n++)e=...
method xml (line 1) | xml(t,e){const r=function(r,n){const o=n.map((function(r){return r.xml...
method toString (line 1) | toString(t=!1){const e=n.parseInput("<snode/>");return n.serializeXml(...
method allAttributes (line 1) | allAttributes(){const t=[];return t.push(["role",this.role]),"unknown"...
method xmlAnnotation (line 1) | xmlAnnotation(){const t=[];for(const e in this.annotation)this.annotat...
method toJson (line 1) | toJson(){const t={};t.type=this.type;const e=this.allAttributes();for(...
method updateContent (line 1) | updateContent(t,e){const r=e?t.replace(/^[ \f\n\r\t\v\u200b]*/,"").rep...
method addMathmlNodes (line 1) | addMathmlNodes(t){for(let e,r=0;e=t[r];r++)-1===this.mathml.indexOf(e)...
method appendChild (line 1) | appendChild(t){this.childNodes.push(t),this.addMathmlNodes(t.mathml),t...
method replaceChild (line 1) | replaceChild(t,e){const r=this.childNodes.indexOf(t);if(-1===r)return;...
method appendContentNode (line 1) | appendContentNode(t){t&&(this.contentNodes.push(t),this.addMathmlNodes...
method removeContentNode (line 1) | removeContentNode(t){if(t){const e=this.contentNodes.indexOf(t);-1!==e...
method equals (line 1) | equals(t){if(!t)return!1;if(this.type!==t.type||this.role!==t.role||th...
method displayTree (line 1) | displayTree(){console.info(this.displayTree_(0))}
method addAnnotation (line 1) | addAnnotation(t,e){e&&this.addAnnotation_(t,e)}
method getAnnotation (line 1) | getAnnotation(t){const e=this.annotation[t];return e||[]}
method hasAnnotation (line 1) | hasAnnotation(t,e){const r=this.annotation[t];return!!r&&-1!==r.indexO...
method parseAnnotation (line 1) | parseAnnotation(t){const e=t.split(";");for(let t=0,r=e.length;t<r;t++...
method meaning (line 1) | meaning(){return{type:this.type,role:this.role,font:this.font}}
method xmlAttributes (line 1) | xmlAttributes(t){const e=this.allAttributes();for(let r,n=0;r=e[n];n++...
method addExternalAttributes (line 1) | addExternalAttributes(t){for(const e in this.attributes)t.setAttribute...
method removeMathmlNodes (line 1) | removeMathmlNodes(t){const e=this.mathml;for(let r,n=0;r=t[n];n++){con...
method displayTree_ (line 1) | displayTree_(t){t++;const e=Array(t).join(" ");let r="";r+="\n"+e+thi...
method mathmlTreeString (line 1) | mathmlTreeString(){return this.mathmlTree?this.mathmlTree.toString():"...
method addAnnotation_ (line 1) | addAnnotation_(t,e){const r=this.annotation[t];r?r.push(e):this.annota...
method constructor (line 1) | constructor(t,e=null){this.comparator=t,this.type=e,n(this)}
method compare (line 1) | compare(t,e){return this.type&&this.type===t.type&&this.type===e.type?...
method constructor (line 1) | constructor(t){this.parents=null,this.levelsMap=null,t=0===t?t:t||[],t...
method fromTree (line 1) | static fromTree(t){return Q.fromNode(t.root)}
method fromNode (line 1) | static fromNode(t){return new Q(Q.fromNode_(t))}
method fromString (line 1) | static fromString(t){return new Q(Q.fromString_(t))}
method simpleCollapseStructure (line 1) | static simpleCollapseStructure(t){return"number"==typeof t}
method contentCollapseStructure (line 1) | static contentCollapseStructure(t){return!!t&&!Q.simpleCollapseStructu...
method interleaveIds (line 1) | static interleaveIds(t,e){return n.interleaveLists(Q.collapsedLeafs(t)...
method collapsedLeafs (line 1) | static collapsedLeafs(...t){return t.reduce(((t,e)=>{return t.concat((...
method fromStructure (line 1) | static fromStructure(t,e){return new Q(Q.tree_(t,e.root))}
method combineContentChildren (line 1) | static combineContentChildren(t,e,r){switch(t.type){case"relseq":case"...
method makeSexp_ (line 1) | static makeSexp_(t){return Q.simpleCollapseStructure(t)?t.toString():Q...
method fromString_ (line 1) | static fromString_(t){let e=t.replace(/\(/g,"[");return e=e.replace(/\...
method fromNode_ (line 1) | static fromNode_(t){if(!t)return[];const e=t.contentNodes;let r;e.leng...
method tree_ (line 1) | static tree_(t,e){if(!e)return[];if(!e.childNodes.length)return e.id;c...
method addOwns_ (line 1) | static addOwns_(t,e){const r=t.getAttribute(i.Attribute.COLLAPSED),n=r...
method realLeafs_ (line 1) | static realLeafs_(t){if(Q.simpleCollapseStructure(t))return[t];if(Q.co...
method populate (line 1) | populate(){this.parents&&this.levelsMap||(this.parents={},this.levelsM...
method toString (line 1) | toString(){return Q.makeSexp_(this.array)}
method populate_ (line 1) | populate_(t,e,r){if(Q.simpleCollapseStructure(t))return t=t,this.level...
method isRoot (line 1) | isRoot(t){return t===this.levelsMap[t][0]}
method directChildren (line 1) | directChildren(t){if(!this.isRoot(t))return[];return this.levelsMap[t]...
method subtreeNodes (line 1) | subtreeNodes(t){if(!this.isRoot(t))return[];const e=(t,r)=>{Q.simpleCo...
method constructor (line 1) | constructor(t,e,r,n){super(t,e,r,n),this.node=t,this.generator=e,this....
method initLevels (line 1) | initLevels(){const t=new i.Levels;return t.push([this.primaryId()]),t}
method up (line 1) | up(){super.up();const t=this.previousLevel();return t?(this.levels.pop...
method down (line 1) | down(){super.down();const t=this.nextLevel();if(0===t.length)return nu...
method combineContentChildren (line 1) | combineContentChildren(t,e,r,o){switch(t){case"relseq":case"infixop":c...
method left (line 1) | left(){super.left();const t=this.levels.indexOf(this.primaryId());if(n...
method right (line 1) | right(){super.right();const t=this.levels.indexOf(this.primaryId());if...
method findFocusOnLevel (line 1) | findFocusOnLevel(t){return this.singletonFocus(t.toString())}
method focusDomNodes (line 1) | focusDomNodes(){return[this.getFocus().getDomPrimary()]}
method focusSemanticNodes (line 1) | focusSemanticNodes(){return[this.getFocus().getSemanticPrimary()]}
function T (line 1) | function T(t){try{s(n.throw(t))}catch(t){i(t)}}
method markup (line 1) | markup(t){this.setScaleFunction(-2,2,0,10,0);const e=i.personalityMark...
method error (line 1) | error(t){return'(error "'+o.Move.get(t)+'")'}
method prosodyElement (line 1) | prosodyElement(t,e){switch(e=this.applyScaleFunction(e),t){case n.pers...
method pause (line 1) | pause(t){return"(pause . "+this.pauseValue(t[n.personalityProps.PAUSE]...
method prosody_ (line 1) | prosody_(t){const e=t.open,r=[];for(let n,o=0;n=e[o];o++)r.push(this.p...
method constructor (line 1) | constructor(t=""){super(),this.message=t,this.name="SRE Error"}
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return!t.mathmlTree&&"line"===t.type&&"binomial"===t.role}
method getMathml (line 1) | getMathml(){if(!this.semantic.childNodes.length)return this.mml;const ...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){if(!t.mathmlTree||!t.childNodes.length)return!1;const e...
method getMathml (line 1) | getMathml(){const t=this.semantic.childNodes[0],e=t.childNodes[0],r=th...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){if(!t.mathmlTree||!t.childNodes.length)return!1;const e...
method walkTree_ (line 1) | static walkTree_(t){t&&i.walkTree(t)}
method getMathml (line 1) | getMathml(){const t=this.semantic.childNodes;return"limboth"!==this.se...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method multiscriptIndex (line 1) | static multiscriptIndex(t){return"punctuated"===t.type&&"dummy"===t.co...
method createNone_ (line 1) | static createNone_(t){const e=n.createElement("none");return t&&(0,Q.s...
method completeMultiscript (line 1) | completeMultiscript(t,e){const r=n.toArray(this.mml.childNodes).slice(...
method constructor (line 1) | constructor(t){super(t),this.inner=[],this.mml=t.mathmlTree}
method test (line 1) | static test(t){return"matrix"===t.type||"vector"===t.type||"cases"===t...
method getMathml (line 1) | getMathml(){const t=i.cloneContentNode(this.semantic.contentNodes[0]),...
method test (line 1) | static test(t){return!!t.mathmlTree&&"tensor"===t.type}
method constructor (line 1) | constructor(t){super(t)}
method getMathml (line 1) | getMathml(){i.walkTree(this.semantic.childNodes[0]);const t=o.CaseMult...
method constructor (line 1) | constructor(){this.context=new Q.SpeechRuleContext,this.parseOrder=o.D...
method compareStaticConstraints_ (line 1) | static compareStaticConstraints_(t,e){if(t.length!==e.length)return!1;...
method comparePreconditions_ (line 1) | static comparePreconditions_(t,e){const r=t.precondition,n=e.precondit...
method defineRule (line 1) | defineRule(t,e,r,n,...o){const Q=this.parseAction(r),T=this.parsePreco...
method addRule (line 1) | addRule(t){t.context=this.context,this.speechRules_.unshift(t)}
method deleteRule (line 1) | deleteRule(t){const e=this.speechRules_.indexOf(t);-1!==e&&this.speech...
method findRule (line 1) | findRule(t){for(let e,r=0;e=this.speechRules_[r];r++)if(t(e))return e;...
method findAllRules (line 1) | findAllRules(t){return this.speechRules_.filter(t)}
method evaluateDefault (line 1) | evaluateDefault(t){const e=t.textContent.slice(0);return e.match(/^\s+...
method evaluateWhitespace (line 1) | evaluateWhitespace(t){return[]}
method evaluateCustom (line 1) | evaluateCustom(t){const e=this.customTranscriptions[t];return void 0!=...
method evaluateCharacter (line 1) | evaluateCharacter(t){return this.evaluateCustom(t)||n.AuditoryDescript...
method removeDuplicates (line 1) | removeDuplicates(t){for(let e,r=this.speechRules_.length-1;e=this.spee...
method getSpeechRules (line 1) | getSpeechRules(){return this.speechRules_}
method setSpeechRules (line 1) | setSpeechRules(t){this.speechRules_=t}
method getPreconditions (line 1) | getPreconditions(){return this.preconditions}
method parseCstr (line 1) | parseCstr(t){try{return this.parser.parse(this.locale+"."+this.modalit...
method parsePrecondition (line 1) | parsePrecondition(t,e){try{const r=this.parsePrecondition_(t);t=r[0];l...
method parseAction (line 1) | parseAction(t){try{return i.Action.fromString(t)}catch(e){if("RuleErro...
method parse (line 1) | parse(t){this.modality=t.modality||this.modality,this.locale=t.locale|...
method parseRules (line 1) | parseRules(t){for(let e,r=0;e=t[r];r++){const t=e[0],r=this.parseMetho...
method generateRules (line 1) | generateRules(t){const e=this.context.customGenerators.lookup(t);e&&e(...
method defineAction (line 1) | defineAction(t,e){let r;try{r=i.Action.fromString(e)}catch(t){if("Rule...
method getFullPreconditions (line 1) | getFullPreconditions(t){const e=this.preconditions.get(t);return e||!t...
method definePrecondition (line 1) | definePrecondition(t,e,r,...n){const o=this.parsePrecondition(r,n),i=t...
method inheritRules (line 1) | inheritRules(){if(!this.inherits||!this.inherits.getSpeechRules().leng...
method ignoreRules (line 1) | ignoreRules(t,...e){let r=this.findAllRules((e=>e.name===t));if(!e.len...
method parsePrecondition_ (line 1) | parsePrecondition_(t){const e=this.context.customGenerators.lookup(t);...
method constructor (line 1) | constructor(){this.currentFlags={},this.parameters_={},this.correction...
method getInstance (line 1) | static getInstance(){return T.instance=T.instance||new T,T.instance}
method parseInput (line 1) | static parseInput(t){const e={},r=t.split(":");for(let t=0,n=r.length;...
method parseState (line 1) | static parseState(t){const e={},r=t.split(" ");for(let t=0,n=r.length;...
method translateString_ (line 1) | static translateString_(t){if(t.match(/:unit$/))return T.translateUnit...
method translateUnit_ (line 1) | static translateUnit_(t){t=T.prepareUnit_(t);const e=o.default.getInst...
method prepareUnit_ (line 1) | static prepareUnit_(t){const e=t.match(/:unit$/);return e?t.slice(0,e....
method cleanUnit_ (line 1) | static cleanUnit_(t){return t.match(/:unit$/)?t.replace(/:unit$/,""):t}
method clear (line 1) | clear(){this.parameters_={},this.stateStack_=[]}
method setParameter (line 1) | setParameter(t,e){const r=this.parameters_[t];return e?this.parameters...
method getParameter (line 1) | getParameter(t){return this.parameters_[t]}
method setCorrection (line 1) | setCorrection(t,e){this.corrections_[t]=e}
method setPreprocessor (line 1) | setPreprocessor(t,e){this.preprocessors_[t]=e}
method getCorrection (line 1) | getCorrection(t){return this.corrections_[t]}
method getState (line 1) | getState(){const t=[];for(const e in this.parameters_){const r=this.pa...
method pushState (line 1) | pushState(t){for(const e in t)t[e]=this.setParameter(e,t[e]);this.stat...
method popState (line 1) | popState(){const t=this.stateStack_.pop();for(const e in t)this.setPar...
method setAttribute (line 1) | setAttribute(t){if(t&&t.nodeType===n.NodeType.ELEMENT_NODE){const r=th...
method preprocess (line 1) | preprocess(t){return this.runProcessors_(t,this.preprocessors_)}
method correct (line 1) | correct(t){return this.runProcessors_(t,this.corrections_)}
method apply (line 1) | apply(t,e){return this.currentFlags=e||{},t=this.currentFlags.adjust||...
method runProcessors_ (line 1) | runProcessors_(t,e){for(const r in this.parameters_){const n=e[r];if(!...
method constructor (line 1) | constructor({type:t,content:e,attributes:r,grammar:n}){this.type=t,thi...
method grammarFromString (line 1) | static grammarFromString(t){return o.Grammar.parseInput(t)}
method fromString (line 1) | static fromString(t){const e={type:Q(t.substring(0,3))};let r=t.slice(...
method attributesFromString (line 1) | static attributesFromString(t){if("("!==t[0]||")"!==t.slice(-1))throw ...
method toString (line 1) | toString(){let t="";t+=function(t){switch(t){case i.NODE:return"[n]";c...
method grammarToString (line 1) | grammarToString(){return this.getGrammar().join(":")}
method getGrammar (line 1) | getGrammar(){const t=[];for(const e in this.grammar)!0===this.grammar[...
method attributesToString (line 1) | attributesToString(){const t=this.getAttributes(),e=this.grammarToStri...
method getAttributes (line 1) | getAttributes(){const t=[];for(const e in this.attributes){const r=thi...
method copyCollator (line 1) | copyCollator(){return new T}
method add (line 1) | add(t,e){const r=i.key(t,e.font);super.add(r,e)}
method addNode (line 1) | addNode(t){this.add(t.textContent,t)}
method toString (line 1) | toString(){const t=[];for(const e in this.map){const r=Array(e.length+...
method collateMeaning (line 1) | collateMeaning(){const t=new s;for(const e in this.map)t.map[e]=this.m...
method getSpeech (line 1) | getSpeech(t,e){const r=this.generateSpeech(t,e),i=this.getRebuilt().no...
method constructor (line 1) | constructor(t,e,r,n){super(t,e,r,n),this.node=t,this.generator=e,this....
method move (line 1) | move(t){this.key_=t;const e=super.move(t);return this.modifier=!1,e}
method up (line 1) | up(){return this.moved=Q.WalkerMoves.UP,this.eligibleCell_()?this.vert...
method down (line 1) | down(){return this.moved=Q.WalkerMoves.DOWN,this.eligibleCell_()?this....
method jumpCell (line 1) | jumpCell(){if(!this.isInTable_()||null===this.key_)return this.getFocu...
method undo (line 1) | undo(){const t=super.undo();return t===this.firstJump&&(this.firstJump...
method eligibleCell_ (line 1) | eligibleCell_(){const t=this.getFocus().getSemanticPrimary();return th...
method verticalMove_ (line 1) | verticalMove_(t){const e=this.previousLevel();if(!e)return null;const ...
method jumpCell_ (line 1) | jumpCell_(t,e){this.firstJump?this.virtualize(!1):(this.firstJump=this...
method isLegalJump_ (line 1) | isLegalJump_(t,e){const r=n.querySelectorAllByAttrValue(this.getRebuil...
method isInTable_ (line 1) | isInTable_(){let t=this.getFocus().getSemanticPrimary();for(;t;){if(-1...
function s (line 1) | function s(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r(...
method finalize (line 1) | finalize(t){return function(t){a="";const e=o.parseInput(`<all>${t}</a...
method pause (line 1) | pause(t){return""}
method prosodyElement (line 1) | prosodyElement(t,e){return t===i.personalityProps.LAYOUT?`<${e}>`:""}
method closeTag (line 1) | closeTag(t){return`</${t}>`}
method markup (line 1) | markup(t){const e=[];let r=[];for(const n of t){if(!n.layout){r.push(n...
method processContent (line 1) | processContent(t){const e=[],r=Q.personalityMarkup(t);for(let t,n=0;t=...
method constructor (line 1) | constructor(){this.customLoader=null,this.parsers={},this.comparator=n...
method defaultLocale (line 1) | set defaultLocale(t){this._defaultLocale=Q.Variables.ensureLocale(t,th...
method defaultLocale (line 1) | get defaultLocale(){return this._defaultLocale}
method getInstance (line 1) | static getInstance(){return s.instance=s.instance||new s,s.instance}
method defaultEvaluator (line 1) | static defaultEvaluator(t,e){return t}
method evaluateNode (line 1) | static evaluateNode(t){return s.nodeEvaluator(t)}
method getRate (line 1) | getRate(){const t=parseInt(this.rate,10);return isNaN(t)?100:t}
method setDynamicCstr (line 1) | setDynamicCstr(t){if(this.defaultLocale&&(n.DynamicCstr.DEFAULT_VALUES...
method configurate (line 1) | configurate(t){this.mode!==o.Mode.HTTP||this.config||(!function(t){con...
method setCustomLoader (line 1) | setCustomLoader(t){t&&(this.customLoader=t)}
method test (line 1) | static test(t){if(!t.mathmlTree)return!1;return"MMULTISCRIPTS"===n.tag...
method constructor (line 1) | constructor(t){super(t)}
method getMathml (line 1) | getMathml(){let t,e,r;if((0,T.setAttributes)(this.mml,this.semantic),t...
method constructor (line 1) | constructor(){super(),this.mactionName="maction"}
method highlightNode (line 1) | highlightNode(t){let e;if(this.isHighlighted(t))return e={node:t,backg...
method unhighlightNode (line 1) | unhighlightNode(t){const e=t.node.previousSibling;if(e&&e.hasAttribute...
method isMactionNode (line 1) | isMactionNode(t){return t.getAttribute("data-mml-node")===this.maction...
method getMactionNodes (line 1) | getMactionNodes(t){return Array.from(o.evalXPath(`.//*[@data-mml-node=...
method constructor (line 1) | constructor(t,e){this.base=t,this._conditions=[],this.constraints=[],t...
method conditions (line 1) | get conditions(){return this._conditions}
method addConstraint (line 1) | addConstraint(t){if(this.constraints.filter((e=>e.equal(t))).length)re...
method addBaseCondition (line 1) | addBaseCondition(t){this.addCondition(this.base,t)}
method addFullCondition (line 1) | addFullCondition(t){this.constraints.forEach((e=>this.addCondition(e,t...
method addCondition (line 1) | addCondition(t,e){const r=t.toString()+" "+e.toString();this.allCstr.c...
method constructor (line 1) | constructor(){super(),this.annotators=[],this.parseMethods.Alias=this....
method initialize (line 1) | initialize(){this.initialized||(this.annotations(),this.initialized=!0)}
method annotations (line 1) | annotations(){for(let t,e=0;t=this.annotators[e];e++)(0,i.activate)(th...
method defineAlias (line 1) | defineAlias(t,e,...r){const n=this.parsePrecondition(e,r);if(!n)return...
method defineRulesAlias (line 1) | defineRulesAlias(t,e,...r){const n=this.findAllRules((function(e){retu...
method defineSpecializedRule (line 1) | defineSpecializedRule(t,e,r,n){const o=this.parseCstr(e),i=this.findRu...
method defineSpecialized (line 1) | defineSpecialized(t,e,r){const n=this.parseCstr(r);if(!n)return void c...
method evaluateString (line 1) | evaluateString(t){const e=[];if(t.match(/^\s+$/))return e;let r=this.m...
method parse (line 1) | parse(t){super.parse(t),this.annotators=t.annotators||[]}
method addAlias_ (line 1) | addAlias_(t,e,r){const n=this.parsePrecondition(e,r),o=new T.SpeechRul...
method matchNumber_ (line 1) | matchNumber_(t){const e=t.match(new RegExp("^"+o.LOCALE.MESSAGES.regex...
method constructor (line 1) | constructor(t){this.components=t}
method fromString (line 1) | static fromString(t){const e=c(t,";").filter((function(t){return t.mat...
method toString (line 1) | toString(){return this.components.map((function(t){return t.toString()...
method copyCollator (line 1) | copyCollator(){return new s}
method add (line 1) | add(t,e){const r=this.retrieve(t,e.font);if(!r||!r.find((function(t){r...
method addNode (line 1) | addNode(t){this.add(t.textContent,t.meaning())}
method toString (line 1) | toString(){const t=[];for(const e in this.map){const r=Array(e.length+...
method reduce (line 1) | reduce(){for(const t in this.map)1!==this.map[t].length&&(this.map[t]=...
method default (line 1) | default(){const t=new i;for(const e in this.map)1===this.map[e].length...
method newDefault (line 1) | newDefault(){const t=this.default();this.reduce();const e=this.default...
method constructor (line 1) | constructor(){super("MathML"),this.parseMap_={SEMANTICS:this.semantics...
method getAttribute_ (line 1) | static getAttribute_(t,e,r){if(!t.hasAttribute(e))return r;const n=t.g...
method parse (line 1) | parse(t){Q.default.getInstance().setNodeFactory(this.getFactory());con...
method semantics_ (line 1) | semantics_(t,e){return e.length?this.parse(e[0]):this.getFactory().mak...
method rows_ (line 1) | rows_(t,e){const r=t.getAttribute("semantics");if(r&&r.match("bspr_"))...
method fraction_ (line 1) | fraction_(t,e){if(!e.length)return this.getFactory().makeEmptyNode();c...
method limits_ (line 1) | limits_(t,e){return Q.default.getInstance().limitNode(n.tagName(t),thi...
method root_ (line 1) | root_(t,e){return e[1]?this.getFactory().makeBranchNode("root",[this.p...
method sqrt_ (line 1) | sqrt_(t,e){const r=this.parseList(T.purgeNodes(e));return this.getFact...
method table_ (line 1) | table_(t,e){const r=t.getAttribute("semantics");if(r&&r.match("bspr_")...
method tableRow_ (line 1) | tableRow_(t,e){const r=this.getFactory().makeBranchNode("row",this.par...
method tableLabeledRow_ (line 1) | tableLabeledRow_(t,e){if(!e.length)return this.tableRow_(t,e);const r=...
method tableCell_ (line 1) | tableCell_(t,e){const r=this.parseList(T.purgeNodes(e));let n;n=r.leng...
method space_ (line 1) | space_(t,e){const r=t.getAttribute("width"),o=r&&r.match(/[a-z]*$/);if...
method text_ (line 1) | text_(t,e){const r=this.leaf_(t,e);return t.textContent?(r.updateConte...
method identifier_ (line 1) | identifier_(t,e){const r=this.leaf_(t,e);return Q.default.getInstance(...
method number_ (line 1) | number_(t,e){const r=this.leaf_(t,e);return Q.default.number(r),r}
method operator_ (line 1) | operator_(t,e){const r=this.leaf_(t,e);return Q.default.getInstance()....
method fenced_ (line 1) | fenced_(t,e){const r=this.parseList(T.purgeNodes(e)),n=s.getAttribute_...
method enclosed_ (line 1) | enclosed_(t,e){const r=this.parseList(T.purgeNodes(e)),n=this.getFacto...
method multiscripts_ (line 1) | multiscripts_(t,e){if(!e.length)return this.getFactory().makeEmptyNode...
method empty_ (line 1) | empty_(t,e){return this.getFactory().makeEmptyNode()}
method action_ (line 1) | action_(t,e){return e.length>1?this.parse(e[1]):this.getFactory().make...
method dummy_ (line 1) | dummy_(t,e){const r=this.getFactory().makeUnprocessed(t);return r.role...
method leaf_ (line 1) | leaf_(t,e){if(1===e.length&&e[0].nodeType!==n.NodeType.TEXT_NODE){cons...
method constructor (line 1) | constructor(){super(...arguments),this.modality=(0,n.addPrefix)("foreg...
method visitStree_ (line 1) | static visitStree_(t,e,r){if(t.childNodes.length){if(t.contentNodes.le...
method getSpeech (line 1) | getSpeech(t,e){return Q.getAttribute(t,this.modality)}
method generateSpeech (line 1) | generateSpeech(t,e){return this.getRebuilt()||this.setRebuilt(new i.Re...
method colorLeaves_ (line 1) | colorLeaves_(t){const e=[];s.visitStree_(this.getRebuilt().streeRoot,e...
method colorLeave_ (line 1) | colorLeave_(t,e,r){const n=Q.getBySemanticId(t,e);return!!n&&(n.setAtt...
function T (line 1) | function T(i){return function(T){return function(i){if(r)throw new TypeE...
method markup (line 1) | markup(t){this.setScaleFunction(-2,2,0,10,0);const e=i.personalityMark...
method error (line 1) | error(t){return'(error "'+o.Move.get(t)+'")'}
method prosodyElement (line 1) | prosodyElement(t,e){switch(e=this.applyScaleFunction(e),t){case n.pers...
method pause (line 1) | pause(t){return"(pause . "+this.pauseValue(t[n.personalityProps.PAUSE]...
method prosody_ (line 1) | prosody_(t){const e=t.open,r=[];for(let n,o=0;n=e[o];o++)r.push(this.p...
method constructor (line 1) | constructor(t=""){super(),this.message=t,this.name="SRE Error"}
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return!t.mathmlTree&&"line"===t.type&&"binomial"===t.role}
method getMathml (line 1) | getMathml(){if(!this.semantic.childNodes.length)return this.mml;const ...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){if(!t.mathmlTree||!t.childNodes.length)return!1;const e...
method getMathml (line 1) | getMathml(){const t=this.semantic.childNodes[0],e=t.childNodes[0],r=th...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){if(!t.mathmlTree||!t.childNodes.length)return!1;const e...
method walkTree_ (line 1) | static walkTree_(t){t&&i.walkTree(t)}
method getMathml (line 1) | getMathml(){const t=this.semantic.childNodes;return"limboth"!==this.se...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method multiscriptIndex (line 1) | static multiscriptIndex(t){return"punctuated"===t.type&&"dummy"===t.co...
method createNone_ (line 1) | static createNone_(t){const e=n.createElement("none");return t&&(0,Q.s...
method completeMultiscript (line 1) | completeMultiscript(t,e){const r=n.toArray(this.mml.childNodes).slice(...
method constructor (line 1) | constructor(t){super(t),this.inner=[],this.mml=t.mathmlTree}
method test (line 1) | static test(t){return"matrix"===t.type||"vector"===t.type||"cases"===t...
method getMathml (line 1) | getMathml(){const t=i.cloneContentNode(this.semantic.contentNodes[0]),...
method test (line 1) | static test(t){return!!t.mathmlTree&&"tensor"===t.type}
method constructor (line 1) | constructor(t){super(t)}
method getMathml (line 1) | getMathml(){i.walkTree(this.semantic.childNodes[0]);const t=o.CaseMult...
method constructor (line 1) | constructor(){this.context=new Q.SpeechRuleContext,this.parseOrder=o.D...
method compareStaticConstraints_ (line 1) | static compareStaticConstraints_(t,e){if(t.length!==e.length)return!1;...
method comparePreconditions_ (line 1) | static comparePreconditions_(t,e){const r=t.precondition,n=e.precondit...
method defineRule (line 1) | defineRule(t,e,r,n,...o){const Q=this.parseAction(r),T=this.parsePreco...
method addRule (line 1) | addRule(t){t.context=this.context,this.speechRules_.unshift(t)}
method deleteRule (line 1) | deleteRule(t){const e=this.speechRules_.indexOf(t);-1!==e&&this.speech...
method findRule (line 1) | findRule(t){for(let e,r=0;e=this.speechRules_[r];r++)if(t(e))return e;...
method findAllRules (line 1) | findAllRules(t){return this.speechRules_.filter(t)}
method evaluateDefault (line 1) | evaluateDefault(t){const e=t.textContent.slice(0);return e.match(/^\s+...
method evaluateWhitespace (line 1) | evaluateWhitespace(t){return[]}
method evaluateCustom (line 1) | evaluateCustom(t){const e=this.customTranscriptions[t];return void 0!=...
method evaluateCharacter (line 1) | evaluateCharacter(t){return this.evaluateCustom(t)||n.AuditoryDescript...
method removeDuplicates (line 1) | removeDuplicates(t){for(let e,r=this.speechRules_.length-1;e=this.spee...
method getSpeechRules (line 1) | getSpeechRules(){return this.speechRules_}
method setSpeechRules (line 1) | setSpeechRules(t){this.speechRules_=t}
method getPreconditions (line 1) | getPreconditions(){return this.preconditions}
method parseCstr (line 1) | parseCstr(t){try{return this.parser.parse(this.locale+"."+this.modalit...
method parsePrecondition (line 1) | parsePrecondition(t,e){try{const r=this.parsePrecondition_(t);t=r[0];l...
method parseAction (line 1) | parseAction(t){try{return i.Action.fromString(t)}catch(e){if("RuleErro...
method parse (line 1) | parse(t){this.modality=t.modality||this.modality,this.locale=t.locale|...
method parseRules (line 1) | parseRules(t){for(let e,r=0;e=t[r];r++){const t=e[0],r=this.parseMetho...
method generateRules (line 1) | generateRules(t){const e=this.context.customGenerators.lookup(t);e&&e(...
method defineAction (line 1) | defineAction(t,e){let r;try{r=i.Action.fromString(e)}catch(t){if("Rule...
method getFullPreconditions (line 1) | getFullPreconditions(t){const e=this.preconditions.get(t);return e||!t...
method definePrecondition (line 1) | definePrecondition(t,e,r,...n){const o=this.parsePrecondition(r,n),i=t...
method inheritRules (line 1) | inheritRules(){if(!this.inherits||!this.inherits.getSpeechRules().leng...
method ignoreRules (line 1) | ignoreRules(t,...e){let r=this.findAllRules((e=>e.name===t));if(!e.len...
method parsePrecondition_ (line 1) | parsePrecondition_(t){const e=this.context.customGenerators.lookup(t);...
method constructor (line 1) | constructor(){this.currentFlags={},this.parameters_={},this.correction...
method getInstance (line 1) | static getInstance(){return T.instance=T.instance||new T,T.instance}
method parseInput (line 1) | static parseInput(t){const e={},r=t.split(":");for(let t=0,n=r.length;...
method parseState (line 1) | static parseState(t){const e={},r=t.split(" ");for(let t=0,n=r.length;...
method translateString_ (line 1) | static translateString_(t){if(t.match(/:unit$/))return T.translateUnit...
method translateUnit_ (line 1) | static translateUnit_(t){t=T.prepareUnit_(t);const e=o.default.getInst...
method prepareUnit_ (line 1) | static prepareUnit_(t){const e=t.match(/:unit$/);return e?t.slice(0,e....
method cleanUnit_ (line 1) | static cleanUnit_(t){return t.match(/:unit$/)?t.replace(/:unit$/,""):t}
method clear (line 1) | clear(){this.parameters_={},this.stateStack_=[]}
method setParameter (line 1) | setParameter(t,e){const r=this.parameters_[t];return e?this.parameters...
method getParameter (line 1) | getParameter(t){return this.parameters_[t]}
method setCorrection (line 1) | setCorrection(t,e){this.corrections_[t]=e}
method setPreprocessor (line 1) | setPreprocessor(t,e){this.preprocessors_[t]=e}
method getCorrection (line 1) | getCorrection(t){return this.corrections_[t]}
method getState (line 1) | getState(){const t=[];for(const e in this.parameters_){const r=this.pa...
method pushState (line 1) | pushState(t){for(const e in t)t[e]=this.setParameter(e,t[e]);this.stat...
method popState (line 1) | popState(){const t=this.stateStack_.pop();for(const e in t)this.setPar...
method setAttribute (line 1) | setAttribute(t){if(t&&t.nodeType===n.NodeType.ELEMENT_NODE){const r=th...
method preprocess (line 1) | preprocess(t){return this.runProcessors_(t,this.preprocessors_)}
method correct (line 1) | correct(t){return this.runProcessors_(t,this.corrections_)}
method apply (line 1) | apply(t,e){return this.currentFlags=e||{},t=this.currentFlags.adjust||...
method runProcessors_ (line 1) | runProcessors_(t,e){for(const r in this.parameters_){const n=e[r];if(!...
method constructor (line 1) | constructor({type:t,content:e,attributes:r,grammar:n}){this.type=t,thi...
method grammarFromString (line 1) | static grammarFromString(t){return o.Grammar.parseInput(t)}
method fromString (line 1) | static fromString(t){const e={type:Q(t.substring(0,3))};let r=t.slice(...
method attributesFromString (line 1) | static attributesFromString(t){if("("!==t[0]||")"!==t.slice(-1))throw ...
method toString (line 1) | toString(){let t="";t+=function(t){switch(t){case i.NODE:return"[n]";c...
method grammarToString (line 1) | grammarToString(){return this.getGrammar().join(":")}
method getGrammar (line 1) | getGrammar(){const t=[];for(const e in this.grammar)!0===this.grammar[...
method attributesToString (line 1) | attributesToString(){const t=this.getAttributes(),e=this.grammarToStri...
method getAttributes (line 1) | getAttributes(){const t=[];for(const e in this.attributes){const r=thi...
method copyCollator (line 1) | copyCollator(){return new T}
method add (line 1) | add(t,e){const r=i.key(t,e.font);super.add(r,e)}
method addNode (line 1) | addNode(t){this.add(t.textContent,t)}
method toString (line 1) | toString(){const t=[];for(const e in this.map){const r=Array(e.length+...
method collateMeaning (line 1) | collateMeaning(){const t=new s;for(const e in this.map)t.map[e]=this.m...
method getSpeech (line 1) | getSpeech(t,e){const r=this.generateSpeech(t,e),i=this.getRebuilt().no...
method constructor (line 1) | constructor(t,e,r,n){super(t,e,r,n),this.node=t,this.generator=e,this....
method move (line 1) | move(t){this.key_=t;const e=super.move(t);return this.modifier=!1,e}
method up (line 1) | up(){return this.moved=Q.WalkerMoves.UP,this.eligibleCell_()?this.vert...
method down (line 1) | down(){return this.moved=Q.WalkerMoves.DOWN,this.eligibleCell_()?this....
method jumpCell (line 1) | jumpCell(){if(!this.isInTable_()||null===this.key_)return this.getFocu...
method undo (line 1) | undo(){const t=super.undo();return t===this.firstJump&&(this.firstJump...
method eligibleCell_ (line 1) | eligibleCell_(){const t=this.getFocus().getSemanticPrimary();return th...
method verticalMove_ (line 1) | verticalMove_(t){const e=this.previousLevel();if(!e)return null;const ...
method jumpCell_ (line 1) | jumpCell_(t,e){this.firstJump?this.virtualize(!1):(this.firstJump=this...
method isLegalJump_ (line 1) | isLegalJump_(t,e){const r=n.querySelectorAllByAttrValue(this.getRebuil...
method isInTable_ (line 1) | isInTable_(){let t=this.getFocus().getSemanticPrimary();for(;t;){if(-1...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(e){var r=t.call(this,e.document)||this;return r.window=e,r.pa...
function i (line 1) | function i(t){return"object"==typeof t&&null!==t}
method constructor (line 1) | constructor({context:t,text:e,userValue:r,annotation:n,attributes:o,pe...
method create (line 1) | static create(t,e={}){return t.text=n.Grammar.getInstance().apply(t.te...
method isEmpty (line 1) | isEmpty(){return 0===this.context.length&&0===this.text.length&&0===th...
method clone (line 1) | clone(){let t,e;if(this.personality){t={};for(const e in this.personal...
method toString (line 1) | toString(){return'AuditoryDescription(context="'+this.context+'" text...
method descriptionString (line 1) | descriptionString(){return this.context&&this.text?this.context+" "+th...
method descriptionSpan (line 1) | descriptionSpan(){return new o.Span(this.descriptionString(),this.attr...
method equals (line 1) | equals(t){return this.context===t.context&&this.text===t.text&&this.us...
method constructor (line 1) | constructor(){super(...arguments),this.ignoreElements=[n.personalityPr...
method setScaleFunction (line 1) | setScaleFunction(t,e,r,n,o=0){this.scaleFunction=i=>{const Q=(i-t)/(e-...
method applyScaleFunction (line 1) | applyScaleFunction(t){return this.scaleFunction?this.scaleFunction(t):t}
method ignoreElement (line 1) | ignoreElement(t){return-1!==this.ignoreElements.indexOf(t)}
method finalize (line 1) | finalize(t){return'<?xml version="1.0"?><!DOCTYPE SABLE PUBLIC "-//SAB...
method pause (line 1) | pause(t){return'<BREAK MSEC="'+this.pauseValue(t[n.personalityProps.PA...
method prosodyElement (line 1) | prosodyElement(t,e){switch(e=this.applyScaleFunction(e),t){case n.pers...
method closeTag (line 1) | closeTag(t){return"</"+t.toUpperCase()+">"}
method markup (line 1) | markup(t){let e="";const r=(0,o.personalityMarkup)(t).filter((t=>t.spa...
method constructor (line 1) | constructor(t,e){super(t,e),this.key=e.key||i.getKey_}
method getKey_ (line 1) | static getKey_(t){return"string"==typeof t?n.KeyCode[t.toUpperCase()]:t}
method constructor (line 1) | constructor(){this.color=null,this.mactionName="",this.currentHighligh...
method highlight (line 1) | highlight(t){this.currentHighlights.push(t.map((t=>{const e=this.highl...
method highlightAll (line 1) | highlightAll(t){const e=this.getMactionNodes(t);for(let t,r=0;t=e[r];r...
method unhighlight (line 1) | unhighlight(){const t=this.currentHighlights.pop();t&&t.forEach((t=>{t...
method unhighlightAll (line 1) | unhighlightAll(){for(;this.currentHighlights.length>0;)this.unhighligh...
method setColor (line 1) | setColor(t){this.color=t}
method colorString (line 1) | colorString(){return this.color.rgba()}
method addEvents (line 1) | addEvents(t,e){const r=this.getMactionNodes(t);for(let t,n=0;t=r[n];n+...
method getMactionNodes (line 1) | getMactionNodes(t){return Array.from(t.getElementsByClassName(this.mac...
method isMactionNode (line 1) | isMactionNode(t){const e=t.className||t.getAttribute("class");return!!...
method isHighlighted (line 1) | isHighlighted(t){return t.hasAttribute(i.ATTR)}
method setHighlighted (line 1) | setHighlighted(t){t.setAttribute(i.ATTR,"true")}
method unsetHighlighted (line 1) | unsetHighlighted(t){t.removeAttribute(i.ATTR)}
method colorizeAll (line 1) | colorizeAll(t){n.evalXPath(`.//*[@${o.Attribute.ID}]`,t).forEach((t=>t...
method uncolorizeAll (line 1) | uncolorizeAll(t){n.evalXPath(`.//*[@${o.Attribute.ID}]`,t).forEach((t=...
method colorize (line 1) | colorize(t){const e=(0,o.addPrefix)("foreground");t.hasAttribute(e)&&(...
method uncolorize (line 1) | uncolorize(t){const e=(0,o.addPrefix)("foreground")+"-old";t.hasAttrib...
method constructor (line 1) | constructor(){super(),this.mactionName="maction"}
method highlightNode (line 1) | highlightNode(t){const e={node:t,foreground:t.style.color,position:t.s...
method unhighlightNode (line 1) | unhighlightNode(t){const e=t.node;e.style.color=t.foreground,e.style.p...
method constructor (line 1) | constructor(){super(),this.mactionName="mjx-svg-maction"}
method highlightNode (line 1) | highlightNode(t){let e;if(this.isHighlighted(t))return e={node:t.previ...
method setHighlighted (line 1) | setHighlighted(t){"svg"===t.tagName&&super.setHighlighted(t)}
method unhighlightNode (line 1) | unhighlightNode(t){if("background"in t)return t.node.style.backgroundC...
method isMactionNode (line 1) | isMactionNode(t){let e=t.className||t.getAttribute("class");return e=v...
method constructor (line 1) | constructor(t,e){this.constraint=t,this.test=e,this.children_={},this....
method getConstraint (line 1) | getConstraint(){return this.constraint}
method getKind (line 1) | getKind(){return this.kind}
method applyTest (line 1) | applyTest(t){return this.test(t)}
method addChild (line 1) | addChild(t){const e=t.getConstraint(),r=this.children_[e];return this....
method getChild (line 1) | getChild(t){return this.children_[t]}
method getChildren (line 1) | getChildren(){const t=[];for(const e in this.children_)t.push(this.chi...
method findChildren (line 1) | findChildren(t){const e=[];for(const r in this.children_){const n=this...
method removeChild (line 1) | removeChild(t){delete this.children_[t]}
method toString (line 1) | toString(){return this.constraint}
method constructor (line 1) | constructor(){this.root=(0,o.getNode)(n.TrieNodeKind.ROOT,"",null)}
method collectRules_ (line 1) | static collectRules_(t){const e=[];let r=[t];for(;r.length;){const t=r...
method printWithDepth_ (line 1) | static printWithDepth_(t,e,r){r+=new Array(e+2).join(e.toString())+": ...
method order_ (line 1) | static order_(t){const e=t.getChildren();if(!e.length)return 0;const r...
method addRule (line 1) | addRule(t){let e=this.root;const r=t.context,o=t.dynamicCstr.getValues...
method lookupRules (line 1) | lookupRules(t,e){let r=[this.root];const o=[];for(;e.length;){const t=...
method hasSubtrie (line 1) | hasSubtrie(t){let e=this.root;for(let r=0,n=t.length;r<n;r++){const n=...
method toString (line 1) | toString(){return i.printWithDepth_(this.root,0,"")}
method collectRules (line 1) | collectRules(){return i.collectRules_(this.root)}
method order (line 1) | order(){return i.order_(this.root)}
method enumerate (line 1) | enumerate(t){return this.enumerate_(this.root,t)}
method byConstraint (line 1) | byConstraint(t){let e=this.root;for(;t.length&&e;){const r=t.shift();e...
method enumerate_ (line 1) | enumerate_(t,e){e=e||{};const r=t.getChildren();for(let t,o=0;t=r[o];o...
method addNode_ (line 1) | addNode_(t,e,r,n){let i=t.getChild(e);return i||(i=(0,o.getNode)(r,e,n...
method constructor (line 1) | constructor(){super(...arguments),this.modality="braille",this.customT...
method evaluateString (line 1) | evaluateString(t){const e=[],r=Array.from(t);for(let t=0;t<r.length;t+...
method annotations (line 1) | annotations(){for(let t,e=0;t=this.annotators[e];e++)(0,n.activate)(th...
method constructor (line 1) | constructor(){this.category="",this.rules=new Map}
method parseUnicode (line 1) | static parseUnicode(t){const e=parseInt(t,16);return String.fromCodePo...
method testDynamicConstraints_ (line 1) | static testDynamicConstraints_(t,e){return n.default.getInstance().str...
method defineRulesFromMappings (line 1) | defineRulesFromMappings(t,e,r,n,o){for(const i in o)for(const Q in o[i...
method getRules (line 1) | getRules(t){let e=this.rules.get(t);return e||(e=[],this.rules.set(t,e...
method defineRuleFromStrings (line 1) | defineRuleFromStrings(t,e,r,o,i,Q,T){let s=this.getRules(e);const a=n....
method lookupRule (line 1) | lookupRule(t,e){let r=this.getRules(e.getValue(o.Axis.LOCALE));return ...
method constructor (line 1) | constructor(){this.map={}}
method key (line 1) | static key(t,e){return e?t+":"+e:t}
method add (line 1) | add(t,e){this.map[i.key(t,e.font)]=e}
method addNode (line 1) | addNode(t){this.add(t.textContent,t.meaning())}
method retrieve (line 1) | retrieve(t,e){return this.map[i.key(t,e)]}
method retrieveNode (line 1) | retrieveNode(t){return this.retrieve(t.textContent,t.font)}
method size (line 1) | size(){return Object.keys(this.map).length}
method getSpeech (line 1) | getSpeech(t,e){return n.getAttribute(t,this.modality)}
method getSpeech (line 1) | getSpeech(t,e){return super.getSpeech(t,e),n.getAttribute(t,this.modal...
method getSpeech (line 1) | getSpeech(t,e){return o.connectAllMactions(e,this.getRebuilt().xml),th...
method constructor (line 1) | constructor(t,e,r,n){super(t,e,r,n),this.node=t,this.generator=e,this....
method initLevels (line 1) | initLevels(){const t=new o.Levels;return t.push([this.getFocus()]),t}
method up (line 1) | up(){super.up();const t=this.previousLevel();if(!t)return null;this.le...
method down (line 1) | down(){super.down();const t=this.nextLevel();return 0===t.length?null:...
method combineContentChildren (line 1) | combineContentChildren(t,e,r,n){switch(t){case"relseq":case"infixop":c...
method combinePunctuations (line 1) | combinePunctuations(t,e,r,n){if(0===t.length)return n;const o=t.shift(...
method makePairList (line 1) | makePairList(t,e){if(0===t.length)return[];if(1===t.length)return[this...
method left (line 1) | left(){super.left();const t=this.levels.indexOf(this.getFocus());if(nu...
method right (line 1) | right(){super.right();const t=this.levels.indexOf(this.getFocus());if(...
method findFocusOnLevel (line 1) | findFocusOnLevel(t){return this.levels.find((e=>e.getSemanticPrimary()...
function Q (line 1) | function Q(t,e){var r,o;try{for(var T=n(Object.keys(e)),s=T.next();!s.do...
method markup (line 1) | markup(t){const e=i.personalityMarkup(t);let r="",o=null,Q=!1;for(let ...
method pause (line 1) | pause(t){let e;return e="number"==typeof t?t<=250?"short":t<=500?"medi...
method finalize (line 1) | finalize(t){return'<?xml version="1.0"?><speak version="1.1" xmlns="ht...
method pause (line 1) | pause(t){return'<break time="'+this.pauseValue(t[o.personalityProps.PA...
method prosodyElement (line 1) | prosodyElement(t,e){const r=(e=Math.floor(this.applyScaleFunction(e)))...
method closeTag (line 1) | closeTag(t){return"</prosody>"}
method markup (line 1) | markup(t){this.setScaleFunction(-2,2,-100,100,2);const e=o.personality...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return!!t.mathmlTree&&"line"===t.type}
method getMathml (line 1) | getMathml(){return this.semantic.contentNodes.length&&o.walkTree(this....
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return!!t.mathmlTree&&("inference"===t.type||"premises"...
method getMathml (line 1) | getMathml(){return this.semantic.childNodes.length?(this.semantic.cont...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return"punctuated"===t.type&&("text"===t.role||t.conten...
method getMathml (line 1) | getMathml(){const t=[],e=o.collapsePunctuated(this.semantic,t);return ...
method constructor (line 1) | constructor(){this.map={}}
method add (line 1) | add(t,e){const r=this.map[t];r?r.push(e):this.map[t]=[e]}
method retrieve (line 1) | retrieve(t,e){return this.map[i.key(t,e)]}
method retrieveNode (line 1) | retrieveNode(t){return this.retrieve(t.textContent,t.font)}
method copy (line 1) | copy(){const t=this.copyCollator();for(const e in this.map)t.map[e]=th...
method minimize (line 1) | minimize(){for(const t in this.map)1===this.map[t].length&&delete this...
method minimalCollator (line 1) | minimalCollator(){const t=this.copy();for(const e in t.map)1===t.map[e...
method isMultiValued (line 1) | isMultiValued(){for(const t in this.map)if(this.map[t].length>1)return...
method isEmpty (line 1) | isEmpty(){return!Object.keys(this.map).length}
method constructor (line 1) | constructor(t){this.id=t,this.mathml=[],this.parent=null,this.type="un...
method fromXml (line 1) | static fromXml(t){const e=parseInt(t.getAttribute("id"),10),r=new Q(e)...
method setAttribute (line 1) | static setAttribute(t,e,r,n){n=n||r;const o=e.getAttribute(r);o&&(t[n]...
method processChildren (line 1) | static processChildren(t,e){for(const r of n.toArray(e.childNodes)){if...
method querySelectorAll (line 1) | querySelectorAll(t){let e=[];for(let r,n=0;r=this.childNodes[n];n++)e=...
method xml (line 1) | xml(t,e){const r=function(r,n){const o=n.map((function(r){return r.xml...
method toString (line 1) | toString(t=!1){const e=n.parseInput("<snode/>");return n.serializeXml(...
method allAttributes (line 1) | allAttributes(){const t=[];return t.push(["role",this.role]),"unknown"...
method xmlAnnotation (line 1) | xmlAnnotation(){const t=[];for(const e in this.annotation)this.annotat...
method toJson (line 1) | toJson(){const t={};t.type=this.type;const e=this.allAttributes();for(...
method updateContent (line 1) | updateContent(t,e){const r=e?t.replace(/^[ \f\n\r\t\v\u200b]*/,"").rep...
method addMathmlNodes (line 1) | addMathmlNodes(t){for(let e,r=0;e=t[r];r++)-1===this.mathml.indexOf(e)...
method appendChild (line 1) | appendChild(t){this.childNodes.push(t),this.addMathmlNodes(t.mathml),t...
method replaceChild (line 1) | replaceChild(t,e){const r=this.childNodes.indexOf(t);if(-1===r)return;...
method appendContentNode (line 1) | appendContentNode(t){t&&(this.contentNodes.push(t),this.addMathmlNodes...
method removeContentNode (line 1) | removeContentNode(t){if(t){const e=this.contentNodes.indexOf(t);-1!==e...
method equals (line 1) | equals(t){if(!t)return!1;if(this.type!==t.type||this.role!==t.role||th...
method displayTree (line 1) | displayTree(){console.info(this.displayTree_(0))}
method addAnnotation (line 1) | addAnnotation(t,e){e&&this.addAnnotation_(t,e)}
method getAnnotation (line 1) | getAnnotation(t){const e=this.annotation[t];return e||[]}
method hasAnnotation (line 1) | hasAnnotation(t,e){const r=this.annotation[t];return!!r&&-1!==r.indexO...
method parseAnnotation (line 1) | parseAnnotation(t){const e=t.split(";");for(let t=0,r=e.length;t<r;t++...
method meaning (line 1) | meaning(){return{type:this.type,role:this.role,font:this.font}}
method xmlAttributes (line 1) | xmlAttributes(t){const e=this.allAttributes();for(let r,n=0;r=e[n];n++...
method addExternalAttributes (line 1) | addExternalAttributes(t){for(const e in this.attributes)t.setAttribute...
method removeMathmlNodes (line 1) | removeMathmlNodes(t){const e=this.mathml;for(let r,n=0;r=t[n];n++){con...
method displayTree_ (line 1) | displayTree_(t){t++;const e=Array(t).join(" ");let r="";r+="\n"+e+thi...
method mathmlTreeString (line 1) | mathmlTreeString(){return this.mathmlTree?this.mathmlTree.toString():"...
method addAnnotation_ (line 1) | addAnnotation_(t,e){const r=this.annotation[t];r?r.push(e):this.annota...
method constructor (line 1) | constructor(t,e=null){this.comparator=t,this.type=e,n(this)}
method compare (line 1) | compare(t,e){return this.type&&this.type===t.type&&this.type===e.type?...
method constructor (line 1) | constructor(t){this.parents=null,this.levelsMap=null,t=0===t?t:t||[],t...
method fromTree (line 1) | static fromTree(t){return Q.fromNode(t.root)}
method fromNode (line 1) | static fromNode(t){return new Q(Q.fromNode_(t))}
method fromString (line 1) | static fromString(t){return new Q(Q.fromString_(t))}
method simpleCollapseStructure (line 1) | static simpleCollapseStructure(t){return"number"==typeof t}
method contentCollapseStructure (line 1) | static contentCollapseStructure(t){return!!t&&!Q.simpleCollapseStructu...
method interleaveIds (line 1) | static interleaveIds(t,e){return n.interleaveLists(Q.collapsedLeafs(t)...
method collapsedLeafs (line 1) | static collapsedLeafs(...t){return t.reduce(((t,e)=>{return t.concat((...
method fromStructure (line 1) | static fromStructure(t,e){return new Q(Q.tree_(t,e.root))}
method combineContentChildren (line 1) | static combineContentChildren(t,e,r){switch(t.type){case"relseq":case"...
method makeSexp_ (line 1) | static makeSexp_(t){return Q.simpleCollapseStructure(t)?t.toString():Q...
method fromString_ (line 1) | static fromString_(t){let e=t.replace(/\(/g,"[");return e=e.replace(/\...
method fromNode_ (line 1) | static fromNode_(t){if(!t)return[];const e=t.contentNodes;let r;e.leng...
method tree_ (line 1) | static tree_(t,e){if(!e)return[];if(!e.childNodes.length)return e.id;c...
method addOwns_ (line 1) | static addOwns_(t,e){const r=t.getAttribute(i.Attribute.COLLAPSED),n=r...
method realLeafs_ (line 1) | static realLeafs_(t){if(Q.simpleCollapseStructure(t))return[t];if(Q.co...
method populate (line 1) | populate(){this.parents&&this.levelsMap||(this.parents={},this.levelsM...
method toString (line 1) | toString(){return Q.makeSexp_(this.array)}
method populate_ (line 1) | populate_(t,e,r){if(Q.simpleCollapseStructure(t))return t=t,this.level...
method isRoot (line 1) | isRoot(t){return t===this.levelsMap[t][0]}
method directChildren (line 1) | directChildren(t){if(!this.isRoot(t))return[];return this.levelsMap[t]...
method subtreeNodes (line 1) | subtreeNodes(t){if(!this.isRoot(t))return[];const e=(t,r)=>{Q.simpleCo...
method constructor (line 1) | constructor(t,e,r,n){super(t,e,r,n),this.node=t,this.generator=e,this....
method initLevels (line 1) | initLevels(){const t=new i.Levels;return t.push([this.primaryId()]),t}
method up (line 1) | up(){super.up();const t=this.previousLevel();return t?(this.levels.pop...
method down (line 1) | down(){super.down();const t=this.nextLevel();if(0===t.length)return nu...
method combineContentChildren (line 1) | combineContentChildren(t,e,r,o){switch(t){case"relseq":case"infixop":c...
method left (line 1) | left(){super.left();const t=this.levels.indexOf(this.primaryId());if(n...
method right (line 1) | right(){super.right();const t=this.levels.indexOf(this.primaryId());if...
method findFocusOnLevel (line 1) | findFocusOnLevel(t){return this.singletonFocus(t.toString())}
method focusDomNodes (line 1) | focusDomNodes(){return[this.getFocus().getDomPrimary()]}
method focusSemanticNodes (line 1) | focusSemanticNodes(){return[this.getFocus().getSemanticPrimary()]}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(e,r){var n=t.call(this,e)||this;return n.package=r,n}
function t (line 1) | function t(e,r){void 0===r&&(r=!1),this.isLoaded=!1,this.isLoading=!1,th...
function u (line 1) | function u(e){return T.visitTree(e,t.document)}
method constructor (line 1) | constructor(){super([Q.Axis.LOCALE,Q.Axis.MODALITY,Q.Axis.DOMAIN,Q.Axi...
method parse (line 1) | parse(t){const e=super.parse(t);let r=e.getValue(Q.Axis.STYLE);const n...
method fromPreference (line 1) | fromPreference(t){return a.fromPreference(t)}
method toPreference (line 1) | toPreference(t){return a.toPreference(t)}
method constructor (line 1) | constructor(t){this.mathml=t,this.factory=new Q.SemanticNodeFactory,th...
method addAttributes (line 1) | static addAttributes(t,e,r){r&&1===e.childNodes.length&&e.childNodes[0...
method textContent (line 1) | static textContent(t,e,r){if(!r&&e.textContent)return void(t.textConte...
method isPunctuated (line 1) | static isPunctuated(t){return!s.SemanticSkeleton.simpleCollapseStructu...
method getTree (line 1) | getTree(){return this.stree}
method assembleTree (line 1) | assembleTree(t){const e=this.makeNode(t),r=c.splitAttribute(c.getAttri...
method makeNode (line 1) | makeNode(t){const e=c.getAttribute(t,o.Attribute.TYPE),r=c.getAttribut...
method makePunctuation (line 1) | makePunctuation(t){const e=this.createNode(t);return e.updateContent((...
method makePunctuated (line 1) | makePunctuated(t,e,r){const n=this.createNode(e[0]);n.type="punctuated...
method makeEmpty (line 1) | makeEmpty(t,e,r){const n=this.createNode(e);n.type="empty",n.embellish...
method makeIndex (line 1) | makeIndex(t,e,r){if(u.isPunctuated(e))return this.makePunctuated(t,e,r...
method postProcess (line 1) | postProcess(t,e){const r=s.SemanticSkeleton.fromString(e).array;if("su...
method createNode (line 1) | createNode(t){const e=this.factory.makeNode(t);return this.nodeDict[t....
method collapsedChildren_ (line 1) | collapsedChildren_(t){const e=t=>{const r=this.nodeDict[t[0]];r.childN...
method setParent (line 1) | setParent(t,e){const r=c.getBySemanticId(this.mathml,t),n=this.assembl...
function p (line 1) | function p(){T=new e.MathJax._.core.MmlTree.SerializedMmlVisitor.Seriali...
function h (line 1) | function h(){var e,r;t.input&&t.output&&d();var n=t.output?t.output.name...
method constructor (line 1) | constructor(t,e){super(t,p(t)),this.context=e,this.kind=a.TrieNodeKind...
method applyTest (line 1) | applyTest(t){return this.test?this.test(t):this.context.applyQuery(t,t...
function d (line 1) | function d(){e.MathJax.typeset=function(e){void 0===e&&(e=null),t.docume...
method constructor (line 1) | constructor(t,e){super(t,p(t)),this.context=e,this.kind=a.TrieNodeKind...
method applyTest (line 1) | applyTest(t){return this.test?this.test(t):this.context.applyConstrain...
function f (line 1) | function f(r,n,o){var i=r+"2"+n;e.MathJax[i]=function(e,r){return void 0...
function L (line 1) | function L(r,n){var o=e.MathJax._.core.MathItem.STATE;e.MathJax[r+"2mml"...
method constructor (line 1) | constructor(){this.trie=null,this.evaluators_={},this.trie=new f.Trie}
method getInstance (line 1) | static getInstance(){return L.instance=L.instance||new L,L.instance}
method debugSpeechRule (line 1) | static debugSpeechRule(t,e){const r=t.precondition,n=t.context.applyQu...
method debugNamedSpeechRule (line 1) | static debugNamedSpeechRule(t,e){const r=L.getInstance().trie.collectR...
method evaluateNode (line 1) | evaluateNode(t){(0,s.updateEvaluator)(t);const e=(new Date).getTime();...
method toString (line 1) | toString(){return this.trie.collectRules().map((t=>t.toString())).join...
method runInSetting (line 1) | runInSetting(t,e){const r=Q.default.getInstance(),n={};for(const e in ...
method addStore (line 1) | addStore(t){const e=y(t);"abstract"!==e.kind&&e.getSpeechRules().forEa...
method processGrammar (line 1) | processGrammar(t,e,r){const n={};for(const o in r){const i=r[o];n[o]="...
method addEvaluator (line 1) | addEvaluator(t){const e=t.evaluateDefault.bind(t),r=this.evaluators_[t...
method getEvaluator (line 1) | getEvaluator(t,e){const r=this.evaluators_[t]||this.evaluators_[u.Dyna...
method enumerate (line 1) | enumerate(t){return this.trie.enumerate(t)}
method evaluateNode_ (line 1) | evaluateNode_(t){return t?(this.updateConstraint_(),this.evaluateTree_...
method evaluateTree_ (line 1) | evaluateTree_(t){const e=Q.default.getInstance();let r;o.Debugger.getI...
method evaluateNodeList_ (line 1) | evaluateNodeList_(t,e,r,o,i,Q){if(!e.length)return[];const T=o||"",s=Q...
method addLayout (line 1) | addLayout(t,e,r){const o=e.layout;o&&(o.match(/^begin/)?t.unshift(new ...
method addPersonality_ (line 1) | addPersonality_(t,e,r,o){const i={};let Q=null;for(const t of T.person...
method addExternalAttributes_ (line 1) | addExternalAttributes_(t,e){if(e.hasAttributes()){const r=e.attributes...
method addRelativePersonality_ (line 1) | addRelativePersonality_(t,e){if(!t.personality)return t.personality=e,...
method updateConstraint_ (line 1) | updateConstraint_(){const t=Q.default.getInstance().dynamicCstr,e=Q.de...
method makeSet_ (line 1) | makeSet_(t,e){return e&&Object.keys(e).length?t.split(":"):[t]}
method lookupRule (line 1) | lookupRule(t,e){if(!t||t.nodeType!==i.NodeType.ELEMENT_NODE&&t.nodeTyp...
method lookupRules (line 1) | lookupRules(t,e){return this.trie.lookupRules(t,e.allProperties())}
method pickMostConstraint_ (line 1) | pickMostConstraint_(t,e){const r=Q.default.getInstance().comparator;re...
function m (line 1) | function m(t,r){e.MathJax[t+"Reset"]=function(){for(var t=[],e=0;e<argum...
function y (line 1) | function y(){var r,n,i=[];try{for(var Q=o(e.CONFIG.input),T=Q.next();!T....
function H (line 1) | function H(){var r=e.CONFIG.output;if(!r)return null;var n=t.constructor...
function g (line 1) | function g(){var r=e.CONFIG.adaptor;if(!r||"none"===r)return null;var n=...
method constructor (line 1) | constructor(t,e,r,n){this.node=t,this.generator=e,this.highlighter=r,t...
method getXml (line 1) | getXml(){return this.xml_||(this.xml_=i.parseInput(this.xmlString_)),t...
method getRebuilt (line 1) | getRebuilt(){return this.rebuilt_||this.rebuildStree(),this.rebuilt_}
method isActive (line 1) | isActive(){return this.active_}
method activate (line 1) | activate(){this.isActive()||(this.generator.start(),this.toggleActive_...
method deactivate (line 1) | deactivate(){this.isActive()&&(m.WalkerState.setState(this.id,this.pri...
method getFocus (line 1) | getFocus(t=!1){return this.focus_||(this.focus_=this.singletonFocus(th...
method setFocus (line 1) | setFocus(t){this.focus_=t}
method getDepth (line 1) | getDepth(){return this.levels.depth()-1}
method isSpeech (line 1) | isSpeech(){return this.generator.modality===a.Attribute.SPEECH}
method focusDomNodes (line 1) | focusDomNodes(){return this.getFocus().getDomNodes()}
method focusSemanticNodes (line 1) | focusSemanticNodes(){return this.getFocus().getSemanticNodes()}
method speech (line 1) | speech(){const t=this.focusDomNodes();if(!t.length)return"";const e=th...
method move (line 1) | move(t){const e=this.keyMapping.get(t);if(!e)return null;const r=e();r...
method up (line 1) | up(){return this.moved=m.WalkerMoves.UP,this.getFocus()}
method down (line 1) | down(){return this.moved=m.WalkerMoves.DOWN,this.getFocus()}
method left (line 1) | left(){return this.moved=m.WalkerMoves.LEFT,this.getFocus()}
method right (line 1) | right(){return this.moved=m.WalkerMoves.RIGHT,this.getFocus()}
method repeat (line 1) | repeat(){return this.moved=m.WalkerMoves.REPEAT,this.getFocus().clone()}
method depth (line 1) | depth(){return this.moved=this.isSpeech()?m.WalkerMoves.DEPTH:m.Walker...
method home (line 1) | home(){this.moved=m.WalkerMoves.HOME;return this.singletonFocus(this.r...
method getBySemanticId (line 1) | getBySemanticId(t){return y.getBySemanticId(this.node,t)}
method primaryId (line 1) | primaryId(){return this.getFocus().getSemanticPrimary().id.toString()}
method expand (line 1) | expand(){const t=this.getFocus().getDomPrimary(),e=this.actionable_(t)...
method expandable (line 1) | expandable(t){return!!this.actionable_(t)&&0===t.childNodes.length}
method collapsible (line 1) | collapsible(t){return!!this.actionable_(t)&&t.childNodes.length>0}
method restoreState (line 1) | restoreState(){if(!this.highlighter)return;const t=m.WalkerState.getSt...
method updateFocus (line 1) | updateFocus(){this.setFocus(f.Focus.factory(this.getFocus().getSemanti...
method rebuildStree (line 1) | rebuildStree(){this.rebuilt_=new L.RebuildStree(this.getXml()),this.ro...
method previousLevel (line 1) | previousLevel(){const t=this.getFocus().getDomPrimary();return t?y.get...
method nextLevel (line 1) | nextLevel(){const t=this.getFocus().getDomPrimary();let e,r;if(t){e=y....
method singletonFocus (line 1) | singletonFocus(t){this.getRebuilt();const e=this.retrieveVisuals(t);re...
method retrieveVisuals (line 1) | retrieveVisuals(t){if(!this.skeleton)return[t];const e=parseInt(t,10),...
method subtreeIds (line 1) | subtreeIds(t,e){const r=H.evalXPath(`//*[@data-semantic-id="${t}"]`,th...
method focusFromId (line 1) | focusFromId(t,e){return f.Focus.factory(t,e,this.getRebuilt(),this.node)}
method summary (line 1) | summary(){return this.moved=this.isSpeech()?m.WalkerMoves.SUMMARY:m.Wa...
method detail (line 1) | detail(){return this.moved=this.isSpeech()?m.WalkerMoves.DETAIL:m.Walk...
method specialMove (line 1) | specialMove(){return null}
method virtualize (line 1) | virtualize(t){return this.cursors.push({focus:this.getFocus(),levels:t...
method previous (line 1) | previous(){const t=this.cursors.pop();return t?(this.levels=t.levels,t...
method undo (line 1) | undo(){let t;do{t=this.cursors.pop()}while(t&&!t.undo);return t?(this....
method update (line 1) | update(t){this.generator.setOptions(t),(0,T.setup)(t).then((()=>p.gene...
method nextRules (line 1) | nextRules(){const t=this.generator.getOptions();return"speech"!==t.mod...
method nextStyle (line 1) | nextStyle(t,e){if("mathspeak"===t){const t=["default","brief","sbrief"...
method previousRules (line 1) | previousRules(){const t=this.generator.getOptions();return"speech"!==t...
method refocus (line 1) | refocus(){let t,e=this.getFocus();for(;!e.getNodes().length;){t=this.l...
method toggleActive_ (line 1) | toggleActive_(){this.active_=!this.active_}
method mergePrefix_ (line 1) | mergePrefix_(t,e=[]){const r=this.isSpeech()?this.prefix_():"";r&&t.un...
method prefix_ (line 1) | prefix_(){const t=this.getFocus().getDomNodes(),e=this.getFocus().getS...
method postfix_ (line 1) | postfix_(){const t=this.getFocus().getDomNodes();return t[0]?y.getAttr...
method depth_ (line 1) | depth_(){const t=c.Grammar.getInstance().getParameter("depth");c.Gramm...
method actionable_ (line 1) | actionable_(t){const e=null==t?void 0:t.parentNode;return e&&this.high...
method summary_ (line 1) | summary_(){const t=this.getFocus().getSemanticPrimary().id.toString(),...
method detail_ (line 1) | detail_(){const t=this.getFocus().getSemanticPrimary().id.toString(),e...
function b (line 1) | function b(){var r,n,i=e.CONFIG.handler;if(!i||"none"===i||!t.adaptor)re...
function v (line 1) | function v(r){return void 0===r&&(r=null),s.document(r||e.CONFIG.documen...
function t (line 1) | function t(t){void 0===t&&(t=null),this.document=t}
function t (line 1) | function t(t){var e=this.constructor;this.options=(0,n.userOptions)((0,n...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function t (line 1) | function t(t,e){void 0===e&&(e=5),this.documentClass=i,this.adaptor=t,th...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function t (line 1) | function t(t){void 0===t&&(t={}),this.adaptor=null,this.mmlFactory=null;...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function t (line 1) | function t(e,r,n){var o=this,i=this.constructor;this.document=e,this.opt...
function t (line 1) | function t(t,r,n,o,i){void 0===n&&(n=!0),void 0===o&&(o={i:0,n:0,delim:"...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function t (line 1) | function t(t,e){this.global=e,this.defaults=Object.create(e),this.inheri...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.docu...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function r (line 1) | function r(e,r,n){void 0===r&&(r={}),void 0===n&&(n=[]);var o=t.call(thi...
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){return null!==t&&t.apply(this,arguments)||this}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function r (line 1) | function r(){return null!==t&&t.apply(this,arguments)||this}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.text...
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.xml=...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(e,r,n){var o=t.call(this,e,r,n)||this;return o.texclass=Q.TEX...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._tex...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._cor...
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.prop...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texc...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.prop...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(e){return void 0===e&&(e=null),e||(e=new i.MmlFactory),t.call...
function i (line 1) | function i(t,e,r,n){return void 0===r&&(r=o.TEXCLASS.BIN),void 0===n&&(n...
method constructor (line 1) | constructor({context:t,text:e,userValue:r,annotation:n,attributes:o,pe...
method create (line 1) | static create(t,e={}){return t.text=n.Grammar.getInstance().apply(t.te...
method isEmpty (line 1) | isEmpty(){return 0===this.context.length&&0===this.text.length&&0===th...
method clone (line 1) | clone(){let t,e;if(this.personality){t={};for(const e in this.personal...
method toString (line 1) | toString(){return'AuditoryDescription(context="'+this.context+'" text...
method descriptionString (line 1) | descriptionString(){return this.context&&this.text?this.context+" "+th...
method descriptionSpan (line 1) | descriptionSpan(){return new o.Span(this.descriptionString(),this.attr...
method equals (line 1) | equals(t){return this.context===t.context&&this.text===t.text&&this.us...
method constructor (line 1) | constructor(){super(...arguments),this.ignoreElements=[n.personalityPr...
method setScaleFunction (line 1) | setScaleFunction(t,e,r,n,o=0){this.scaleFunction=i=>{const Q=(i-t)/(e-...
method applyScaleFunction (line 1) | applyScaleFunction(t){return this.scaleFunction?this.scaleFunction(t):t}
method ignoreElement (line 1) | ignoreElement(t){return-1!==this.ignoreElements.indexOf(t)}
method finalize (line 1) | finalize(t){return'<?xml version="1.0"?><!DOCTYPE SABLE PUBLIC "-//SAB...
method pause (line 1) | pause(t){return'<BREAK MSEC="'+this.pauseValue(t[n.personalityProps.PA...
method prosodyElement (line 1) | prosodyElement(t,e){switch(e=this.applyScaleFunction(e),t){case n.pers...
method closeTag (line 1) | closeTag(t){return"</"+t.toUpperCase()+">"}
method markup (line 1) | markup(t){let e="";const r=(0,o.personalityMarkup)(t).filter((t=>t.spa...
method constructor (line 1) | constructor(t,e){super(t,e),this.key=e.key||i.getKey_}
method getKey_ (line 1) | static getKey_(t){return"string"==typeof t?n.KeyCode[t.toUpperCase()]:t}
method constructor (line 1) | constructor(){this.color=null,this.mactionName="",this.currentHighligh...
method highlight (line 1) | highlight(t){this.currentHighlights.push(t.map((t=>{const e=this.highl...
method highlightAll (line 1) | highlightAll(t){const e=this.getMactionNodes(t);for(let t,r=0;t=e[r];r...
method unhighlight (line 1) | unhighlight(){const t=this.currentHighlights.pop();t&&t.forEach((t=>{t...
method unhighlightAll (line 1) | unhighlightAll(){for(;this.currentHighlights.length>0;)this.unhighligh...
method setColor (line 1) | setColor(t){this.color=t}
method colorString (line 1) | colorString(){return this.color.rgba()}
method addEvents (line 1) | addEvents(t,e){const r=this.getMactionNodes(t);for(let t,n=0;t=r[n];n+...
method getMactionNodes (line 1) | getMactionNodes(t){return Array.from(t.getElementsByClassName(this.mac...
method isMactionNode (line 1) | isMactionNode(t){const e=t.className||t.getAttribute("class");return!!...
method isHighlighted (line 1) | isHighlighted(t){return t.hasAttribute(i.ATTR)}
method setHighlighted (line 1) | setHighlighted(t){t.setAttribute(i.ATTR,"true")}
method unsetHighlighted (line 1) | unsetHighlighted(t){t.removeAttribute(i.ATTR)}
method colorizeAll (line 1) | colorizeAll(t){n.evalXPath(`.//*[@${o.Attribute.ID}]`,t).forEach((t=>t...
method uncolorizeAll (line 1) | uncolorizeAll(t){n.evalXPath(`.//*[@${o.Attribute.ID}]`,t).forEach((t=...
method colorize (line 1) | colorize(t){const e=(0,o.addPrefix)("foreground");t.hasAttribute(e)&&(...
method uncolorize (line 1) | uncolorize(t){const e=(0,o.addPrefix)("foreground")+"-old";t.hasAttrib...
method constructor (line 1) | constructor(){super(),this.mactionName="maction"}
method highlightNode (line 1) | highlightNode(t){const e={node:t,foreground:t.style.color,position:t.s...
method unhighlightNode (line 1) | unhighlightNode(t){const e=t.node;e.style.color=t.foreground,e.style.p...
method constructor (line 1) | constructor(){super(),this.mactionName="mjx-svg-maction"}
method highlightNode (line 1) | highlightNode(t){let e;if(this.isHighlighted(t))return e={node:t.previ...
method setHighlighted (line 1) | setHighlighted(t){"svg"===t.tagName&&super.setHighlighted(t)}
method unhighlightNode (line 1) | unhighlightNode(t){if("background"in t)return t.node.style.backgroundC...
method isMactionNode (line 1) | isMactionNode(t){let e=t.className||t.getAttribute("class");return e=v...
method constructor (line 1) | constructor(t,e){this.constraint=t,this.test=e,this.children_={},this....
method getConstraint (line 1) | getConstraint(){return this.constraint}
method getKind (line 1) | getKind(){return this.kind}
method applyTest (line 1) | applyTest(t){return this.test(t)}
method addChild (line 1) | addChild(t){const e=t.getConstraint(),r=this.children_[e];return this....
method getChild (line 1) | getChild(t){return this.children_[t]}
method getChildren (line 1) | getChildren(){const t=[];for(const e in this.children_)t.push(this.chi...
method findChildren (line 1) | findChildren(t){const e=[];for(const r in this.children_){const n=this...
method removeChild (line 1) | removeChild(t){delete this.children_[t]}
method toString (line 1) | toString(){return this.constraint}
method constructor (line 1) | constructor(){this.root=(0,o.getNode)(n.TrieNodeKind.ROOT,"",null)}
method collectRules_ (line 1) | static collectRules_(t){const e=[];let r=[t];for(;r.length;){const t=r...
method printWithDepth_ (line 1) | static printWithDepth_(t,e,r){r+=new Array(e+2).join(e.toString())+": ...
method order_ (line 1) | static order_(t){const e=t.getChildren();if(!e.length)return 0;const r...
method addRule (line 1) | addRule(t){let e=this.root;const r=t.context,o=t.dynamicCstr.getValues...
method lookupRules (line 1) | lookupRules(t,e){let r=[this.root];const o=[];for(;e.length;){const t=...
method hasSubtrie (line 1) | hasSubtrie(t){let e=this.root;for(let r=0,n=t.length;r<n;r++){const n=...
method toString (line 1) | toString(){return i.printWithDepth_(this.root,0,"")}
method collectRules (line 1) | collectRules(){return i.collectRules_(this.root)}
method order (line 1) | order(){return i.order_(this.root)}
method enumerate (line 1) | enumerate(t){return this.enumerate_(this.root,t)}
method byConstraint (line 1) | byConstraint(t){let e=this.root;for(;t.length&&e;){const r=t.shift();e...
method enumerate_ (line 1) | enumerate_(t,e){e=e||{};const r=t.getChildren();for(let t,o=0;t=r[o];o...
method addNode_ (line 1) | addNode_(t,e,r,n){let i=t.getChild(e);return i||(i=(0,o.getNode)(r,e,n...
method constructor (line 1) | constructor(){super(...arguments),this.modality="braille",this.customT...
method evaluateString (line 1) | evaluateString(t){const e=[],r=Array.from(t);for(let t=0;t<r.length;t+...
method annotations (line 1) | annotations(){for(let t,e=0;t=this.annotators[e];e++)(0,n.activate)(th...
method constructor (line 1) | constructor(){this.category="",this.rules=new Map}
method parseUnicode (line 1) | static parseUnicode(t){const e=parseInt(t,16);return String.fromCodePo...
method testDynamicConstraints_ (line 1) | static testDynamicConstraints_(t,e){return n.default.getInstance().str...
method defineRulesFromMappings (line 1) | defineRulesFromMappings(t,e,r,n,o){for(const i in o)for(const Q in o[i...
method getRules (line 1) | getRules(t){let e=this.rules.get(t);return e||(e=[],this.rules.set(t,e...
method defineRuleFromStrings (line 1) | defineRuleFromStrings(t,e,r,o,i,Q,T){let s=this.getRules(e);const a=n....
method lookupRule (line 1) | lookupRule(t,e){let r=this.getRules(e.getValue(o.Axis.LOCALE));return ...
method constructor (line 1) | constructor(){this.map={}}
method key (line 1) | static key(t,e){return e?t+":"+e:t}
method add (line 1) | add(t,e){this.map[i.key(t,e.font)]=e}
method addNode (line 1) | addNode(t){this.add(t.textContent,t.meaning())}
method retrieve (line 1) | retrieve(t,e){return this.map[i.key(t,e)]}
method retrieveNode (line 1) | retrieveNode(t){return this.retrieve(t.textContent,t.font)}
method size (line 1) | size(){return Object.keys(this.map).length}
method getSpeech (line 1) | getSpeech(t,e){return n.getAttribute(t,this.modality)}
method getSpeech (line 1) | getSpeech(t,e){return super.getSpeech(t,e),n.getAttribute(t,this.modal...
method getSpeech (line 1) | getSpeech(t,e){return o.connectAllMactions(e,this.getRebuilt().xml),th...
method constructor (line 1) | constructor(t,e,r,n){super(t,e,r,n),this.node=t,this.generator=e,this....
method initLevels (line 1) | initLevels(){const t=new o.Levels;return t.push([this.getFocus()]),t}
method up (line 1) | up(){super.up();const t=this.previousLevel();if(!t)return null;this.le...
method down (line 1) | down(){super.down();const t=this.nextLevel();return 0===t.length?null:...
method combineContentChildren (line 1) | combineContentChildren(t,e,r,n){switch(t){case"relseq":case"infixop":c...
method combinePunctuations (line 1) | combinePunctuations(t,e,r,n){if(0===t.length)return n;const o=t.shift(...
method makePairList (line 1) | makePairList(t,e){if(0===t.length)return[];if(1===t.length)return[this...
method left (line 1) | left(){super.left();const t=this.levels.indexOf(this.getFocus());if(nu...
method right (line 1) | right(){super.right();const t=this.levels.indexOf(this.getFocus());if(...
method findFocusOnLevel (line 1) | findFocusOnLevel(t){return this.levels.find((e=>e.getSemanticPrimary()...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function r (line 1) | function r(){return null!==t&&t.apply(this,arguments)||this}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function t (line 1) | function t(t){void 0===t&&(t={}),this.adaptor=null;var e=this.constructo...
function t (line 1) | function t(t){var e,n;void 0===t&&(t=null),this.defaultKind="unknown",th...
function n (line 1) | function n(){this.constructor=t}
method constructor (line 1) | constructor(t,e=Object.keys(t)){this.properties=t,this.order=e}
method createProp (line 1) | static createProp(...t){const e=o.DEFAULT_ORDER,r={};for(let n=0,o=t.l...
method getProperties (line 1) | getProperties(){return this.properties}
method getOrder (line 1) | getOrder(){return this.order}
method getAxes (line 1) | getAxes(){return this.order}
method getProperty (line 1) | getProperty(t){return this.properties[t]}
method updateProperties (line 1) | updateProperties(t){this.properties=t}
method allProperties (line 1) | allProperties(){const t=[];return this.order.forEach((e=>t.push(this.g...
method toString (line 1) | toString(){const t=[];return this.order.forEach((e=>t.push(e+": "+this...
function t (line 1) | function t(t,e,r){var n,o;void 0===e&&(e={}),void 0===r&&(r=[]),this.fac...
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function t (line 1) | function t(e){var r,o;this.nodeHandlers=new Map;try{for(var i=n(e.getKin...
function t (line 1) | function t(t,e){this.factory=t,this.node=e}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(e,r,n){var o=this,i=Q((0,a.separateOptions)(n,u.HTMLDomString...
function t (line 1) | function t(t){void 0===t&&(t=null);var e=this.constructor;this.options=(...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.docu...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(e,r,n,o,i){return void 0===n&&(n=!0),void 0===o&&(o={node:nul...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(){return null!==t&&t.apply(this,arguments)||this}
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(r){void 0===r&&(r={});var n=this,o=Q((0,a.separateOptions)(r,...
function t (line 1) | function t(t,e,r,n,o,i,Q,T,s,a,l,c,u){void 0===e&&(e={}),void 0===r&&(r=...
function t (line 1) | function t(t,e){var r,o,i,Q;void 0===e&&(e=["tex"]),this.initMethod=new ...
function r (line 1) | function r(){this.constructor=t}
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function e (line 1) | function e(e){var r=t.call(this,e)||this;return r.getPatterns(),r}
function t (line 1) | function t(){this._configuration=new Q.PrioritizedList,this._fallback=ne...
function t (line 1) | function t(){this.map=new Map}
function t (line 1) | function t(){this.mmlFactory=null,this.factory={node:t.createNode,token:...
function r (line 1) | function r(t,r){var o,i;try{for(var Q=n(Object.keys(r)),T=Q.next();!T.do...
method ensureLocale (line 1) | static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Loc...
method constructor (line 1) | constructor(t,e){this.prefix=t,this.store=e}
method add (line 1) | add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}
method addStore (line 1) | addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this...
method lookup (line 1) | lookup(t){return this.store[t]}
method checkCustomFunctionSyntax_ (line 1) | checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);retu...
method constructor (line 1) | constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}
method constructor (line 1) | constructor(){this.level_=[]}
method push (line 1) | push(t){this.level_.push(t)}
method pop (line 1) | pop(){return this.level_.pop()}
method peek (line 1) | peek(){return this.level_[this.level_.length-1]||null}
method indexOf (line 1) | indexOf(t){const e=this.peek();return e?e.indexOf(t):null}
method find (line 1) | find(t){const e=this.peek();if(!e)return null;for(let r=0,n=e.length;r...
method get (line 1) | get(t){const e=this.peek();return!e||t<0||t>=e.length?null:e[t]}
method depth (line 1) | depth(){return this.level_.length}
method clone (line 1) | clone(){const t=new r;return t.level_=this.level_.slice(0),t}
method toString (line 1) | toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((...
method resetState (line 1) | static resetState(t){delete r.STATE[t]}
method setState (line 1) | static setState(t,e){r.STATE[t]=e}
method getState (line 1) | static getState(t){return r.STATE[t]}
function Q (line 1) | function Q(t,e,r){t.childNodes[e]=r,r&&(r.parent=t)}
method markup (line 1) | markup(t){const e=i.personalityMarkup(t);let r="",o=null,Q=!1;for(let ...
method pause (line 1) | pause(t){let e;return e="number"==typeof t?t<=250?"short":t<=500?"medi...
method finalize (line 1) | finalize(t){return'<?xml version="1.0"?><speak version="1.1" xmlns="ht...
method pause (line 1) | pause(t){return'<break time="'+this.pauseValue(t[o.personalityProps.PA...
method prosodyElement (line 1) | prosodyElement(t,e){const r=(e=Math.floor(this.applyScaleFunction(e)))...
method closeTag (line 1) | closeTag(t){return"</prosody>"}
method markup (line 1) | markup(t){this.setScaleFunction(-2,2,-100,100,2);const e=o.personality...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return!!t.mathmlTree&&"line"===t.type}
method getMathml (line 1) | getMathml(){return this.semantic.contentNodes.length&&o.walkTree(this....
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return!!t.mathmlTree&&("inference"===t.type||"premises"...
method getMathml (line 1) | getMathml(){return this.semantic.childNodes.length?(this.semantic.cont...
method constructor (line 1) | constructor(t){super(t),this.mml=t.mathmlTree}
method test (line 1) | static test(t){return"punctuated"===t.type&&("text"===t.role||t.conten...
method getMathml (line 1) | getMathml(){const t=[],e=o.collapsePunctuated(this.semantic,t);return ...
method constructor (line 1) | constructor(){this.map={}}
method add (line 1) | add(t,e){const r=this.map[t];r?r.push(e):this.map[t]=[e]}
method retrieve (line 1) | retrieve(t,e){return this.map[i.key(t,e)]}
method retrieveNode (line 1) | retrieveNode(t){return this.retrieve(t.textContent,t.font)}
method copy (line 1) | copy(){const t=this.copyCollator();for(const e in this.map)t.map[e]=th...
method minimize (line 1) | minimize(){for(const t in this.map)1===this.map[t].length&&delete this...
method minimalCollator (line 1) | minimalCollator(){const t=this.copy();for(const e in t.map)1===t.map[e...
method isMultiValued (line 1) | isMultiValued(){for(const t in this.map)if(this.map[t].length>1)return...
method isEmpty (line 1) | isEmpty(){return!Object.keys(this.map).length}
method constructor (line 1) | constructor(t){this.id=t,this.mathml=[],this.parent=null,this.type="un...
method fromXml (line 1) | static fromXml(t){const e=parseInt(t.getAttribute("id"),10),r=new Q(e)...
method setAttribute (line 1) | static setAttribute(t,e,r,n){n=n||r;const o=e.getAttribute(r);o&&(t[n]...
method processChildren (line 1) | static processChildren(t,e){for(const r of n.toArray(e.childNodes)){if...
method querySelectorAll (line 1) | querySelectorAll(t){let e=[];for(let r,n=0;r=this.childNodes[n];n++)e=...
method xml (line 1) | xml(t,e){const r=function(r,n){const o=n.map((function(r){return r.xml...
method toString (line 1) | toString(t=!1){const e=n.parseInput("<snode/>");return n.serializeXml(...
method allAttributes (line 1) | allAttributes(){const t=[];return t.push(["role",this.role]),"unknown"...
method xmlAnnotation (line 1) | xmlAnnotation(){const t=[];for(const e in this.annotation)this.annotat...
method toJson (line 1) | toJson(){const t={};t.type=this.type;const e=this.allAttributes();for(...
method updateContent (line 1) | updateContent(t,e){const r=e?t.replace(/^[ \f\n\r\t\v\u200b]*/,"").rep...
method addMathmlNodes (line 1) | addMathmlNodes(t){for(let e,r=0;e=t[r];r++)-1===this.mathml.indexOf(e)...
method appendChild (line 1) | appendChild(t){this.childNodes.push(t),this.addMathmlNodes(t.mathml),t...
method replaceChild (line 1) | replaceChild(t,e){const r=this.childNodes.indexOf(t);if(-1===r)return;...
method appendContentNode (line 1) | appendContentNode(t){t&&(this.contentNodes.push(t),this.addMathmlNodes...
method removeContentNode (line 1) | removeContentNode(t){if(t){const e=this.contentNodes.indexOf(t);-1!==e...
method equals (line 1) | equals(t){if(!t)return!1;if(this.type!==t.type||this.role!==t.role||th...
method displayTree (line 1) | displayTree(){console.info(this.displayTree_(0))}
method addAnnotation (line 1) | addAnnotation(t,e){e&&this.addAnnotation_(t,e)}
method getAnnotation (line 1) | getAnnotation(t){const e=this.annotation[t];return e||[]}
method hasAnnotation (line 1) | hasAnnotation(t,e){const r=this.annotation[t];return!!r&&-1!==r.indexO...
method parseAnnotation (line 1) | parseAnnotation(t){const e=t.split(";");for(let t=0,r=e.length;t<r;t++...
method meaning (line 1) | meaning(){return{type:this.type,role:this.role,font:this.font}}
method xmlAttributes (line 1) | xmlAttributes(t){const e=this.allAttributes();for(let r,n=0;r=e[n];n++...
method addExternalAttributes (line 1) | addExternalAttributes(t){for(const e in this.attributes)t.setAttribute...
method removeMathmlNodes (line 1) | removeMathmlNodes(t){const e=this.mathml;for(let r,n=0;r=t[n];n++){con...
method displayTree_ (line 1) | displayTree_(t){t++;const e=Array(t).join(" ");let r="";r+="\n"+e+thi...
method mathmlTreeString (line 1) | mathmlTreeString(){return this.mathmlTree?this.mathmlTree.toString():"...
method addAnnotation_ (line 1) | addAnnotation_(t,e){const r=this.annotation[t];r?r.push(e):this.annota...
method constructor (line 1) | constructor(t,e=null){this.comparator=t,this.type=e,n(this)}
method compare (line 1) | compare(t,e){return this.type&&this.type===t.type&&this.type===e.type?...
method constructor (line 1) | constructor(t){this.parents=null,this.levelsMap=null,t=0===t?t:t||[],t...
method fromTree (line 1) | static fromTree(t){return Q.fromNode(t.root)}
method fromNode (line 1) | static fromNode(t){return new Q(Q.fromNode_(t))}
method fromString (line 1) | static fromString(t){return new Q(Q.fromString_(t))}
method simpleCollapseStructure (line 1) | static simpleCollapseStructure(t){return"number"==typeof t}
method contentCollapseStructure (line 1) | static contentCollapseStructure(t){return!!t&&!Q.simpleCollapseStructu...
method interleaveIds (line 1) | static interleaveIds(t,e){return n.interleaveLists(Q.collapsedLeafs(t)...
method collapsedLeafs (line 1) | static collapsedLeafs(...t){return t.reduce(((t,e)=>{return t.concat((...
method fromStructure (line 1) | static fromStructure(t,e){return new Q(Q.tree_(t,e.root))}
method combineContentChildren (line 1) | static combineContentChildren(t,e,r){switch(t.type){case"relseq":case"...
method makeSexp_ (line 1) | static makeSexp_(t){return Q.simpleCollapseStructure(t)?t.toString():Q...
method fromString_ (line 1) | static fromString_(t){let e=t.replace(/\(/g,"[");return e=e.replace(/\...
method fromNode_ (line 1) | static fromNode_(t){if(!t)return[];const e=t.contentNodes;let r;e.leng...
method tree_ (line 1) | static tree_(t,e){if(!e)return[];if(!e.childNodes.length)return e.id;c...
method addOwns_ (line 1) | static addOwns_(t,e){const r=t.getAttribute(i.Attribute.COLLAPSED),n=r...
method realLeafs_ (line 1) | static realLeafs_(t){if(Q.simpleCollapseStructure(t))return[t];if(Q.co...
method populate (line 1) | populate(){this.parents&&this.levelsMap||(this.parents={},this.levelsM...
method toString (line 1) | toString(){return Q.makeSexp_(this.array)}
method populate_ (line 1) | populate_(t,e,r){if(Q.simpleCollapseStructure(t))return t=t,this.level...
method isRoot (line 1) | isRoot(t){return t===this.levelsMap[t][0]}
method directChildren (line 1) | directChildren(t){if(!this.isRoot(t))return[];return this.levelsMap[t]...
method subtreeNodes (line 1) | subtreeNodes(t){if(!this.isRoot(t))return[];const e=(t,r)=>{Q.simpleCo...
method constructor (line 1) | constructor(t,e,r,n){super(t,e,r,n),this.node=t,this.generator=e,this....
method initLevels (line 1) | initLevels(){const t=new i.Levels;return t.push([this.primaryId()]),t}
method up (line 1) | up(){super.up();const t=this.previousLevel();return t?(this.levels.pop...
method down (line 1) | down(){super.down();const t=this.nextLevel();if(0===t.length)return nu...
method combineContentChildren (line 1) | combineContentChildren(t,e,r,o){switch(t){case"relseq":case"infixop":c...
method left (line 1) | left(){super.left();const t=this.levels.indexOf(this.primaryId());if(n...
method right (line 1) | right(){super.right();const t=this.levels.indexOf(this.primaryId());if...
method findFocusOnLevel (line 1) | findFocusOnLevel(t){return this.singletonFocus(t.toString())}
method focusDomNodes (line 1) | focusDomNodes(){return[this.getFocus().getDomPrimary()]}
method focusSemanticNodes (line 1) | focusSemanticNodes(){return[this.getFocus().getSemanticPrimary()]}
function a (line 1) | function a(t,e){return t.isKind(e)}
method get (line 1) | static get(t=s.getInstance().locale){return a.promises[t]||Promise.res...
method getall (line 1) | static getall(){return Promise.all(Object.values(a.promises))}
method constructor (line 1) | constructor(){this.lookupNamespaceURI=s}
method constructor (line 1) | constructor(t,...e){this.query=t,this.constraints=e;const[r,n]=this.pr...
method constraintValue (line 1) | static constraintValue(t,e){for(let r,n=0;r=e[n];n++)if(t.match(r))ret...
method toString (line 1) | toString(){const t=this.constraints.join(", ");return`${this.query}, $...
method calculatePriority (line 1) | calculatePriority(){const t=a.constraintValue(this.query,a.queryPriori...
method presetPriority (line 1) | presetPriority(){if(!this.constraints.length)return[!1,0];const t=this...
method constructor (line 1) | constructor(){this.funcAppls={},this.factory_=new Q.SemanticNodeFactor...
method getInstance (line 1) | static getInstance(){return a.instance=a.instance||new a,a.instance}
method tableToMultiline (line 1) | static tableToMultiline(t){if(T.tableIsMultiline(t)){t.type="multiline...
method number (line 1) | static number(t){"unknown"!==t.type&&"identifier"!==t.type||(t.type="n...
method classifyMultiline (line 1) | static classifyMultiline(t){let e=0;const r=t.childNodes.length;let n;...
method classifyTable (line 1) | static classifyTable(t){const e=a.computeColumns_(t);a.classifyByColum...
method detectCaleyTable (line 1) | static detectCaleyTable(t){if(!t.mathmlTree)return!1;const e=t.mathmlT...
method cayleySpacing (line 1) | static cayleySpacing(t){const e=t.split(" ");return("solid"===e[0]||"d...
method proof (line 1) | static proof(t,e,r){const n=a.separateSemantics(e);return a.getInstanc...
method findSemantics (line 1) | static findSemantics(t,e,r){const n=null==r?null:r,o=a.getSemantics(t)...
method getSemantics (line 1) | static getSemantics(t){const e=t.getAttribute("semantics");return e?a....
method removePrefix (line 1) | static removePrefix(t){const[,...e]=t.split("_");return e.join("_")}
method separateSemantics (line 1) | static separateSemantics(t){const e={};return t.split(";").forEach((fu...
method matchSpaces_ (line 1) | static matchSpaces_(t,e){for(let r,n=0;r=e[n];n++){const e=t[n].mathml...
method getSpacer_ (line 1) | static getSpacer_(t){if("MSPACE"===n.tagName(t))return t;for(;s.hasEmp...
method fenceToPunct_ (line 1) | static fenceToPunct_(t){const e=a.FENCE_TO_PUNCT_[t.role];if(e){for(;t...
method classifyFunction_ (line 1) | static classifyFunction_(t,e){if("appl"===t.type||"bigop"===t.type||"i...
method propagateFunctionRole_ (line 1) | static propagateFunctionRole_(t,e){if(t){if("infixop"===t.type)return;...
method getFunctionOp_ (line 1) | static getFunctionOp_(t,e){if(e(t))return t;for(let r,n=0;r=t.childNod...
method tableToMatrixOrVector_ (line 1) | static tableToMatrixOrVector_(t){const e=t.childNodes[0];T.isType(e,"m...
method tableToVector_ (line 1) | static tableToVector_(t){const e=t.childNodes[0];e.type="vector",1!==e...
method binomialForm_ (line 1) | static binomialForm_(t){T.isBinomial(t)&&(t.role="binomial",t.childNod...
method tableToMatrix_ (line 1) | static tableToMatrix_(t){const e=t.childNodes[0];e.type="matrix",e.chi...
method tableToSquare_ (line 1) | static tableToSquare_(t){const e=t.childNodes[0];T.isNeutralFence(t)?e...
method getComponentRoles_ (line 1) | static getComponentRoles_(t){const e=t.role;return e&&"unknown"!==e?e:...
method tableToCases_ (line 1) | static tableToCases_(t,e){for(let e,r=0;e=t.childNodes[r];r++)a.assign...
method rewriteFencedLine_ (line 1) | static rewri
Condensed preview — 289 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,524K chars).
[
{
"path": ".dockerignore",
"chars": 250,
"preview": "# Dependencies\nnode_modules/\n**/node_modules/\n\n# Build outputs\n**/dist/\n**/.turbo/\n\n# Development files\n.git/\n.github/\n."
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yml",
"chars": 241,
"preview": "name: Bug 报告\ndescription: 报告一个影响使用的 Bug\ntitle: \"[Bug]: \"\nlabels: [\"Bug\"]\nassignees:\n - tenngoxars\nbody:\n - type: texta"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 28,
"preview": "blank_issues_enabled: false\n"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.yml",
"chars": 238,
"preview": "name: 新功能建议\ndescription: 提出版本没有的新功能点\ntitle: \"[新功能]: \"\nlabels: [\"新功能\"]\nassignees:\n - tenngoxars\nbody:\n - type: textarea"
},
{
"path": ".github/ISSUE_TEMPLATE/optimization.yml",
"chars": 244,
"preview": "name: 现有功能优化\ndescription: 对现有功能提出更好的解决方案\ntitle: \"[优化]: \"\nlabels: [\"现有功能优化\"]\nassignees:\n - tenngoxars\nbody:\n - type: te"
},
{
"path": ".github/ISSUE_TEMPLATE/suspected-bug.yml",
"chars": 247,
"preview": "name: 疑似 Bug\ndescription: 不知道算不算问题,问问看\ntitle: \"[疑似 Bug]: \"\nlabels: [\"疑似 Bug\"]\nassignees:\n - tenngoxars\nbody:\n - type: "
},
{
"path": ".github/workflows/close-external-prs.yml",
"chars": 1948,
"preview": "name: Auto Close External PRs\n\non:\n pull_request_target:\n types: [opened]\n\njobs:\n close-external-pr:\n runs-on: u"
},
{
"path": ".github/workflows/docker-image.yml",
"chars": 1976,
"preview": "name: docker-image\n\non:\n push:\n branches:\n - main\n tags:\n - \"v*\"\n paths:\n - \".github/workflows/"
},
{
"path": ".github/workflows/release.yml",
"chars": 3617,
"preview": "name: desktop-release\n\non:\n push:\n tags:\n - 'v*'\n workflow_dispatch:\n\npermissions:\n contents: write\n\njobs:\n "
},
{
"path": ".gitignore",
"chars": 243,
"preview": "legacy/\nnode_modules/\n.DS_Store\n.turbo/\n.pnpm-store/\ndist/\n.env\n.npmrc\napps/macos/\n# Electron\napps/electron/node_modules"
},
{
"path": ".husky/pre-commit",
"chars": 16,
"preview": "npx lint-staged\n"
},
{
"path": "Dockerfile",
"chars": 620,
"preview": "# 构建阶段\nFROM node:22-bookworm-slim AS builder\n\nWORKDIR /build\n\n# 复制依赖相关文件\nCOPY pnpm-lock.yaml pnpm-workspace.yaml package"
},
{
"path": "LICENSE",
"chars": 1066,
"preview": "MIT License\n\nCopyright (c) 2025 WeMD Team\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\n"
},
{
"path": "README.md",
"chars": 4208,
"preview": "<p align=\"center\">\n <img src=\"apps/web/public/favicon-dark.svg\" width=\"80\" height=\"80\" alt=\"WeMD Logo\" />\n</p>\n\n<h1 ali"
},
{
"path": "apps/electron/README.md",
"chars": 1021,
"preview": "# WeMD Electron App\n\n基于 Electron 的 WeMD 桌面应用,完全复用 Web 端代码。\n\n## 开发\n\n### 前置条件\n确保 Web 应用的开发服务器正在运行:\n\n```bash\n# 在项目根目录或 apps"
},
{
"path": "apps/electron/electron-builder.json",
"chars": 1368,
"preview": "{\n \"appId\": \"com.wemd.app\",\n \"productName\": \"WeMD\",\n \"directories\": {\n \"output\": \"release\"\n },\n \"files\": [\"dist/"
},
{
"path": "apps/electron/package.json",
"chars": 897,
"preview": "{\n \"name\": \"wemd-electron\",\n \"version\": \"1.2.10\",\n \"description\": \"WeMD - 更优雅的 Markdown 公众号排版工具\",\n \"main\": \"dist/mai"
},
{
"path": "apps/electron/src/main.ts",
"chars": 26368,
"preview": "import { app, BrowserWindow, Menu, dialog, ipcMain, nativeImage, IpcMainInvokeEvent, shell, clipboard } from 'electron';"
},
{
"path": "apps/electron/src/preload.ts",
"chars": 4996,
"preview": "import { contextBridge, ipcRenderer, IpcRendererEvent } from 'electron';\n\ncontextBridge.exposeInMainWorld('electron', {\n"
},
{
"path": "apps/electron/src/updater.ts",
"chars": 2406,
"preview": "import { app, shell, BrowserWindow } from 'electron';\n\nconst GITHUB_REPO = 'tenngoxars/WeMD';\nconst RELEASES_URL = `http"
},
{
"path": "apps/electron/src/utils/frontmatter.test.ts",
"chars": 578,
"preview": "import test from 'node:test';\nimport assert from 'node:assert/strict';\nimport { extractFrontmatterMeta } from './frontma"
},
{
"path": "apps/electron/src/utils/frontmatter.ts",
"chars": 1214,
"preview": "export interface FrontmatterMeta {\n themeName: string;\n title?: string;\n}\n\nconst FRONTMATTER_REGEX = /^(\\uFEFF)?--"
},
{
"path": "apps/electron/tsconfig.json",
"chars": 396,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"CommonJS\",\n \"moduleResolution\": \"Node\",\n \"outDir\":"
},
{
"path": "apps/server/.prettierrc",
"chars": 52,
"preview": "{\n \"singleQuote\": true,\n \"trailingComma\": \"all\"\n}\n"
},
{
"path": "apps/server/COS_SETUP.md",
"chars": 1118,
"preview": "# 腾讯云 COS 配置指南\n\n## 📋 前置准备\n\n你已经完成:\n- ✅ 创建了 COS 存储桶:`wemd-1302564514`\n- ✅ 区域:广州 (`ap-guangzhou`)\n\n## 🔑 获取访问密钥\n\n1. 访问腾讯云控制台"
},
{
"path": "apps/server/README.md",
"chars": 5035,
"preview": "<p align=\"center\">\n <a href=\"http://nestjs.com/\" target=\"blank\"><img src=\"https://nestjs.com/img/logo-small.svg\" width="
},
{
"path": "apps/server/eslint.config.mjs",
"chars": 899,
"preview": "// @ts-check\nimport eslint from '@eslint/js';\nimport eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recomm"
},
{
"path": "apps/server/nest-cli.json",
"chars": 171,
"preview": "{\n \"$schema\": \"https://json.schemastore.org/nest-cli\",\n \"collection\": \"@nestjs/schematics\",\n \"sourceRoot\": \"src\",\n \""
},
{
"path": "apps/server/package.json",
"chars": 2148,
"preview": "{\n \"name\": \"@wemd/server\",\n \"version\": \"1.1.8\",\n \"description\": \"\",\n \"author\": \"\",\n \"private\": true,\n \"license\": \""
},
{
"path": "apps/server/src/app.controller.spec.ts",
"chars": 617,
"preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { AppController } from './app.controller';\nimport { AppSer"
},
{
"path": "apps/server/src/app.controller.ts",
"chars": 274,
"preview": "import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport clas"
},
{
"path": "apps/server/src/app.module.ts",
"chars": 429,
"preview": "import { Module } from '@nestjs/common';\nimport { ConfigModule } from '@nestjs/config';\nimport { AppController } from '."
},
{
"path": "apps/server/src/app.service.ts",
"chars": 142,
"preview": "import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class AppService {\n getHello(): string {\n return "
},
{
"path": "apps/server/src/main.ts",
"chars": 569,
"preview": "import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nimport { NestExpressApplication } "
},
{
"path": "apps/server/src/services/cos.service.ts",
"chars": 1817,
"preview": "import COS from 'cos-nodejs-sdk-v5';\n\ntype COSPutObjectParams = {\n Bucket: string;\n Region: string;\n Key: string;\n B"
},
{
"path": "apps/server/src/upload/dto/create-upload.dto.ts",
"chars": 32,
"preview": "export class CreateUploadDto {}\n"
},
{
"path": "apps/server/src/upload/dto/update-upload.dto.ts",
"chars": 177,
"preview": "import { PartialType } from '@nestjs/mapped-types';\nimport { CreateUploadDto } from './create-upload.dto';\n\nexport class"
},
{
"path": "apps/server/src/upload/entities/upload.entity.ts",
"chars": 23,
"preview": "export class Upload {}\n"
},
{
"path": "apps/server/src/upload/upload.controller.ts",
"chars": 2931,
"preview": "import {\n Controller,\n Post,\n UploadedFile,\n UseInterceptors,\n BadRequestException,\n} from '@nestjs/common';\nimport"
},
{
"path": "apps/server/src/upload/upload.module.ts",
"chars": 255,
"preview": "import { Module } from '@nestjs/common';\nimport { UploadService } from './upload.service';\nimport { UploadController } f"
},
{
"path": "apps/server/src/upload/upload.service.ts",
"chars": 687,
"preview": "import { Injectable } from '@nestjs/common';\nimport { CreateUploadDto } from './dto/create-upload.dto';\nimport { UpdateU"
},
{
"path": "apps/server/test/app.e2e-spec.ts",
"chars": 669,
"preview": "import { Test, TestingModule } from '@nestjs/testing';\nimport { INestApplication } from '@nestjs/common';\nimport request"
},
{
"path": "apps/server/test/jest-e2e.json",
"chars": 183,
"preview": "{\n \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\n \"rootDir\": \".\",\n \"testEnvironment\": \"node\",\n \"testRegex\": \".e2e-sp"
},
{
"path": "apps/server/tsconfig.build.json",
"chars": 97,
"preview": "{\n \"extends\": \"./tsconfig.json\",\n \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"]\n}\n"
},
{
"path": "apps/server/tsconfig.json",
"chars": 677,
"preview": "{\n \"compilerOptions\": {\n \"module\": \"nodenext\",\n \"moduleResolution\": \"nodenext\",\n \"resolvePackageJsonExports\": "
},
{
"path": "apps/web/.gitignore",
"chars": 253,
"preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndis"
},
{
"path": "apps/web/README.md",
"chars": 2555,
"preview": "# React + TypeScript + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLin"
},
{
"path": "apps/web/index.html",
"chars": 1655,
"preview": "<!doctype html>\n<html lang=\"zh-CN\">\n\n<head>\n <!-- Google tag (gtag.js) -->\n <script async src=\"https://www.googletagma"
},
{
"path": "apps/web/package.json",
"chars": 1679,
"preview": "{\n \"name\": \"@wemd/web\",\n \"private\": true,\n \"version\": \"1.2.10\",\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"vite\","
},
{
"path": "apps/web/public/fonts/local-fonts.css",
"chars": 2382,
"preview": "/* 本地字体定义 - 替代 Google Fonts */\n\n/* Inter */\n@font-face {\n font-family: \"Inter\";\n font-style: normal;\n font-weight: 40"
},
{
"path": "apps/web/public/libs/mathjax/tex-svg.js",
"chars": 2108580,
"preview": "(function(){\"use strict\";var __webpack_modules__={351:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){ret"
},
{
"path": "apps/web/src/App.css",
"chars": 5547,
"preview": ".app {\n height: 100vh;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n background: var(--bg-page);\n}\n\n"
},
{
"path": "apps/web/src/App.tsx",
"chars": 10993,
"preview": "import type { CSSProperties } from \"react\";\nimport { lazy, Suspense, useEffect, useMemo, useState } from \"react\";\nimport"
},
{
"path": "apps/web/src/__tests__/bootstrap/installPreloadErrorHandler.test.ts",
"chars": 4140,
"preview": "import { describe, expect, it, vi } from \"vitest\";\nimport {\n PRELOAD_RELOAD_AT_KEY,\n PRELOAD_RELOAD_COOLDOWN_MS,\n get"
},
{
"path": "apps/web/src/__tests__/components/FileSystemHistory.test.tsx",
"chars": 7773,
"preview": "import {\n act,\n fireEvent,\n render,\n screen,\n waitFor,\n} from \"@testing-library/react\";\nimport { beforeEach, descri"
},
{
"path": "apps/web/src/__tests__/components/Header.test.tsx",
"chars": 6130,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { render, screen, fireEvent, waitFor } "
},
{
"path": "apps/web/src/__tests__/components/MobileToolbar.test.tsx",
"chars": 1387,
"preview": "import { fireEvent, render, screen } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\ni"
},
{
"path": "apps/web/src/__tests__/components/ThemePanel.test.tsx",
"chars": 5179,
"preview": "import { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { render, screen, fireEvent } from \"@testing-libra"
},
{
"path": "apps/web/src/__tests__/components/mouseSelectionStyle.test.ts",
"chars": 3645,
"preview": "import { describe, expect, it } from \"vitest\";\nimport { EditorSelection, EditorState } from \"@codemirror/state\";\nimport "
},
{
"path": "apps/web/src/__tests__/components/searchPanel.test.ts",
"chars": 2362,
"preview": "import { describe, it, expect } from \"vitest\";\nimport { findMatches } from \"../../utils/findMatches\";\n\ndescribe(\"findMat"
},
{
"path": "apps/web/src/__tests__/components/sortUtils.test.ts",
"chars": 5349,
"preview": "import { describe, it, expect } from \"vitest\";\nimport { sortTreeItems } from \"../../components/Sidebar/sortUtils\";\nimpor"
},
{
"path": "apps/web/src/__tests__/components/themeDesignerVariables.test.ts",
"chars": 604,
"preview": "import { describe, expect, it } from \"vitest\";\nimport { defaultVariables } from \"../../components/Theme/ThemeDesigner/de"
},
{
"path": "apps/web/src/__tests__/core/MarkdownParser.test.ts",
"chars": 2114,
"preview": "import { describe, it, expect } from \"vitest\";\nimport { createMarkdownParser } from \"@wemd/core\";\n\ndescribe(\"MarkdownPar"
},
{
"path": "apps/web/src/__tests__/hooks/useFileSystemEffectGate.test.ts",
"chars": 2870,
"preview": "import { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { renderHook } from \"@testing-library/react\";\nimpo"
},
{
"path": "apps/web/src/__tests__/hooks/useFileSystemEffects.test.ts",
"chars": 4121,
"preview": "import { describe, it, expect, vi, afterEach } from \"vitest\";\nimport { renderHook, waitFor } from \"@testing-library/reac"
},
{
"path": "apps/web/src/__tests__/hooks/useWindowControls.test.ts",
"chars": 2437,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { renderHook } from \"@testing-library/r"
},
{
"path": "apps/web/src/__tests__/services/autoCompressImage.test.ts",
"chars": 5819,
"preview": "import { describe, expect, it, vi } from \"vitest\";\nimport {\n prepareImageForUpload,\n type ImageCompressionDependencies"
},
{
"path": "apps/web/src/__tests__/services/cssVariableExpander.test.ts",
"chars": 3844,
"preview": "import { describe, expect, it } from \"vitest\";\nimport { expandCSSVariables } from \"../../services/cssVariableExpander\";\n"
},
{
"path": "apps/web/src/__tests__/services/htmlCopyService.test.ts",
"chars": 6160,
"preview": "import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nconst mocked = vi.hoisted(() => ({\n toastSuccess: vi.fn"
},
{
"path": "apps/web/src/__tests__/services/imageUploadFlow.integration.test.ts",
"chars": 2816,
"preview": "import { describe, expect, it, vi } from \"vitest\";\nimport { uploadEditorImage } from \"../../services/image/imageUploadFl"
},
{
"path": "apps/web/src/__tests__/services/wechatCopyCssIntegration.test.ts",
"chars": 12599,
"preview": "import { describe, expect, it } from \"vitest\";\nimport { processHtml } from \"@wemd/core\";\nimport {\n applyLightRootVars,\n"
},
{
"path": "apps/web/src/__tests__/services/wechatCopyNormalizer.test.ts",
"chars": 11769,
"preview": "import { describe, expect, it } from \"vitest\";\nimport {\n normalizeCopyContainer,\n stripCopyMetadata,\n} from \"../../ser"
},
{
"path": "apps/web/src/__tests__/services/wechatCopyService.test.ts",
"chars": 15038,
"preview": "import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nconst mocked = vi.hoisted(() => ({\n toastSuccess: vi.fn"
},
{
"path": "apps/web/src/__tests__/services/wechatCounterCompat.test.ts",
"chars": 12256,
"preview": "import { describe, expect, it, vi } from \"vitest\";\nimport {\n extractCounterPseudoRules,\n materializeCounterPseudoConte"
},
{
"path": "apps/web/src/__tests__/services/wechatMermaidRenderer.test.ts",
"chars": 2364,
"preview": "import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nconst mocked = vi.hoisted(() => ({\n previousConfig: {\n "
},
{
"path": "apps/web/src/__tests__/services/wechatMermaidSvgText.test.ts",
"chars": 4853,
"preview": "import { describe, expect, it } from \"vitest\";\nimport {\n applyNativeSubgraphTitleStyles,\n getSubgraphTitleOverlays,\n "
},
{
"path": "apps/web/src/__tests__/storage/FileSystemAdapter.test.ts",
"chars": 1318,
"preview": "import { describe, expect, it, vi } from \"vitest\";\nimport { FileSystemAdapter } from \"../../storage/adapters/FileSystemA"
},
{
"path": "apps/web/src/__tests__/utils/assetPath.test.ts",
"chars": 776,
"preview": "import { describe, expect, it } from \"vitest\";\nimport { resolveAppAssetPath } from \"../../utils/assetPath\";\n\ndescribe(\"r"
},
{
"path": "apps/web/src/__tests__/utils/fileName.test.ts",
"chars": 636,
"preview": "import { describe, expect, it } from \"vitest\";\nimport { normalizeMarkdownFileName } from \"../../utils/fileName\";\n\ndescri"
},
{
"path": "apps/web/src/__tests__/utils/markdownFileMeta.test.ts",
"chars": 2493,
"preview": "import { describe, expect, it } from \"vitest\";\nimport {\n applyMarkdownFileMeta,\n buildMarkdownFileContent,\n parseMark"
},
{
"path": "apps/web/src/__tests__/utils/newArticleTheme.test.ts",
"chars": 991,
"preview": "import { describe, expect, it } from \"vitest\";\nimport {\n DEFAULT_NEW_ARTICLE_THEME,\n resolveNewArticleThemeSnapshot,\n}"
},
{
"path": "apps/web/src/bootstrap/installPreloadErrorHandler.ts",
"chars": 1557,
"preview": "// 处理部署更新后旧 index.html 引用已下线 chunk 的崩溃\n// 参考:https://vite.dev/guide/build.html#load-error-handling\n//\n// 用时间窗口 guard:刚刷新"
},
{
"path": "apps/web/src/components/Editor/MarkdownEditor.css",
"chars": 9623,
"preview": ".markdown-editor {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n /* 移除右边"
},
{
"path": "apps/web/src/components/Editor/MarkdownEditor.tsx",
"chars": 9491,
"preview": "import { useEffect, useRef, useState } from \"react\";\nimport { EditorView, minimalSetup } from \"codemirror\";\nimport { mar"
},
{
"path": "apps/web/src/components/Editor/SaveIndicator.tsx",
"chars": 2732,
"preview": "import { useEffect, useState } from \"react\";\nimport { useFileStore } from \"../../store/fileStore\";\nimport { useEditorSto"
},
{
"path": "apps/web/src/components/Editor/SearchPanel.css",
"chars": 3298,
"preview": ".search-panel {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px 16px;\n background: var"
},
{
"path": "apps/web/src/components/Editor/SearchPanel.tsx",
"chars": 10474,
"preview": "import { useState, useEffect, useRef, useCallback } from \"react\";\nimport { EditorView } from \"@codemirror/view\";\nimport "
},
{
"path": "apps/web/src/components/Editor/SyntaxHelpPopover.css",
"chars": 1239,
"preview": ".syntax-help-popover {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 4px;\n width: 220px;\n background: v"
},
{
"path": "apps/web/src/components/Editor/SyntaxHelpPopover.tsx",
"chars": 2267,
"preview": "import { useRef, useState, useEffect } from \"react\";\nimport { HelpCircle, ExternalLink } from \"lucide-react\";\nimport \"./"
},
{
"path": "apps/web/src/components/Editor/Toolbar.css",
"chars": 4218,
"preview": ".md-toolbar {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 12px;\n background: var(--bg-secondary)"
},
{
"path": "apps/web/src/components/Editor/Toolbar.tsx",
"chars": 11867,
"preview": "import { useRef, useState, useEffect } from \"react\";\nimport {\n Heading,\n List,\n Image,\n Loader2,\n Workflow,\n Chevr"
},
{
"path": "apps/web/src/components/Editor/ToolbarState.ts",
"chars": 673,
"preview": "// 外链转脚注开关状态(全局,供复制服务使用)\nexport const LINK_TO_FOOTNOTE_EVENT = \"wemd-link-to-footnote-change\";\nlet linkToFootnoteEnabled"
},
{
"path": "apps/web/src/components/Editor/editorShortcuts.ts",
"chars": 5774,
"preview": "import { EditorView } from \"codemirror\";\nimport { keymap } from \"@codemirror/view\";\nimport { Prec } from \"@codemirror/st"
},
{
"path": "apps/web/src/components/Editor/markdownTheme.ts",
"chars": 4003,
"preview": "// 优雅的 Markdown 编辑器主题\nimport { HighlightStyle, syntaxHighlighting } from \"@codemirror/language\";\nimport { tags as t } fr"
},
{
"path": "apps/web/src/components/Editor/markdownUnderline.ts",
"chars": 1493,
"preview": "import type { InlineContext, MarkdownExtension } from \"@lezer/markdown\";\nimport { Tag, tags } from \"@lezer/highlight\";\n\n"
},
{
"path": "apps/web/src/components/Editor/mouseSelectionStyle.ts",
"chars": 3346,
"preview": "import { EditorSelection, type EditorState } from \"@codemirror/state\";\nimport { EditorView, type ViewUpdate } from \"@cod"
},
{
"path": "apps/web/src/components/Editor/toolbarConfigs.ts",
"chars": 4197,
"preview": "import {\n Activity,\n Binary,\n Bold,\n Calendar,\n Clock,\n Code,\n Database,\n GitGraph,\n Heading1,\n Heading2,\n He"
},
{
"path": "apps/web/src/components/ErrorBoundary/ErrorBoundary.tsx",
"chars": 7292,
"preview": "import React, { Component, type ErrorInfo, type ReactNode } from \"react\";\n\ninterface Props {\n children?: ReactNode;\n}\n\n"
},
{
"path": "apps/web/src/components/Header/Header.css",
"chars": 12601,
"preview": ".app-header {\n height: 72px;\n margin: 16px 24px 0;\n border-radius: var(--radius-xl);\n background: var(--glass-bg);\n "
},
{
"path": "apps/web/src/components/Header/Header.tsx",
"chars": 9563,
"preview": "import { useState, useEffect, lazy, Suspense } from \"react\";\nimport { useEditorStore } from \"../../store/editorStore\";\ni"
},
{
"path": "apps/web/src/components/History/FileSystemHistory.tsx",
"chars": 13291,
"preview": "import { useCallback, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport toast from \"r"
},
{
"path": "apps/web/src/components/History/HistoryManager.tsx",
"chars": 7993,
"preview": "import { useCallback, useEffect, useRef } from \"react\";\nimport { useEditorStore, defaultMarkdown } from \"../../store/edi"
},
{
"path": "apps/web/src/components/History/HistoryPanel.css",
"chars": 8259,
"preview": ".history-sidebar {\n height: 100%;\n /* 移除白色背景,让父容器的毛玻璃透出来 */\n background: transparent;\n /* 移除边框,使用父容器的边框 */\n border:"
},
{
"path": "apps/web/src/components/History/HistoryPanel.tsx",
"chars": 430,
"preview": "import { useStorageContext } from \"../../storage/StorageContext\";\nimport { IndexedHistoryPanel } from \"./IndexedHistoryP"
},
{
"path": "apps/web/src/components/History/IndexedHistoryPanel.tsx",
"chars": 15508,
"preview": "import { useCallback, useEffect, useMemo, useState, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimp"
},
{
"path": "apps/web/src/components/Preview/MarkdownPreview.css",
"chars": 1774,
"preview": ".markdown-preview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n}\n\n.pr"
},
{
"path": "apps/web/src/components/Preview/MarkdownPreview.tsx",
"chars": 7949,
"preview": "import { useEffect, useState, useRef, useMemo, useCallback } from \"react\";\nimport mermaid from \"mermaid\";\nimport { creat"
},
{
"path": "apps/web/src/components/Settings/ImageHostSettings.css",
"chars": 8063,
"preview": ".image-host-settings {\n padding: 0;\n width: 100%;\n max-width: 580px;\n margin: 0 auto;\n flex: 1;\n min-height: 0;\n "
},
{
"path": "apps/web/src/components/Settings/ImageHostSettings.tsx",
"chars": 5599,
"preview": "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useState } from \"react\";\nimport type { Image"
},
{
"path": "apps/web/src/components/Settings/ImageHostSettingsPanels.tsx",
"chars": 15407,
"preview": "import { Cloud, Image as ImageIcon, ShieldCheck, Zap } from \"lucide-react\";\nimport type { ImageHostConfig } from \"../../"
},
{
"path": "apps/web/src/components/Sidebar/ContextMenu.tsx",
"chars": 3473,
"preview": "import { createPortal } from \"react-dom\";\nimport {\n Trash2,\n Edit2,\n Copy,\n ChevronRight,\n MoveRight,\n FolderPlus,"
},
{
"path": "apps/web/src/components/Sidebar/FileSidebar.css",
"chars": 15752,
"preview": ".file-sidebar {\n height: 100%;\n background: transparent;\n border: none;\n box-shadow: none;\n display: flex;\n flex-d"
},
{
"path": "apps/web/src/components/Sidebar/FileSidebar.tsx",
"chars": 16098,
"preview": "import { useState, useRef, useEffect } from \"react\";\nimport { useThemeStore } from \"../../store/themeStore\";\nimport {\n "
},
{
"path": "apps/web/src/components/Sidebar/SidebarFooter.css",
"chars": 1771,
"preview": ".sidebar-footer {\n padding: 16px 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n bord"
},
{
"path": "apps/web/src/components/Sidebar/SidebarFooter.tsx",
"chars": 2134,
"preview": "import { Globe, BookOpen } from \"lucide-react\";\nimport { useUITheme } from \"../../hooks/useUITheme\";\nimport { resolveApp"
},
{
"path": "apps/web/src/components/Sidebar/SidebarModals.tsx",
"chars": 5197,
"preview": "import { createPortal } from \"react-dom\";\nimport type { FileItem, FolderItem } from \"../../store/fileTypes\";\n\ninterface "
},
{
"path": "apps/web/src/components/Sidebar/sidebarStateHelpers.ts",
"chars": 4995,
"preview": "import type { FileItem, FolderItem, TreeItem } from \"../../store/fileTypes\";\nimport type { SortMode } from \"./sortUtils\""
},
{
"path": "apps/web/src/components/Sidebar/sortUtils.ts",
"chars": 1531,
"preview": "import type { FileItem, FolderItem, TreeItem } from \"../../store/fileTypes\";\n\nconst SORT_MODE_KEY = \"wemd-file-sort-mode"
},
{
"path": "apps/web/src/components/Sidebar/useSidebarState.ts",
"chars": 13737,
"preview": "import type { SyntheticEvent } from \"react\";\nimport { useState, useMemo, useCallback } from \"react\";\nimport { useFileSys"
},
{
"path": "apps/web/src/components/StorageModeSelector/StorageModeSelector.css",
"chars": 1463,
"preview": ".storage-mode-selector {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 0;\n}\n\n.storage-mode-tip "
},
{
"path": "apps/web/src/components/StorageModeSelector/StorageModeSelector.tsx",
"chars": 2088,
"preview": "import { useEffect, useState } from 'react';\nimport type { StorageType } from '../../storage/types';\nimport { useStorage"
},
{
"path": "apps/web/src/components/Theme/ColorSelector.tsx",
"chars": 10573,
"preview": "import React, { useState, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Plus } fr"
},
{
"path": "apps/web/src/components/Theme/MobileThemeSelector.css",
"chars": 2318,
"preview": "/* 移动端主题选择器 */\n.mobile-theme-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rg"
},
{
"path": "apps/web/src/components/Theme/MobileThemeSelector.tsx",
"chars": 2735,
"preview": "import { X, Check } from \"lucide-react\";\nimport { useThemeStore } from \"../../store/themeStore\";\nimport \"./MobileThemeSe"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/SliderInput.tsx",
"chars": 1802,
"preview": "import { useState, useEffect } from \"react\";\n\ninterface SliderInputProps {\n value: number;\n onChange: (value: number) "
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/Switch.tsx",
"chars": 492,
"preview": "import React from \"react\";\n\ninterface SwitchProps {\n checked: boolean;\n onChange: (checked: boolean) => void;\n classN"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/VARIABLES.md",
"chars": 4233,
"preview": "# WeMD 主题 CSS 变量清单\n\n以下是 WeMD 主题系统使用的所有 CSS 变量。你可以在「手写 CSS 模式」下修改这些变量来自定义主题。\n\n## 全局\n\n| 变量名 | 说明 "
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/defaults.ts",
"chars": 2998,
"preview": "// 可视化主题设计器 - 默认值\nimport type { DesignerVariables } from \"./types\";\nimport {\n fontFamilyOptions,\n fontSizeOptions,\n p"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/generateCSS.ts",
"chars": 2093,
"preview": "// 可视化主题设计器 - CSS 生成函数\nimport type { DesignerVariables } from \"./types\";\nimport { fontFamilyOptions } from \"../../../con"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/generators/codeTheme.ts",
"chars": 5456,
"preview": "/**\n * 获取代码主题 CSS\n */\nexport function getCodeThemeCSS(themeId: string): string {\n const themes: Record<string, string> "
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/generators/components.ts",
"chars": 4297,
"preview": "import type { DesignerVariables } from \"../types\";\nimport { getCodeThemeCSS } from \"./codeTheme\";\n\ninterface ComponentPr"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/generators/extras.ts",
"chars": 4842,
"preview": "import type { DesignerVariables } from \"../types\";\n\ninterface ExtraPresets {\n headingExtras: string;\n quoteExtras: str"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/generators/global.ts",
"chars": 1145,
"preview": "import type { DesignerVariables } from \"../types\";\n\nexport function generateGlobal(v: DesignerVariables): string {\n ret"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/generators/presets.ts",
"chars": 6621,
"preview": "interface HeadingPresetCss {\n content: string;\n extra?: string;\n}\n\ninterface QuotePresetCss {\n base: string;\n extra?"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/generators/typography.ts",
"chars": 3106,
"preview": "import type { DesignerVariables } from \"../types\";\n\ninterface HeadingPreset {\n content: string;\n extra: string;\n}\n\nint"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/generators/variables.ts",
"chars": 5113,
"preview": "import type { DesignerVariables } from \"../types\";\n\nconst toAlphaColor = (color: string, alpha: number): string => {\n c"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/index.tsx",
"chars": 5138,
"preview": "import { useState, useEffect, useRef } from \"react\";\nimport type { DesignerVariables, HeadingStyle, HeadingLevel } from "
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/CodeSection.tsx",
"chars": 4722,
"preview": "import type { SectionProps, DesignerVariables } from \"../types\";\nimport { ColorSelector } from \"../../ColorSelector\";\nim"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/GlobalSection.tsx",
"chars": 3901,
"preview": "import type { GlobalSectionProps } from \"../types\";\nimport { ColorSelector } from \"../../ColorSelector\";\nimport { Slider"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/HeadingSection.tsx",
"chars": 4807,
"preview": "import type { HeadingSectionProps, HeadingLevel } from \"../types\";\nimport { ColorSelector } from \"../../ColorSelector\";\n"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/ImageSection.tsx",
"chars": 2655,
"preview": "import type { SectionProps } from \"../types\";\nimport { ColorSelector } from \"../../ColorSelector\";\nimport { SliderInput "
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/ListSection.tsx",
"chars": 4713,
"preview": "import type { SectionProps } from \"../types\";\nimport { ColorSelector } from \"../../ColorSelector\";\nimport { SliderInput "
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/MermaidSection.tsx",
"chars": 964,
"preview": "import type { SectionProps } from \"../types\";\n\nexport function MermaidSection({ variables, updateVariable }: SectionProp"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/OtherSection.tsx",
"chars": 6370,
"preview": "import type { SectionProps } from \"../types\";\nimport { ColorSelector } from \"../../ColorSelector\";\n\nexport function Othe"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/ParagraphSection.tsx",
"chars": 2864,
"preview": "import type { SectionProps } from \"../types\";\n\nimport { ColorSelector } from \"../../ColorSelector\";\nimport { SliderInput"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/QuoteSection.tsx",
"chars": 5037,
"preview": "import type { SectionProps } from \"../types\";\nimport { ColorSelector } from \"../../ColorSelector\";\nimport { SliderInput "
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/TableHrSection.tsx",
"chars": 1841,
"preview": "import type { SectionProps } from \"../types\";\nimport { ColorSelector } from \"../../ColorSelector\";\n\nexport function Tabl"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/sections/index.ts",
"chars": 488,
"preview": "export { GlobalSection } from \"./GlobalSection\";\nexport { HeadingSection } from \"./HeadingSection\";\nexport { ParagraphSe"
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner/types.ts",
"chars": 3145,
"preview": "// 可视化主题设计器 - 共享类型定义\n// 此文件统一定义类型,供 ThemeDesigner 和 builtInThemes 共同使用\n\n/**\n * 标题样式配置\n */\nexport interface HeadingStyle "
},
{
"path": "apps/web/src/components/Theme/ThemeDesigner.css",
"chars": 10157,
"preview": "/* 可视化主题设计器样式 */\n\n.theme-designer {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n/* 分类 Tab - 紧凑居中布局 */\n"
},
{
"path": "apps/web/src/components/Theme/ThemeLivePreview.tsx",
"chars": 6235,
"preview": "import { useEffect, useMemo, useRef, memo } from \"react\";\nimport mermaid from \"mermaid\";\nimport {\n createMarkdownParser"
},
{
"path": "apps/web/src/components/Theme/ThemePanel.css",
"chars": 13970,
"preview": ".theme-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n di"
},
{
"path": "apps/web/src/components/Theme/ThemePanel.tsx",
"chars": 13567,
"preview": "import { useEffect, useMemo, useState, useRef } from \"react\";\nimport toast from \"react-hot-toast\";\nimport { useEditorSto"
},
{
"path": "apps/web/src/components/Theme/ThemePanelView.tsx",
"chars": 14109,
"preview": "import {\n AlertTriangle,\n ChevronDown,\n Code,\n Copy,\n Download,\n Eye,\n FileText,\n Palette,\n Plus,\n Trash2,\n U"
},
{
"path": "apps/web/src/components/UpdateModal/UpdateModal.css",
"chars": 3153,
"preview": ".update-modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n "
},
{
"path": "apps/web/src/components/UpdateModal/UpdateModal.tsx",
"chars": 2399,
"preview": "import { X, Download, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { resolveAp"
},
{
"path": "apps/web/src/components/Welcome/Welcome.css",
"chars": 943,
"preview": ".welcome-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100vh;\n wid"
},
{
"path": "apps/web/src/components/Welcome/Welcome.tsx",
"chars": 769,
"preview": "import { FolderOpen } from 'lucide-react';\nimport { useFileSystem } from '../../hooks/useFileSystem';\nimport './Welcome."
},
{
"path": "apps/web/src/components/common/FloatingToolbarButton.tsx",
"chars": 826,
"preview": "import type { ReactNode } from \"react\";\n\ninterface FloatingToolbarButtonProps {\n /** 按钮图标 */\n icon: ReactNode;\n /** 无"
},
{
"path": "apps/web/src/components/common/MobileToolbar.css",
"chars": 3054,
"preview": "/* 移动端底部工具栏 */\n.mobile-toolbar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: 60px;\n background: va"
},
{
"path": "apps/web/src/components/common/MobileToolbar.tsx",
"chars": 2940,
"preview": "import {\n Pencil,\n Eye,\n Copy,\n MoreHorizontal,\n Palette,\n Code,\n X,\n} from \"lucide-react\";\nimport { useState } f"
},
{
"path": "apps/web/src/components/common/Modal.css",
"chars": 1197,
"preview": "/* 通用弹窗样式 - 从 StorageModeSelector.css 提取并统一 */\n\n.modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0,"
},
{
"path": "apps/web/src/components/common/Modal.tsx",
"chars": 892,
"preview": "import type { ReactNode } from \"react\";\nimport \"./Modal.css\";\n\ninterface ModalProps {\n /** 是否显示弹窗 */\n open: boolean;\n "
},
{
"path": "apps/web/src/components/common/index.ts",
"chars": 98,
"preview": "export { Modal } from \"./Modal\";\nexport { FloatingToolbarButton } from \"./FloatingToolbarButton\";\n"
},
{
"path": "apps/web/src/config/styleOptions.ts",
"chars": 4849,
"preview": "export interface StyleOption<T = string> {\n label: string;\n value: T;\n desc?: string;\n}\n\nexport const fontFamilyOptio"
},
{
"path": "apps/web/src/hooks/useFileSystem.ts",
"chars": 14227,
"preview": "import { useCallback, useRef } from \"react\";\nimport { useFileStore } from \"../store/fileStore\";\nimport { useEditorStore "
},
{
"path": "apps/web/src/hooks/useFileSystemEffects.ts",
"chars": 6272,
"preview": "import { useEffect, useRef } from \"react\";\nimport type { StorageAdapter } from \"../storage/StorageAdapter\";\nimport type "
},
{
"path": "apps/web/src/hooks/useFileSystemFolderActions.ts",
"chars": 8442,
"preview": "import { useCallback } from \"react\";\nimport toast from \"react-hot-toast\";\nimport type { StorageAdapter } from \"../storag"
},
{
"path": "apps/web/src/hooks/useFileSystemHelpers.ts",
"chars": 6389,
"preview": "import type { FileItem, TreeItem } from \"../store/fileTypes\";\nimport type { FileItem as AdapterFileItem } from \"../stora"
},
{
"path": "apps/web/src/hooks/useMobileView.ts",
"chars": 890,
"preview": "import { useState, useEffect } from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport type MobileViewType = \"editor\" | \"p"
},
{
"path": "apps/web/src/hooks/useStorage.ts",
"chars": 1636,
"preview": "import { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { StorageAdapter } from '../storage/Stora"
},
{
"path": "apps/web/src/hooks/useUITheme.ts",
"chars": 1955,
"preview": "import { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\nexport type UITheme = \"default\" | \"dark"
},
{
"path": "apps/web/src/hooks/useWindowControls.ts",
"chars": 2937,
"preview": "import { useEffect } from \"react\";\n\ninterface WindowControlsOverlay {\n visible: boolean;\n getTitlebarAreaRect: () => D"
},
{
"path": "apps/web/src/index.css",
"chars": 4791,
"preview": "/* Minimal CSS reset */\nhtml,\nbody,\n#root {\n margin: 0;\n padding: 0;\n height: 100%;\n width: 100%;\n overflow-x: hidd"
},
{
"path": "apps/web/src/lib/platformAdapter.ts",
"chars": 1109,
"preview": "/**\n * 平台适配器 - 统一 Electron/浏览器环境检测和专有行为封装\n */\n\n// 基础环境检测(避免 SSR 环境报错)\nconst hasWindow = () => typeof window !== \"undefin"
},
{
"path": "apps/web/src/main.tsx",
"chars": 731,
"preview": "import { StrictMode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport \"./index.css\";\nimport App from"
},
{
"path": "apps/web/src/services/cssVarParser.ts",
"chars": 2615,
"preview": "/**\n * CSS var() 函数解析原语\n * 供 cssVariableExpander 和 inlineStyleVarResolver 共用\n */\n\n/**\n * 在字符串中查找下一个非引号内的 var( 起始位置\n * 正确"
},
{
"path": "apps/web/src/services/cssVariableExpander.ts",
"chars": 3468,
"preview": "/**\n * 纯文本级别的 CSS 变量展开\n * 将 CSS 中的 var(--wemd-*) 引用替换为具体值,消除对运行时 DOM 的依赖\n */\nimport {\n findNextVarStart,\n findMatching"
},
{
"path": "apps/web/src/services/htmlCopyService.ts",
"chars": 2910,
"preview": "import toast from \"react-hot-toast\";\nimport { createMarkdownParser } from \"@wemd/core\";\n\n// 剥离 parser 为微信主题 CSS 注入的结构装饰("
},
{
"path": "apps/web/src/services/image/ImageUploader.ts",
"chars": 2679,
"preview": "/**\n * 图床上传接口\n */\n\nexport interface ImageUploader {\n /** 图床名称 */\n name: string;\n\n /** 上传图片 */\n upload(file: "
},
{
"path": "apps/web/src/services/image/README.md",
"chars": 1652,
"preview": "# 图床支持\n\nWeMD 当前内置 5 类图床,均通过 `ImageHostManager` 统一管理。\n\n## 支持的图床\n\n| 图床 | 配置难度 | 说明 "
},
{
"path": "apps/web/src/services/image/autoCompressImage.ts",
"chars": 6017,
"preview": "/**\n * 图片自动压缩入口\n * 当图片超过体积限制时自动压缩,供工具栏上传和编辑器粘贴共用\n */\nimport {\n type LoadedImage,\n type RenderBlobInput,\n type ImageCo"
},
{
"path": "apps/web/src/services/image/compressSearch.ts",
"chars": 9477,
"preview": "/**\n * 图片压缩搜索算法\n * 两阶段二分搜索:先找最大可行分辨率,再在该分辨率下找最高质量\n */\n\nconst SCALE_DEDUP_EPSILON = 0.01;\nconst SCALE_STOP_EPSILON = 0.00"
},
{
"path": "apps/web/src/services/image/imageUploadFlow.ts",
"chars": 1727,
"preview": "import { ImageHostManager, type ImageHostConfig } from \"./ImageUploader\";\nimport {\n type ImageCompressionDependencies,\n"
},
{
"path": "apps/web/src/services/image/uploaders/AliyunUploader.ts",
"chars": 2334,
"preview": "import OSS from 'tiny-oss';\nimport type { ImageUploader } from '../ImageUploader';\n\ninterface AliyunConfig {\n region:"
},
{
"path": "apps/web/src/services/image/uploaders/OfficialUploader.ts",
"chars": 1093,
"preview": "import type { ImageUploader } from '../ImageUploader';\n\ninterface OfficialConfig {\n serverUrl?: string;\n}\n\n/**\n * 官方图"
},
{
"path": "apps/web/src/services/image/uploaders/QiniuUploader.ts",
"chars": 5462,
"preview": "import * as qiniu from \"qiniu-js\";\nimport CryptoJS from \"crypto-js\";\nimport type { ImageUploader } from \"../ImageUploade"
},
{
"path": "apps/web/src/services/image/uploaders/S3Uploader.ts",
"chars": 4127,
"preview": "import { S3Client, PutObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3';\nimport type { ImageUploader } from"
},
{
"path": "apps/web/src/services/image/uploaders/TencentUploader.ts",
"chars": 2460,
"preview": "import COS from 'cos-js-sdk-v5';\nimport type { ImageUploader } from '../ImageUploader';\n\ninterface TencentConfig {\n s"
},
{
"path": "apps/web/src/services/inlineStyleVarResolver.ts",
"chars": 11165,
"preview": "import {\n findNextVarStart,\n hasVarFunction,\n findMatchingParen,\n splitVarArgs,\n} from \"./cssVarParser\";\n\nconst DEFA"
},
{
"path": "apps/web/src/services/wechatCopyNormalizer.ts",
"chars": 14619,
"preview": "/**\n * 微信复制 DOM 容器规范化\n * 处理微信公众号编辑器对粘贴 HTML 的清洗兼容问题:\n * - root section → div 转换\n * - 元数据属性清理\n * - 根节点 padding 迁移到内层元素\n *"
},
{
"path": "apps/web/src/services/wechatCopyService.ts",
"chars": 8982,
"preview": "/**\n * 微信公众号复制主编排入口\n * 负责将 Markdown 转为微信兼容 HTML 并写入剪贴板\n */\n\nimport toast from \"react-hot-toast\";\nimport { processHtml, c"
},
{
"path": "apps/web/src/services/wechatCounterCompat.ts",
"chars": 12353,
"preview": "type PseudoPosition = \"before\" | \"after\";\n\ninterface CounterPseudoRule {\n selector: string;\n pseudo: PseudoPosition;\n}"
},
{
"path": "apps/web/src/services/wechatMermaidRenderer.ts",
"chars": 9590,
"preview": "/**\n * 微信复制 Mermaid 图表渲染\n * 将 Mermaid 代码块渲染为 PNG 图片,确保微信公众号兼容\n */\n\nimport mermaid from \"mermaid\";\nimport { useThemeStore"
},
{
"path": "apps/web/src/services/wechatMermaidSvgText.ts",
"chars": 10917,
"preview": "/**\n * 将 Mermaid SVG 里的 foreignObject 文本转成原生 SVG text。\n * 公众号复制链路必须生成 PNG,而 foreignObject 进 canvas 会污染画布。\n */\n\nconst SVG"
},
{
"path": "apps/web/src/services/wechatTableRenderer.ts",
"chars": 2124,
"preview": "/**\n * 微信复制表格样式强化\n * 覆盖表格布局参数(字号、行高、内边距),确保微信公众号中样式严格可控\n *\n * 设计原则:\n * - 布局参数独立优化(13px/1.4/紧凑 padding),不绑定主题字号\n * - 色彩(边"
},
{
"path": "apps/web/src/storage/StorageAdapter.ts",
"chars": 1462,
"preview": "import type {\n FileItem,\n StorageAdapterContext,\n StorageInitResult,\n StorageType,\n} from \"./types\";\n\nexport interfa"
},
{
"path": "apps/web/src/storage/StorageContext.tsx",
"chars": 1006,
"preview": "/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\nimport type"
},
{
"path": "apps/web/src/storage/StorageManager.ts",
"chars": 2637,
"preview": "import type { StorageAdapter } from './StorageAdapter';\nimport type { StorageAdapterContext, StorageInitResult, StorageT"
},
{
"path": "apps/web/src/storage/adapters/FileSystemAdapter.ts",
"chars": 12990,
"preview": "import type { StorageAdapter } from \"../StorageAdapter\";\nimport type {\n FileItem,\n StorageAdapterContext,\n StorageIni"
}
]
// ... and 89 more files (download for full content)
About this extraction
This page contains the full source code of the tenngoxars/WeMD GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 289 files (3.2 MB), approximately 850.3k tokens, and a symbol index with 2171 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.