@electrovir/color
Version:
A wrapper for culori with an extremely simple API.
54 lines (52 loc) • 1.85 kB
JavaScript
/* node:coverage disable */
import { getObjectTypedKeys, getObjectTypedValues } from '@augment-vir/common';
import { css, defineElement, defineElementEvent, html, listen } from 'element-vir';
import { colorFormatsBySpace } from '../data/color-class/color-formats.js';
import { VirColorFormatSliders } from './vir-color-format-sliders.element.js';
/**
* Color sliders for all color spaces.
*
* @category Elements
*/
export const VirAllColorSpaceSliders = defineElement()({
tagName: 'vir-all-color-space-sliders',
styles: css `
:host {
display: flex;
flex-direction: column;
gap: 16px;
}
.color-space {
display: flex;
flex-wrap: wrap;
column-gap: 32px;
row-gap: 8px;
}
`,
events: {
colorChange: defineElementEvent(),
},
render({ inputs, dispatch, events }) {
const colorSpaceTemplates = getObjectTypedValues(colorFormatsBySpace).map((colorSpaceFormats) => {
const formatTemplates = getObjectTypedKeys(colorSpaceFormats).map((colorFormatName) => {
return html `
<${VirColorFormatSliders.assign({
color: inputs.color,
colorFormatName,
showFormatName: true,
})}
${listen(VirColorFormatSliders.events.colorChange, (event) => {
dispatch(new events.colorChange(event.detail));
})}
></${VirColorFormatSliders}>
`;
});
return html `
<section class="color-space">${formatTemplates}</section>
`;
});
return html `
${colorSpaceTemplates}
`;
},
});