aboutsummaryrefslogtreecommitdiff
path: root/src/lib/form.ts
blob: 04a26549e639ecad92daaa015bcf2660bc409b82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { h } from 'lib/h'
import * as Layout from 'lib/layout'
import * as Button from 'lib/button'

interface InputParams {
  label: string,
  attrs: object,
}

export function input({ label, attrs }: InputParams): Element {
  return h('label',
    { className: 'g-Form__Field' },
    label,
    h('input', attrs),
  )
}

interface ColorInputParams {
  colors: string[],
  label: string,
  initValue: string,
  onInput: (value: string) => void,
}

export function colorInput({ colors, label, initValue, onInput }: ColorInputParams): Element {
  const input = h('input',
    { value: initValue,
      type: 'color',
      oninput: (e: Event) => {
        if (e.target !== null) {
          onInput((e.target as HTMLInputElement).value)
        }
      }
    }
  ) as HTMLInputElement
  return h('label',
    { className: 'g-Form__Field' },
    label,
    Layout.line(
      {},
      input,
      ...colors.map(color =>
        Button.raw({ className: 'g-Form__Color',
          style: `background-color: ${color}`,
          type: 'button',
          onclick: () => {
            input.value = color
            onInput(color)
          }
        })
      )
    )
  )
}