🔤 Font metric overrides to reduce CLS

Overview

Nuxt Font Metrics

npm version npm downloads Github Actions Codecov

Font metric override implementation for Nuxt 3

Features

⚠️ nuxt-font-metrics is under active development. ⚠️

  • 💪 Reduces CLS by using local font fallbacks with crafted font metrics.
  • Generates font metrics and overrides automatically.
  • ⚡️ Pure CSS, zero runtime overhead.

On the playground project, enabling/disabling this module makes the following differences rendering /, with no customisation required:

Before After
CLS 0.34 0.013
Performance 88 98

What's next

For best performance, you will need to inline all your CSS, not just the font-face override rules (which this module does automatically), or there will still be a layout shift when the stylesheet loads (which is why the number above is not zero).

This PR aims to bring that ability to Nuxt itself.

Installation

With pnpm

pnpm add -D nuxt-font-metrics

Or, with npm

npm install -D nuxt-font-metrics

Or, with yarn

yarn add -D nuxt-font-metrics

Usage

import { defineNuxtConfig } from 'nuxt'

export default defineNuxtConfig({
  modules: ['nuxt-font-metrics'],
  // If you are using a Google font or you don't have a @font-face declaration
  // for a font you're using, you can declare them here.
  //
  // In most cases this is not necessary.
  //
  // fontMetrics: {
  //   fonts: ['Inter', { family: 'Some Custom Font', src: '/path/to/custom/font.woff2' }],
  // },
})

That's it!

How it works

Nuxt will scan your @font-face rules and generate fallback rules with the correct metrics. For example:

@font-face {
  font-family: 'Roboto';
  font-display: swap;
  src: url('/fonts/Roboto.woff2') format('woff2'), url('/fonts/Roboto.woff') format('woff');
  font-weight: 700;
}
/* This will be generated. */
@font-face {
  font-family: 'Roboto override';
  src: local('BlinkMacSystemFont'), local('Segoe UI'), local('Roboto'), local('Helvetica Neue'),
    local('Arial'), local('Noto Sans');
  ascent-override: 92.7734375%;
  descent-override: 24.4140625%;
  line-gap-override: 0%;
}

Then, whenever you use font-family: 'Roboto', Nuxt will add the override to the font-family:

:root {
  font-family: 'Roboto';
  /* This becomes */
  font-family: 'Roboto', 'Roboto override';
}

Using outside of Nuxt

The core of this module will work outside of Nuxt, and has been separated into a separate library: fontaine. Check it out!

💻 Development

  • Clone this repository
  • Enable Corepack using corepack enable (use npm i -g corepack for Node.js < 16.10)
  • Install dependencies using pnpm install
  • Stub module with pnpm dev:prepare
  • Run pnpm dev to start playground in development mode

Credits

This would not have been possible without:

License

Made with ❤️

Published under the MIT License.

Comments
  • help: Cannot destructure property 'capHeight' of 'font' as it is undefined.

    help: Cannot destructure property 'capHeight' of 'font' as it is undefined.

    📚 What are you trying to do?

    Having the following CSS files added to the nuxt.config file (cosmos.css and futura.css) with multiple @font-face declarations in each, I am receiving an error shown below. Is there anything missing on my part? Could the font files be the ones to blame?

    I've also attached a snippet with the content of one of the CSS files. If these turn out to be insufficient, I might try to prepare a reproduction.

    image image image

    🔍 What have you tried?

    No response

    ℹ️ Additional context



    bug 
    opened by DamianGlowala 7
  • help: Using fontaine with Google Fonts

    help: Using fontaine with Google Fonts

    📚 What are you trying to do?

    I'd like to use Fontaine with Google Fonts, for which I am using Nuxt Google Fonts module.

    When you say:

    If you are using a Google font or you don't have a @font-face declaration for a font you're using, you can declare them here.

    Does this mean Fontaine does not work with Google fonts? Or is there a way to configure that?

    🔍 What have you tried?

    I reviewed the docs and the web but could not find a solution or anyone that encountered a similar problem.

    ℹ️ Additional context

    No response

    opened by ymansurozer 2
  • chore(deps): update nuxt core

    chore(deps): update nuxt core

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | @nuxt/kit | 3.0.0-rc.13 -> 3.0.0 | age | adoption | passing | confidence | | @​nuxt/module-builder | 0.2.0 -> 0.2.1 | age | adoption | passing | confidence | | @nuxt/schema | 3.0.0-rc.13 -> 3.0.0 | age | adoption | passing | confidence | | @nuxt/test-utils | 3.0.0-rc.13 -> 3.0.0 | age | adoption | passing | confidence | | nuxt | 3.0.0-rc.13 -> 3.0.0 | age | adoption | passing | confidence | | nuxt | 3.0.0-rc.14-27802701.2f53495 -> 3.0.0-rc.9-27703329.537338f | age | adoption | passing | confidence |


    Release Notes

    nuxt/framework

    v3.0.0: Nuxt 3.0 stable

    Compare Source

    Official Release Announcenment

    💬 Release Discussion

    📝 Changelog

    Check out v3.0.0-rc.14 for other recent changes.

    🩹 Fixes
    • nuxt: Removed auto imports (#​9045)
    • schema: Initialise runtimeConfig.public with empty object (#​9050)
    • cli: Upgrade with latest tag (#​9060)
    • nuxt: Allow union type arguments for useAsyncData (#​9061)
    📖 Documentation
    • New website design (#​9007)
    • Update website theme version (819deb89)
    • Minor style improvements (9ab069b2)
    • Update website-theme (780b17b1)
    • Add warning about definePageMeta issues with transitions and NuxtLoadingIndicator (#​9055)
    • Add missing agencies (#​9059)
    🏡 Chore
    ❤️ Contributors

    v3.0.0-rc.14

    Compare Source

    Note This is the last release candidate for Nuxt v3! Are you ready? 👀

    👉 Release Discussion

    Changelog

    compare changes

    ⚠️ Breaking Changes
    • cli: Setup nuxt globally with nuxt test (#​4578)
    • nuxt: Only add $f fetch prefix to auto-keys (#​8852)
    • test-utils: Use vitest/node subpath export (#​8815)
    • nuxt: Remove initialCache option (#​8885)
    • nuxt: Enable payload extraction only for nuxi generate (#​9018)
    • nuxt: Include request url and params in useFetch key (#​6632)
    • nuxt: Fix typo for NuxtRenderHTMLContext.bodyPrepend (#​8712) (#​8704)
    • nuxt: Remove support for 404.vue shorthand (#​8809)
    • kit: Remove support for module container (#​9010)
    • nuxt: Move head option support into defineNuxtComponent (#​8901)
    • Remove deprecated api (#​9029) - Remove PrivateRuntimeConfig interface support - Remove autoImports option - Remove autoImports:extend hook support - Remove deprecated addAutoImport and addAutoImport utilities (use addImports and addImportsDir) - Remove defer option for useAsyncData - Remove support for installModule(nuxt, nuxtModule) - Remove support for module defenition as function - Remove support for name in module definition (use meta.name) - Remove deprecated throwError (use showError) - Remove deprecated useActiveRoute (use useRoute) - Remove deprecated NuxtConfig and defineNuxtConfig imports from nuxt (import from nuxt/config) - Remove deprecated <Script> component (use useHead) - Remove deprecated RouterConfigOptions interface (use RouterConfigSerializable) - Remove deprecated fileName for template options (use filename) - Remove deprecated <NuxtNestedPage> and <NuxtChild> components - Remove deprecated buildModules config - Remove deprecated privateRuntimeConfig and publicRuntimeConfig options - Remove deprecated imports.presets[].name (use presets.imports instead)
    🚀 Enhancements
    • nuxt: Add isExternal to <NuxtLink> slot props (#​8800)
    • nuxt: Auto-import utils/ directory (#​8817)
    • cli: Wrap and normalize all console outputs (#​8846)
    • nuxt: Allow customizing root id and tag (#​8883)
    • nuxt: Add onBeforeRouteLeave and onBeforeRouteUpdate composables (#​8889)
    • cli: ⚠️ Setup nuxt globally with nuxt test (#​4578)
    • cli: Auto-generate .npmrc and setting for pnpm (#​7407)
    • nuxt, schema: Migrate to @​vueuse/head v1 (#​8975)
    🩹 Fixes
    • nuxt: Check if global transitions are activated for scroll behavior (#​8700)
    • nuxt: Allow cookies to be set to null to unset them (#​8769)
    • nuxt: Add catchall paths to prerender list (#​8782)
    • schema: Add declarations to ignore list (#​8787)
    • ssr: Ensure useRequestHeaders are case-insensitive (#​8805)
    • nuxt: Do not render page if we are throwing error (#​8821)
    • nuxt: Swallow issues with query selectors (#​8843)
    • nuxt: ⚠️ Only add $f fetch prefix to auto-keys (#​8852)
    • test-utils: Detect project root using nuxt.config with .mjs and .cjs extensions (#​8855)
    • cli: Exclude dist from type checking (#​8848)
    • test-utils: ⚠️ Use vitest/node subpath export (#​8815)
    • nuxt: Detect non-functional imports within page meta (#​8881)
    • nuxt: Preserve render errors (#​8884)
    • nuxt: ⚠️ Remove initialCache option (#​8885)
    • nuxt: Use app.baseURL when fetching error page on server (#​8888)
    • nuxt: Avoid passing attrs to default slot for <ClientOnly> component (#​8921)
    • vite: Add extend layers to fs.allow (#​9006)
    • nuxt: Include layers in esbuild transform (#​9014)
    • kit: Add external module to transpile (#​8963)
    • nuxt: ⚠️ Enable payload extraction only for nuxi generate (#​9018)
    • nuxt: ⚠️ Include request url and params in useFetch key (#​6632)
    • nuxt: Improve hmr for pages macros (#​8940)
    💅 Refactors
    • nuxt: ⚠️ Fix typo for NuxtRenderHTMLContext.bodyPrepend (#​8712)
    • nuxt: ⚠️ Fix typo for NuxtRenderHTMLContext.bodyPrepend (#​8704)
    • nuxt: ⚠️ Remove support for 404.vue shorthand (#​8809)
    • nuxt: Explicitly import app in nuxt-root (#​8729)
    • kit: ⚠️ Remove support for module container (#​9010)
    • Update unjs dependencies to stable v1 (#​9011)
    • nuxt: ⚠️ Move head option support into defineNuxtComponent (#​8901)
    • ⚠️ Remove deprecated api (#​9029)
    📖 Documentation
    • Update 2.nuxt-page.md (#​8761)
    • Update roadmap for november (#​8766)
    • Use update import for defineLazyEventHandler (#​8767)
    • Remove stability-edge (507f444c)
    • deployment: Remove usage of custom icons (8e4068b7)
    • Improve examples content (1582f8ec)
    • api: Add useRequestHeaders composable example (#​8833)
    • Add entry for extendPages (#​8860)
    • api: Add refreshNuxtData util examples (#​8845)
    • Get event before running async function (#​8861)
    • api: Add useHydration composable (#​8768)
    • Add query option with example for useFetch (#​8719)
    • Add initial documentation for router composables (#​8895)
    • Add tls option to redis example (#​8900)
    • Fix syntax errors in server storage example (#​8906)
    • Fix typo (#​8970)
    • api: Add spaces to avoid breaking mobile layout (#​8967)
    • Typo in available (#​8966)
    • Add a bit more detail in the definePageMeta warning to specify it needs to be in a page (#​8923)
    • Match the open graph protocol markup (#​8959)
    • Fix typos (#​8976)
    ❤️ Contributors

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

    👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies chore 
    opened by renovate[bot] 1
  • chore(deps): update devdependency nuxt to v3.0.0-rc.12-27767306.96a8807

    chore(deps): update devdependency nuxt to v3.0.0-rc.12-27767306.96a8807

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | nuxt | 3.0.0-rc.12-27767161.a90b303 -> 3.0.0-rc.12-27767306.96a8807 | age | adoption | passing | confidence |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • chore(deps): update devdependency nuxt to v3.0.0-rc.12-27766944.63d778b

    chore(deps): update devdependency nuxt to v3.0.0-rc.12-27766944.63d778b

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | nuxt | 3.0.0-rc.12-27765227.8f7a7ec -> 3.0.0-rc.12-27766944.63d778b | age | adoption | passing | confidence |


    Release Notes

    nuxt/framework

    v3.0.0-rc.12-27766643.9388e65

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • chore(deps): update all non-major dependencies

    chore(deps): update all non-major dependencies

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | fontaine | ^0.1.2 -> ^0.2.0 | age | adoption | passing | confidence | | pnpm (source) | 7.13.4 -> 7.13.5 | age | adoption | passing | confidence |


    Release Notes

    unjs/fontaine

    v0.2.0

    Compare Source

    Features
    • allow customising font override name (fa3470b)

    v0.1.3

    Compare Source

    Bug Fixes
    • don't match CSS variables as font families (a708bb0)
    pnpm/pnpm

    v7.13.5

    Compare Source

    Patch Changes

    • Print a warning when cannot read the built-in npm configuration.
    • Also include missing deeply linked workspace packages at headless installation #​5034.
    • pnpm outdated should work when the package tarballs are hosted on a domain that differs from the registry's domain #​5492.
    • strict-peer-dependencies is set to false by default.

    Our Gold Sponsors

    Our Silver Sponsors


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • chore(deps): update dependency ufo to ^0.8.6

    chore(deps): update dependency ufo to ^0.8.6

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | ufo | ^0.8.5 -> ^0.8.6 | age | adoption | passing | confidence |


    Release Notes

    unjs/ufo

    v0.8.6

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • chore(deps): update nuxt core

    chore(deps): update nuxt core

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | @​nuxt/module-builder | ^0.1.7 -> ^0.2.0 | age | adoption | passing | confidence | | @nuxt/schema | 3.0.0-rc.12-27763889.5e7dfc2 -> 3.0.0-rc.12-27765227.8f7a7ec | age | adoption | passing | confidence | | nuxt | 3.0.0-rc.12-27763889.5e7dfc2 -> 3.0.0-rc.12-27765227.8f7a7ec | age | adoption | passing | confidence |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Renovate will not automatically rebase this PR, because other commits have been found.

    👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ Warning: custom changes will be lost.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • chore(deps): update nuxt core to v3.0.0-rc.12-27763889.5e7dfc2

    chore(deps): update nuxt core to v3.0.0-rc.12-27763889.5e7dfc2

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | @nuxt/schema | 3.0.0-rc.12-27763872.d862a6b -> 3.0.0-rc.12-27763889.5e7dfc2 | age | adoption | passing | confidence | | nuxt | 3.0.0-rc.12-27763872.d862a6b -> 3.0.0-rc.12-27763889.5e7dfc2 | age | adoption | passing | confidence |


    Release Notes

    nuxt/framework

    v3.0.0-rc.12-27763889.5e7dfc2

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • chore(deps): update all non-major dependencies

    chore(deps): update all non-major dependencies

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | @vitest/coverage-c8 | ^0.24.1 -> ^0.24.3 | age | adoption | passing | confidence | | vitest | ^0.24.1 -> ^0.24.3 | age | adoption | passing | confidence | | vue (source) | ^3.2.40 -> ^3.2.41 | age | adoption | passing | confidence |


    Release Notes

    vitest-dev/vitest

    v0.24.3

    Compare Source

       🐞 Bug Fixes
        View changes on GitHub

    v0.24.2

    Compare Source

       🚀 Features
       🐞 Bug Fixes
        View changes on GitHub
    vuejs/core

    v3.2.41

    Compare Source

    Bug Fixes
    • devtools: avoid memory leak caused by devtools event buffer (24f4c47), closes #​6591
    • devtools: use cleanupBuffer instead of modifying _buffer (#​6812) (35a113e)
    • effectScope: calling off() of a detached scope should not break currentScope (a71f9ac)
    • runtime-core: ensure that errors in slot function execution do not affect block tracking (#​5670) (82a73da), closes #​5657
    • runtime-core: fix v-for ref reactivity behavior difference between prod and dev (#​6714) (9ae796d), closes #​6697
    • runtime-dom: fix event timestamp check in iframes (5ee4053), closes #​2513 #​3933 #​5474

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • chore(deps): update nuxt core to v3.0.0-rc.12-27763872.d862a6b

    chore(deps): update nuxt core to v3.0.0-rc.12-27763872.d862a6b

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | @nuxt/schema | 3.0.0-rc.12-27759910.9e6d292 -> 3.0.0-rc.12-27763872.d862a6b | age | adoption | passing | confidence | | nuxt | 3.0.0-rc.12-27759910.9e6d292 -> 3.0.0-rc.12-27763872.d862a6b | age | adoption | passing | confidence |


    Release Notes

    nuxt/framework

    v3.0.0-rc.12-27763872.d862a6b

    Compare Source

    v3.0.0-rc.12-27762285.23ad303

    Compare Source

    v3.0.0-rc.12-27762283.2083ed4

    Compare Source

    v3.0.0-rc.12-27761401.9fa147d

    Compare Source

    v3.0.0-rc.12-27761283.577573f

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • fix: Sourcemap missing?

    fix: Sourcemap missing?

    🐛 The bug

    I'm seeing an error in the console when running pnpm dev:

    Sourcemap for "virtual:nuxt:/home/myapp/.nuxt/font-override-inlining-plugin.server.ts" points to missing source files

    🛠️ To reproduce

    https://stackblitz.com/edit/github-mqggve?file=package.json

    🌈 Expected behaviour

    Correct use of source maps?

    ℹ️ Additional context

    No response

    bug 
    opened by nathanchase 0
  • docs: more precisions in readme

    docs: more precisions in readme

    📚 Is your documentation request related to a problem?

    I use Tailwind for my CSS. With it, you can have custom class to handle font-family.

    So, in my CSS file, I write:

    html {
      @apply font-<font-name>;
    }
    

    But this will not resolve in

    html {
      font-family: <font-name>, "<font-name> override";
    }
    

    But in

    html {
      font-family: <font-name>;
    }
    

    🔍 Where should you find it?

    In the README, you say:

    If you are using a Google font or you don't have a @font-face declaration for a font you're using, you can declare them here.

    But maybe, you can add something about using @apply !

    ℹ️ Additional context

    No response

    documentation 
    opened by Barbapapazes 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    Awaiting Schedule

    These updates are awaiting their schedule. Click on a checkbox to get an update now.

    • [ ] chore(deps): lock file maintenance

    Detected dependencies

    github-actions
    .github/workflows/ci.yml
    • actions/checkout v3
    • actions/setup-node v3
    • actions/checkout v3
    • actions/setup-node v3
    • codecov/codecov-action v3
    npm
    package.json
    • @nuxt/kit 3.0.0
    • fontaine ^0.2.3
    • magic-string ^0.27.0
    • pathe ^1.0.0
    • ufo ^1.0.0
    • @nuxt/module-builder 0.2.1
    • @nuxt/schema 3.0.0
    • @nuxt/test-utils 3.0.0
    • @nuxtjs/eslint-config-typescript 12.0.0
    • @release-it/conventional-changelog 5.1.1
    • @types/node 18.11.18
    • @types/serve-handler 6.1.1
    • @vitest/coverage-c8 0.26.2
    • c8 7.12.0
    • conventional-changelog-conventionalcommits 5.0.0
    • eslint 8.30.0
    • eslint-config-prettier 8.5.0
    • eslint-plugin-prettier 4.2.1
    • expect-type 0.15.0
    • get-port-please 2.6.1
    • husky 8.0.2
    • lint-staged 13.1.0
    • nuxt 3.0.0
    • pinst 3.0.0
    • prettier 2.8.1
    • release-it 15.6.0
    • serve-handler 6.1.5
    • typescript 4.9.4
    • vitest 0.26.2
    • vue 3.2.45
    • node 18.12.1
    • pnpm 7.21.0
    playground/package.json
    • nuxt 3.0.0

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
Releases(0.2.3)
Owner
Daniel Roe
Daniel Roe
Web typography at its finest: font-size and line-height based on element width.

FlowType.JS Responsive web typography at its finest: font-size and line-height based on element width. Check out the demo site. What does FlowType.JS

Simple Focus 4.6k Dec 30, 2022
jQuery plugin, calculates the font-size and word-spacing needed to match a line of text to a specific width.

BigText BigText Makes Text Big Read the original blog post Play around on the demo Watch the video Download bigtext.js Or use bower: bower install big

Zach Leatherman 883 Dec 15, 2022
一个运行在浏览器内的提词器,可翻页,可变速,可自定义字体、大小、颜色等多种选项 A teleprompter in web browser, page down, speed up , custom font family/size/color and more.

Introduction 一个运行在浏览器内的提词器,可翻页,可变速,可自定义字体、大小、颜色等多种选项 A teleprompter in web browser, page down, speed up , custom font family/size/color and more. inst

Daniel Liu 19 Aug 17, 2021
Generate font size variables for a fluid type scale with CSS clamp.

Fluid Type Scale Calculator Generate font size variables for a fluid type scale with CSS clamp. Overview Customize everything, grab the output CSS, an

Aleksandr Hovhannisyan 136 Dec 31, 2022
A tool helps to generate ttf, woff, woff2 and css file at the same time. Supports splitting font files on demand

Font Pack A tool helps to generate ttf, woff, woff2 and css file at the same time. Supports splitting font files on demand. 一个可以根据常用字体格式文件,直接生成 ttf、wo

GyDi 2 Apr 18, 2022
Font-end app to test the transformer model translation from Cape Verdian Creole to English

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Roberto Carlos 5 Sep 28, 2022
The iconic SVG, font, and CSS toolkit

Version 6 Font Awesome is the Internet's icon library and toolkit, used by millions of designers, developers, and content creators. Documentation Lear

Font Awesome 70.7k Jan 3, 2023
Change font for your notes and code.

Google fonts for Logseq A Logseq plugin to use Google Fonts for rendering. Google fonts have more than 1400+ fonts which can be used in Logseq now. Yo

Richard Yu 9 Dec 12, 2022
Freeze variations and features in font.

FontFreeze Freeze variations and features in font. Introduction Modern OpenType fonts support variations and features that allow customizable fonts. T

Mu-Tsun Tsai 24 Jan 6, 2023
An Awesome Toggle Menu created with HTML,CSS,JQuery,font-awesome and line by line comment.

Demo : https://blackx-732.github.io/AwesomeMenu/ Under open source license No ©copyright issues Anyone can be modify this code as well Specifically we

BlackX-Lolipop 2 Feb 9, 2021
Pipeable javascript. Quickly filter, map, and reduce from the terminal

Pipeable JavaScript - another utility like sed/awk/wc... but with JS! Quickly filter, map and reduce from the command line. Features a streaming API.

Daniel St. Jules 410 Dec 10, 2022
Reduce the size of SVGs

Oh My SVG Reduce the size of SVGs About Oh My SVG let you export unoptimized SVG files into smaller versions. Under the hood, it uses SVGO to remove o

Sonny Piers 56 Dec 26, 2022
Trying to reduce the search time, the objective of this repository is accumulate as many useful code snippets for Node.Js in the real world as possible

Useful Node.Js codes Trying to reduce the search time, the objective of this repository is accumulate as many useful code snippets for Node.Js in the

Juninho 6 Mar 28, 2022
This compress library was made with Brotli and Gzip help, for React users who want to make website more performance and reduce JS bundle code

React-compress This compress library was made with Brotli and Gzip help, for React users who want to make website more performance and reduce JS bundl

Koma Human 30 Jan 6, 2023
Minimal versions of popular analytics libraries. Reduce the impact of third-party scripts on your application.

minimal-analytics This project aims to provide minimal implementations of popular analytics libraries. It's aimed at users who want to reduce the impa

James Hill 32 Dec 25, 2022
why make apps to increase focus -- when you can make apps to reduce focus

impossifocus ?? What is this? ImpossiFocus will measure focus by reading your brainwaves -- and if you're in the zone, it'll ensure that changes with

Aleem Rehmtulla 10 Nov 30, 2022
Reduce misspelled email addresses in your web apps.

mailcheck.js The Javascript library and jQuery plugin that suggests a right domain when your users misspell it in an email address. mailcheck.js is pa

mailcheck 7.9k Dec 28, 2022
JavaScript library to resize, reduce, or change ranges of DOM elements.

Range.js JavaScript library to resize, reduce, or change ranges of DOM elements using the HTML5 <input type="range"> element. Usage: Include range.js

Kyle Belanger 4 Jun 3, 2021
Reduce image size of 1000s of photos as a batch.

downsizer A tiny tool to reduce size of images in bulk. Helps you to bulk reduce size of images in a folder or individual images. Install Install Node

Vajahath Ahmed 2 Sep 15, 2022
Notices on a digital platform are quick and easy to access, reduce a lot of paper waste, and one can get notified about the updates and news.

DigitalNoticeBoard - Mobile App - (Still In DEV) An Notice Board App for Students To Stay Connected With The College Updates..! Why a college campus n

Badineni Sai Vardhan 6 Nov 24, 2022