npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

break-styled-lines

v1.3.1

Published

Add newlines to a string of text given a font style and width

Downloads

9,411

Readme

break-styled-lines

This package is useful for when you want to know where linebreaks will occur in text given a font style (e.g. 16pt italic Georgia) and the width of its container.

This utility also supports some more complex use-cases:

  • Adding linebreaks to a list of strings as though they were a single string, and returning the text back as arrays.
  • Adding linebreaks to a body of text which does not have consistent styling throughout (e.g. one much larger word in the middle of a sentence).

Uses the Canvas API to measure text, so it's quite fast. Uses an OffscreenCanvas if the browser supports it.

Comes with typescript types.

Basic example

import breakLines from "break-styled-lines";

const textWithLineBreaks = breakLines(
  "Good day to you my friends! What ails you on this day?",
  100,
  "bold 12pt arial"
);

The result of the above usage would be:

/*
Good day to
you my
friends!
What ails
you on this
day?
*/

Installation

yarn add break-styled-lines

Usage

The single breakLines export supports three different cases:

Single string

breakLines(
  // The text you'd like to insert newlines into
  text: string
  // The width constraining the text
  width: number
  // The font style of the text (a value of the CSS font property e.g. 10px bold serif)
  style: string
): string | string[]
breakLines("Good morrow my good man!", 100, "16pt serif");

Array of strings

breakLines(
  // An array of strings, which will be treated as a single run of text, and then split back apart again before being returned.
  text: string[]
  // The width constraining the text
  width: number
  // The font style of the text (a value of the CSS font property e.g. 10px bold serif)
  style: string
): string | string[]
breakLines(["Good morrow my good man!", " What brings you to our corner of the world?"], 100, "16pt serif")
```ts

### Text descriptors

```ts
breakLines(
  // An array of descriptors, which will be treated as a single run of text, and then split back apart again before being returned.
  // { text: string, font?: string }
  text: TextDescriptor[]
  // The width constraining the text
  width: number
  // The default font style of the text which will be used if the descriptor is not provided one (a value of the CSS font property e.g. 10px bold serif)
  style: string
): string | string[]
breakLines(
  [
    { text: "Good morrow my good man!" },
    { text: " What brings you to our corner of the world?" },
    {
      text: " Our selection of the finest smoked cheeses, you say?!",
      font: "36pt bold Impact",
    },
  ],
  100,
  "16pt serif"
);