From 3fe4275b2482d8b1e59a8780fd4a5508f2f8c0a8 Mon Sep 17 00:00:00 2001
From: David McArthur
Date: Mon, 14 Oct 2024 10:11:18 +0100
Subject: [PATCH 1/4] new document design
---
.github/workflows/publish.yml | 16 +-
index.html | 27 +-
package-lock.json | 271 +-
package.json | 6 +-
packages/export/package.json | 8 +-
packages/export/src/create-test-bundle.ts | 50 +
packages/export/src/index.ts | 9 +-
packages/export/test.html | 2850 +++++++++++++++++
packages/processor/package.json | 6 +
.../processor/src/__test__/headings.test.ts | 200 +-
.../processor/src/__test__/references.test.ts | 6 +-
.../processor/src/__test__/sections.test.ts | 6 +-
.../processor/src/__test__/sidenotes.test.ts | 4 +-
packages/processor/src/__test__/title.test.ts | 2 +-
packages/processor/src/index.ts | 11 +-
.../processor/src/latex-to-markdown/index.ts | 4 +-
.../markdown-to-mdx/hast-transforms/index.ts | 70 +-
.../hast-transforms/link-headings.ts | 25 +
.../hast-transforms/wrapper.ts | 12 +-
.../processor/src/markdown-to-mdx/index.ts | 47 +-
.../mdast-transforms/heading-attributes.ts | 40 -
.../{heading-increments.ts => headings.ts} | 73 +-
.../markdown-to-mdx/mdast-transforms/index.ts | 42 +-
.../mdast-transforms/sectionize.ts | 64 +
.../markdown-to-mdx/mdx-handlers/index.tsx | 16 +-
.../mdx-handlers/mathjax/index.tsx | 76 +
.../mdx-handlers/mathjax/litedom.ts | 84 +
.../toc-highlight/intersection-observer.tsx | 54 +
.../mdx-handlers/toc-highlight/section.tsx | 21 +
.../toc-highlight/toc-highlight-provider.tsx | 56 +
.../toc-highlight/toc-list-item.tsx | 16 +
.../processor/src/markdown-to-mdx/sidebar.ts | 90 +
.../utils/__test__/heading-counter.test.ts | 75 +-
.../utils/__test__/theorem-counter.test.ts | 36 +
.../markdown-to-mdx/utils/heading-counter.ts | 14 +-
.../src/test-utils/create-e2e-test-bundle.ts | 1 +
packages/runtime/index.html | 2 +-
packages/runtime/package.json | 8 +-
packages/runtime/src/article.tsx | 27 +-
packages/runtime/src/components/hamburger.tsx | 8 +-
packages/runtime/src/constants/readability.ts | 10 +-
packages/runtime/src/providers/index.tsx | 7 +-
.../src/providers/view-options-provider.tsx | 27 +-
packages/runtime/src/runtime.tsx | 41 +-
packages/runtime/src/sidebar.tsx | 90 -
packages/runtime/src/sidebar/index.tsx | 95 +
packages/runtime/src/sidebar/range-input.tsx | 79 +
packages/runtime/src/sidebar/theme.tsx | 76 +
packages/runtime/src/sidebar/view-options.tsx | 76 +
packages/runtime/src/styles/article.scss | 20 +-
packages/runtime/src/styles/index.scss | 59 +-
.../runtime/src/styles/nouveaux/index.scss | 214 ++
packages/runtime/src/styles/odl/nav.scss | 45 +-
.../runtime/src/styles/odl/sidenotes.scss | 2 +-
packages/runtime/src/styles/range-input.scss | 171 +
packages/runtime/src/styles/scrollbars.scss | 52 +-
packages/runtime/src/styles/sidebar.scss | 156 +-
packages/runtime/src/styles/sidenote.scss | 2 +-
packages/runtime/src/styles/structure.scss | 82 +-
packages/runtime/src/styles/variables.scss | 2 +-
packages/runtime/src/view-options/index.tsx | 27 -
.../runtime/src/view-options/readability.tsx | 130 -
packages/runtime/src/view-options/themes.tsx | 69 -
packages/runtime/src/vite-env.d.ts | 4 +
packages/runtime/vite.config.ts | 31 +
packages/use-local-storage/src/index.ts | 32 +-
public/tauri.svg | 6 +
public/vite.svg | 1 +
sidenote | 129 +
src-tauri/capabilities/default.json | 3 +
src-tauri/resources/cm-serif-bold-italic.woff | Bin 37472 -> 0 bytes
src-tauri/resources/cm-serif-bold.woff | Bin 30276 -> 0 bytes
src-tauri/resources/cm-serif-italic.woff | Bin 37332 -> 0 bytes
src-tauri/resources/cm-serif.woff | Bin 32648 -> 0 bytes
src-tauri/resources/index.css | 1 -
src-tauri/resources/runtime.js | 497 ---
src-tauri/resources/runtime.js.map | 1 -
src-tauri/tauri.conf.json | 5 +-
src/app.tsx | 6 +-
src/cli.ts | 12 +-
src/header/index.tsx | 4 +-
src/main.tsx | 25 +-
src/styles.scss | 18 +-
src/styles.tsx | 1 -
tsconfig.json | 2 +-
vite.config.ts | 4 +
86 files changed, 5326 insertions(+), 1421 deletions(-)
create mode 100644 packages/export/src/create-test-bundle.ts
create mode 100644 packages/export/test.html
create mode 100644 packages/processor/src/markdown-to-mdx/hast-transforms/link-headings.ts
delete mode 100644 packages/processor/src/markdown-to-mdx/mdast-transforms/heading-attributes.ts
rename packages/processor/src/markdown-to-mdx/mdast-transforms/{heading-increments.ts => headings.ts} (76%)
create mode 100644 packages/processor/src/markdown-to-mdx/mdast-transforms/sectionize.ts
create mode 100644 packages/processor/src/markdown-to-mdx/mdx-handlers/mathjax/index.tsx
create mode 100644 packages/processor/src/markdown-to-mdx/mdx-handlers/mathjax/litedom.ts
create mode 100644 packages/processor/src/markdown-to-mdx/mdx-handlers/toc-highlight/intersection-observer.tsx
create mode 100644 packages/processor/src/markdown-to-mdx/mdx-handlers/toc-highlight/section.tsx
create mode 100644 packages/processor/src/markdown-to-mdx/mdx-handlers/toc-highlight/toc-highlight-provider.tsx
create mode 100644 packages/processor/src/markdown-to-mdx/mdx-handlers/toc-highlight/toc-list-item.tsx
create mode 100644 packages/processor/src/markdown-to-mdx/sidebar.ts
create mode 100644 packages/processor/src/markdown-to-mdx/utils/__test__/theorem-counter.test.ts
delete mode 100644 packages/runtime/src/sidebar.tsx
create mode 100644 packages/runtime/src/sidebar/index.tsx
create mode 100644 packages/runtime/src/sidebar/range-input.tsx
create mode 100644 packages/runtime/src/sidebar/theme.tsx
create mode 100644 packages/runtime/src/sidebar/view-options.tsx
create mode 100644 packages/runtime/src/styles/nouveaux/index.scss
create mode 100644 packages/runtime/src/styles/range-input.scss
delete mode 100644 packages/runtime/src/view-options/index.tsx
delete mode 100644 packages/runtime/src/view-options/readability.tsx
delete mode 100644 packages/runtime/src/view-options/themes.tsx
create mode 100644 public/tauri.svg
create mode 100644 public/vite.svg
create mode 100644 sidenote
delete mode 100644 src-tauri/resources/cm-serif-bold-italic.woff
delete mode 100644 src-tauri/resources/cm-serif-bold.woff
delete mode 100644 src-tauri/resources/cm-serif-italic.woff
delete mode 100644 src-tauri/resources/cm-serif.woff
delete mode 100644 src-tauri/resources/index.css
delete mode 100644 src-tauri/resources/runtime.js
delete mode 100644 src-tauri/resources/runtime.js.map
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 4ffd808..73edc42 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -78,6 +78,17 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf
+
+ - name: install dependencies (windows only)
+ if: matrix.platform == 'windows-latest'
+ shell: bash
+ env:
+ WINDOWS_SIGN_COMMAND: trusted-signing-cli -e https://weu.codesigning.azure.net/ -a ${{ secrets.AZURE_CODE_SIGNING_NAME }} -c ${{ secrets.AZURE_CERT_PROFILE_NAME }} %1
+ run: |
+ cd "$GITHUB_WORKSPACE"
+ cat './src-tauri/tauri.conf.json' | jq '.bundle .windows += {"signCommand": env.WINDOWS_SIGN_COMMAND}' > './src-tauri/temp.json' && mv './src-tauri/temp.json' './src-tauri/tauri.conf.json'
+ cargo install trusted-signing-cli
+
- name: install frontend dependencies
run: npm ci
- uses: tauri-apps/tauri-action@v0
@@ -91,6 +102,9 @@ jobs:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
+ AZURE_TENANT_ID: ${{ matrix.platform == 'windows-latest' && secrets.AZURE_TENANT_ID }}
+ AZURE_CLIENT_ID: ${{ matrix.platform == 'windows-latest' && secrets.AZURE_CLIENT_ID }}
+ AZURE_CLIENT_SECRET: ${{ matrix.platform == 'windows-latest' && secrets.AZURE_CLIENT_SECRET }}
with:
releaseId: ${{ needs.create-release.outputs.release-id }}
args: ${{ matrix.args }}
@@ -110,7 +124,7 @@ jobs:
RELEASE_ID: ${{ needs.create-release.outputs.release-id }}
publish-docs:
- needs: version-check
+ needs: [version-check, post-release]
if: needs.version-check.outputs.has-version-change == 'true'
runs-on: ubuntu-20.04
permissions:
diff --git a/index.html b/index.html
index e0cb85c..d054217 100644
--- a/index.html
+++ b/index.html
@@ -1,18 +1,15 @@
-
-
-
-ISOS
-
-
-
-
-
-
-
+
+
+
+ ISOS
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
index f9c77aa..fe2a50f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,10 +19,11 @@
"@tauri-apps/plugin-shell": ">=2.0.0-rc.0",
"@tauri-apps/plugin-window-state": "^2.0.0-rc",
"classnames": "^2.5.1",
+ "mathjax-fira-font": "^4.0.0-beta.7",
+ "mathjax-full": "^4.0.0-beta.7",
"preact": "^10.23.2",
"rehype-document": "^7.0.3",
"rehype-format": "^5.0.0",
- "rehype-mathjax": "^6.0.0",
"rehype-stringify": "^10.0.0",
"remark-math": "^6.0.0",
"remark-parse": "^11.0.0",
@@ -6219,6 +6220,15 @@
"vite": ">=3.2.7"
}
},
+ "node_modules/@xmldom/xmldom": {
+ "version": "0.8.10",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
+ "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/abbrev": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
@@ -6482,18 +6492,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/better-react-mathjax": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/better-react-mathjax/-/better-react-mathjax-2.0.3.tgz",
- "integrity": "sha512-wfifT8GFOKb1TWm2+E50I6DJpLZ5kLbch283Lu043EJtwSv0XvZDjr4YfR4d2MjAhqP6SH4VjjrKgbX8R00oCQ==",
- "license": "MIT",
- "dependencies": {
- "mathjax-full": "^3.2.2"
- },
- "peerDependencies": {
- "react": ">=16.8"
- }
- },
"node_modules/bidi-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz",
@@ -8621,6 +8619,19 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-heading-rank": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz",
+ "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-is-body-ok-link": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.0.tgz",
@@ -9930,18 +9941,32 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/mathjax-fira-font": {
+ "version": "4.0.0-beta.7",
+ "resolved": "https://registry.npmjs.org/mathjax-fira-font/-/mathjax-fira-font-4.0.0-beta.7.tgz",
+ "integrity": "sha512-Jg8RYMPx0BMriIoDNmuNsN+lNa1F9udGm+9hl7IkziPsCpgKIRH/mWS1OGZqIwlbUs32KQQvI4cV00Gia47eIg==",
+ "license": "Apache-2.0"
+ },
"node_modules/mathjax-full": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz",
- "integrity": "sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==",
+ "version": "4.0.0-beta.7",
+ "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-4.0.0-beta.7.tgz",
+ "integrity": "sha512-zJUaqak6XPWyY9IW/eurxDXNGrhdYBllciUxJMrsw3TqchH3EHHVCEhKYGDcEmMZTtYjaz3rOa5RLvkBhCF86A==",
"license": "Apache-2.0",
"dependencies": {
- "esm": "^3.2.25",
- "mhchemparser": "^4.1.0",
- "mj-context-menu": "^0.6.1",
- "speech-rule-engine": "^4.0.6"
+ "@xmldom/xmldom": "^0.8.10",
+ "mathjax-modern-font": "^4.0.0-beta.5",
+ "mhchemparser": "^4.2.1",
+ "mj-context-menu": "^0.9.1",
+ "speech-rule-engine": "^4.1.0-beta.11",
+ "wicked-good-xpath": "^1.3.0"
}
},
+ "node_modules/mathjax-modern-font": {
+ "version": "4.0.0-beta.7",
+ "resolved": "https://registry.npmjs.org/mathjax-modern-font/-/mathjax-modern-font-4.0.0-beta.7.tgz",
+ "integrity": "sha512-mGrlxuFPRoHpGYyRaXJpfyM9k77XCpH11lIVLO7+VNTFJXIeqnMXv+AGFiYL/GftQpdhPlCg4zqd/JXlse9S0A==",
+ "license": "Apache-2.0"
+ },
"node_modules/mdast-util-directive": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz",
@@ -10981,9 +11006,9 @@
}
},
"node_modules/mj-context-menu": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz",
- "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==",
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.9.1.tgz",
+ "integrity": "sha512-ECPcVXZFRfeYOxb1MWGzctAtnQcZ6nRucE3orfkKX7t/KE2mlXO2K/bq4BcCGOuhdz3Wg2BZDy2S8ECK73/iIw==",
"license": "Apache-2.0"
},
"node_modules/mrmime": {
@@ -11595,9 +11620,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.41",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
- "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+ "version": "8.4.45",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz",
+ "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==",
"dev": true,
"funding": [
{
@@ -11633,6 +11658,15 @@
"url": "https://opencollective.com/preact"
}
},
+ "node_modules/preact-intersection-observer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/preact-intersection-observer/-/preact-intersection-observer-2.3.6.tgz",
+ "integrity": "sha512-f+1SRbyz3+nrhvzumLxrRKUV8LktAqGd5U3PolcJHPHcqztlHlCHgtbNRurGTX0DH5zlYoe1hrT2zk3Tv6eLbg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "preact": "10.x"
+ }
+ },
"node_modules/preact-render-to-string": {
"version": "6.5.10",
"resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.5.10.tgz",
@@ -11891,6 +11925,24 @@
"jsesc": "bin/jsesc"
}
},
+ "node_modules/rehype-autolink-headings": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz",
+ "integrity": "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "hast-util-heading-rank": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "unified": "^11.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/rehype-document": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/rehype-document/-/rehype-document-7.0.3.tgz",
@@ -11977,6 +12029,47 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/rehype-mathjax/node_modules/commander": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz",
+ "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
+ },
+ "node_modules/rehype-mathjax/node_modules/mathjax-full": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz",
+ "integrity": "sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esm": "^3.2.25",
+ "mhchemparser": "^4.1.0",
+ "mj-context-menu": "^0.6.1",
+ "speech-rule-engine": "^4.0.6"
+ }
+ },
+ "node_modules/rehype-mathjax/node_modules/mj-context-menu": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz",
+ "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/rehype-mathjax/node_modules/speech-rule-engine": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz",
+ "integrity": "sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "commander": "9.2.0",
+ "wicked-good-xpath": "1.3.0",
+ "xmldom-sre": "0.1.31"
+ },
+ "bin": {
+ "sre": "bin/sre"
+ }
+ },
"node_modules/rehype-minify-whitespace": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-6.0.0.tgz",
@@ -12352,6 +12445,78 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/remark-sectionize": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/remark-sectionize/-/remark-sectionize-2.0.0.tgz",
+ "integrity": "sha512-B+sCNNQroXybxX5Gwu9xbkjFIgK6vHMwbgPM/CEzQTP2ODxUiBsQRBjoSC6XR+yPOkgHvXV83HWCNA8IZuvJKg==",
+ "license": "MIT",
+ "dependencies": {
+ "unist-util-find-after": "^4.0.1",
+ "unist-util-visit": "^4.1.2"
+ }
+ },
+ "node_modules/remark-sectionize/node_modules/@types/unist": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+ "license": "MIT"
+ },
+ "node_modules/remark-sectionize/node_modules/unist-util-find-after": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz",
+ "integrity": "sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-sectionize/node_modules/unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-sectionize/node_modules/unist-util-visit": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
+ "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.1.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-sectionize/node_modules/unist-util-visit-parents": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
+ "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/remark-stringify": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
@@ -12678,26 +12843,35 @@
}
},
"node_modules/speech-rule-engine": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz",
- "integrity": "sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==",
+ "version": "4.1.0-beta.11",
+ "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.1.0-beta.11.tgz",
+ "integrity": "sha512-mCBdj/2jDSGqbsmsYDgFlyCiQ2oeEAue86G9RvPTBVjVzOE8kBi8n/7btZa+F1q2E2cmEgjpnc0EJ95Z7q5oXw==",
"license": "Apache-2.0",
"dependencies": {
- "commander": "9.2.0",
- "wicked-good-xpath": "1.3.0",
- "xmldom-sre": "0.1.31"
+ "@xmldom/xmldom": "0.9.0-beta.8",
+ "commander": "12.0.0",
+ "wicked-good-xpath": "1.3.0"
},
"bin": {
"sre": "bin/sre"
}
},
+ "node_modules/speech-rule-engine/node_modules/@xmldom/xmldom": {
+ "version": "0.9.0-beta.8",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.0-beta.8.tgz",
+ "integrity": "sha512-Q5bFbYxRJKTYP7S1a0HIlumTmJRHHMGrNvBp8F1mUEyyGTeCs0g8+FKAaA6tU+YFsZgHKA0eRKzZhYdhpgAHAw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/speech-rule-engine/node_modules/commander": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz",
- "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==",
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz",
+ "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==",
"license": "MIT",
"engines": {
- "node": "^12.20.0 || >=14"
+ "node": ">=18"
}
},
"node_modules/sprintf-js": {
@@ -13646,14 +13820,14 @@
}
},
"node_modules/vite": {
- "version": "5.4.2",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
- "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz",
+ "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "^0.21.3",
- "postcss": "^8.4.41",
+ "postcss": "^8.4.43",
"rollup": "^4.20.0"
},
"bin": {
@@ -14271,7 +14445,10 @@
},
"packages/export": {
"name": "@isos/export",
- "version": "0.0.1"
+ "version": "0.0.1",
+ "devDependencies": {
+ "vite-node": "^2.0.5"
+ }
},
"packages/fs": {
"name": "@isos/fs",
@@ -14306,9 +14483,14 @@
"@unified-latex/unified-latex-util-parse": "^1.7.1",
"github-slugger": "^2.0.0",
"gray-matter": "^4.0.3",
+ "hast-util-from-dom": "^5.0.0",
+ "mathjax-full": "^4.0.0-beta.6",
"mdast-util-toc": "^7.1.0",
"mime": "^4.0.3",
"pathe": "^1.1.2",
+ "preact-intersection-observer": "^2.3.6",
+ "rehype-autolink-headings": "^7.1.0",
+ "rehype-mathjax": "^6.0.0",
"rehype-parse": "^9.0.0",
"rehype-remark": "^10.0.0",
"remark-directive": "^3.0.0",
@@ -14316,6 +14498,7 @@
"remark-heading-id": "^1.0.1",
"remark-mdx-math-enhanced": "^0.0.1-beta.3",
"remark-parse": "^11.0.0",
+ "remark-sectionize": "^2.0.0",
"remark-stringify": "^11.0.0",
"unified": "^11.0.4",
"vfile-matter": "^5.0.0",
@@ -14331,12 +14514,8 @@
"dependencies": {
"@mdx-js/mdx": "^3.0.1",
"@mdx-js/preact": "^3.0.1",
- "better-react-mathjax": "^2.0.3",
"classnames": "^2.5.1",
- "mdast-util-toc": "^7.1.0",
- "preact": "^10.20.2",
- "rehype-mathjax": "^6.0.0",
- "remark-math": "^6.0.0"
+ "preact": "^10.20.2"
},
"devDependencies": {
"@babel/core": "^7.24.4",
diff --git a/package.json b/package.json
index a78cdeb..2e03df8 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,8 @@
"local-build": "./scripts/local-build/local-build.sh",
"test": "vitest",
"e2e": "playwright test",
- "prettier": "prettier"
+ "prettier": "prettier",
+ "test-bundle": "npm -w @isos/runtime run build && npm -w @isos/export run bundle"
},
"dependencies": {
"@isos/processor": "0.0.1",
@@ -26,10 +27,11 @@
"@tauri-apps/plugin-shell": ">=2.0.0-rc.0",
"@tauri-apps/plugin-window-state": "^2.0.0-rc",
"classnames": "^2.5.1",
+ "mathjax-fira-font": "^4.0.0-beta.7",
+ "mathjax-full": "^4.0.0-beta.7",
"preact": "^10.23.2",
"rehype-document": "^7.0.3",
"rehype-format": "^5.0.0",
- "rehype-mathjax": "^6.0.0",
"rehype-stringify": "^10.0.0",
"remark-math": "^6.0.0",
"remark-parse": "^11.0.0",
diff --git a/packages/export/package.json b/packages/export/package.json
index c7ed2bf..56699c9 100644
--- a/packages/export/package.json
+++ b/packages/export/package.json
@@ -8,5 +8,11 @@
],
"exports": [
"./src/index.ts"
- ]
+ ],
+ "scripts": {
+ "bundle": "NODE_ENV=test vite-node src/create-test-bundle.ts"
+ },
+ "devDependencies": {
+ "vite-node": "^2.0.5"
+ }
}
diff --git a/packages/export/src/create-test-bundle.ts b/packages/export/src/create-test-bundle.ts
new file mode 100644
index 0000000..52e298b
--- /dev/null
+++ b/packages/export/src/create-test-bundle.ts
@@ -0,0 +1,50 @@
+import { createRuntimeHtml } from '.';
+import { readFile, writeFile } from 'node:fs/promises';
+import { fileURLToPath } from 'node:url';
+
+import { createContext, inputToMarkdown } from '@isos/processor';
+
+// const fonts = [
+// 'modern', // good
+// 'asana',
+// 'bonum',
+// 'dejavu',
+// 'pagella', // good
+// 'schola', // good
+// 'termes', // good
+// 'stix2', // good
+// 'fira',
+// 'euler',
+// 'tex',
+// ];
+
+const ctx = await createContext(
+ '/Users/staff/Work/latex-experiments/test1/MCA_lecturenotes.tex',
+);
+
+const markdown = await inputToMarkdown(ctx);
+
+const frontmatter = {
+ docTitle: 'Test',
+};
+
+const bundle = {
+ css: await readFile(
+ fileURLToPath(
+ new URL('../../runtime/dist/assets/index.css', import.meta.url),
+ ),
+ 'utf-8',
+ ),
+ js: await readFile(
+ fileURLToPath(
+ new URL('../../runtime/dist/assets/runtime.js', import.meta.url),
+ ),
+ 'utf-8',
+ ),
+ font: 'termes',
+};
+
+const filePath = fileURLToPath(new URL('../test.html', import.meta.url));
+const runtime = await createRuntimeHtml(markdown, frontmatter, bundle);
+
+await writeFile(filePath, runtime);
diff --git a/packages/export/src/index.ts b/packages/export/src/index.ts
index 3f3e912..b4a8203 100644
--- a/packages/export/src/index.ts
+++ b/packages/export/src/index.ts
@@ -6,12 +6,13 @@ type FrontMatter = {
type RuntimeBundle = {
css: string;
js: string;
+ font: string;
};
export async function createRuntimeHtml(
markdown: string,
frontmatter: FrontMatter,
- bundle: RuntimeBundle
+ bundle: RuntimeBundle,
) {
return `
@@ -21,6 +22,12 @@ export async function createRuntimeHtml(
${frontmatter.docTitle}
+
\n\n a\nYNee>RX|9l;NqB~EXtjdn+$jInw
zHwAHV01)8kNH74P{9J%&gZ|h4kNf`*adB0-A06)xi~Aq!d4U%sM8(7bfS8~koAw8c
zzz!hL5{e2c06?rH008^|0Kh~IAj|eksHh45=<0qnX+Jo~EeOL
IejeWdz?UDLpw_B|siDcw_+>vD_WuCJXO3#|
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
diff --git a/src-tauri/resources/cm-serif-bold.woff b/src-tauri/resources/cm-serif-bold.woff
deleted file mode 100644
index c19e4c7d2df027440dac55ebb7452bb823fc7457..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 30276
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
^hQ6c
z>iNtabLt4KLKdwEh5#jGwKk3gMK)?FYjiYZkY#f
zR5E+(DuX@a__Q^8o)JmCo0kh@y5?Q{)6ngrC~wb%7pIqd$OHR}Y#(ZIX3cQ40`9Sr
z6b%7S^j9C4@q_sWDvg0=E2yvn^}(`wd`)BQI{Yr`aEz>1U{nUUU6*hJ{w;Resl&Z{
zBN<(xs@1Zk6@#V7yW;9W)}UpG?>JW0!F)t1ngVfx&yz>Y6EU2E=GJ^C%%rxI6&TKF
ztu%9@kwbMg`V^a~(B~TORw^86Z4N%>JMrmCuE1FnXvSCQ{W!C7mxQaZWjGtIMUtEu
zFjkk?=>43Hx7<9++B{^t>Bgh{UfJeu9eiDw(``Y
z^%g%L9r~H>su_w(t>Nd`So+0gk90H~U+I?9BLxEkUInu_7dl3H53|`9F0V!0G&VL%
zL5qc$D{+@4{mNz|v?OX&8y3+s7f7O%{tHfeG|C*MDk1K2gqKJcaea(kTVlwGTyQ4f
z2JY?j$wpEi+rPu-E}Yq#8aw)D)=T0-m8He%>D3sYmks5It5NAz>Ec34jkD*DXBgVW
zoAce6-JLaL?{j#zK3&yQM@?HF(N#;k&5Yf+m_85EIJ{j(*U41EYV#MyC5*!n#7B}b*w>9#vFWVF|iQ2(`UqXT1PdziA?u&C9DA&*GO=Th?cO`5^HGJ@8i
zP@`CO)8|1Os#2#xUqr212ag{E4%^q*;w-Nvs2b>Eb+yAV?ifT*rJXo#vSzS0p<8DV
zsuzDuyYy#3xmllg!cx{|P=>UIO44k8Z()}bro<4Ih8Qicd0LEY0z?r)&kJ+PxS8U9
z2)4+XNbmY{aZBcJSGUjJW_3pU`TvsKMRTmV|6R9To_-s#EYdlrbOuic*;EO~%u`!|H5J@-
z%6F8D)oT>FRSMTD_-vdJW1atj8&iF>9{wnV{JFK|dE=3R16J|>o
z6Vn0!Vi;_szt|eyFo&6Xhjdz@^?_R^i{KEuA*H%6t01O_-$jg*)k^APgMsTFZfz<6
zqJWL6NXpb%Jga9n&xjq=mu7;ICi8ouI7Sw$$@T)hR8F3I$s63X+4Sr;JA~fozbMS$
zafAkM5y}0A$){CQhYU>Tp5FY8MT1aWa@xwm{$zE9X@p{>;n6p1#i0HhTuFTePYOiz
z%chnv`fs12+qIT$IB6O>(eWS
z0jA>_ix0og;o~k2lj-Q6iGIh9I(>;iy&PmN@$lI
z=?5Y-z!a9lEqZ2wi^H$P&2=2@#=!O&KEmE=6(I$?t^`4!CCu-?upkUKbmQXhta^
zLVia23nBNgkKS-FYfPmjLdxpleG{ZyXR#rPD^Q>HH=Y$aIB6vGOp!?@ZRE~>1i#d)
z6C{{0z=`*7((DSUL3FHww4qY8T<6N`P5+;0+Ke_Dn@vC?ykH>S&_h_T6(Qt9N%a1Y_
z7yV3P&$T`wH0_xGGAqjROmuubzFPeEU3Iqy760edicLHh|KGxY`xXVai2pI{K@F5*EmIeeZrlQt}
zpxS`0RhkrPP;7v34@b&A%WvyF+T!rWpWLoP)0uoM@mK|SclLGR~lkE
z;Ew^J7~lfmaFrc;PSqypy;8KKSKra9R3vT>je1;bV6R@7S{E^x7U?lOl=-!7R`Hna
zFP|ST(PrY-iML33uigFurRf4Vme2W0d1~oHS7W5L+QmBBPL$MWXDVi)3&(
zej`K6#?4>~cJg*p>Vi&zi{Hq;6{m_qCvENVfhi-tOny!_6r8v2J&yP={}+PJ(Ak55PL
zUfftZn|>?k*BqW`OmmMFb6N%GwL;N$R#$f*t7v+|fdLHl?=a1Hx^FW>N7AfVw#NnT
zi*uLVPdp!EMaN(Ex5igx50Fo+Tgx8IZhix9l6BYo>#B>M2Ld=aCC32aaU1RPhBb7L#