From ab7ffb19c84bfc7a97d068f4fbc77a997d72ee8f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Sep 2026 12:37:31 +0200 Subject: [PATCH 1/7] chore(deps): bump @iconify/vue in the npm-production group (#89) Bumps the npm-production group with 1 update: [@iconify/vue](https://github.com/iconify/iconify/tree/HEAD/components/vue). Updates `@iconify/vue` from 5.0.2 to 5.0.3 - [Commits](https://github.com/iconify/iconify/commits/HEAD/components/vue) --- updated-dependencies: - dependency-name: "@iconify/vue" dependency-version: 5.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 38613fc6..37958b25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,7 @@ "packages": { "": { "dependencies": { - "@iconify/vue": "^5.0.2", + "@iconify/vue": "^5.0.3", "lz-string": "^1.5.0", "vitepress-plugin-blog": "^0.2.0", "vitepress-plugin-codeblocks-fold": "^1.2.35", @@ -953,9 +953,9 @@ } }, "node_modules/@iconify/vue": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@iconify/vue/-/vue-5.0.2.tgz", - "integrity": "sha512-Xo8th16qDH2+o0LBxmqaosJheTU6v8QeDbpP40txrqz9dusBUAf/voOAC+v9WT4DvDZx8CWiA4dq8LMB/rasyQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@iconify/vue/-/vue-5.0.3.tgz", + "integrity": "sha512-e9x6QZe2/HyeHUog0jzZJSZts7m/YntPYp/p4OqtZEXpHznxWnQpcX30YpuaUH43h69l3YeR1FCJ8V1t3qd7qA==", "license": "MIT", "dependencies": { "@iconify/types": "^2.0.0" diff --git a/package.json b/package.json index 1282a050..030d5a09 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "check:contributors": "npm run test:contributors && npm run contributors:check" }, "dependencies": { - "@iconify/vue": "^5.0.2", + "@iconify/vue": "^5.0.3", "lz-string": "^1.5.0", "vitepress-plugin-blog": "^0.2.0", "vitepress-plugin-codeblocks-fold": "^1.2.35", From 217acacf2069c292723f80cd22a2b4b5920836b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Oct 2026 22:09:04 +0200 Subject: [PATCH 2/7] chore(deps-dev): bump @types/node (#91) Bumps the npm-development group with 1 update: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node). Updates `@types/node` from 26.6.2 to 26.6.4 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 26.6.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 37958b25..3291f8a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ }, "devDependencies": { "@codesandbox/sandpack-themes": "^2.0.21", - "@types/node": "^26.6.2", + "@types/node": "^26.6.4", "markdown-it-container": "^4.0.0", "mermaid": "^11.17.2", "sandpack-vue3": "^3.1.12", @@ -1849,9 +1849,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.2.tgz", - "integrity": "sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==", + "version": "26.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.4.tgz", + "integrity": "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==", "devOptional": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 030d5a09..326a7fc0 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ }, "devDependencies": { "@codesandbox/sandpack-themes": "^2.0.21", - "@types/node": "^26.6.2", + "@types/node": "^26.6.4", "markdown-it-container": "^4.0.0", "mermaid": "^11.17.2", "sandpack-vue3": "^3.1.12", From 0e47eacf0dd74748a31754613359f7931c16dd4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2026 00:27:10 +0200 Subject: [PATCH 3/7] chore(deps-dev): bump @types/node (#92) Bumps the npm-development group with 1 update: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node). Updates `@types/node` from 26.6.4 to 26.6.5 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 26.6.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3291f8a7..f3131bf7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ }, "devDependencies": { "@codesandbox/sandpack-themes": "^2.0.21", - "@types/node": "^26.6.4", + "@types/node": "^26.6.5", "markdown-it-container": "^4.0.0", "mermaid": "^11.17.2", "sandpack-vue3": "^3.1.12", @@ -1849,9 +1849,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.6.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.4.tgz", - "integrity": "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==", + "version": "26.6.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz", + "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==", "devOptional": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 326a7fc0..916c6898 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ }, "devDependencies": { "@codesandbox/sandpack-themes": "^2.0.21", - "@types/node": "^26.6.4", + "@types/node": "^26.6.5", "markdown-it-container": "^4.0.0", "mermaid": "^11.17.2", "sandpack-vue3": "^3.1.12", From ae90677b585568cd951d959be40ca7fc0f7a222e Mon Sep 17 00:00:00 2001 From: humanbydefinition Date: Tue, 13 Oct 2026 22:04:52 +0200 Subject: [PATCH 4/7] refactor(footer): update footer section titles and links for clarity --- .../components/SiteFooter/SiteFooter.vue | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/.vitepress/theme/components/SiteFooter/SiteFooter.vue b/.vitepress/theme/components/SiteFooter/SiteFooter.vue index 0d4e3137..3f84faeb 100644 --- a/.vitepress/theme/components/SiteFooter/SiteFooter.vue +++ b/.vitepress/theme/components/SiteFooter/SiteFooter.vue @@ -108,13 +108,14 @@ const columns: FooterColumn[] = [ ] }, { - title: 'Tools', + title: 'TEXTMODE PROJECTS', links: [ - { label: 'Web Editor', href: 'https://editor.textmode.art', external: true }, - { label: 'Textmode Painter', href: 'https://create.textmode.art', external: true }, + { label: 'Code Editor', href: 'https://editor.textmode.art', external: true }, + { label: 'Browser Extension', href: 'https://extension.textmode.art', external: true }, + { label: 'Textmode Art Explorer', href: 'https://explore.textmode.art', external: true }, { label: 'Media Converter', href: 'https://export.textmode.art', external: true }, - { label: 'Automata Playground', href: 'https://automata.textmode.art', external: true }, - { label: 'Browser Extension', href: 'https://extension.textmode.art', external: true } + { label: 'Textmode Editor', href: 'https://create.textmode.art', external: true }, + { label: 'Automata Playground', href: 'https://automata.textmode.art', external: true } ] }, { @@ -211,7 +212,7 @@ const columns: FooterColumn[] = [ .site-footer__nav { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 1.5rem 2rem; + gap: 1rem 1.5rem; } .site-footer__column { @@ -219,7 +220,7 @@ const columns: FooterColumn[] = [ } .site-footer__heading { - margin: 0 0 0.75rem; + margin: 0 0 0.5rem; padding: 0; border: none; font-family: var(--textmode-font); @@ -234,7 +235,7 @@ const columns: FooterColumn[] = [ .site-footer__list { display: flex; flex-direction: column; - gap: 0.5rem; + gap: 0.375rem; margin: 0; padding: 0; list-style: none; @@ -343,7 +344,7 @@ const columns: FooterColumn[] = [ @container (min-width: 900px) { .site-footer__top { grid-template-columns: minmax(200px, 300px) minmax(0, 1fr); - gap: 2.5rem 3.5rem; + gap: 2rem 2.5rem; } .site-footer__brand { From 118d613df7456b930ea915a87bfe3fb76e279572 Mon Sep 17 00:00:00 2001 From: humanbydefinition Date: Mon, 19 Oct 2026 22:54:03 +0200 Subject: [PATCH 5/7] perf: defer Mermaid and serve fonts locally --- .vitepress/config.mts | 20 +++- .vitepress/configs/head.mts | 4 +- .vitepress/theme/custom.css | 65 +++++++++++- .vitepress/theme/index.ts | 3 +- public/fonts/JetBrainsMono-OFL.txt | 93 ++++++++++++++++++ public/fonts/JetBrainsMono-cyrillic-ext.woff2 | Bin 0 -> 1640 bytes public/fonts/JetBrainsMono-cyrillic.woff2 | Bin 0 -> 8872 bytes public/fonts/JetBrainsMono-greek.woff2 | Bin 0 -> 6836 bytes public/fonts/JetBrainsMono-latin-ext.woff2 | Bin 0 -> 11624 bytes public/fonts/JetBrainsMono-latin.woff2 | Bin 0 -> 31432 bytes public/fonts/JetBrainsMono-vietnamese.woff2 | Bin 0 -> 5888 bytes 11 files changed, 176 insertions(+), 9 deletions(-) create mode 100644 public/fonts/JetBrainsMono-OFL.txt create mode 100644 public/fonts/JetBrainsMono-cyrillic-ext.woff2 create mode 100644 public/fonts/JetBrainsMono-cyrillic.woff2 create mode 100644 public/fonts/JetBrainsMono-greek.woff2 create mode 100644 public/fonts/JetBrainsMono-latin-ext.woff2 create mode 100644 public/fonts/JetBrainsMono-latin.woff2 create mode 100644 public/fonts/JetBrainsMono-vietnamese.woff2 diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 8a3b685c..cabef645 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -2,7 +2,7 @@ import { defineConfig } from 'vitepress' import container from 'markdown-it-container' import { renderSandbox } from 'vitepress-plugin-sandpack' -import { withMermaid } from 'vitepress-plugin-mermaid' +import { MermaidMarkdown, MermaidPlugin } from 'vitepress-plugin-mermaid' import { head, nav, sidebar, transformHead } from './configs/index.mts' const LIVE_SANDBOX_CONTAINER_PATTERN = /:{3,}\s*textmode-(?:api-)?sandbox\b[^\n]*\n[\s\S]*?\n:{3,}/g @@ -61,7 +61,7 @@ const themeConfig = { } // https://vitepress.dev/reference/site-config -export default withMermaid(defineConfig({ +export default defineConfig({ lang: 'en-US', appearance: 'dark', lastUpdated: true, @@ -84,8 +84,20 @@ export default withMermaid(defineConfig({ hostname: 'https://code.textmode.art' }, transformHead, + transformHtml: (html, _id, { pageData }) => pageData.frontmatter.layout === 'home' + ? html.replace(/(]*id="VPContent")/, '$1 role="main"') : html, vite: { + // Retain the plugin's configuration module; the theme loads its renderer lazily. + plugins: [{ ...MermaidPlugin(), transform: undefined }], + resolve: { + alias: { + 'dayjs/plugin/advancedFormat.js': 'dayjs/esm/plugin/advancedFormat', + 'dayjs/plugin/customParseFormat.js': 'dayjs/esm/plugin/customParseFormat', + 'dayjs/plugin/isoWeek.js': 'dayjs/esm/plugin/isoWeek', + 'cytoscape/dist/cytoscape.umd.js': 'cytoscape/dist/cytoscape.esm.js', + }, + }, optimizeDeps: { // Mermaid is only reached through a lazily-loaded component, so Vite's // dependency scanner misses it. Pre-bundle it (and its CommonJS @@ -96,6 +108,8 @@ export default withMermaid(defineConfig({ markdown: { config(md) { + // Keep the plugin's Markdown syntax without its eager browser runtime. + MermaidMarkdown(md, {}) md .use(container, 'textmode-sandbox', { render(tokens: any[], idx: number) { @@ -121,4 +135,4 @@ export default withMermaid(defineConfig({ }, themeConfig, -})) +}) diff --git a/.vitepress/configs/head.mts b/.vitepress/configs/head.mts index c6072df2..c819343f 100644 --- a/.vitepress/configs/head.mts +++ b/.vitepress/configs/head.mts @@ -9,9 +9,6 @@ const baseHeaders: HeadConfig[] = [ ['link', { rel: 'icon', type: 'image/png', sizes: '64x64', href: '/icon-dark-64.png', media: '(prefers-color-scheme: dark)' }], ['link', { rel: 'manifest', href: '/site.webmanifest' }], ['script', {}, "(()=>{const m=window.matchMedia('(prefers-color-scheme: dark)');const u=()=>{const mode=m.matches?'dark':'light';document.querySelectorAll('link[rel*=\"icon\"][sizes]').forEach(l=>{l.href=l.href.replace(/-(light|dark)-/,`-${mode}-`)});};m.addEventListener('change',u);})();"], - ['link', { rel: 'preconnect', href: 'https://fonts.googleapis.com' }], - ['link', { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' }], - ['link', { href: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap', rel: 'stylesheet' }] ] export const head: HeadConfig[] = [...baseHeaders] @@ -181,6 +178,7 @@ export const transformHead = ({ pageData }: TransformContext): HeadConfig[] => { // Schema: Home page if (isHomePage) { + head.push(['link', { rel: 'preload', href: '/fonts/Bescii-Mono.woff', as: 'font', type: 'font/woff', crossorigin: '' }]) head.push(['script', { type: 'application/ld+json' }, JSON.stringify({ "@context": "https://schema.org", "@graph": [ diff --git a/.vitepress/theme/custom.css b/.vitepress/theme/custom.css index 6305f113..8157becb 100644 --- a/.vitepress/theme/custom.css +++ b/.vitepress/theme/custom.css @@ -1,5 +1,66 @@ -/* Import a good monospace font for ASCII aesthetics */ -@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap'); +@font-face { + font-family: 'Bescii Mono'; + src: url('/fonts/Bescii-Mono.woff') format('woff'); + font-style: normal; + font-weight: 400; + font-display: swap; +} + +/* Same JetBrains Mono face, served locally; browsers load only needed subsets. */ +/* cyrillic-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 700; + font-display: swap; + src: url(/fonts/JetBrainsMono-cyrillic-ext.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 700; + font-display: swap; + src: url(/fonts/JetBrainsMono-cyrillic.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 700; + font-display: swap; + src: url(/fonts/JetBrainsMono-greek.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 700; + font-display: swap; + src: url(/fonts/JetBrainsMono-vietnamese.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 700; + font-display: swap; + src: url(/fonts/JetBrainsMono-latin-ext.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 700; + font-display: swap; + src: url(/fonts/JetBrainsMono-latin.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} /* Custom CSS variables for textmode.js theme */ :root { diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index 0b9acd65..515f578c 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -3,7 +3,7 @@ import DefaultTheme from 'vitepress/theme' import type { EnhanceAppContext, Theme } from 'vitepress' import { useData, useRoute } from 'vitepress' import './custom.css' -import { defineComponent, h } from 'vue' +import { defineAsyncComponent, defineComponent, h } from 'vue' import codeblocksFold from 'vitepress-plugin-codeblocks-fold' import 'vitepress-plugin-codeblocks-fold/style/index.css' import { useCodeSandbox } from 'vitepress-plugin-codesandbox' @@ -71,6 +71,7 @@ const baseTheme: Theme = { const { app } = ctx // Register components + app.component('Mermaid', defineAsyncComponent(() => import('vitepress-plugin-mermaid/Mermaid.vue'))) app.component('TextmodeLiveSandbox', TextmodeLiveSandbox) app.component('TextmodeSandbox', TextmodeSandbox) app.component('TextmodeApiSandbox', TextmodeApiSandbox) diff --git a/public/fonts/JetBrainsMono-OFL.txt b/public/fonts/JetBrainsMono-OFL.txt new file mode 100644 index 00000000..675d198b --- /dev/null +++ b/public/fonts/JetBrainsMono-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/fonts/JetBrainsMono-cyrillic-ext.woff2 b/public/fonts/JetBrainsMono-cyrillic-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..289de93149abef2225658543048409ac53b344fa GIT binary patch literal 1640 zcmV-u2ABDFPew8T0RR9100w9P6951J01V^+00spB0RR9100000000000000000000 z0000Q92*`SCkoM^-nRWgwfAza*p?1mEMoI?FyNLn_TR#0?uLQ%lR_BCm^P)wm4}1+QGD5wccRbp}f8S`ImB`P}jB+MWmk zxB&n`Fc1U*1Oc2RlZ^E0vwaLvbN~wg0yxPf7vAD&x*I|IVLX86$ zi1wB#5D5SZ985WtjVCZ*0eFw-`?U+*KS8@7#p%es|NaV;4*{HR1 zInxJx0rLiYK7@IW&Fhei8x28;9{>R~K#4BbfqDy20Akb9K^=jXZedI>y&7i~tBQu4 z0{K9WKqb`66!|YB00_o=JODpYRpsO?55PPC1!zDt8UjS4GYt@l9}R_vbb@|)UzGl= zzTdJyM?ItO<4;Wvc+WyBXzkic);F;O1~yz@06z-Zk#)YA`8ojNJC{cg9W41SG2o^) zx0vsgk9fr9Z$-R$BMUwNs7S?)ZvuV<*&q)z)NzG8MpH!yuf^>zgO8f0IV_MVlSyF6q@`!z<3xeho~`3ftP0HZXljx)z%d7= z5I=SB+c{|Rl$wE?QPrftPoRn!G-@NQo7GR{1=@PHoj#S-MroQFt4q@T;!7XoOj;{B ze_Jx3V##ZBS4meimzVJLES!Jk^d+A}ewfp5?B2p!-KxNs*EdMK3;ekVVB$#?L0)Vo zI=sjMH2{^Ma9-r@@=lLK22zIj4 z!N2#fjD$b;#bu}df5uX}HCL$J)!9jX|9tfN`>%iePly59I6HR|ka=})N5`S!@L81M zaQ+;fni|^1$?fK_e#OX)e#2fk+0G4XZ-?HVZE43krkG>+Q)A=DQu#$NLD3csktLIgozC!{pQagm!l9dTuyuC+ zo2sycOzFPZnUR(j3OVarTAS)+ep736-K7%j6||23Gm=6iNqCkv6H!W2YMXIpUv$^u z1oQlPT=8^+0IF8+^Q8Pe)z^I5u4(%KfBx{u9RPp+@!bisEUHF(1u#(n2z;8=YMf6{ zcl8_y6ZP8ZrRqt5e;F=&P7wgW=K|m-4gq{*qmhP|o>e+JiUW;BcK~mxbOMEBrK7?t zXHcVA-awsVxdsgqWfhtf%78>KwGy34z%6#v@yZ!AaB~4o?3_Xyk#wMoYMwzim25%} zr3^tY^~9nNH_pH5#|eypWDgV@Ob;ZyCz~kKBHaU?!mtA=kX61*Z!XhwBP>FaXLeU| zEQ8TvA$S&<2O}t3P>CEzcUCcKogU80^H>}c@QTzb!~VV?ms8_yt{2K-p^ur>{d4ulJ)l*VE^X%nkc5+ zT7v+>J^O%cJ{Lu^XrhZDrr6NLE)H>u%M8xYsZArRm+*t?U~d%CyPi+__bK0C%$+XF m4~5s|!E)7eM0)y6%cMWdBKUI_CTX`-mDe_9|HbM#{b~TxIQ=#N literal 0 HcmV?d00001 diff --git a/public/fonts/JetBrainsMono-cyrillic.woff2 b/public/fonts/JetBrainsMono-cyrillic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..de39acbc40690eba8a6e4beb11ed8aa26656b07f GIT binary patch literal 8872 zcmV;ZB3IpaPew8T0RR9103xUW6951J07iHK03tmA0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/public/fonts/JetBrainsMono-vietnamese.woff2 b/public/fonts/JetBrainsMono-vietnamese.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e38f5538f84e920b822eeb9a3dd3ea1e20bc1797 GIT binary patch literal 5888 zcmV+b7ysyYPew8T0RR9102crN6951J06*ja02Y`40RR9100000000000000000000 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 WADn8I>W@j`6r5^GWB*o5H{S_n@f*(o literal 0 HcmV?d00001 From 1d519b29e28859031fc66c6e5368a491994c2f7e Mon Sep 17 00:00:00 2001 From: humanbydefinition Date: Mon, 19 Oct 2026 22:54:09 +0200 Subject: [PATCH 6/7] feat: add accessible text hero over landing animation --- .vitepress/theme/components/TextmodeHero.vue | 90 +++++++++++++++++++- .vitepress/theme/custom.css | 26 +----- .vitepress/theme/index.ts | 2 +- .vitepress/theme/sketches/hero-wave/index.ts | 4 +- .vitepress/theme/sketches/hero-wave/types.ts | 2 + index.md | 8 +- 6 files changed, 99 insertions(+), 33 deletions(-) diff --git a/.vitepress/theme/components/TextmodeHero.vue b/.vitepress/theme/components/TextmodeHero.vue index 4f3a24c9..e680df07 100644 --- a/.vitepress/theme/components/TextmodeHero.vue +++ b/.vitepress/theme/components/TextmodeHero.vue @@ -1,17 +1,24 @@ + + diff --git a/.vitepress/theme/custom.css b/.vitepress/theme/custom.css index 8157becb..cd6cae78 100644 --- a/.vitepress/theme/custom.css +++ b/.vitepress/theme/custom.css @@ -134,13 +134,6 @@ body::-webkit-scrollbar-thumb:hover { display: none !important; } -/* Hide default hero heading since we have a custom UI */ -.VPHome .VPHero .heading, -.VPHome .VPHero h1.text, -.VPHome .VPHero .main .name { - display: none !important; -} - /* Enhanced hero section styles - only apply to home page */ .VPHome .VPHero { position: relative; @@ -158,15 +151,12 @@ body::-webkit-scrollbar-thumb:hover { .textmode-hero-container { position: relative; width: 100%; - height: 400px; + min-height: 400px; margin: 1.5rem 0; border-radius: 8px; overflow: hidden; - background: linear-gradient(135deg, var(--vp-c-bg-soft) 0%, var(--vp-c-bg) 100%); - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; + background: #1b1b1f; + isolation: isolate; } .textmode-hero-canvas { @@ -187,7 +177,7 @@ body::-webkit-scrollbar-thumb:hover { /* TextmodeHero mobile styles */ .textmode-hero-container { - height: 300px; + min-height: 300px; margin: 1rem 0; } } @@ -232,14 +222,6 @@ body::-webkit-scrollbar-thumb:hover { text-underline-offset: 2px; } -@media (max-width: 480px) { - - /* TextmodeHero mobile styles */ - .textmode-hero-container { - height: 250px; - } -} - /* Textmode Sandbox Overlay Styling */ .textmode-sandbox-wrapper { position: relative; diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index 515f578c..5ba33b04 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -53,7 +53,7 @@ const HeroLayout = defineComponent({ setup(_, { slots }) { return () => h(DefaultTheme.Layout, null, { ...slots, - 'home-hero-info-after': () => h(TextmodeHero), + 'home-hero-info': () => h(TextmodeHero), 'aside-bottom': () => h(AsideLinks), 'doc-after': () => h(DocFooter), 'layout-bottom': () => h('div', [ diff --git a/.vitepress/theme/sketches/hero-wave/index.ts b/.vitepress/theme/sketches/hero-wave/index.ts index 79c52d37..9693db4d 100644 --- a/.vitepress/theme/sketches/hero-wave/index.ts +++ b/.vitepress/theme/sketches/hero-wave/index.ts @@ -65,7 +65,8 @@ export function createHeroWaveSketch( tm.draw(() => { if (!isReady || isDestroyed) return - if (!hasRenderedFrame) { + const firstFrame = !hasRenderedFrame + if (firstFrame) { hasRenderedFrame = true schedulePendingResize() } @@ -81,6 +82,7 @@ export function createHeroWaveSketch( } renderBrandingOverlay(tm, time, subheaderLines) } + if (firstFrame) options.onReady?.() }) const applyResize = (width: number, height: number) => { diff --git a/.vitepress/theme/sketches/hero-wave/types.ts b/.vitepress/theme/sketches/hero-wave/types.ts index 3546bc0e..947f48bb 100644 --- a/.vitepress/theme/sketches/hero-wave/types.ts +++ b/.vitepress/theme/sketches/hero-wave/types.ts @@ -9,4 +9,6 @@ export interface HeroWaveOptions { * "hero" shows the logo + tagline overlay, "background" only renders the waves. */ mode?: 'hero' | 'background' + /** Called after the first complete frame, before playback may be paused. */ + onReady?: () => void } diff --git a/index.md b/index.md index 179323c9..9302bb4f 100644 --- a/index.md +++ b/index.md @@ -6,7 +6,8 @@ layout: home footer: false hero: - text: textmode.js + name: textmode.js + tagline: A creative coding library for real-time ASCII art and textmode graphics on the web. actions: - theme: brand text: Get started @@ -43,11 +44,6 @@ features: --- -

textmode.js - Real-time ASCII art for the web

-

- Lightweight creative coding library for real-time textmode graphics in the browser. -

- ## What is `textmode.js`? From b58b768526a97d5c60daa4410db98b4607df0f28 Mon Sep 17 00:00:00 2001 From: humanbydefinition Date: Mon, 19 Oct 2026 22:54:11 +0200 Subject: [PATCH 7/7] chore: remove obsolete Pages CNAME --- public/CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 public/CNAME diff --git a/public/CNAME b/public/CNAME deleted file mode 100644 index eb66fd25..00000000 --- a/public/CNAME +++ /dev/null @@ -1 +0,0 @@ -code.textmode.art \ No newline at end of file