BankBar.svelte 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <script lang="ts">
  2. import { BANKS, PER_BANK } from "./slots";
  3. let {
  4. bank,
  5. counts,
  6. what,
  7. onpick,
  8. }: {
  9. bank: number;
  10. counts: number[]; // filled slots per bank
  11. what: string; // "pads filled", "slots used"
  12. onpick: (bank: number) => void;
  13. } = $props();
  14. </script>
  15. <div class="banks" role="group" aria-label="Banks">
  16. {#each BANKS.split("") as letter, i (letter)}
  17. <button
  18. type="button"
  19. class:on={i === bank}
  20. aria-pressed={i === bank}
  21. aria-label="Bank {letter}, {counts[i]} of {PER_BANK} {what}"
  22. onclick={() => onpick(i)}>{letter}</button
  23. >
  24. {/each}
  25. </div>
  26. <style>
  27. .banks {
  28. display: grid;
  29. grid-template-columns: repeat(8, minmax(0, 1fr));
  30. gap: 6px;
  31. }
  32. button {
  33. height: 44px;
  34. padding: 0;
  35. background: var(--raised);
  36. color: var(--text);
  37. border: 1px solid var(--edge);
  38. border-radius: 6px;
  39. font-family: var(--display);
  40. font-size: 15px;
  41. font-weight: 700;
  42. cursor: pointer;
  43. }
  44. button.on {
  45. background: var(--accent);
  46. color: var(--on-accent);
  47. border-color: var(--accent);
  48. }
  49. </style>