UNPKG

1.46 kBJavaScriptView Raw
1import d3 from 'd3';
2
3export default (schemes, useScheme, changeAssetScheme) => {
4 function _select(n) {
5 palettes.each(function(d, i) {
6 d3.select(this.parentNode)
7 .classed('selected', () => i === n)
8 })
9
10 palettes
11 .transition()
12 .ease('bounce')
13 .duration(500)
14 .attr('height', (d, i) => i === n ? 0 : 48);
15
16 [d3.select('body'), d3.select('html')].forEach((el) => {
17 el.transition()
18 .ease('sin-in-out')
19 .duration(600)
20 .style('background', schemes[n].background)
21 })
22 }
23 function _useScheme(n) {
24 _select(n);
25 useScheme(n);
26 changeAssetScheme(n);
27 }
28
29 const paletteDiv = d3.select('.palette-wrap')
30 .selectAll('.palette')
31 .data(schemes)
32 .enter()
33 .append('div')
34 .classed('scheme-icon', true)
35
36 paletteDiv.append('span')
37 .classed('scheme-text', true)
38 .text(d => d.name)
39
40 const palettes = paletteDiv
41 .append('svg')
42 .style('display', 'inline-block')
43 .classed('palette', true)
44 .on('click', (d, i) => _useScheme(i))
45
46 palettes.append('rect')
47 .attr('width', 23)
48 .attr('height', 48)
49 .style('fill', d => d.background)
50
51 palettes.selectAll('.color')
52 .data(d => d.all)
53 .enter()
54 .append('rect')
55 .style('fill', d => d)
56 .attr('x', 25)
57 .attr('y', (d, i, j) => 48 * i / schemes[j].all.length - 1)
58 .attr('width', 22)
59 .attr('height', (d, i, j) => 48 / schemes[j].all.length - 1)
60
61 _select(0)
62}