guandan.dev

guandan.dev

https://git.tonybtw.com/guandan.dev.git git://git.tonybtw.com/guandan.dev.git
1,565 bytes raw
1
import { motion, AnimatePresence } from 'framer-motion'
2
import { Card as Card_Type, Rank } from '../game/types'
3
import { Card } from './Card'
4
5
interface Hand_Props {
6
  cards: Card_Type[]
7
  level: Rank
8
  selected_ids: Set<number>
9
  on_card_click: (id: number) => void
10
}
11
12
export function Hand({ cards, level, selected_ids, on_card_click }: Hand_Props) {
13
  const card_width = 70
14
  const overlap = 35
15
16
  return (
17
    <div
18
      style={{
19
        display: 'flex',
20
        justifyContent: 'center',
21
        padding: 20,
22
        minHeight: 140,
23
      }}
24
    >
25
      <div
26
        style={{
27
          display: 'flex',
28
          position: 'relative',
29
          width: cards.length > 0 ? card_width + (cards.length - 1) * overlap : 0,
30
          height: 100,
31
        }}
32
      >
33
        <AnimatePresence>
34
          {cards.map((card, index) => (
35
            <motion.div
36
              key={card.Id}
37
              initial={{ opacity: 0, y: 50, scale: 0.8 }}
38
              animate={{ opacity: 1, y: 0, scale: 1 }}
39
              exit={{ opacity: 0, y: -50, scale: 0.8 }}
40
              transition={{ delay: index * 0.02 }}
41
              style={{
42
                position: 'absolute',
43
                left: index * overlap,
44
                zIndex: index,
45
              }}
46
            >
47
              <Card
48
                card={card}
49
                level={level}
50
                selected={selected_ids.has(card.Id)}
51
                on_click={() => on_card_click(card.Id)}
52
              />
53
            </motion.div>
54
          ))}
55
        </AnimatePresence>
56
      </div>
57
    </div>
58
  )
59
}