diff --git a/src/components/Card.svelte b/src/components/Card.svelte index 5c0828c..8c746c9 100644 --- a/src/components/Card.svelte +++ b/src/components/Card.svelte @@ -65,7 +65,6 @@ font-family: sans-serif position: relative user-select: none - transition: height 250ms, width 250ms width: 5em height: 7em diff --git a/src/components/Footer.svelte b/src/components/Footer.svelte index 7b9cdd4..7ad4df1 100644 --- a/src/components/Footer.svelte +++ b/src/components/Footer.svelte @@ -19,7 +19,7 @@ diff --git a/src/global.css b/src/global.css index a9eabe7..61eb32f 100644 --- a/src/global.css +++ b/src/global.css @@ -31,25 +31,25 @@ body { flex-direction: column; } -@media (max-width: 5em) and (max-height: 7em) { +@media (max-width: 5rem) and (max-height: 7rem) { body { font-size: 50%; } } -@media (min-width: 10em) and (min-height: 14em) { +@media (min-width: 10rem) and (min-height: 14rem) { body { font-size: 150%; } } -@media (min-width: 15em) and (min-height: 21em) { +@media (min-width: 15rem) and (min-height: 21rem) { body { font-size: 200%; } } -@media (min-width: 20em) and (min-height: 28em) { +@media (min-width: 20rem) and (min-height: 28rem) { body { font-size: 300%; } diff --git a/src/utils/pileon.ts b/src/utils/pileon.ts index 98174c5..f2a095c 100644 --- a/src/utils/pileon.ts +++ b/src/utils/pileon.ts @@ -15,25 +15,18 @@ const getStacksGrid = ( return [5, 3]; }; -export const fillerStacks = ( - mainWidth: number, - innerHeight: number, -): { length: number } => { - const [i, j] = getStacksGrid(mainWidth, innerHeight); +export const fillerStacks = (i: number, j: number): { length: number } => { return { length: i * j - 15 }; }; -const calculateTableEmSize = ( +export const calculateTableEmSize = ( size: ICardSize, columns: number, rows: number, ): [number, number] => { - const tableWidthEm = - stackWidthEm(4, size) * columns + - (size !== "small" ? 0.666 : 0.333) * columns * 2; + const tableWidthEm = stackWidthEm(4, size) * columns + 0.5 * (columns - 1); const tableHeightEm = - getCardDimensionsEm(size).height * rows + - (size !== "small" ? 0.5 : 0.25) * rows * 2; + getCardDimensionsEm(size).height * rows + 0.5 * (rows - 1); return [tableWidthEm, tableHeightEm]; }; @@ -50,13 +43,11 @@ export const calculateDimensions = ( size: ICardSize, mainWidth: number, mainHeight: number, - innerHeight: number, ): TableDimensions => { - // Limit play area aspect ratio to 16:9 - const tableHeight = mainHeight > 600 ? mainHeight : innerHeight; - const tableWidth = Math.min(mainWidth, tableHeight * (16 / 9)); + // Limit play area aspect ratio to 21:9 + const tableWidth = Math.min(mainWidth, mainHeight * (21 / 9)); - const [columns, rows] = getStacksGrid(mainWidth, innerHeight); + const [columns, rows] = getStacksGrid(tableWidth, mainHeight); const [tableWidthEm, tableHeightEm] = calculateTableEmSize( size, columns, @@ -64,10 +55,10 @@ export const calculateDimensions = ( ); const fontSizeW = (tableWidth * 0.95) / tableWidthEm; - const fontSizeH = (tableHeight * 0.95) / tableHeightEm; + const fontSizeH = (mainHeight * 0.95) / tableHeightEm; return { - fontSize: Math.min(fontSizeW, fontSizeH), + fontSize: Math.max(Math.min(fontSizeW, fontSizeH), 10), columns, rows, tableWidthEm, diff --git a/src/views/Pileon/Pileon.svelte b/src/views/Pileon/Pileon.svelte index c76296a..da5deac 100644 --- a/src/views/Pileon/Pileon.svelte +++ b/src/views/Pileon/Pileon.svelte @@ -18,6 +18,7 @@ getEqualValues, calculateDimensions, fillerStacks, + calculateTableEmSize, } from "../../utils/pileon"; import { getStackDataTransfer, stackWidthEm } from "../../utils/stack"; import { newEvent } from "../../utils/statistics"; @@ -28,7 +29,6 @@ let mainWidth: number; let mainHeight: number; - let innerHeight: number; let appearance = createCardAppearance((settings: ISettings) => ({ size: settings.size === "default" ? "bridge" : settings.size, @@ -37,7 +37,7 @@ $: { const defaultSize: ICardSize = - mainWidth < 800 || innerHeight < 500 ? "small" : "bridge"; + mainWidth < 800 || mainHeight < 400 ? "small" : "bridge"; setCardAppearance((settings: ISettings) => ({ size: settings.size === "default" ? defaultSize : settings.size, @@ -144,7 +144,7 @@ }; $: size = $appearance.size; - $: d = calculateDimensions(size, mainWidth, mainHeight, innerHeight); + $: d = calculateDimensions(size, mainWidth, mainHeight); onMount(() => { actions.update((prev) => ({ ...prev, help, shuffle, undo })); @@ -158,16 +158,15 @@ undo: undefined, })); }); + $: [tableWidth5x3, _] = calculateTableEmSize(size, 5, 3); - -
{#each piles as pile, index}
@@ -184,7 +183,7 @@ />
{/each} - {#each fillerStacks(mainWidth, innerHeight) as _} + {#each fillerStacks(d.columns, d.rows) as _}
{/each}
@@ -202,12 +201,12 @@ .pileon flex: 1 flex-wrap: wrap - font-size: 0.7em + font-size: 10px display: flex align-content: center align-items: center justify-content: center - max-width: 100vw + width: 100vw column-gap: 0.5em row-gap: 0.5em margin: auto @@ -218,9 +217,9 @@ .pile flex-basis: 16.7% /* Just above 1/6 */ - @media (max-aspect-ratio: 4/3) + &.deal-4x4 flex-basis: 20.1% /* Just above 1/5 */ - @media (max-aspect-ratio: 3/4) + &.deal-3x5 flex-basis: 25.1% /* Just above 1/4 */