UNPKG

@leofavre/memory-game-component

Version:

A memory game web component.

106 lines (89 loc) 2.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _elmnt = require("@leofavre/elmnt"); require("@leofavre/flip-card-component"); var _sequence = _interopRequireDefault(require("../helpers/sequence.js")); var _memoryGameSelectors = require("../state/memoryGameSelectors.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const renderCard = ({ state, handleClick }) => position => { const { name, img } = (0, _memoryGameSelectors.getCardAtPosition)(position, state); const revealed = (0, _memoryGameSelectors.isCardRevealed)(position, state) || (0, _memoryGameSelectors.isCardMatched)(position, state); return _elmnt.html` <flip-card ?revealed=${revealed} @click=${handleClick(position)} class="memory-game--card"> <span class="memory-game--bg"></span> <span class="memory-game--text">${name}</span> <img class="memory-game--media" src="${img}"> </flip-card> `; }; var _default = props => { const interactiveClass = props.state.isInteractive ? ' memory-game--wrapper-interactive' : ''; return _elmnt.html` <style> :host { --flip-card-perspective: none; --flip-card-proportion: 3.5/4.2; --flip-card-border: #91a4a4; --flip-card-border-radius: 2px; --flip-card-background: #aab9b9; display: block; width: 100%; font-family: "Whitney SSm A", "Whitney SSm B", sans-serif; font-style: normal; font-weight: 400; perspective: 1800px; } .memory-game--wrapper { display: grid; grid-template-columns: repeat(var(--memory-game-cards-per-line, 6), 1fr); grid-gap: var(--memory-game-gap, 20px) var(--memory-game-gap, 20px); pointer-events: none; } .memory-game--wrapper-interactive { pointer-events: all; } .memory-game--wrapper-interactive .memory-game--card { cursor: pointer; } .memory-game--media { position: absolute; display: block; top: calc(4% * var(--flip-card-proportion)); left: 4%; width: 92%; height: auto; background: #fff; } .memory-game--text { position: absolute; top: 82.5%; left: 4%; font-size: 12px; } .memory-game--bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #fff; } </style> <div class="memory-game--wrapper${interactiveClass}"> ${(0, _sequence.default)((0, _memoryGameSelectors.getNumberOfCards)(props.state)).map(renderCard(props))} </div> `; }; exports.default = _default;