+ {#if wasmError}
+
+ β οΈ {$t.failedToLoad} {wasmError}
-
- {#each handTiles as entry, index (entry.id)}
-
-
-
-
- {/each}
- {#each Array(Math.max(0, maxHandTiles - handTiles.length)) as _}
-
- {/each}
+ {:else if !wasmLoaded}
+
+
+
{$t.loadingCalculator}
- {#if handTiles.length > 0 || melds.length > 0}
-
{handString}{buildMeldNotation()}
- {/if}
-
-
- {#if shantenResult && (handTiles.length > 0 || melds.length > 0)}
- {#if shantenResult.success}
-
- {#if shantenResult.shanten === -1}
- β {$t.complete}
- {:else if shantenResult.shanten === 0}
- {$t.tenpai}
- {:else}
- {shantenResult.shanten}{$t.shanten}
- {/if}
- ({shantenResult.best_type})
-
- {:else if shantenResult.error}
-
- Shanten: {shantenResult.error}
-
- {/if}
- {/if}
-
-
-
-
-
-
- {#if showDoraSection}
-
-
-
{$t.dora}
-
- {#each doraIndicators as entry, index (entry.id)}
-
-
+
+
+
+
+
+
+
-
-
- {/each}
- {#if doraIndicators.length < 5}
-
+
+
+
+ {$t.addMeld}
+
+
+
+
+
+
+
+ {#if showMeldBuilder}
+
+
+
+ {#each meldBuilderTiles as entry, index (entry.id)}
+
+ removeTileFromMeldBuilder(
+ index,
+ )}
+ />
+ {/each}
+ {#each Array((meldBuilderType === "kan" || meldBuilderType === "ankan" ? 4 : 3) - meldBuilderTiles.length) as _}
+
+ {/each}
+
+
+
+
+
+
+ {/if}
+
+
+
+ {#if melds.length > 0}
+
+
+
{$t.calledMelds}
+
+ {#each melds as meld, index (meld.id)}
+
+
+ {meld.type === "ankan"
+ ? "π"
+ : "π’"}
+ {meld.type}
+
+
+ {#each meld.tiles as entry (entry.id)}
+
+ {/each}
+
+
+
+ {/each}
+
+
+
{/if}
-
-
- {#if isRiichi}
-
-
{$t.uraDora}
-
- {#each uraDoraIndicators as entry, index (entry.id)}
-
-
-
+
+
+
+
{$t.yourHand}
+ {#if handTiles.length > 0}
+ {$t.selectWinningTileHint}
+ {/if}
- {/each}
- {#if uraDoraIndicators.length < 5}
+
+ {#each handTiles as entry, index (entry.id)}
+
+
+
+
+ {/each}
+ {#each Array(Math.max(0, maxHandTiles - handTiles.length)) as _}
+
+ {/each}
+
+ {#if handTiles.length > 0 || melds.length > 0}
+
+ {handString}{buildMeldNotation()}
+
+ {/if}
+
+
+ {#if shantenResult && (handTiles.length > 0 || melds.length > 0)}
+ {#if shantenResult.success}
+
+ {#if shantenResult.shanten === -1}
+ β {$t.complete}
+ {:else if shantenResult.shanten === 0}
+ {$t.tenpai}
+ {:else}
+ {shantenResult.shanten}{$t.shanten}
+ {/if}
+ ({shantenResult.best_type})
+
+ {:else if shantenResult.error}
+
+ Shanten: {shantenResult.error}
+
+ {/if}
+ {/if}
+
+
+
+
- {/if}
+ class="dora-toggle"
+ onclick={() => (showDoraSection = !showDoraSection)}
+ >
+
{$t.doraIndicators}
+
βΌ
+
+
+ {#if showDoraSection}
+
+
+
{$t.dora}
+
+ {#each doraIndicators as entry, index (entry.id)}
+
+
+
+
+ {/each}
+ {#if doraIndicators.length < 5}
+
+ {/if}
+
+
+
+ {#if isRiichi}
+
+
{$t.uraDora}
+
+ {#each uraDoraIndicators as entry, index (entry.id)}
+
+
+
+
+ {/each}
+ {#if uraDoraIndicators.length < 5}
+
+ {/if}
+
+
+ {/if}
+
+ {#if akaCount > 0}
+
+ {$t.akadoraInHand}
+ {akaCount}
+
+ {/if}
+
+ {/if}
+
+
+ {#if showDoraPicker}
+
{
+ addDoraIndicator(tile);
+ showDoraPicker = false;
+ }}
+ onClose={() => (showDoraPicker = false)}
+ disabledTiles={doraDisabledTiles}
+ />
+ {/if}
+
+
+ {#if showUraDoraPicker}
+ {
+ addUraDoraIndicator(tile);
+ showUraDoraPicker = false;
+ }}
+ onClose={() => (showUraDoraPicker = false)}
+ disabledTiles={doraDisabledTiles}
+ />
+ {/if}
-
- {/if}
-
- {#if akaCount > 0}
-
- {$t.akadoraInHand} {akaCount}
-
- {/if}
-
- {/if}
-
-
- {#if showDoraPicker}
-
{ addDoraIndicator(tile); showDoraPicker = false; }}
- onClose={() => showDoraPicker = false}
- disabledTiles={doraDisabledTiles}
- />
- {/if}
-
-
- {#if showUraDoraPicker}
- { addUraDoraIndicator(tile); showUraDoraPicker = false; }}
- onClose={() => showUraDoraPicker = false}
- disabledTiles={doraDisabledTiles}
- />
- {/if}
-
-
-
-
-
{$t.results}
-
-
-
-
-
-
-
-
{$t.options}
-
-
-
-
-
-
-
- {/if}
-
-
-
+
+
+
{$t.results}
+
+
+
+
+
+
+
+
+
{$t.options}
+
+
+
+
+
+
+