import { html } from 'lit'; import { repeat } from 'lit/directives/repeat.js'; import type { LineWidth } from '../../../../_common/types.js'; import { LineStyleButton, type LineStyleButtonProps, lineStyleButtonStyles, } from '../buttons/line-style-button.js'; import type { LineWidthEvent } from './line-width-panel.js'; import { PanelWrapper, panelWrapperStyle } from './panel-wrapper.js'; export const lineStylesPanelStyles = [panelWrapperStyle, lineStyleButtonStyles]; export type LineStylesPanelClickedButton = | { type: 'size'; value: LineWidth; } | { type: 'lineStyle'; value: LineStyleButtonProps['mode']; }; interface LineStylesPanelProps { onClick?: (clickedButton: LineStylesPanelClickedButton) => void; selectedLineSize?: LineWidth; selectedLineStyle?: LineStyleButtonProps['mode']; lineStyle?: LineStyleButtonProps['mode'][]; } export function LineStylesPanel({ onClick, selectedLineSize, selectedLineStyle, lineStyle = ['solid', 'dash', 'none'], }: LineStylesPanelProps = {}) { const lineSizePanel = html` { onClick?.({ type: 'size', value: e.detail, }); }} > `; const lineStyleButtons = repeat( lineStyle, mode => mode, mode => { return LineStyleButton({ className: 'line-style-button', mode, active: mode === selectedLineStyle, onClick: () => { onClick?.({ type: 'lineStyle', value: mode, }); }, }); } ); return PanelWrapper({ className: 'line-style-panel', children: html` ${lineSizePanel} ${lineStyleButtons} `, }); }