🔥 Meet Our New Project: t0ggles - Your Ultimate Project Management Tool!

Color Picker React Component

There is no specific Color Picker React component, you need to use core Color Picker component.

Examples

color-picker.jsx
import React, { useEffect, useRef, useState } from 'react';
import {
  Navbar,
  Page,
  Block,
  BlockTitle,
  BlockHeader,
  List,
  ListInput,
  f7,
} from 'framework7-react';

export default () => {
  const [wheePickerValue, setWheePickerValue] = useState({ hex: '#00ff00' });
  const [spectrumPickerValue, setSpectrumPickerValue] = useState({ hex: '#ff0000' });
  const [hsSpectrumPickerValue, setHsSpectrumPickerValue] = useState({ hex: '#ff0000' });
  const [rgbPickerValue, setRgbPickerValue] = useState({ hex: '#0000ff' });
  const [rgbaPickerValue, setRgbaPickerValue] = useState({ hex: '#ff00ff' });
  const [hsbPickerValue, setHsbPickerValue] = useState({ hex: '#00ff00' });
  const [rgbBarsPickerValue, setRgbBarsPickerValue] = useState({ hex: '#0000ff' });
  const [rgbSlidersColorsPickerValue, setRgbSlidersColorsPickerValue] = useState({
    hex: '#ffff00',
  });
  const [palettePickerValue, setPalettePickerValue] = useState({ hex: '#FFEBEE' });
  const [proPickerValue, setProPickerValue] = useState({ hex: '#00ffff' });
  const [inlinePickerValue, setInlinePickerValue] = useState({ hex: '#77ff66' });

  const colorPickerInline = useRef(null);

  useEffect(() => {
    colorPickerInline.current = f7.colorPicker.create({
      value: inlinePickerValue,
      containerEl: '#demo-color-picker-inline',
      modules: ['sb-spectrum', 'hsb-sliders', 'alpha-slider'],
      on: {
        change(cp, value) {
          setInlinePickerValue(value);
        },
      },
    });
    return () => {
      colorPickerInline.current.destroy();
    };
  }, []);
  return (
    <Page>
      <Navbar title="Color Picker" />

      <Block strongIos outlineIos>
        <p>
          Framework7 comes with ultimate modular Color Picker component that allows to create color
          picker with limitless combinations of color modules.
        </p>
      </Block>

      <BlockTitle>Color Wheel</BlockTitle>
      <BlockHeader>Minimal example with color wheel in Popover</BlockHeader>
      <List strongIos outlineIos>
        <ListInput
          type="colorpicker"
          placeholder="Color"
          readonly
          value={wheePickerValue}
          onColorPickerChange={(value) => setWheePickerValue(value)}
          colorPickerParams={{
            targetEl: '.wheel-picker-target',
          }}
        >
          <i
            slot="media"
            style={{ backgroundColor: `${wheePickerValue.hex}` }}
            className="icon demo-list-icon wheel-picker-target"
          />
        </ListInput>
      </List>

      <BlockTitle>Saturation-Brightness Spectrum</BlockTitle>
      <BlockHeader>SB Spectrum + Hue Slider in Popover</BlockHeader>
      <List strongIos outlineIos>
        <ListInput
          type="colorpicker"
          placeholder="Color"
          readonly
          value={spectrumPickerValue}
          onColorPickerChange={(value) => setSpectrumPickerValue(value)}
          colorPickerParams={{
            modules: ['sb-spectrum', 'hue-slider'],
            targetEl: '.spectrum-picker-target',
          }}
        >
          <i
            slot="media"
            style={{ backgroundColor: `${spectrumPickerValue.hex}` }}
            className="icon demo-list-icon spectrum-picker-target"
          />
        </ListInput>
      </List>

      <BlockTitle>Hue-Saturation Spectrum</BlockTitle>
      <BlockHeader>HS Spectrum + Brightness Slider in Popover</BlockHeader>
      <List strongIos outlineIos>
        <ListInput
          type="colorpicker"
          placeholder="Color"
          readonly
          value={hsSpectrumPickerValue}
          onColorPickerChange={(value) => setHsSpectrumPickerValue(value)}
          colorPickerParams={{
            modules: ['hs-spectrum', 'brightness-slider'],
            targetEl: '.hs-spectrum-picker-target',
          }}
        >
          <i
            slot="media"
            style={{ backgroundColor: `${hsSpectrumPickerValue.hex}` }}
            className="icon demo-list-icon hs-spectrum-picker-target"
          />
        </ListInput>
      </List>

      <BlockTitle>RGB Sliders</BlockTitle>
      <BlockHeader>RGB sliders with labels and values in Popover</BlockHeader>
      <List strongIos outlineIos>
        <ListInput
          type="colorpicker"
          placeholder="Color"
          readonly
          value={rgbPickerValue}
          onColorPickerChange={(value) => setRgbPickerValue(value)}
          colorPickerParams={{
            modules: ['rgb-sliders'],
            sliderValue: true,
            sliderLabel: true,
            targetEl: '.rgb-picker-target',
          }}
        >
          <i
            slot="media"
            style={{ backgroundColor: `${rgbPickerValue.hex}` }}
            className="icon demo-list-icon rgb-picker-target"
          />
        </ListInput>
      </List>

      <BlockTitle>RGBA Sliders</BlockTitle>
      <BlockHeader>RGB sliders + Alpha Slider with labels and values in Popover</BlockHeader>
      <List strongIos outlineIos>
        <ListInput
          type="colorpicker"
          placeholder="Color"
          readonly
          value={rgbaPickerValue}
          onColorPickerChange={(value) => setRgbaPickerValue(value)}
          colorPickerParams={{
            modules: ['rgb-sliders', 'alpha-slider'],
            sliderValue: true,
            sliderLabel: true,
            targetEl: '.rgba-picker-target',
            formatValue(value) {
              return `rgba(${value.rgba.join(', ')})`;
            },
          }}
        >
          <i
            slot="media"
            style={{
              backgroundColor: rgbaPickerValue.rgba
                ? `rgba(${rgbaPickerValue.rgba.join(', ')})`
                : rgbaPickerValue.hex,
            }}
            className="icon demo-list-icon rgba-picker-target"
          />
        </ListInput>
      </List>

      <BlockTitle>HSB Sliders</BlockTitle>
      <BlockHeader>HSB sliders with labels and values in Popover</BlockHeader>
      <List strongIos outlineIos>
        <ListInput
          type="colorpicker"
          placeholder="Color"
          readonly
          value={hsbPickerValue}
          onColorPickerChange={(value) => setHsbPickerValue(value)}
          colorPickerParams={{
            modules: ['hsb-sliders'],
            sliderValue: true,
            sliderLabel: true,
            targetEl: '.hsb-picker-target',
            formatValue(value) {
              return `hsb(${value.hsb[0]}, ${(value.hsb[1] * 1000) / 10}%, ${
                (value.hsb[2] * 1000) / 10
              }%)`;
            },
          }}
        >
          <i
            slot="media"
            style={{ backgroundColor: `${hsbPickerValue.hex}` }}
            className="icon demo-list-icon hsb-picker-target"
          />
        </ListInput>
      </List>

      <BlockTitle>RGB Bars</BlockTitle>
      <BlockHeader>
        RGB bars with labels and values in Popover on tablet and in Popup on phone
      </BlockHeader>
      <List strongIos outlineIos>
        <ListInput
          type="colorpicker"
          placeholder="Color"
          readonly
          value={rgbBarsPickerValue}
          onColorPickerChange={(value) => setRgbBarsPickerValue(value)}
          colorPickerParams={{
            modules: ['rgb-bars'],
            openIn: 'auto',
            barValue: true,
            barLabel: true,
            targetEl: '.rgb-bars-picker-target',
            formatValue(value) {
              return `rgb(${value.rgb.join(', ')})`;
            },
          }}
        >
          <i
            slot="media"
            style={{ backgroundColor: `${rgbBarsPickerValue.hex}` }}
            className="icon demo-list-icon rgb-bars-picker-target"
          />
        </ListInput>
      </List>

      <BlockTitle>RGB Sliders + Colors</BlockTitle>
      <BlockHeader>
        RGB sliders with labels and values in Popover, and previous and current color values blocks
      </BlockHeader>
      <List strongIos outlineIos>
        <ListInput
          type="colorpicker"
          placeholder="Color"
          readonly
          value={rgbSlidersColorsPickerValue}
          onColorPickerChange={(value) => setRgbSlidersColorsPickerValue(value)}
          colorPickerParams={{
            modules: ['initial-current-colors', 'rgb-sliders'],
            sliderValue: true,
            sliderLabel: true,
            targetEl: '.rgb-sliders-colors-picker-target',
            formatValue(value) {
              return `rgb(${value.rgb.join(', ')})`;
            },
          }}
        >
          <i
            slot="media"
            style={{ backgroundColor: `${rgbSlidersColorsPickerValue.hex}` }}
            className="icon demo-list-icon rgb-sliders-colors-picker-target"
          />
        </ListInput>
      </List>

      <BlockTitle>Palette</BlockTitle>
      <BlockHeader>
        Palette opened in Sheet modal on phone and Popover on larger screens
      </BlockHeader>
      <List strongIos outlineIos>
        <ListInput
          type="colorpicker"
          placeholder="Color"
          readonly
          value={palettePickerValue}
          onColorPickerChange={(value) => setPalettePickerValue(value)}
          colorPickerParams={{
            modules: ['palette'],
            openIn: 'auto',
            openInPhone: 'sheet',
            palette: [
              [
                '#FFEBEE',
                '#FFCDD2',
                '#EF9A9A',
                '#E57373',
                '#EF5350',
                '#F44336',
                '#E53935',
                '#D32F2F',
                '#C62828',
                '#B71C1C',
              ],
              [
                '#F3E5F5',
                '#E1BEE7',
                '#CE93D8',
                '#BA68C8',
                '#AB47BC',
                '#9C27B0',
                '#8E24AA',
                '#7B1FA2',
                '#6A1B9A',
                '#4A148C',
              ],
              [
                '#E8EAF6',
                '#C5CAE9',
                '#9FA8DA',
                '#7986CB',
                '#5C6BC0',
                '#3F51B5',
                '#3949AB',
                '#303F9F',
                '#283593',
                '#1A237E',
              ],
              [
                '#E1F5FE',
                '#B3E5FC',
                '#81D4FA',
                '#4FC3F7',
                '#29B6F6',
                '#03A9F4',
                '#039BE5',
                '#0288D1',
                '#0277BD',
                '#01579B',
              ],
              [
                '#E0F2F1',
                '#B2DFDB',
                '#80CBC4',
                '#4DB6AC',
                '#26A69A',
                '#009688',
                '#00897B',
                '#00796B',
                '#00695C',
                '#004D40',
              ],
              [
                '#F1F8E9',
                '#DCEDC8',
                '#C5E1A5',
                '#AED581',
                '#9CCC65',
                '#8BC34A',
                '#7CB342',
                '#689F38',
                '#558B2F',
                '#33691E',
              ],
              [
                '#FFFDE7',
                '#FFF9C4',
                '#FFF59D',
                '#FFF176',
                '#FFEE58',
                '#FFEB3B',
                '#FDD835',
                '#FBC02D',
                '#F9A825',
                '#F57F17',
              ],
              [
                '#FFF3E0',
                '#FFE0B2',
                '#FFCC80',
                '#FFB74D',
                '#FFA726',
                '#FF9800',
                '#FB8C00',
                '#F57C00',
                '#EF6C00',
                '#E65100',
              ],
            ],
            targetEl: '.palette-picker-target',
            formatValue(value) {
              return value.hex;
            },
          }}
        >
          <i
            slot="media"
            style={{ backgroundColor: `${palettePickerValue.hex}` }}
            className="icon demo-list-icon palette-picker-target"
          />
        </ListInput>
      </List>

      <BlockTitle>Pro Mode</BlockTitle>
      <BlockHeader>
        Current Color + HSB Sliders + RGB sliders + Alpha Slider + HEX + Palette with labels and
        editable values
      </BlockHeader>
      <List strongIos outlineIos>
        <ListInput
          type="colorpicker"
          placeholder="Color"
          readonly
          value={proPickerValue}
          onColorPickerChange={(value) => setProPickerValue(value)}
          colorPickerParams={{
            modules: [
              'initial-current-colors',
              'sb-spectrum',
              'hsb-sliders',
              'rgb-sliders',
              'alpha-slider',
              'hex',
              'palette',
            ],
            openIn: 'auto',
            sliderValue: true,
            sliderValueEditable: true,
            sliderLabel: true,
            hexLabel: true,
            hexValueEditable: true,
            groupedModules: true,
            palette: [
              [
                '#FFEBEE',
                '#FFCDD2',
                '#EF9A9A',
                '#E57373',
                '#EF5350',
                '#F44336',
                '#E53935',
                '#D32F2F',
                '#C62828',
                '#B71C1C',
              ],
              [
                '#F3E5F5',
                '#E1BEE7',
                '#CE93D8',
                '#BA68C8',
                '#AB47BC',
                '#9C27B0',
                '#8E24AA',
                '#7B1FA2',
                '#6A1B9A',
                '#4A148C',
              ],
              [
                '#E8EAF6',
                '#C5CAE9',
                '#9FA8DA',
                '#7986CB',
                '#5C6BC0',
                '#3F51B5',
                '#3949AB',
                '#303F9F',
                '#283593',
                '#1A237E',
              ],
              [
                '#E1F5FE',
                '#B3E5FC',
                '#81D4FA',
                '#4FC3F7',
                '#29B6F6',
                '#03A9F4',
                '#039BE5',
                '#0288D1',
                '#0277BD',
                '#01579B',
              ],
              [
                '#E0F2F1',
                '#B2DFDB',
                '#80CBC4',
                '#4DB6AC',
                '#26A69A',
                '#009688',
                '#00897B',
                '#00796B',
                '#00695C',
                '#004D40',
              ],
              [
                '#F1F8E9',
                '#DCEDC8',
                '#C5E1A5',
                '#AED581',
                '#9CCC65',
                '#8BC34A',
                '#7CB342',
                '#689F38',
                '#558B2F',
                '#33691E',
              ],
              [
                '#FFFDE7',
                '#FFF9C4',
                '#FFF59D',
                '#FFF176',
                '#FFEE58',
                '#FFEB3B',
                '#FDD835',
                '#FBC02D',
                '#F9A825',
                '#F57F17',
              ],
              [
                '#FFF3E0',
                '#FFE0B2',
                '#FFCC80',
                '#FFB74D',
                '#FFA726',
                '#FF9800',
                '#FB8C00',
                '#F57C00',
                '#EF6C00',
                '#E65100',
              ],
            ],
            targetEl: '.pro-picker-target',
            formatValue(value) {
              return `rgba(${value.rgba.join(', ')})`;
            },
          }}
        >
          <i
            slot="media"
            style={{
              backgroundColor: proPickerValue.rgba
                ? `rgba(${proPickerValue.rgba.join(', ')})`
                : proPickerValue.hex,
            }}
            className="icon demo-list-icon pro-picker-target"
          />
        </ListInput>
      </List>

      <BlockTitle>Inline Color Picker</BlockTitle>
      <BlockHeader>SB Spectrum + HSB Sliders</BlockHeader>
      <div className="block block-strong block-outline no-padding">
        {inlinePickerValue.rgb && (
          <div className="padding">
            HEX: {inlinePickerValue.hex}
            <br />
            Alpha: {inlinePickerValue.alpha}
            <br />
            Hue: {inlinePickerValue.hue}
            <br />
            RGB: {inlinePickerValue.rgb.join(', ')}
            <br />
            HSL: {inlinePickerValue.hsl.join(', ')}
            <br />
            HSB: {inlinePickerValue.hsb.join(', ')}
            <br />
            RGBA: {inlinePickerValue.rgba.join(', ')}
            <br />
            HSLA: {inlinePickerValue.hsla.join(', ')}
          </div>
        )}
        <div id="demo-color-picker-inline"></div>
      </div>
    </Page>
  );
};
On this page