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

blueprint-styler

v6.0.0-beta

Published

Make custom blueprint.css styles

Downloads

683

Readme

Blueprint Styler

Create custom global styles for Blueprint js Components using css --custom-properties

Live Demo

Create A New Theme

Blueprint uses global css to style its react components, allowing the styles to be overridden or replaced entirely. This project overrides the default blueprint global css with a version that uses --custom-properties (also referred to as 'Tokens').

There are two ways to create a custom theme:

Theme Blueprint In Your Project (easiest)

  • Install this project via npm: npm install blueprint-styler or yarn add blueprint-styler
  • Import the blueprint base styles from ./base/blueprint.css and ./base/blueprint-tokens.css
  • (optionally) Import an existing style override to start from: ./overrides/{style_name}/override.css and ./overrides/{style_name}/override-tokens.css
  • In a :root{...} selector in your css, override --custom-properties from blueprint-tokens.css
  • If necessary, override global css in blueprint.css for additional control

Create A Blueprint Theme In This Project

While more difficult, this has the advantage of being able to test all blueprint components in the demo react app while developing.

  • Create a new _example folder in ./src/styles. This must contain a few things:
    • a root scss file named index.scss - this will compile into the overrides/example/override.css file and overrides/example/override-tokens.css files. This file must also set the $ns (namespace) and !default $root-selector variables as follows:
      $ns: "bp5";
      $root-selector: ":root" !default;
    • a secondary root file named styler-styles.scss - this extends index.scss to style the demo react app components. This file needs to reset the $root-selector to scope the style to a app's theme switching method.
      // The .bpx-name must match the one in style-manifest.ts
      $root-selector: ":root.bpx-example";
      @import './index';
      // additional styler app styles can go here
  • Add your theme to the src/styles/style-manifest.ts file. Follow the pattern of the other themes in the file.
  • override styles
    • everything exported must be wrapped in a #{$root-selector} {...} block. This scopes it accordingly.
    • override vars and styles - copy-paste vars from files in ./src/styles/_blueprint/common/ and ./src/styles/_blueprint/components/, and change the values to override them.
    • There are several utility scss files located in ./src/styles/global/.
  • Test your theme - Run the demo app with yarn start, go to http://localhost:9000/, and select the theme from the style dropdown.

Tips

  • Take a look at ./src/styles/_flat/index.scss for a relatively simple example
  • Take a look at the source: The original, non-customized version of blueprint is contained within ./src/styles/_blueprint/@blueprintjs/. This is copied directly from blueprint and modified slightly. See Updating Blueprint Source Files for more details
  • Refresh the build app often. The hot-reloading css files will get out of sync sometimes.

Gotchas

  • Importing a css file in scss with the .css suffix will break the style because it adds a css partial
    • example - YES:@import '~normalize.css/normalize';, NO:@import '~normalize.css/normalize.css';
  • A dark color cannot link to its light counterpart or there will be a circular dependency
    • example - NO: --dark-circular-property: var(--circular-property);
    • circular-dependency-test.scss shows examples
    • The vars compiler will sometimes give a warning about this
  • Dark vars are used in dev only and stripped out in build

Test A Custom Set Of Blueprint Components

How Blueprint Styler Works

Blueprint scss is copied and minimally modified. New updates are merged in via a an intermediary 'copy' branch.

Modifications are intentionally kept as minimal as possible to make future merges easier.

Modification to the original @blueprint scss files:

  • commenting out all .bpX-dark theme declarations. Dark theme switching is handled by css custom properties now.
  • many colors and functions are edited to resolve scss color functions issues
  • several more updates documented in src/styles/_blueprint/@blueprintjs/readme.md

Updating Blueprint Source Files

Updating ./src/styles/_blueprint/@blueprintjs/ and ./src/examples to the latest Blueprint involves an intermediary develop-copy-only branch to merge.

  • The develop-copy-only branch manually copies blueprint css and the examples from docs into the ./src locations via a yarn run copy command
  • Then develop-copy-only is merged into develop so that changes to the modified @blueprintjs can be tracked and any conflicts resolved
  • develop change are never meant to be merged back into develop-copy-only
develop-copy-only    0–––1–––––––4–––––––--->
                          \       \
develop                    2–––3–––5–––6–--->

This is not a great solution; open to suggestions for improvements.

Versioning

Major versions should be kept in sync with their blueprint counterpart. Minor versions are incremental updates to this project and exports

Build

There are two exports from this project

  1. ./base and ./overrides are the css style libraries. These are published via npm.
    • Compile this with yarn run build:libs
  2. ./build is the a react app used to develop and demo the project
    • Compile this with yarn run build:react
  • Compile both with yarn run build

Contributions Welcome

TODOs.md

GOOD LUCK!