Giter VIP home page Giter VIP logo

schemist's Introduction

Schemist

Build cohesive and accessible color schemes : schemist.fglt.fr

Screencast of Schemist

Note that Schemist is still in its early days, so things might be subject to change. Feel free to report bugs or suggest improvements!

Concept

Schemist builds on color theory to let you create cohesive color schemes with ease. Colors are defined as a tree, where each one depends on its parent. This allows for building a whole palette based on one color, and get a whole new palette by just changing this base color.

Schemist provides modifiers, for example to lighten or darken a color, shift its hue, find common harmonies (complementary, triad, tetrad, ...), find contrasting colors, and more.

To ease the process, a set of presets is included, allowing you to generate whole palettes from a base color in one click.

While building your palette, you'll be able to review the contrast of each color combination to ensure that they are accessible to everyone.

The whole thing is reactive, so play around!

How it works

Dear color theory experts, please don't get mad.

Schemist uses its own "color space", or more prcisely mixes and matches two of them. It rotates hues with Oklch, which has more uniform hues than, say, HSL. However, instead of using Oklch's chroma and lightness, it uses saturation and lightness from Okhsl, as it is a more human-friendly way of interacting with color.

Yes, it is probably wrong on many levels, but to me it yielded the best results overall, in terms of ergonomics and outputs.

Kudos

Schemist is build upon these fabulous projects and resources:

Resources

schemist's People

Contributors

felixgirault avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

schemist's Issues

CSS colors

Base colors display and calculations off of the browser's engine when lch() gets available.

Foldable nodes

Allow folding of nodes in the tree.
Children should then disappear and be shown as inline color samples.

Filter combinations via CSS

Instead of filtering via JS and rerendering potentially vastly different lists each time, always render the same whole list and filter it via CSS classes.

Reusable nodes

Provide a way to define a preset in the tree using available nodes, and use that preset from other nodes.
This could make it easier to reuse some parts of the tree.

Show RGB color format by default

When opening a custom color node, show the RGB panel instead of the CSS one.
RGB is the most widely known format, and range sliders are more inviting to play with than the text input from the CSS panel.

Screenshot oh the RGB panel

Helpers

Provide some nodes as single page helpers.
For example, the page /helpers/states could let the user enter a color, and it would output a highlight and a shadow color.
As in the full app, the user could also tweak the results afterwards.

The most useful nodes would probably be:

  • states
  • semantic
  • contrasting
  • scale
  • neutral
  • material theme light/dark

The UI should be unified and only show a color input at first, then the resulting colors with every bit of info required (hex, hsl and other codes, contrasts, …), along with tweaking options.

Move node actions to a menu

As of now, there is 5 action buttons per node, and there could be more in the near future (see #13, #22).
Some actions could be moved to a pop up menu, but some of them should remain accessible at all times:

  • the "add child" button, as it is the most basic action in schemist
  • every togglable buttons, as their state should remain obvious, namely "info", "settings" and "don't compare color" (which could disappear if the comparison system changes, see #4)
    This would also include "fold" if is folding implemented (see #22)

If all aforementioned issues were to be implemented, actions could look like:

  • info
  • settings
  • fold
  • add child
  • more…
    • swap
    • remove

There would then be 5 buttons instead of 7.
Maybe the "add child" button could be placed elsewhere to get down to 4, as it is a little bit different from the others.

Improve export output

Use a readonly textarea instead of a pre, so the selection can be contained in it.
Currently, CTRL+A selects all text in the page.

Color swapping

Allow swapping a block for another.
This would help in case one needs to change a color that has children, say from "lightness" to "highlight", thus avoiding deleting the block and recreating all of its children.

Use vitest

It is considerably faster and easier to setup than Jest.

Move nodes and presets into a side panel

Instead of opening a modal each time one wants to add a child node, put them all in a side panel so one can grab any of them and drop them in the tree.
This implies supporting drag & drop not only from the library, but also on each node so the tree can be rearranged easily.

example

Snapshots

Save snapshots of the current state every time the user is idle for a moment.
This would prevent data loss on accidental page refresh, and allow building an undo feature easily.

Add a variable system

Provide a way to setup different variables, with a name and type.
Then allow connecting those to any input in the app.

For example, one might setup a lightness variable of type percentage, and then assign it to the LCH's lightness of many colors in the tree, thus making theme adjustable all at once.

Fix CSS color input

The input expands user input when it is a valid 3-digit hex code, making it pretty unusable.

Memoizing export options

Store export options globally so they are persisted if the user closes and reopens the modal.

Configurable color spaces

Allow one to change the color space used by all nodes to modify colors.
It would probably be impossible to add "all" of them, as they vary wildly in how they function, but it should be easy to add ones that rely on the same mechanics (i.e. ones that are based on a hue/saturation/lightness mechanic).

Wrong values in info panel

  • HSL values don't match with HSL CSS values.
  • LCH values and CSS values don't match with values in color sliders

schemist fglt fr_

Styleguides

Provide a way to export the palette as a styleguide (HTML, PDF, …?).
This would probably require some tweaks, i.e. letting the user add descriptions to colors and combinations, so the styleguide ends up directly usable.

Make export and share buttons more usable

These buttons are located below the palette, which is potentially huge, pushing the buttons out of view.
Maybe they could be moved to the menu bar, given it is made visible at all times.

Show color codes within the tree

Find a spot to show color codes (hex, hsl, …) within the tree so they are instantly visible and copyable.
Maybe next to node types (highlight, shadow, lightness, …) as they don't take up much space.

example

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.