function drawTile(pattern, { palette, props } = {}) {
const { tileWidth, tileHeight, strokeWidth = 15 } = props;
const highlightStrokeWidth = strokeWidth / 10;
let paths = [];
switch (pattern) {
case tile.down:
paths.push(svg`<path d="
M0,${tileHeight / 2} h ${tileWidth}
M${tileWidth / 2},${tileHeight / 2} v ${tileHeight / 2}"></path>`);
paths.push(svg`<path d="
M${tileWidth / 2},${tileHeight}
Q${tileWidth / 2},${tileHeight / 2} 0,${tileHeight / 2}
M${tileWidth / 2},${tileHeight}
Q${tileWidth / 2},${tileHeight / 2} ${tileWidth},${tileHeight / 2}
"></path>`);
break;
case tile.up:
paths.push(svg`<path d="
M0,${tileHeight / 2} h ${tileWidth}
M${tileWidth / 2},${tileHeight / 2} v ${-tileHeight / 2}"></path>`);
break;
case tile.right:
paths.push(svg`<path d="
M${tileWidth / 2},0 v ${tileHeight}
M${tileWidth / 2},${tileHeight / 2} h ${tileWidth / 2}"></path>`);
paths.push(svg`<path d="
M${tileWidth / 2},${tileHeight}
Q${tileWidth / 2},${tileHeight / 2} ${tileWidth},${tileHeight / 2}
"></path>`);
break;
case tile.left:
paths.push(svg`<path d="
M${tileWidth / 2},0 v ${tileHeight}
M${tileWidth / 2},${tileHeight / 2} h ${-tileWidth / 2}"></path>`);
paths.push(svg`<path d="
M${tileWidth / 2},${tileHeight}
Q${tileWidth / 2},${tileHeight / 2} 0,${tileHeight / 2}
"></path>`);
break;
}
return svg`<g fill="none"
stroke=${palette.fg}
stroke-width=${strokeWidth}
stroke-linecap="round"
>
<rect width=${tileWidth} height=${tileHeight}
stroke="none" fill=${palette.bg}></rect>
${paths}
</g>`;
}