From 657dc9cc1f04d94384302d0e47d747c71fabaf7b Mon Sep 17 00:00:00 2001 From: Grzegorz Kucmierz Date: Sun, 8 Feb 2026 15:02:59 +0100 Subject: [PATCH] =?UTF-8?q?Mobile-first=20i=20pixel-perfect:=20wsp=C3=B3ln?= =?UTF-8?q?e=20--cell-size,=20grid=20dla=20podpowiedzi,=20dynamiczny=20roz?= =?UTF-8?q?miar=20kom=C3=B3rki=20z=20uwzgl=C4=99dnieniem=20padding=C3=B3w?= =?UTF-8?q?=20i=20szeroko=C5=9Bci=20opis=C3=B3w;=20poprawa=20touch/pointer?= =?UTF-8?q?=20i=20double-tap=20na=20mobile;=20wyr=C3=B3wnanie=20layoutu=20?= =?UTF-8?q?bez=20nachodzenia=20na=20desktopie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 18 +++++++++ src/components/Cell.vue | 21 +++++++++-- src/components/GameBoard.vue | 71 +++++++++++++++++++++++++++++++----- src/components/Hints.vue | 30 +++++++++------ src/styles/main.css | 29 +++++++++++++++ 5 files changed, 145 insertions(+), 24 deletions(-) diff --git a/src/App.vue b/src/App.vue index 2675efa..46ef4ee 100644 --- a/src/App.vue +++ b/src/App.vue @@ -111,4 +111,22 @@ h1 { justify-content: center; margin-top: 10px; } + +@media (max-width: 768px) { + .game-header { + margin-top: 20px; + margin-bottom: 20px; + } + h1 { + font-size: 2.4rem; + letter-spacing: 3px; + } +} + +@media (max-width: 420px) { + h1 { + font-size: 2rem; + letter-spacing: 2px; + } +} diff --git a/src/components/Cell.vue b/src/components/Cell.vue index 02fbf1e..6fbdfca 100644 --- a/src/components/Cell.vue +++ b/src/components/Cell.vue @@ -21,10 +21,22 @@ const cellClass = computed(() => { } }); -const handleMouseDown = (e) => { - // 0 = left, 2 = right +let lastTap = 0; + +const handlePointerDown = (e) => { + if (e.pointerType === 'mouse') { if (e.button === 0) emit('start-drag', props.r, props.c, false); if (e.button === 2) emit('start-drag', props.r, props.c, true); + return; + } + const now = Date.now(); + const isDoubleTap = now - lastTap < 300; + lastTap = now; + if (isDoubleTap) { + emit('start-drag', props.r, props.c, true); + } else { + emit('start-drag', props.r, props.c, false); + } }; @@ -32,7 +44,9 @@ const handleMouseDown = (e) => {
@@ -52,6 +66,7 @@ const handleMouseDown = (e) => { align-items: center; transition: background-color 0.1s ease, box-shadow 0.1s ease; user-select: none; + touch-action: none; } .cell:hover { diff --git a/src/components/GameBoard.vue b/src/components/GameBoard.vue index 0ac7ed1..2ce2b75 100644 --- a/src/components/GameBoard.vue +++ b/src/components/GameBoard.vue @@ -1,5 +1,5 @@