diff --git a/packages/banners/package.json b/packages/banners/package.json index b9ed74a..1938f4d 100644 --- a/packages/banners/package.json +++ b/packages/banners/package.json @@ -16,5 +16,8 @@ "@types/node": "^20.10.0", "eslint": "^8.54.0", "linkedom": "^0.16.4" + }, + "dependencies": { + "@fredli74/typr": "^0.3.8" } } diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js index 6c2d3a9..85263c7 100644 --- a/packages/banners/src/index.js +++ b/packages/banners/src/index.js @@ -3,6 +3,7 @@ */ import getLocalLayout from './layouts.js'; import { isValidIcon } from './utils.js'; +import fontSvg from './text-svg.js'; /** * @param {Readonly} string - The string to be converted. @@ -198,6 +199,8 @@ async function banner(object) { }, ); + dom.appendChild(stringToHtml(``, doc)); + return htmlToString(dom, doc); } diff --git a/packages/banners/src/text-svg.js b/packages/banners/src/text-svg.js new file mode 100644 index 0000000..12529e2 --- /dev/null +++ b/packages/banners/src/text-svg.js @@ -0,0 +1,14 @@ +import * as typr from '@fredli74/typr'; + +const buffer = await fetch( + import.meta.resolve('/packages/banners/static/CalSans-SemiBold.ttf'), +); +const font = new typr.Font(await buffer.arrayBuffer()); +const glyhps = font.stringToGlyphs('Hello world'); + +const path = font.glyphsToPath(glyhps); +const svg = font.pathToSVG(path); + +export default svg; + + diff --git a/packages/banners/static/CalSans-SemiBold.ttf b/packages/banners/static/CalSans-SemiBold.ttf new file mode 100644 index 0000000..4a2950a Binary files /dev/null and b/packages/banners/static/CalSans-SemiBold.ttf differ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec8772f..54b16e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,6 +41,10 @@ importers: version: 0.34.6 packages/banners: + dependencies: + '@fredli74/typr': + specifier: ^0.3.8 + version: 0.3.8 devDependencies: '@types/node': specifier: ^20.10.0 @@ -597,6 +601,10 @@ packages: engines: {node: '>=14'} dev: true + /@fredli74/typr@0.3.8: + resolution: {integrity: sha512-0Wr3arrJUOoF5HyE8/nusPsdOQaUEd9t0dq8GTHBgSakuh543VqQklIpuRWF/nEnoxkIJzHpCYYesWTyEqgrFg==} + dev: false + /@humanwhocodes/config-array@0.11.13: resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'}