カラーピッカー

Framework7には、無限の「カラーモジュール」の組み合わせでカラーピッカーを作成できる究極のモジュール式カラーピッカーコンポーネントが付属しています。

カラーピッカーアプリメソッド

カラーピッカーを操作するための関連するアプリメソッドを見てみましょう。

app.colorPicker.create(parameters) - カラーピッカーインスタンスを作成します

  • parameters - object。カラーピッカーのパラメーターを持つオブジェクト。

メソッドは、作成されたカラーピッカーインスタンスを返します

app.colorPicker.destroy(el) - カラーピッカーインスタンスを破棄します

  • el - HTMLElement または string (CSSセレクター付き) または object。破棄するカラーピッカー要素またはカラーピッカーインスタンス。

app.colorPicker.get(el) - HTML要素でカラーピッカーインスタンスを取得します

  • el - HTMLElement または string (CSSセレクター付き)。カラーピッカー要素。

メソッドは、カラーピッカーのインスタンスを返します

app.colorPicker.close(el) - カラーピッカーを閉じます

  • el - HTMLElement または string (CSSセレクター付き)。閉じるカラーピッカー要素。

メソッドは、カラーピッカーのインスタンスを返します

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

カラーピッカーのパラメーター

利用可能なすべてのカラーピッカーのパラメーターのリストを見てみましょう

パラメータータイプデフォルト説明
valueobjectカラーピッカーの値を持つオブジェクト
modulesarray['wheel']カラーピッカーモジュールの表示順序を示す配列
palettearray

各パレットカラーをHEX文字列として指定する必要があるパレットモジュールカラーを持つ配列。

次のようなパレット値を持つ単純な配列にすることができます

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モジュールのラベルテキスト(例: HEX)が表示されます
hexValueEditablebooleanfalse有効にすると、HEXモジュールの値が直接編集するための<input>要素として表示されます
ラベルテキスト
redLabelTextstring'R'赤のスライダー/バーラベルテキスト
greenLabelTextstring'G'緑のスライダー/バーラベルテキスト
blueLabelTextstring'B'青のスライダー/バーラベルテキスト
hueLabelTextstring'H'色相スライダーラベルテキスト
saturationLabelTextstring'S'彩度スライダーラベルテキスト
brightnessLabelTextstring'B'明度スライダーラベルテキスト
hexLabelTextstring'HEX'HEXモジュールラベルテキスト
alphaLabelTextstring'A'アルファ (不透明度) スライダーラベルテキスト
formatValuefunction (value)入力値をフォーマットする関数。新しい/フォーマットされた文字列値を返す必要があります。valueカラーピッカーの値オブジェクトです。デフォルトでは、HEX値を返します。
コンテナ/オープナー固有のパラメーター
containerElstring
HTMLElement
生成されたカラーピッカーのHTMLを配置するCSSセレクターまたはHTMLElementを持つ文字列。インラインカラーピッカーでのみ使用してください
openInstringpopoverautopopover (ポップオーバーでカラーピッカーを開く場合)、sheet (シートモーダルで開く場合)、popup (ポップアップで開く場合)、またはpage (ページで開く場合) を指定できます。autoの場合、小さな画面ではopenInPhoneパラメーターで指定されたものとして、大きな画面ではポップオーバーで指定されたものとして扱われます。
openInPhonestringpopupopenIn: "auto"の場合、小さな画面でカラーピッカーを開く方法を定義します
popupPushbooleanfalseカラーピッカーのポップアップを開いたときに、背後のビューをプッシュできるようにします
popupSwipeToClosebooleanundefinedスワイプでカラーピッカーのポップアップを閉じることができるようにします。指定されていない場合、アプリのポップアップswipeToCloseパラメーターを継承します
sheetPushbooleanfalseカラーピッカーのシートを開いたときに、背後のビューをプッシュできるようにします
sheetSwipeToClosebooleanundefinedスワイプでカラーピッカーのシートを閉じることができるようにします。指定されていない場合、アプリのシートswipeToCloseパラメーターを継承します
inputElstring または HTMLElement関連する入力要素を持つCSSセレクターまたはHTMLElementを持つ文字列
targetElstring または HTMLElement関連するターゲット要素を持つCSSセレクターまたはHTMLElementを持つ文字列。入力要素に加えて、現在選択されている色を表示する追加の要素を配置することもできます。このような要素は、ターゲット要素として指定できます。カラーピッカーがポップオーバーで開かれている場合、このターゲット要素の周囲に配置されます。指定されたターゲット要素をクリックすると、カラーピッカーも開きます。
targetElSetBackgroundColorbooleanfalse有効にして、targetElを渡した場合、現在選択されている値でbackground-colorをターゲット要素に設定します。
scrollToInputbooleantrueカラーピッカーが開いたときに、ビューポート (ページコンテンツ) を入力までスクロールします
inputReadOnlybooleantrue指定された入力に「readonly」属性を設定します
cssClassstringカラーピッカーコンテナに設定する追加のCSSクラス名
closeByOutsideClickbooleantrue有効にすると、ピッカーまたは関連する入力要素の外側をクリックするとピッカーが閉じられます
toolbarSheetbooleantrueシートモーダルで開いたときにツールバーを表示します
toolbarPopoverbooleanfalseポップオーバーモーダルで開いたときにツールバーを表示します
toolbarCloseTextstring完了完了/閉じるツールバーボタンのテキスト
navbarPopupbooleantrueポップアップモーダルで開いたときにナビバーを表示します
navbarCloseTextstring完了完了/閉じるナビバーボタンのテキスト
navbarTitleTextstringナビバーのタイトルのテキスト
navbarBackLinkTextstring戻るカラーピッカーがページで開かれた場合に利用可能なナビバーの戻るリンクのテキスト
routableModalsbooleanfalse開かれたカラーピッカーをルーター履歴に追加します。これにより、ルーター履歴で戻ることでカラーピッカーを閉じ、現在のルートをカラーピッカーモーダルに設定できます。
urlstringcolor/現在のルートとして設定されるカラーピッカーモーダルURL
viewobjectroutableModalsが有効な場合にルーティングを設定する場所。デフォルトでは、inputElの親ビュー、または親ビューが見つからない場合はメインビューになります。
backdropbooleanカラーピッカーの背景 (背後の暗い半透明のレイヤー) を有効にします。デフォルトでは、カラーピッカーがポップオーバーまたはポップアップで開かれている場合に有効になります。
closeByBackdropClickbooleantrue有効にすると、背景をクリックするとカラーピッカーが閉じられます
レンダー関数
renderToolbarfunctionツールバーをレンダリングする関数。ツールバーのHTML文字列を返す必要があります
renderNavbarfunction(date)ナビバーをレンダリングする関数。ナビバーのHTML文字列を返す必要があります
renderfunctionカラーピッカーをレンダリングする関数。完全なカラーピッカーの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

アルファ (不透明度) 単一スライダー

rgb-bars

垂直の赤、緑、青のスライダー

palette

モジュールは、paletteパラメーターで指定されたパレットカラーを表示します

hex

現在の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',
  ]
})

モジュールでの動作の仕組みやインスピレーションについては、組み込みモジュールのソースコードを確認してください。

カラーピッカーの値

カラーピッカーのインスタンスの値は、以下のプロパティを持つオブジェクトとして表現されます。

hexstringHEXカラー値。例:#ff0000
rgbarrayRGB ([赤, 緑, 青]) カラーの配列。例:[255, 100, 20]
hslarrayHSL ([色相, 彩度, 明度]) カラーの配列。例:[320, 0.1, 0.9]
hsbarrayHSB/V ([色相, 彩度, 明度]) カラーの配列。例:[180, 0.5, 0.3]
alpha数値アルファ(不透明度)値(0〜1)。例:0.6
hue数値色相の値(0〜360)。例:320
rgbaarrayRGBA ([赤, 緑, 青, アルファ]) カラーの配列。例:[255, 100, 20, 0.5]
hslaarrayHSLA ([色相, 彩度, 明度, アルファ]) カラーの配列。例:[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>