Skip to content

Commit f6f9ecb

Browse files
authored
Merge pull request #2 from tomohxx/develop
feat: rotate first tile in open melds
2 parents ac2a149 + 2ae536b commit f6f9ecb

2 files changed

Lines changed: 30 additions & 3 deletions

File tree

src/components/DisplayArea.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@ export function DisplayArea({ handState: { tiles, melds }, onRemoveTile, onRemov
3737
key={meldIndex}
3838
type="button"
3939
onClick={() => onRemoveMeld(meldIndex)}
40-
className="flex shrink-0 gap-px focus-visible:ring-2 focus-visible:ring-teal-400/80 focus-visible:outline-none"
40+
className="flex shrink-0 items-end gap-px focus-visible:ring-2 focus-visible:ring-teal-400/80 focus-visible:outline-none"
4141
>
4242
{meld.tiles.map((tile, tileIndex) => (
4343
<TileImage
4444
key={`${meldIndex}-${tileIndex}`}
4545
tile={tile}
4646
size="compact"
47+
rotateLeft={meld.type !== "ankan" && tileIndex === 0}
4748
faceDown={meld.type === "ankan" && (tileIndex === 0 || tileIndex === 3)}
4849
/>
4950
))}

src/components/TileImage.tsx

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,45 @@ const tileImageClassBySize = {
1616
normal: "h-[2.8rem] sm:h-[4.2rem]",
1717
};
1818

19+
const compactRotatedTileClass = {
20+
wrapper: "w-[2rem] h-[1.5rem] sm:w-[3rem] sm:h-[2.25rem]",
21+
offset: "top-[1.5rem] sm:top-[2.25rem]",
22+
};
23+
1924
type TileImageProps = {
2025
tile: Tile;
2126
size?: keyof typeof tileImageClassBySize;
2227
className?: string;
2328
faceDown?: boolean;
29+
rotateLeft?: boolean;
2430
};
2531

26-
export function TileImage({ tile, size = "normal", className = "", faceDown = false }: TileImageProps) {
32+
export function TileImage({
33+
tile,
34+
size = "normal",
35+
className = "",
36+
faceDown = false,
37+
rotateLeft = false,
38+
}: TileImageProps) {
2739
const TileComponent = TileComponents[faceDown ? "back" : `${tile.suit}${tile.index + 1}${tile.isRed ? "r" : ""}`];
40+
const imageSizeClass = rotateLeft ? tileImageClassBySize.compact : tileImageClassBySize[size];
41+
const tileClassName = `block shrink-0 overflow-hidden rounded border border-stone-300/85 w-auto ${imageSizeClass} ${className ? className : "bg-paper-warm"}`;
42+
43+
if (rotateLeft) {
44+
return (
45+
<div className={`relative shrink-0 ${compactRotatedTileClass.wrapper}`}>
46+
{createElement(TileComponent, {
47+
"aria-hidden": "true",
48+
focusable: "false",
49+
className: `absolute left-0 origin-top-left -rotate-90 ${compactRotatedTileClass.offset} ${tileClassName}`,
50+
})}
51+
</div>
52+
);
53+
}
2854

2955
return createElement(TileComponent, {
3056
"aria-hidden": "true",
3157
focusable: "false",
32-
className: `block shrink-0 overflow-hidden rounded border border-stone-300/85 w-auto ${tileImageClassBySize[size]} ${className ? className : "bg-paper-warm"}`,
58+
className: tileClassName,
3359
});
3460
}

0 commit comments

Comments
 (0)