Skip to content

Typography Controller is a framework‑agnostic Web Component that lets you interactively adjust font size, weight, spacing, alignment, and more all without any external dependencies.

License

Notifications You must be signed in to change notification settings

achuthkamath91/Typography-Controller

Repository files navigation

Typography Controller

A lightweight, framework‑agnostic Web Component that provides a beautiful, interactive typography control panel. Adjust font size, letter spacing, word spacing, line height, contrast, and font family — all in real time.

alt text

🚀 Features

  • Font Size: Adjust the font size with a slider (range: 12-48px).
  • Letter Spacing: Control the spacing between characters.
  • Word Spacing: Adjust spacing between words.
  • Line Height: Set the line height (1-3).
  • Contrast: Apply a contrast filter (50-200%).
  • Font Family: Choose from predefined fonts (Arial, Georgia, Courier New, Verdana).
  • Framework‑agnostic — Works in HTML, React, Vue, Svelte, etc.
  • Public API — getValues(), setValues(), setFeatures(), and change events.
  • EAA - This component is designed with full EAA‑aligned accessibility practices, including keyboard navigation, ARIA labeling, and perceivable focus states.

📦 Installation

npm install typography-controller

Usage

  1. Import the component
import "typography-controller/dist/typography-controller.js";
  1. Add the <typography-controller> element to your HTML, specifying the target element via the target attribute:
<h2 id="myText">This is the text to style.</h2>
<typography-controller target="#myText"></typography-controller>

🌐 Using via CDN (no bundler)

<script type="module" src="https://unpkg.com/typography-controller/dist/typography-controller.js"></script>

<h2 id="demo">Hello World</h2>
<typography-controller target="#demo"></typography-controller>

📚 JavaScript API

Methods

Method Description Parameters/Return
getValues() Returns the current typography values as an object. Returns: { fontSize: number, letterSpacing: number, wordSpacing: number, lineHeight: number, contrast: number, fontFamily: string }
setValues(values) Sets the typography values programmatically. Parameters: values (object with keys like fontSize, letterSpacing, etc.)
setFeatures(features) Enables or disables specific features (e.g., sliders). Parameters: features (object with boolean keys like letterSpacing: true)

Events

Event Description Detail
change Fired whenever a value changes via the UI or API. event.detail: Object containing updated values (same as getValues() return).

Example

const controller = document.querySelector("typography-controller");

controller.addEventListener("change", (e) => {
  console.log("Updated values:", e.detail);
});

controller.setValues({
  fontSize: 30,
  letterSpacing: 2,
  fontFamily: "Georgia"
});

⚛️ React Usage

Basic usage

import "typography-controller/dist/typography-controller.js";

export default function App() {
  return (
    <div>
      <h2 id="demoText">Typography should feel like breathing space.</h2>

      <typography-controller
        target="#demoText"
        hide-letter-spacing
        onChange={(e) => console.log(e.detail)}
      ></typography-controller>
    </div>
  );
}

Using JS API (setFeatures, setValues) with refs

import { useRef, useEffect } from "react";
import "typography-controller/dist/typography-controller.js";

export default function App() {
  const ref = useRef();

  useEffect(() => {
    if (ref.current) {
      ref.current.setFeatures({
        letterSpacing: true,
        wordSpacing: false,
        lineHeight: true,
        contrast: true
      });
    }
  }, []);

  return (
    <>
      <h2 id="demoText">Hello world</h2>

      <typography-controller
        ref={ref}
        target="#demoText"
        onChange={(e) => console.log(e.detail)}
      ></typography-controller>
    </>
  );
}

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Typography Controller is a framework‑agnostic Web Component that lets you interactively adjust font size, weight, spacing, alignment, and more all without any external dependencies.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •