Categories: CSSScriptWeb Design

Mobile-friendly & Keyboard Accessible Color Picker – Alwan

Alwan is a lightweight, touch-enabled, and keyboard-accessible color picker component made in pure Vanilla JavaScript.

More Features:

  • Light & Dark themes.
  • Supports 3 color formats: rgba, hsl, hsv.
  • Custom position.
  • Allows you to predefined colors.
  • And much more.

How to use it:

1. Install and import the alwan.

# Yarn
$ yarn add alwan

# NPM
$ npm i alwan
// Import javascript.
import alwan from 'alwan';

// Import css.
import 'talwin/dist/css/alwan.min.css';
//

Sponsored
Browser <link rel="stylesheet" href="/dist/css/alwan.min.css"> <script src="/dist/js/alwan.min.js"></script>
// CDN
<link rel="stylesheet" href="https://unpkg.com/alwan/dist/css/alwan.min.css">
<script src="https://unpkg.com/alwan/dist/js/alwan.min.js"></script>

2. Create an element to hold the color picker.

<div id="example"></div>

3. Initialize the Talwin color picker.

const alwan = new Alwan('#example', {
      // Options here
});

4. All available options.

const alwan = new Alwan('#example', {

      // Set the container's (widget) id.
      id: '',

      // One or many classes separated by a white space,
      // to add it to the preset button.
      classname: '',

      // 'dark' or 'light'.
      theme: 'light',

      // Toggle picker's visibility (Show/Hide),
      // Setting this to false keeps the picker visible.
      toggle: true,

      // Display the picker container as a pop-up (a box that floats on top of the page content),
      // if it's false, picker container will be displayed as a block (embeded in the page's content).
      popover: true,

      // Set the position of the popper (if popover is set to true) relative to the reference element,
      // the position has two values seperated by a dash (-),
      // the first value is the direction (top, bottom, right, left),
      // the second value is the alignment (start, center, end), omitting this value will default to center.
      // e.g. 'bottom-start': 'bottom' places the picker below the reference element,
      // and 'start' aligns the left side of the container with the left side of the reference element.
      // Note: 
      // If the picker container has no space to be placed, it will auto-position itself.
      // based on the available space.
      position: 'bottom-start',

      // Set the gap (in pixels) between the picker container and the reference element.
      margin: 8,

      // Replace the reference element with a pre-styled button.
      //  In case you set the preset to false (using your own reference element), 
      // to access the color to change its background or any other property, 
      // add the css custom property to your styles --tw-color.
      preset: true,

      // Initial color.
      color: '#000',

      // Default color.
      default: '#000',

      // Target can be a selector or an HTML element,
      // If the option popover is true, the picker container will be positionned retalive to this element,
      // instead of the reference element.
      // else if popover option is false, the picker container will be appended as a child into this element.
      target: '',

      // Disable the picker, users won't be able to pick colors.
      disabled: false,

      // Initial color format.
      format: 'rgb',

      // For the formats 'hsl' and 'rgb', choose a single input to display the color string,
      // or if false, display an input for each color channel.
      singleInput: false,

      // Choose color formats for the picker input, 'hsl', 'rgb' or 'hex',
      // No input will be displayed if the array is empty.
      inputs: {
        rgb: true,
        hex: true,
        hsl: true,
      },

      // Support alpha channel and display opacity slider.
      opacity: true,

      // Preview the color.
      preview: true,

      // Close color picker when scrolling
      closeOnScroll: false,

      // Add/Remove a copy button.
      copy: true,

      // Array of color strings, invalid color strings will default to rgb(0,0,0).
      swatches: [],

      // Show/Hide swatches container (Make swatches container collapsible).
      toggleSwatches: false, 

      // Picker widget shared between multiple instance (this is good if you have many color picker instances).
      shared: false, 

      // Close color picker when scrolling (only if the color picker is displayed as a popover and can be closed).
      closeOnScroll: false,
      
});

5. Events.

alwan.on('open', function() {
  // do something
});

alwan.on('close', function() {
  // do something
});

alwan.on('change', function(colorObject, source) {
  // do something
});

alwan.on('color', function(colorObject, source) {
  // do something
});

6. Color props.

alwan.on('change', function(color) {

  // output: { r: 0, g: 0, b: 0, a: 1}
  color.rgb()

  // output: [0, 0, 0, 0]     
  color.rgb(true)

  // output: rgba(0, 0, 0, 1)            
  color.rgb().toString()     
  
  // output: #000000
  color.hex()                
  
  // output: { h: 0, s: 0, l: 0, a: 1 }
  color.hsl() 

  // output: [0, 0, 0, 0]          
  color.hsl(true)

  // output: hsla(0, 0%, 0%, 1)  
  color.hsl().toString()    
  
})

7. API methods.

// set color
alwan.setColor(color: string | object);

// get color
alwan.getColor();

// open the color picker
alwan.open();;

// check if the color picker is open
alwan.isOpen();

// toggle the color picker
alwan.toggle();

// set uptions
alwan.setOptions(options: object);

// trigger an event
alwan.trigger(event: string);

// bind/unbind events
alwan.on(event: string, handler: callback);
alwan.off(event: string, handler: callback);

// disable the color picker
alwan.disable();

// enable the color picker
alwan.enable();

// re-position the color picker
alwan.reposition();

// add color swatch(es)
alwan.addSwatches(Array<string | object>);

// remove color from the swatches
alwan.removeSwatches(Array<string | object | number>);

// reset the color
alwan.reset();

// destroy the instance
alwan.destroy();

Changelog:

v2.3.1 (02/19/2026)

  • Update

v2.3.0 (10/13/2025)

  • Improvements and bugfixes

v2.2.0 (08/30/2025)

  • Many bugs with popover behavior.
  • Fixed some TypeScript types.
  • Popover behavior: if the target element is not visible, the popover cannot be opened/shown.
  • Corrected the target option: when popover is false, the picker is appended next to the reference element instead of as a child (use parent option for that).
  • Reduced final build size by ~1 KB.

v2.1.1 (05/23/2024)

  • minor improvements

v2.1.0 (05/17/2024)

  • The # symbol in the hex color is now optional
  • Add the option parent so you can append the picker in an element other than the body when it’s displayed as a popover
  • Bugfixes

v2.0.2 (01/17/2024)

Sponsored
  • Bug fix.

v2.0.1 (01/01/2024)

  • Bug fix.

v2.0 (11/15/2023)

  • Design improvements.
  • Bug fixes and improvements.
  • Set a custom height to the color picker widget in popover display if viewport height is lesser than its height.
  • When disabled, Disable all interactive controls (buttons, inputs, picker).
  • Fix issue where mouse keeps dragging the picker where no button is active.
  • Remove shared option.
  • Fix compatibility issues.
  • Add title and ARIA label for the swatches toggle button.
  • Change preset reference button design so it become visible in any background.

v1.4 (09/21/2023)

  • Improve accessibility by adding ARIA labels to the unlabeled interactive elements, you can change these labels in the i18n option. also adding title attriubte to the buttons.
  • Correct the widget position when toggling swatches panel.

v1.3.1 (06/23/2023)

  • add close on scroll option.

v1.3.0 (06/23/2023)

  • Fixed issue where color or change events fire without color change.
  • Added new option closeOnScroll.
  • Changed color value (color picker output object) to be more simple and detailed.
  • Changed the methods addSwatch and removeSwatch to addSwatches and removeSwatches, it can add/remove multiple color swatches.
    e.g. alwan.addSwatches(‘red’, ‘green’, ‘blue’)
  • Prefix custom properties with a namespace alwan

v1.2.1 (06/11/2023)

  • Bug fixes.

v1.2.0 (04/25/2023)

  • Fixed issue with the color selection area.
  • Removed HSV color format (Not supported in the web).
  • Minor improvements.

v1.1.2 (03/22/2023)

  • Fix bugs and issues.
  • Little Improvements to the design.
  • Fix issue where clicking the label of the reference button doesn’t open/close the picker.
  • Improve keyboard accessiblity.

v1.1.1 (03/10/2023)

  • Fix a lot of bugs and minor issues.
  • Added a type declaration file.
  • Add new options: toggleSwatches and shared.
  • Design improvements.
  • Code optimization

v1.0.5 (10/26/2022)

  • Bugfix

The post Mobile-friendly & Keyboard Accessible Color Picker – Alwan appeared first on CSS Script.

rssfeeds-admin

Share
Published by
rssfeeds-admin

Recent Posts

Dimiterscu Wine, Tofu, and 26 More Brilliant Little Resident Evil Requiem Details

This article contains spoilers for Resident Evil Requiem. Resident Evil Requiem finally sees the series…

15 minutes ago

Marathon Review So Far

From ARC Raiders to Escape From Duckov, extraction shooters seem to be enjoying something of…

15 minutes ago

Pokémon Winds and Waves Region Is Indeed Based on Southeast Asia, Filipinos Can Confirm

It's a very exciting time for the Pokémon community with the reveal of the 10th…

15 minutes ago

Education Department data shows foreign contracts, gifts to US colleges topped $5B in 2025

People walk past blooming trees on the Harvard University campus in Cambridge, Massachusetts, in April…

20 minutes ago

NASA is pushing back its plans for a Moon landing

NASA announced at a press conference on Friday that it's delaying its plans for a…

50 minutes ago

Defense secretary Pete Hegseth designates Anthropic a supply chain risk

US President Donald Trump (R) looks on as US Secretary of Defense Pete Hegseth speaks…

50 minutes ago

This website uses cookies.