颜色选择器

Framework7 带有一个终极模块化的颜色选择器组件,它允许创建具有无限“颜色模块”组合的颜色选择器。

颜色选择器应用程序方法

让我们看看与颜色选择器一起使用的相关应用程序方法

app.colorPicker.create(parameters)- 创建颜色选择器实例

  • parameters - object。包含颜色选择器参数的对象

方法返回创建的颜色选择器实例

app.colorPicker.destroy(el)- 销毁颜色选择器实例

  • el - HTMLElementstring (CSS 选择器) 或 object。要销毁的颜色选择器元素或颜色选择器实例。

app.colorPicker.get(el)- 通过 HTML 元素获取颜色选择器实例

  • el - HTMLElementstring (CSS 选择器)。颜色选择器元素。

方法返回颜色选择器的实例

app.colorPicker.close(el)- 关闭颜色选择器

  • el - HTMLElementstring (CSS 选择器)。要关闭的颜色选择器元素。

方法返回颜色选择器的实例

例如

var colorPicker = app.colorPicker.create({
  inputEl: '#color-input',
  value: {
    hex: '#ff000',
  },
});

颜色选择器参数

让我们看看所有可用的颜色选择器参数列表

参数类型默认值描述
valueobject包含颜色选择器值的对象
modulesarray['wheel']包含按显示顺序排列的颜色选择器模块的数组
palettearray

包含调色板模块颜色的数组,其中每个调色板颜色必须指定为十六进制字符串。

它可以是包含调色板值的普通数组,例如

palette: ['#ff0000', '#00ff00', ...]

或者它可以是调色板“行”的数组,其中每个项目指定为包含颜色的数组

palette: [
  // first row
  ['#ff0000', '#00ff00', ...]
  // second row
  ['#0000ff', '#f0000f', ...]
  ...
]

默认情况下它是

[
  ['#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'],
]
groupedModulesbooleanfalse启用后,它将增加滑块模块的曝光度,使其看起来更加独立
centerModulesbooleantrue启用后,如果空间足够,它将尝试垂直居中模块
sliderLabelbooleanfalse启用后,它将显示带有文本的滑块标签
sliderValuebooleanfalse启用后,它将显示滑块值
sliderValueEdiablebooleanfalse启用后,它将以<input>元素的形式显示滑块值,以便直接编辑
barLabelbooleanfalse启用后,它将显示带有文本的条形标签
barValuebooleanfalse启用后,它将显示条形值
barValueEdiablebooleanfalse启用后,它将以<input>元素的形式显示条形值,以便直接编辑
hexLabelbooleanfalse启用后,它将显示十六进制模块标签文本,例如HEX
hexValueEditablebooleanfalse启用后,它将以<input>元素的形式显示十六进制模块值,以便直接编辑
标签文本
redLabelTextstring'R'红色滑块/条形标签文本
greenLabelTextstring'G'绿色滑块/条形标签文本
blueLabelTextstring'B'蓝色滑块/条标签文本
色调标签文本string'H'色调滑块标签文本
饱和度标签文本string'S'饱和度滑块标签文本
亮度标签文本string'B'亮度滑块标签文本
十六进制标签文本string'HEX'十六进制模块标签文本
Alpha标签文本string'A'Alpha(不透明度)滑块标签文本
格式化值函数 (值)用于格式化输入值的函数,应返回新的/格式化的字符串值。颜色选择器值对象。默认情况下,它返回十六进制值。
容器/开启器特定参数
容器元素string
HTML元素
带有CSS选择器或HTML元素的字符串,用于放置生成的顏色选择器HTML。仅用于内联颜色选择器
打开方式string弹出窗口可以是自动弹出窗口(在弹出窗口中打开颜色选择器),工作表(在工作表模态中打开),弹出层(在弹出层中打开)或页面(在页面中打开)。如果是自动,它将按照小屏幕上的手机打开方式参数和在大屏幕上的弹出窗口中指定的那样。
手机打开方式string弹出层定义当打开方式: "自动"时如何在小屏幕上打开顏色选择器
弹出层推送booleanfalse使颜色选择器弹出窗口能够在打开时将视图推送到后面
弹出层滑动关闭boolean未定义能够使用滑动关闭颜色选择器弹出窗口。未指定时,它将继承应用程序弹出窗口的滑动关闭参数
工作表推送booleanfalse使颜色选择器工作表能够在打开时将视图推送到后面
工作表滑动关闭boolean未定义能够使用滑动关闭颜色选择器工作表。未指定时,它将继承应用程序工作表的滑动关闭参数
输入元素字符串或HTML元素带有CSS选择器或具有相关输入元素的HTML元素的字符串
目标元素字符串或HTML元素带有CSS选择器或具有相关目标元素的HTML元素的字符串。除了输入元素之外,您可能还想放置一个显示当前所选颜色的附加元素。此类元素可以指定为目标元素。如果顏色选择器在弹出窗口中打开,它将围绕此目标元素定位。单击指定的目标元素也将打开顏色选择器。
目标元素设置背景颜色booleanfalse启用后,如果您传递了目标元素,它将使用当前选定的值将背景颜色设置为目标元素。
滚动到输入booleantrue颜色选择器打开时滚动视口(页面内容)到输入
输入只读booleantrue在指定的输入上设置“只读”属性
CSS类string要设置在颜色选择器容器上的附加CSS类名
通过外部点击关闭booleantrue如果启用,则单击选择器或相关输入元素外部将关闭选择器
工具栏工作表booleantrue在工作表模态中打开时显示工具栏
工具栏弹出窗口booleanfalse在弹出窗口模态中打开时显示工具栏
工具栏关闭文本string完成完成/关闭工具栏按钮的文本
导航栏弹出窗口booleantrue以弹出模态框打开时显示导航栏
navbarCloseTextstring完成完成/关闭导航栏按钮的文本
navbarTitleTextstring颜色导航栏标题文本
navbarBackLinkTextstring返回导航栏返回链接文本,当颜色选择器在页面中打开时可用
routableModalsbooleanfalse将打开的颜色选择器添加到路由器历史记录中,可以通过在路由器历史记录中返回并将当前路由设置为颜色选择器模态框来关闭它
urlstringcolor/将设置为当前路由的颜色选择器模态框 URL
viewobject启用“routableModals”时设置路由的视图。默认为“inputEl”的父视图,如果未找到父视图,则为主视图
backdropboolean启用颜色选择器背景(后面的深色半透明层)。默认情况下,当颜色选择器在弹出窗口或弹出框中打开时启用。
closeByBackdropClickbooleantrue启用后,颜色选择器将在点击背景时关闭
渲染函数
renderToolbar函数渲染工具栏的函数。必须返回工具栏 HTML 字符串
renderNavbar函数(日期)渲染导航栏的函数。必须返回导航栏 HTML 字符串
render函数渲染颜色选择器的函数。必须返回完整的颜色选择器 HTML 字符串
事件
onobject

包含事件处理程序的对象。例如

var colorPicker = app.colorPicker.create({
  ...
  on: {
    opened: function () {
      console.log('Color Picker opened')
    }
  }
})

请注意,以下所有参数都可以在“colorPicker”属性下的全局应用程序参数中使用,以便为所有颜色选择器设置默认值。例如

var app = new Framework7({
  colorPicker: {
    modules: ['hb-spectrum', 'hue-slider'],
    url: 'select-color/',
  }
});

颜色选择器模块

您可以通过在颜色选择器创建时的“modules”数组参数中指定要使用的模块来创建自己的颜色选择器布局。可以使用以下模块

wheel

色相环,内部带有饱和度-亮度光谱

sb-spectrum

饱和度-亮度光谱。建议与“hue-slider”一起使用

hue-slider

单个色相滑块

hs-spectrum

色相-饱和度光谱。建议与“brightness-slider”一起使用

brightness-slider

单个亮度滑块

rgb-sliders

红色、绿色和蓝色滑块

hsb-sliders

色相、饱和度和亮度滑块

alpha-slider

Alpha(不透明度)单个滑块

rgb-bars

垂直红色、绿色和蓝色滑块

palette

模块显示在“palette”参数中指定的调色板颜色

hex

具有当前十六进制值的模块

current-color

模块显示当前选择的颜色

initial-current-colors

模块显示当前选择的颜色和初始颜色(打开颜色选择器之前选择的颜色)。单击初始颜色会将颜色选择器值设置为初始颜色。

自定义模块

也可以使用和创建自定义颜色选择器模块。此类自定义模块可用于创建自定义选择器,或仅用于在模块之间添加一些自定义内容。

如需添加自定义颜色选择器模块,我们需要将一个对象而不是字符串传递给 modules 数组参数。自定义模块对象可以包含以下方法。每个方法都接收颜色选择器实例作为参数。

render(colorPicker)模块渲染函数。它必须返回模块 HTML 内容
init(colorPicker)模块初始化函数。它在模块渲染并添加到 DOM 时执行。您应该在此处定义任何自定义事件监听器
update(colorPicker)此方法在颜色选择器值更新时执行
destroy(colorPicker)此方法在模块销毁时执行。您应该在此处分离所有事件监听器

例如,如果我们需要在模块之间添加一些自定义文本,我们可以使用这样简单的模块

var colorPicker = app.colorPicker.create({
  // ...
  modules: [
    'sb-spectrum',
    // custom module with only render function
    {
      render: function() {
        return '<p class="text-align-center">Enter HUE value:</p>'
      },
    },
    'hue-slider',
  ]
})

有关灵感和模块工作原理的信息,请查看内置模块源代码

颜色选择器值

颜色选择器实例值表示为具有以下属性的对象。

hexstring十六进制颜色值,例如 #ff0000
rgbarray具有 RGB([红,绿,蓝])颜色的数组,例如 [255, 100, 20]
hslarray具有 HSL([色调,饱和度,亮度])颜色的数组,例如 [320, 0.1, 0.9]
hsbarray具有 HSB/V([色调,饱和度,亮度])颜色的数组,例如 [180, 0.5, 0.3]
alpha数字Alpha(不透明度)值(从 0 到 1),例如 0.6
hue数字色调值(从 0 到 360),例如 320
rgbaarray具有 RGBA([红,绿,蓝,Alpha])颜色的数组,例如 [255, 100, 20, 0.5]
hslaarray具有 HSLA([色调,饱和度,亮度,Alpha])颜色的数组,例如 [320, 0.1, 0.9, 0.2]

例如

var colorPicker = app.colorPicker.create({
  ...
  on: {
    change: function (value) {
      console.log(`HEX value is ${value.hex}. Opacity is ${value.alpha}`);
      $('.some-element').css('background-color', `rgba(${value.rgba.join(', ')})`);
    }
  }
})

颜色选择器方法和属性

在我们初始化颜色选择器之后,我们在变量中拥有它的初始化实例(例如上面示例中的 colorPicker 变量),其中包含有用的方法和属性

属性
colorPicker.app链接到全局应用程序实例
colorPicker.containerEl颜色选择器包装容器 HTML 元素(当使用内联颜色选择器时)
colorPicker.$containerEl具有颜色选择器包装容器 HTML 元素的 Dom7 实例(当使用内联颜色选择器时)
colorPicker.el颜色选择器 HTML 元素
colorPicker.$el具有颜色选择器 HTML 元素的 Dom7 实例
colorPicker.inputEl颜色选择器输入 HTML 元素(在 inputEl 参数中传递)
colorPicker.$inputEl具有颜色选择器输入 HTML 元素的 Dom7 实例(在 inputEl 参数中传递)
colorPicker.targetEl颜色选择器目标 HTML 元素(在 targetEl 参数中传递)
colorPicker.$targetEl具有颜色选择器目标 HTML 元素的 Dom7 实例(在 targetEl 参数中传递)
colorPicker.value带有 颜色选择器值 的对象
colorPicker.opened如果颜色选择器当前已打开,则为 true
colorPicker.inline当使用内联颜色选择器时为 true
colorPicker.url颜色选择器 URL(在 url 参数中传递)
colorPicker.view颜色选择器视图(在 view 参数中传递)或找到的父视图
colorPicker.params带有初始化参数的对象
方法
colorPicker.setValue(value)设置新的颜色选择器值。value颜色选择器值 对象,可以部分指定
var colorPicker = app.colorPicker.create({
  value: '#ff0000',
});

// update only hue
colorPicker.setValue({ hue: 200 });

// update only alpha
colorPicker.setValue({ alpha: 0.2 });

// set value by hex
colorPicker.setValue({ hex: '#ff00ff' });
colorPicker.getValue()返回当前颜色选择器值
colorPicker.update()更新颜色选择器模块布局(当打开或内联时)
colorPicker.open()打开颜色选择器
colorPicker.close()关闭颜色选择器
colorPicker.destroy()销毁颜色选择器实例并移除所有事件
colorPicker.on(event, handler)添加事件处理程序
colorPicker.once(event, handler)添加事件处理程序,该处理程序将在触发后被移除
colorPicker.off(event, handler)移除事件处理程序
colorPicker.off(event)移除指定事件的所有处理程序
colorPicker.emit(event, ...args)在实例上触发事件

颜色选择器事件

颜色选择器将在颜色选择器元素上触发以下 DOM 事件,并在应用程序和颜色选择器实例上触发事件

DOM 事件

事件描述
colorpicker:open当颜色选择器开始其打开动画时将触发此事件
colorpicker:opened当颜色选择器完成其打开动画后将触发此事件
colorpicker:close当颜色选择器开始其关闭动画时将触发此事件
colorpicker:closed当颜色选择器完成其关闭动画后将触发此事件

应用程序和颜色选择器实例事件

颜色选择器实例在自身实例和应用程序实例上都会发出事件。应用程序实例事件的名称相同,并以 colorPicker 为前缀。

事件目标参数描述
changecolorPicker(colorPicker, value)当颜色选择器值更改时将触发此事件
colorPickerChangeapp
initcolorPicker(colorPicker)当颜色选择器初始化时将触发此事件
colorPickerInitapp
opencolorPicker(colorPicker)当颜色选择器开始其打开动画时将触发此事件。作为参数,事件处理程序接收颜色选择器实例
colorPickerOpenapp
openedcolorPicker(colorPicker)当颜色选择器完成其打开动画后将触发此事件。作为参数,事件处理程序接收颜色选择器实例
colorPickerOpenedapp
closecolorPicker(colorPicker)当颜色选择器开始其关闭动画时将触发此事件。作为参数,事件处理程序接收颜色选择器实例
colorPickerCloseapp
closedcolorPicker(colorPicker)颜色选择器完成关闭动画后将触发此事件。事件处理程序将接收颜色选择器实例作为参数。
colorPickerClosedapp
beforeDestroycolorPicker(colorPicker)此事件将在颜色选择器实例销毁之前触发。事件处理程序将接收颜色选择器实例作为参数。
colorPickerBeforeDestroyapp

CSS 变量

以下是相关的 CSS 变量(CSS 自定义属性)列表。

:root {
  --f7-color-picker-popover-width: 350px;
  --f7-color-picker-slider-size: 6px;
  --f7-color-picker-slider-knob-size: 16px;
  --f7-color-picker-bar-size: 50px;
  --f7-color-picker-bar-min-height: 260px;
  --f7-color-picker-value-width: 64px;
  --f7-color-picker-value-height: 32px;
  --f7-color-picker-value-font-size: 16px;
  --f7-color-picker-value-border-radius: 4px;
  --f7-color-picker-hex-value-width: 84px;
  --f7-color-picker-label-font-size: 14px;
  --f7-color-picker-label-width: 10px;
  --f7-color-picker-label-height: 14px;
  --f7-color-picker-sb-spectrum-height: 260px;
  --f7-color-picker-sb-spectrum-handle-size: 16px;
  --f7-color-picker-wheel-width: 330px;
  --f7-color-picker-palette-value-width: 36px;
  --f7-color-picker-palette-value-height: 36px;
  --f7-color-picker-initial-current-color-height: 40px;
  --f7-color-picker-initial-current-color-border-radius: 4px;
  --f7-color-picker-sheet-bg-color: #fff;
  --f7-color-picker-popup-bg-color: #fff;
  --f7-color-picker-value-bg-color: rgba(0, 0, 0, 0.05);
  --f7-color-picker-group-bg-color: rgba(0, 0, 0, 0.05);
  --f7-color-picker-group-value-bg-color: #fff;
}
:root .dark,
:root.dark {
  --f7-color-picker-sheet-bg-color: #121212;
  --f7-color-picker-popup-bg-color: #121212;
  --f7-color-picker-value-bg-color: rgba(255, 255, 255, 0.1);
  --f7-color-picker-group-bg-color: #000;
  --f7-color-picker-group-value-bg-color: rgba(255, 255, 255, 0.12);
}

示例

color-picker.html
<template>
  <div class="page">
    <div class="navbar">
      <div class="navbar-bg"></div>
      <div class="navbar-inner sliding">
        <div class="title">Color Picker</div>
      </div>
    </div>
    <div class="page-content">
      <div class="block block-strong-ios block-outline-ios">
        <p>Framework7 comes with ultimate modular Color Picker component that allows to create color picker with
          limitless combinations of color modules.</p>
      </div>

      <div class="block-title">Color Wheel</div>
      <div class="block-header">Minimal example with color wheel in Popover</div>
      <div class="list list-strong-ios list-outline-ios">
        <ul>
          <li>
            <div class="item-content item-input">
              <div class="item-media">
                <i class="icon demo-list-icon" id="demo-color-picker-wheel-value"></i>
              </div>
              <div class="item-inner">
                <div class="item-input-wrap">
                  <input type="text" placeholder="Color" readonly="readonly" id="demo-color-picker-wheel" />
                </div>
              </div>
            </div>
          </li>
        </ul>
      </div>

      <div class="block-title">Saturation-Brightness Spectrum</div>
      <div class="block-header">SB Spectrum + Hue Slider in Popover</div>
      <div class="list list-strong-ios list-outline-ios">
        <ul>
          <li>
            <div class="item-content item-input">
              <div class="item-media">
                <i class="icon demo-list-icon" id="demo-color-picker-spectrum-value"></i>
              </div>
              <div class="item-inner">
                <div class="item-input-wrap">
                  <input type="text" placeholder="Color" readonly="readonly" id="demo-color-picker-spectrum" />
                </div>
              </div>
            </div>
          </li>
        </ul>
      </div>

      <div class="block-title">Hue-Saturation Spectrum</div>
      <div class="block-header">HS Spectrum + Brightness Slider in Popover</div>
      <div class="list list-strong-ios list-outline-ios">
        <ul>
          <li>
            <div class="item-content item-input">
              <div class="item-media">
                <i class="icon demo-list-icon" id="demo-color-picker-hs-spectrum-value"></i>
              </div>
              <div class="item-inner">
                <div class="item-input-wrap">
                  <input type="text" placeholder="Color" readonly="readonly" id="demo-color-picker-hs-spectrum" />
                </div>
              </div>
            </div>
          </li>
        </ul>
      </div>

      <div class="block-title">RGB Sliders</div>
      <div class="block-header">RGB sliders with labels and values in Popover</div>
      <div class="list list-strong-ios list-outline-ios">
        <ul>
          <li>
            <div class="item-content item-input">
              <div class="item-media">
                <i class="icon demo-list-icon" id="demo-color-picker-rgb-value"></i>
              </div>
              <div class="item-inner">
                <div class="item-input-wrap">
                  <input type="text" placeholder="Color" readonly="readonly" id="demo-color-picker-rgb" />
                </div>
              </div>
            </div>
          </li>
        </ul>
      </div>

      <div class="block-title">RGBA Sliders</div>
      <div class="block-header">RGB sliders + Alpha Slider with labels and values in Popover</div>
      <div class="list list-strong-ios list-outline-ios">
        <ul>
          <li>
            <div class="item-content item-input">
              <div class="item-media">
                <i class="icon demo-list-icon" id="demo-color-picker-rgba-value"></i>
              </div>
              <div class="item-inner">
                <div class="item-input-wrap">
                  <input type="text" placeholder="Color" readonly="readonly" id="demo-color-picker-rgba" />
                </div>
              </div>
            </div>
          </li>
        </ul>
      </div>

      <div class="block-title">HSB Sliders</div>
      <div class="block-header">HSB sliders with labels and values in Popover</div>
      <div class="list list-strong-ios list-outline-ios">
        <ul>
          <li>
            <div class="item-content item-input">
              <div class="item-media">
                <i class="icon demo-list-icon" id="demo-color-picker-hsb-value"></i>
              </div>
              <div class="item-inner">
                <div class="item-input-wrap">
                  <input type="text" placeholder="Color" readonly="readonly" id="demo-color-picker-hsb" />
                </div>
              </div>
            </div>
          </li>
        </ul>
      </div>

      <div class="block-title">RGB Bars</div>
      <div class="block-header">RGB bars with labels and values in Popover on tablet and in Popup on phone</div>
      <div class="list list-strong-ios list-outline-ios">
        <ul>
          <li>
            <div class="item-content item-input">
              <div class="item-media">
                <i class="icon demo-list-icon" id="demo-color-picker-rgb-bars-value"></i>
              </div>
              <div class="item-inner">
                <div class="item-input-wrap">
                  <input type="text" placeholder="Color" readonly="readonly" id="demo-color-picker-rgb-bars" />
                </div>
              </div>
            </div>
          </li>
        </ul>
      </div>

      <div class="block-title">RGB Sliders + Colors</div>
      <div class="block-header">RGB sliders with labels and values in Popover, and previous and current color values
        blocks</div>
      <div class="list list-strong-ios list-outline-ios">
        <ul>
          <li>
            <div class="item-content item-input">
              <div class="item-media">
                <i class="icon demo-list-icon" id="demo-color-picker-rgb-initial-current-colors-value"></i>
              </div>
              <div class="item-inner">
                <div class="item-input-wrap">
                  <input type="text" placeholder="Color" readonly="readonly"
                    id="demo-color-picker-rgb-initial-current-colors" />
                </div>
              </div>
            </div>
          </li>
        </ul>
      </div>

      <div class="block-title">Palette</div>
      <div class="block-header">Palette opened in Sheet modal on phone and Popover on larger screens</div>
      <div class="list list-strong-ios list-outline-ios">
        <ul>
          <li>
            <div class="item-content item-input">
              <div class="item-media">
                <i class="icon demo-list-icon" id="demo-color-picker-palette-value"></i>
              </div>
              <div class="item-inner">
                <div class="item-input-wrap">
                  <input type="text" placeholder="Color" readonly="readonly" id="demo-color-picker-palette" />
                </div>
              </div>
            </div>
          </li>
        </ul>
      </div>

      <div class="block-title">Pro Mode</div>
      <div class="block-header">Current Color + HSB Sliders + RGB sliders + Alpha Slider + HEX + Palette with labels and
        editable values</div>
      <div class="list list-strong-ios list-outline-ios">
        <ul>
          <li>
            <div class="item-content item-input">
              <div class="item-media">
                <i class="icon demo-list-icon" id="demo-color-picker-pro-value"></i>
              </div>
              <div class="item-inner">
                <div class="item-input-wrap">
                  <input type="text" placeholder="Color" readonly="readonly" id="demo-color-picker-pro" />
                </div>
              </div>
            </div>
          </li>
        </ul>
      </div>

      <div class="block-title">Inline Color Picker</div>
      <div class="block-header">SB Spectrum + HSB Sliders</div>
      <div class="block block-strong block-outline no-padding">
        ${colorPickerInlineValue && $h`
        <div class="padding">
          HEX: ${colorPickerInlineValue.hex}<br />
          Alpha: ${colorPickerInlineValue.alpha}<br />
          Hue: ${colorPickerInlineValue.hue}<br />
          RGB: ${colorPickerInlineValue.rgb.join(', ')}<br />
          HSL: ${colorPickerInlineValue.hsl.join(', ')}<br />
          HSB: ${colorPickerInlineValue.hsb.join(', ')}<br />
          RGBA: ${colorPickerInlineValue.rgba.join(', ')}<br />
          HSLA: ${colorPickerInlineValue.hsla.join(', ')}
        </div>
        `}

        <div id="demo-color-picker-inline"></div>
      </div>

    </div>
  </div>
</template>
<script>
  export default (props, { $f7, $on, $update }) => {
    let colorPickerInlineValue = null;

    let colorPickerWheel;
    let colorPickerSpectrum;
    let colorPickerHsSpectrum;
    let colorPickerRgb;
    let colorPickerRgba;
    let colorPickerHsb;
    let colorPickerRgbBars;
    let colorPickerRgbPrevCurrentColors;
    let colorPickerPalette;
    let colorPickerRgbPro;
    let colorPickerInline;

    $on('pageInit', () => {
      // Default
      colorPickerWheel = app.colorPicker.create({
        inputEl: '#demo-color-picker-wheel',
        targetEl: '#demo-color-picker-wheel-value',
        targetElSetBackgroundColor: true,
        modules: ['wheel'],
        openIn: 'popover',
        value: {
          hex: '#00ff00',
        },
      });
      colorPickerSpectrum = app.colorPicker.create({
        inputEl: '#demo-color-picker-spectrum',
        targetEl: '#demo-color-picker-spectrum-value',
        targetElSetBackgroundColor: true,
        modules: ['sb-spectrum', 'hue-slider'],
        openIn: 'popover',
        value: {
          hex: '#ff0000',
        },
      });
      colorPickerHsSpectrum = app.colorPicker.create({
        inputEl: '#demo-color-picker-hs-spectrum',
        targetEl: '#demo-color-picker-hs-spectrum-value',
        targetElSetBackgroundColor: true,
        modules: ['hs-spectrum', 'brightness-slider'],
        openIn: 'popover',
        value: {
          hex: '#ff0000',
        },
      });
      colorPickerRgb = app.colorPicker.create({
        inputEl: '#demo-color-picker-rgb',
        targetEl: '#demo-color-picker-rgb-value',
        targetElSetBackgroundColor: true,
        modules: ['rgb-sliders'],
        openIn: 'popover',
        sliderValue: true,
        sliderLabel: true,
        value: {
          hex: '#0000ff',
        },
      });
      colorPickerRgba = app.colorPicker.create({
        inputEl: '#demo-color-picker-rgba',
        targetEl: '#demo-color-picker-rgba-value',
        targetElSetBackgroundColor: true,
        modules: ['rgb-sliders', 'alpha-slider'],
        openIn: 'popover',
        sliderValue: true,
        sliderLabel: true,
        value: {
          hex: '#ff00ff',
        },
        formatValue: function (value) {
          return 'rgba(' + value.rgba.join(', ') + ')';
        },
      });
      colorPickerHsb = app.colorPicker.create({
        inputEl: '#demo-color-picker-hsb',
        targetEl: '#demo-color-picker-hsb-value',
        targetElSetBackgroundColor: true,
        modules: ['hsb-sliders'],
        openIn: 'popover',
        sliderValue: true,
        sliderLabel: true,
        formatValue: function (value) {
          return 'hsb(' + value.hsb[0] + (', ' + value.hsb[1] * 1000 / 10 + '%') + (', ' + value.hsb[2] * 1000 / 10 + '%') + ')';
        },
        value: {
          hex: '#00ff00',
        },
      });
      colorPickerRgbBars = app.colorPicker.create({
        inputEl: '#demo-color-picker-rgb-bars',
        targetEl: '#demo-color-picker-rgb-bars-value',
        targetElSetBackgroundColor: true,
        modules: ['rgb-bars'],
        openIn: 'auto',
        barValue: true,
        barLabel: true,
        formatValue: function (value) {
          return 'rgb(' + value.rgb.join(', ') + ')';
        },
        value: {
          hex: '#0000ff',
        },
      });
      colorPickerRgbPrevCurrentColors = app.colorPicker.create({
        inputEl: '#demo-color-picker-rgb-initial-current-colors',
        targetEl: '#demo-color-picker-rgb-initial-current-colors-value',
        targetElSetBackgroundColor: true,
        modules: ['initial-current-colors', 'rgb-sliders'],
        openIn: 'popover',
        sliderValue: true,
        sliderLabel: true,
        formatValue: function (value) {
          return 'rgb(' + value.rgb.join(', ') + ')';
        },
        value: {
          hex: '#ffff00',
        },
      });
      colorPickerPalette = app.colorPicker.create({
        inputEl: '#demo-color-picker-palette',
        targetEl: '#demo-color-picker-palette-value',
        targetElSetBackgroundColor: true,
        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'],
        ],
        value: {
          hex: '#FFEBEE',
        },
        formatValue: function (value) {
          return value.hex;
        },
      });

      colorPickerRgbPro = app.colorPicker.create({
        inputEl: '#demo-color-picker-pro',
        targetEl: '#demo-color-picker-pro-value',
        targetElSetBackgroundColor: true,
        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'],
        ],
        formatValue: function (value) {
          return 'rgba(' + value.rgba.join(', ') + ')';
        },
        value: {
          hex: '#00ffff',
        },
      });

      colorPickerInline = app.colorPicker.create({
        containerEl: '#demo-color-picker-inline',
        modules: ['sb-spectrum', 'hsb-sliders', 'alpha-slider'],
        on: {
          change(cp, value) {
            colorPickerInlineValue = value;
            $update();
          },
        },
        value: {
          hex: '#77ff66',
        },
      });
    });
    $on('pageBeforeRemove', () => {
      colorPickerWheel.destroy();
      colorPickerSpectrum.destroy();
      colorPickerHsSpectrum.destroy();
      colorPickerRgb.destroy();
      colorPickerRgba.destroy();
      colorPickerHsb.destroy();
      colorPickerRgbBars.destroy();
      colorPickerRgbPrevCurrentColors.destroy();
      colorPickerPalette.destroy();
      colorPickerRgbPro.destroy();
      colorPickerInline.destroy();
    });

    return $render;
  };

</script>