Elegant Mobile-compatible Color Picker Component – pickr - MalikDzgn
  • Jelajahi

    Copyright © MalikDzgn -

    jeudi 11 février 2021

    Elegant Mobile-compatible Color Picker Component – pickr

    Elegant Mobile-compatible Color Picker Component – pickr

     

    Elegant Mobile-compatible Color Picker Component – pickr

    Category: Color , Javascript , Recommended | December 5, 2020
    AUTHOR:Simonwep
    VIEWS TOTAL:401 views
    OFFICIAL PAGE:Go to website
    LAST UPDATE:December 5, 2020
    LICENSE:MIT

    Preview:

    Elegant Mobile-compatible Color Picker Component – pickr

    Description:

    The pickr JavaScript library helps you create an elegant, customizable, touch-enabled color picker for your app.

    Supports HEX, RGB, HSL, HSV, CMYK color formats and alpha channel.

    Also provides a function that converts the default color values (HSVa) to HSLa, RGBa, HEX and CMYK values.

    Supports both browser and node.js.

    How to use it:

    Install the pickr.

    # NPM
    $ npm install pickr-widget --save

    Add the pickr’s JavaScript to the page.

    <script src="dist/pickr.min.js"></script>

    Add a theme CSS to the page.

    <link href="themes/classic.min.css" rel="stylesheet">
    <link href="themes/monolith.min.css" rel="stylesheet">
    <link href="themes/nano.min.css" rel="stylesheet">

    Create a container element to place the color picker.

    <div class="example"></div>

    Initialize the pickr to generate a default color picker.

    const pickr = new Pickr({
          el: '.example',
          default: '#42445A' // default color
    });

    Customize the position of the color picker when triggered.

    const pickr = new Pickr({
          el: '.example',
          default: '#42445A',
          position: 'middle', // or 'top', 'left'
    });

    Customize the color picker component.

    const myPickr = new Pickr({
    
          el: '.example',
          components: {
    
            // color preview
            preview: true,
    
            // enables opacity slider
            opacity: true,
    
            // enables HUE slider
            hue: true,     // Hue slider
    
            // shows/hides controls
            output: {
              hex: true,
              rgba: true,
              hsla: true,
              hsva: true,
              cmyk: true, 
              input: true
            }
          }
    
    });

    Available color converters.

    hsva.toHSVA()
    hsva.toHSLA()
    hsva.toRGBA()
    hsva.toHEX() 
    hsva.toCMYK()
    hsva.clone()

    Available options to customize the color picker.

    const pickr = new Pickr({
    
      // custom classes
      appClass: null,
    
      // 'classic', 'monolith' or 'nano'
      theme: 'classic',
    
      // Selector or element which will be replaced with the actual color-picker.
      // Can be a HTMLElement.
      el: '.color-picker',
    
      // Using the 'el' Element as button, won't replace it with the pickr-button.
      // If true, appendToBody will also be automatically true.
      useAsButton: false,
    
      // Padding in pixels
      padding: 8,
    
      // i18n
      i18n: {
        // Strings visible in the UI
        'ui:dialog': 'color picker dialog',
        'btn:toggle': 'toggle color picker dialog',
        'btn:swatch': 'color swatch',
        'btn:last-color': 'use previous color',
        'btn:save': 'Save',
        'btn:cancel': 'Cancel',
        'btn:clear': 'Clear',
    
        // Strings used for aria-labels
        'aria:btn:save': 'save and close',
        'aria:btn:cancel': 'cancel and close',
        'aria:btn:clear': 'clear and close',
        'aria:input': 'color input field',
        'aria:palette': 'color selection area',
        'aria:hue': 'hue selection slider',
        'aria:opacity': 'selection slider'
      },
    
      // Start state. If true 'disabled' will be added to the button's classlist.
      disabled: false,
    
      // If set to false it would directly apply the selected color on the button and preview.
      comparison: true,
    
      // Default color
      default: 'fff',
    
      // Valid options are `HEX`, `RGBA`, `HSVA`, `HSLA` and `CMYK`.
      defaultRepresentation: null,
    
      // Precision of output string (only effective if components.interaction.input is true)
      outputPrecision: 0,
    
      // move pickr in a non-alpha mode
      lockOpacity: false,
    
      // auto reposition the color picker to fit the screen
      autoReposition: true,
    
      // e.g. ['#F44336', '#E91E63', '#9C27B0', '#673AB7']
      swatches: null,
    
      // Enables inline mode
      inline: false,
    
      // 'v' => opacity- and hue-slider can both only moved vertically.
      // 'hv' => opacity-slider can be moved horizontally and hue-slider vertically.
      sliders: null,
    
      // Option to keep the color picker always visible. You can still hide / show it via
      // 'pickr.hide()' and 'pickr.show()'. The save button keeps his functionality, so if
      // you click it, it will fire the onSave event.
      showAlways: false,
    
      // Closes the picker on scroll
      closeOnScroll: false,
    
      // Defines a parent for pickr, if useAsButton is true and a parent is NOT defined
      // 'body' will be used as fallback.
      parent: null,
    
      // Close pickr with this specific key.
      // Default is 'Escape'. Can be the event key or code.
      closeWithKey: 'Escape',
    
      // Defines the position of the color-picker. Available options are
      // top, left and middle relativ to the picker button.
      // If clipping occurs, the color picker will automatically choose his position.
      position: 'middle',
    
      // Enables the ability to change numbers in an input field with the scroll-wheel.
      // To use it set the cursor on a position where a number is and scroll, use ctrl to make steps of five
      adjustableNumbers: true,
    
      // Show or hide specific components.
      // By default only the palette (and the save button) is visible.
      components: {
    
          preview: true, // Left side color comparison
          opacity: true, // Opacity slider
          hue: true,     // Hue slider
    
          // Bottom interaction bar, theoretically you could use 'true' as propery.
          // But this would also hide the save-button.
          interaction: {
              hex: true,  // hex option  (hexadecimal representation of the rgba value)
              rgba: true, // rgba option (red green blue and alpha)
              hsla: true, // hsla option (hue saturation lightness and alpha)
              hsva: true, // hsva option (hue saturation value and alpha)
              cmyk: true, // cmyk option (cyan mangenta yellow key )
    
              input: true, // input / output element
              clear: true, // Button which provides the ability to select no color,
              save: true   // Save button
          },
      },
    
      // Button strings, brings the possibility to use a language other than English.
      strings: {
         save: 'Save',  // Default for save button
         clear: 'Clear' // Default for clear button
      }
      
    });

    API methods.

    // sets a color
    myPickr.setHSVA(h,s,v,a)
    
    // parses a string
    myPickr.setColor(string)
    
    // get selected color
    myPickr.getSelectedColor()
    
    // shows the color picker
    myPickr.show()
    
    // hides the color picker
    myPickr.hide()
    
    // disables the color picker
    myPickr.disable()
    
    // enables the color picker
    myPickr.enable()
    
    // checks if is ipen
    myPickr.isOpen()
    
    // returns the root DOM element
    myPickr.getRoot():HTMLElement
    
    // returns the current HSVa color
    myPickr.getColor()
    
    // destroy the color picker
    myPickr.destroy()
    
    // destroy the color picker and remove it from DOM
    myPickr.destroyAndRemove()
    
    // Changes the current color-representation. Valid options are HEX, RGBA, HSVA, HSLA and CMYK,
    myPicker.setColorRepresentation(type:String);
    
    // Saves the color
    myPicker.applyColor(silent:Boolean);
    
    // Adds a color to the swatch palette
    myPicker.addSwatch(color:String);
    
    // Removes a color from the swatch palette
    myPicker.removeSwatch(index:Number);

    Event handlers.

    myPicker.on('init', instance => {
        console.log('init', instance);
    }).on('save', (color, instance) => {
        console.log('save', color, instance);
    }).on('change', (color, instance) => {
        console.log('change', color, instance);
    }).on('swatchselect', (color, instance) => {
        console.log('swatchselect', color, instance);
    }).on('clear', (instance) => {
        console.log('clear', instance);
    }).on('cancel', (instance) => {
        console.log('cancel', instance);
    }).on('hide', (instance) => {
        console.log('hide', instance);
    }).on('show', (instance) => {
        console.log('show', instance);
    }).on('changestop', (instance) => {
        console.log('changestop', instance);
    });

    Changelog:

    v1.8.0 (09/07/2020)

    • change and changeStop now have different arguments
    • Fix possible issue when pickr gets destroyed before initialization

    v1.7.4 (09/07/2020)

    • Fix: Prevent event-bubbling if representation-button gets clicked

    v1.7.3 (09/06/2020)

    • Update: Use latest nanopop version, update (dev-)dependencies and clear npm audits

    v1.7.2 (07/14/2020)

    • Fix: Misconfigured nanopop configuration leading to wrong positioning
    • Fix: Initialization issue if pickr is not visible

    v1.7.1 (06/17/2020)

    • Fix initialization issue if container is not visible

    v1.7.1 (06/17/2020)

    • Fix: Chrome warnings about passive-eventlistener
    • Update: Security related dependency updates

    v1.7.0 (05/23/2020)

    • Add: Pickr.DEFAULT_OPTIONS can be modified to change the default-options globally
    • Remove: Validation of arguments passed to on has been removed
    • Update: Pickr is now using NanoPop internally
    • Update: The browser-target for the ES5 bundle has been updated, it’s still a WIP (see #210) but this should fix compatibility issues with older browsers

    v1.6.0 (05/06/2020)

    • Update: new i18n option to fully customize all strings.
    • Fix `hslToHsv` with 0 saturation and lightness
    • Remove focus on swatch when not active
    • Add: Add missing aria-label

    v1.5.1 (02/06/2020)

    • Fix: Memory leak
    • Fix: Issues with zoomed-in page

    v1.5.0 (01/09/2020)

    • Pickr will try to keep widget aligned to the reference

    v1.4.8 (12/18/2019)

    • Update type-declarations

    v1.4.7 (11/09/2019)

    • Fixed onChange event gives old color value when calling setColor()
    • Add polyfills to es5 build
    • Improve: Prevent propagating keyboard-events if arrow-keys are used

    v1.4.6 (10/26/2019)

    • Bugs fixed

    v1.4.5 (10/16/2019)

    • Bugs fixed

    v1.4.4 (10/15/2019)

    • Fix types

    v1.4.3 (10/09/2019)

    • Update return values of several methods
    • Fix Button color not updating on iOS Safari

    v1.4.2 (09/06/2019)

    • Fix Wrong keyboard mappings on the color palette
    • Fix default color can not have an rgba with an alpha of 0

    v1.4.1 (09/03/2019)

    • Add: New padding option to specify the space betweenel and pickr.
    • Add: Very basic Accessibility support (currently only in English)

    v1.4.0 (08/24/2019)

    • Add: New getSelectedColor() function to get the currently selected color. Can be null if no color was selected.
    • Add: container option to specify the parent of pcr-app.
    • Change: Export resolveElement function which supports >>> as shadow-dom selector.

    v1.3.0 (08/14/2019)

    • Add: All themes now have vendor-prefixes.
    • Add: Auto-detect swatch and select it.
    • Fix: Broken .hide() and .show() functions if inline: true.

    v1.2.7 (08/08/2019)

    • Update

    v1.2.6 (07/31/2019)

    • Change: Center pickr on small devices.

    v1.2.4 (07/26/2019)

    • Add: New hide, show and changestop events.
    • Fix: Visibility issues with safari.
    • Fix: Infinity firing animation listener.

    v1.2.3 (07/21/2019)

    • Add: New clear and cancel events.
    • Change: change gets fired on swatchselect.
    • Fix: Pickr does not stick somewhere if repositioning fails.
    • Fix: Update local representation (used by getColorRepresentation) on setColor.

    v1.2.2 (07/18/2019)

    • Update local representation on setColor

    v1.2.1 (07/15/2019)

    • Add: New autoReposition option
    • Fix space-consume if invisible

    v1.2.1 (07/08/2019)

    • Add: New autoReposition option
    • Improve: Hide opacity bar if lockOpacity is true
    • Fix: Issue with floating-point RGBA in safari.

    v1.2.0 (06/28/2019)

    • Add: New lockOpacity option to move pickr in a non-alpha mode.
    • Improve: Better color parsing, prevent entering alpha values on non-alpha types (e.g. rgb).
    • Fix: Better swatch alignment if not that many where added.

    v1.1.2 (06/25/2019)

    • Change: Rename default.min.css to classic.min.css
    • Fix: Take x- and y-scrolling into account, fixing strange behavior

    v1.1.1 (06/24/2019)

    • Add: New outputPrecision option to control the decimal places on the input field.
    • Add: All toString methods (except toHEX) accept a number as parameter to specify the floating-point precision.
    • Fix: Numbers with decimal places can now be adjusted with the mouse-wheel.

    v1.1.0 (06/22/2019)

    • Change: Move themes to separate folder
    • Fix: Update output after recalculating the color. Fixes strange selection issues.
    • Fix: Correct doubled alpha values in HEXA

    v1.0.1 (06/20/2019)

    • Change: All toString functions in HSVAColor now provide the full available, decimal accuracy
    • Fix: Broken hex shorthand conversion
    • Fix: Not updated output on cancelling

    v1.0.0 (06/17/2019)

    • Add: Cancel button to revert to previous color.
    • Add: Silent option get’s now also recognized on clear (setColor(null)).
    • Fix: Fix layout issues with safari.

    v0.6.5 (06/10/2019)

    • Add: Restrict range of numbers if user uses the mouse-wheel to change numbers.
    • Add: Use the sliders option to define in which direction hue and opacity can be moved.
    • Fix: Move pickr to the very top if positioning fails.

    v0.6.4 (06/04/2019)

    • Fix: Update crippled pickr.min.css

    v0.6.3 (06/03/2019)

    • Fix: Show opacity in hexa view also in hexadecimal.
    • Fix: Prevent overflows in moveable ranges under 0/ above 1.
    • Change: Lock cleared symbol if comparison is true (default).

    05/31/2019

    • v0.6.2: Bugs fixed

    05/29/2019

    • v0.6.1

    05/28/2019

    • v0.6.0

    05/18/2019

    • v0.5.1

    05/08/2019

    • v0.5.0

    05/02/2019

    • v0.4.11: Show grabbing-cursor only on grabbing; Use grab as default

    04/19/2019

    • v0.4.10: Small fix

    04/13/2019

    • v0.4.9: Small fix

    04/11/2019

    • v0.4.8: Small fix

    04/09/2019

    • v0.4.7: Small fix

    04/08/2019

    • v0.4.6: Small fix

    04/02/2019

    • v0.4.5: Small fix

    03/17/2019

    • v0.4.4: Small fix

    03/08/2019

    • v0.4.3: Small fix

    03/03/2019

    • v0.4.2: Small fix

    02/28/2019

    • v0.4.1: Small fix

    02/24/2019

    • v0.4.0: Small fix

    02/21/2019

    • v0.3.6: Small fix

    02/14/2019

    • v0.3.5: Small fix

    01/24/2019

    • v0.3.4: Small layout fix

    01/21/2019

    • v0.3.3

    01/18/2019

    • More space between swatches

    01/17/2019

    • Add basic color swatches

    01/09/2019

    • Fix unexpected calling of onUpdate in init

    01/01/2019

    • v0.3.2: Fix issues with too late applied styles

    11/18/2018

    • v0.3.1: Fix invisible checkboard pattern if ancestor background set; Adjust css so that non-existing elements doesn’t take space

    11/04/2018

    • v0.3.0: Change to touchstart and mousdown events to detect blur; Update dependencies

    10/11/2018

    • v0.2.5: Remove appendToBody option; Add parent option; Fix broken mobile input and negative number overflow

    10/07/2018

    • v0.2.4: Fix delayed color-recalculation; Fix ignored move action in moveable; Remove basically useless function binding

    08/28/2018

    • v0.2.3: Prevent recalculation on user input and some refactoring; Fix broken useAsButton option

    08/23/2018

    • v0.2.2: Refactor helper classes to factory functions; Fix hsva representation and missing snipped in moveable; Only round color values on output; Use factory function for hsvacolor class

    08/08/2018

    • v0.1.7: Fixed Opening page on <iframe> prevents color picker modal to show on mobile devices; minor improvements, smaller code; add enable and disable functions; Fix losting focus on first input bug; Append save-button option to components

    07/08/2018

    • v0.1.6

    07/05/2018

    • v0.1.5: Add support for rtl attribute; bugfix

    06/28/2018

    • v0.1.4: Add support for rtl attribute

    06/26/2018

    • Add possibility to apply custom button strings

    06/21/2018

    • v0.1.3

    06/20/2018

    • v0.1.2: Add appendToBody option; Mask invalid characters in data URI’s;  Add parsing of hex representation with alpha channel

    Share with your friends

    Give us your opinion
    Show Comments
    Close Comment