pacman-contribution-graph 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -388,15 +388,17 @@ const startGame = (store) => __awaiter(void 0, void 0, void 0, function* () {
388
388
  _music_player__WEBPACK_IMPORTED_MODULE_2__.MusicPlayer.getInstance().startDefaultSound();
389
389
  yield _music_player__WEBPACK_IMPORTED_MODULE_2__.MusicPlayer.getInstance().play(_music_player__WEBPACK_IMPORTED_MODULE_2__.Sound.BEGINNING);
390
390
  }
391
- placePacman(store);
392
- placeGhosts(store);
391
+ const remainingCells = () => store.grid.some((row) => row.some((cell) => cell.intensity > 0));
392
+ if (remainingCells()) {
393
+ placePacman(store);
394
+ placeGhosts(store);
395
+ }
393
396
  _constants__WEBPACK_IMPORTED_MODULE_1__.GHOSTS.blinky.img.src = _constants__WEBPACK_IMPORTED_MODULE_1__.GHOSTS.blinky.imgDate;
394
397
  _constants__WEBPACK_IMPORTED_MODULE_1__.GHOSTS.clyde.img.src = _constants__WEBPACK_IMPORTED_MODULE_1__.GHOSTS.clyde.imgDate;
395
398
  _constants__WEBPACK_IMPORTED_MODULE_1__.GHOSTS.inky.img.src = _constants__WEBPACK_IMPORTED_MODULE_1__.GHOSTS.inky.imgDate;
396
399
  _constants__WEBPACK_IMPORTED_MODULE_1__.GHOSTS.pinky.img.src = _constants__WEBPACK_IMPORTED_MODULE_1__.GHOSTS.pinky.imgDate;
397
400
  _constants__WEBPACK_IMPORTED_MODULE_1__.GHOSTS.scared.img.src = _constants__WEBPACK_IMPORTED_MODULE_1__.GHOSTS.scared.imgDate;
398
401
  if (store.config.outputFormat == 'svg') {
399
- const remainingCells = () => store.grid.some((row) => row.some((cell) => cell.intensity > 0));
400
402
  while (remainingCells()) {
401
403
  yield updateGame(store);
402
404
  }
@@ -448,11 +450,7 @@ const updateGame = (store) => __awaiter(void 0, void 0, void 0, function* () {
448
450
  }
449
451
  if (store.config.outputFormat == 'svg') {
450
452
  const animatedSVG = _svg__WEBPACK_IMPORTED_MODULE_3__.SVG.generateAnimatedSVG(store);
451
- const svgBlob = new Blob([animatedSVG], {
452
- type: 'image/svg+xml;charset=utf-8'
453
- });
454
- const svgUrl = URL.createObjectURL(svgBlob);
455
- store.config.svgCallback(svgUrl);
453
+ store.config.svgCallback(animatedSVG);
456
454
  }
457
455
  store.config.gameOverCallback();
458
456
  return;
@@ -642,10 +640,10 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume
642
640
  };
643
641
  var Sound;
644
642
  (function (Sound) {
645
- Sound["DEFAULT"] = "https://cdn.jsdelivr.net/gh/abozanona/pacman-contribution-graph@1.0.2/src/assets/sounds/pacman_chomp.wav";
646
- Sound["BEGINNING"] = "https://cdn.jsdelivr.net/gh/abozanona/pacman-contribution-graph@1.0.2/src/assets/sounds/pacman_beginning.wav";
647
- Sound["GAME_OVER"] = "https://cdn.jsdelivr.net/gh/abozanona/pacman-contribution-graph@1.0.2/src/assets/sounds/pacman_death.wav";
648
- Sound["EAT_GHOST"] = "https://cdn.jsdelivr.net/gh/abozanona/pacman-contribution-graph@1.0.2/src/assets/sounds/pacman_eatghost.wav";
643
+ Sound["DEFAULT"] = "https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_chomp.wav";
644
+ Sound["BEGINNING"] = "https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_beginning.wav";
645
+ Sound["GAME_OVER"] = "https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_death.wav";
646
+ Sound["EAT_GHOST"] = "https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_eatghost.wav";
649
647
  })(Sound || (Sound = {}));
650
648
  class MusicPlayer {
651
649
  constructor() {
@@ -806,6 +804,7 @@ const generateAnimatedSVG = (store) => {
806
804
  const svgWidth = _constants__WEBPACK_IMPORTED_MODULE_0__.GRID_WIDTH * (_constants__WEBPACK_IMPORTED_MODULE_0__.CELL_SIZE + _constants__WEBPACK_IMPORTED_MODULE_0__.GAP_SIZE);
807
805
  const svgHeight = _constants__WEBPACK_IMPORTED_MODULE_0__.GRID_HEIGHT * (_constants__WEBPACK_IMPORTED_MODULE_0__.CELL_SIZE + _constants__WEBPACK_IMPORTED_MODULE_0__.GAP_SIZE) + 20;
808
806
  let svg = `<svg width="${svgWidth}" height="${svgHeight}" xmlns="http://www.w3.org/2000/svg">`;
807
+ svg += `<desc>Generated with https://github.com/abozanona/pacman-contribution-graph</desc>`;
809
808
  svg += `<rect width="100%" height="100%" fill="${_utils__WEBPACK_IMPORTED_MODULE_1__.Utils.getCurrentTheme(store).gridBackground}"/>`;
810
809
  svg += generateGhostsPredefinition();
811
810
  // Month labels
@@ -971,19 +970,40 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume
971
970
  });
972
971
  };
973
972
 
974
- const getGitlabContribution = (username) => __awaiter(void 0, void 0, void 0, function* () {
973
+ const getGitlabContribution = (store) => __awaiter(void 0, void 0, void 0, function* () {
975
974
  // const response = await fetch(`https://gitlab.com/users/${username}/calendar.json`);
976
- const response = yield fetch(`https://v0-new-project-q1hhrdodoye-abozanona-gmailcoms-projects.vercel.app/api/contributions?username=${username}`);
975
+ const response = yield fetch(`https://v0-new-project-q1hhrdodoye-abozanona-gmailcoms-projects.vercel.app/api/contributions?username=${store.config.username}`);
977
976
  const contributionsList = yield response.json();
978
977
  return Object.entries(contributionsList).map(([date, count]) => ({
979
978
  date: new Date(date),
980
979
  count: Number(count)
981
980
  }));
982
981
  });
983
- const getGithubContribution = (username) => __awaiter(void 0, void 0, void 0, function* () {
984
- const response = yield fetch(`https://api.github.com/search/commits?q=author:${username}&sort=author-date&order=desc&page=1&per_page=1000`);
985
- const contributionsList = yield response.json();
986
- return Array.from(contributionsList.items
982
+ const getGithubContribution = (store) => __awaiter(void 0, void 0, void 0, function* () {
983
+ var _a;
984
+ const commits = [];
985
+ let isComplete = false;
986
+ let page = 1;
987
+ // TODO: Consider using GraphQL endpoint when user has an access token?
988
+ do {
989
+ try {
990
+ const headers = {};
991
+ if ((_a = store.config.githubSettings) === null || _a === void 0 ? void 0 : _a.accessToken) {
992
+ headers['Authorization'] = 'Bearer ' + store.config.githubSettings.accessToken;
993
+ }
994
+ const response = yield fetch(`https://api.github.com/search/commits?q=author:${store.config.username}&sort=author-date&order=desc&page=${page}&per_page=1000`, {
995
+ headers
996
+ });
997
+ const contributionsList = yield response.json();
998
+ isComplete = contributionsList.items.length === 0;
999
+ commits.push(...contributionsList.items);
1000
+ page++;
1001
+ }
1002
+ catch (ex) {
1003
+ isComplete = true;
1004
+ }
1005
+ } while (!isComplete);
1006
+ return Array.from(commits
987
1007
  .reduce((map, item) => {
988
1008
  const dateString = item.commit.committer.date.split('T')[0];
989
1009
  const date = new Date(dateString);
@@ -1115,10 +1135,10 @@ class PacmanRenderer {
1115
1135
  this.store.config = Object.assign(Object.assign({}, defaultConfing), this.conf);
1116
1136
  switch (this.conf.platform) {
1117
1137
  case 'gitlab':
1118
- this.store.contributions = yield _utils__WEBPACK_IMPORTED_MODULE_2__.Utils.getGitlabContribution(this.conf.username);
1138
+ this.store.contributions = yield _utils__WEBPACK_IMPORTED_MODULE_2__.Utils.getGitlabContribution(this.store);
1119
1139
  break;
1120
1140
  case 'github':
1121
- this.store.contributions = yield _utils__WEBPACK_IMPORTED_MODULE_2__.Utils.getGithubContribution(this.conf.username);
1141
+ this.store.contributions = yield _utils__WEBPACK_IMPORTED_MODULE_2__.Utils.getGithubContribution(this.store);
1122
1142
  break;
1123
1143
  }
1124
1144
  _game__WEBPACK_IMPORTED_MODULE_0__.Game.startGame(this.store);
@@ -1 +1 @@
1
- {"version":3,"file":"pacman-contribution-graph.js","mappings":"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","sources":["webpack://pacman-contribution-graph/./src/canvas.ts","webpack://pacman-contribution-graph/./src/constants.ts","webpack://pacman-contribution-graph/./src/game.ts","webpack://pacman-contribution-graph/./src/music-player.ts","webpack://pacman-contribution-graph/./src/store.ts","webpack://pacman-contribution-graph/./src/svg.ts","webpack://pacman-contribution-graph/./src/utils.ts","webpack://pacman-contribution-graph/webpack/bootstrap","webpack://pacman-contribution-graph/webpack/runtime/define property getters","webpack://pacman-contribution-graph/webpack/runtime/hasOwnProperty shorthand","webpack://pacman-contribution-graph/webpack/runtime/make namespace object","webpack://pacman-contribution-graph/./src/index.ts"],"sourcesContent":["import { CELL_SIZE, GAP_SIZE, GHOSTS, GRID_HEIGHT, GRID_WIDTH, PACMAN_COLOR, PACMAN_COLOR_DEAD, PACMAN_COLOR_POWERUP } from './constants';\nimport { MusicPlayer } from './music-player';\nimport { StoreType } from './types';\nimport { Utils } from './utils';\n\nconst resizeCanvas = (store: StoreType) => {\n\tconst canvasWidth = GRID_WIDTH * (CELL_SIZE + GAP_SIZE);\n\tconst canvasHeight = GRID_HEIGHT * (CELL_SIZE + GAP_SIZE) + 20; // Adding some space for months on top\n\n\tstore.config.canvas.width = canvasWidth;\n\tstore.config.canvas.height = canvasHeight;\n};\n\nconst drawGrid = (store: StoreType) => {\n\tstore.config.canvas.getContext('2d')!.fillStyle = Utils.getCurrentTheme(store).gridBackground;\n\tstore.config.canvas.getContext('2d')!.fillRect(0, 0, store.config.canvas.width, store.config.canvas.height);\n\n\tfor (let x = 0; x < GRID_HEIGHT; x++) {\n\t\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\t\tconst intensity = store.grid[x][y].intensity;\n\t\t\tif (intensity > 0) {\n\t\t\t\tconst adjustedIntensity = intensity < 0.2 ? 0.3 : intensity;\n\t\t\t\tconst color = Utils.hexToRGBA(Utils.getCurrentTheme(store).contributionBoxColor, adjustedIntensity);\n\t\t\t\tstore.config.canvas.getContext('2d')!.fillStyle = color;\n\t\t\t} else {\n\t\t\t\tstore.config.canvas.getContext('2d')!.fillStyle = Utils.getCurrentTheme(store).emptyContributionBoxColor;\n\t\t\t}\n\t\t\tstore.config.canvas.getContext('2d')!.beginPath();\n\t\t\tstore.config.canvas\n\t\t\t\t.getContext('2d')!\n\t\t\t\t.roundRect(y * (CELL_SIZE + GAP_SIZE), x * (CELL_SIZE + GAP_SIZE) + 15, CELL_SIZE, CELL_SIZE, 5);\n\t\t\tstore.config.canvas.getContext('2d')!.fill();\n\t\t}\n\t}\n\n\tstore.config.canvas.getContext('2d')!.fillStyle = Utils.getCurrentTheme(store).textColor;\n\tstore.config.canvas.getContext('2d')!.font = '10px Arial';\n\tstore.config.canvas.getContext('2d')!.textAlign = 'center';\n\n\tlet lastMonth = '';\n\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\tif (store.monthLabels[y] !== lastMonth) {\n\t\t\tconst xPos = y * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\t\t\tstore.config.canvas.getContext('2d')!.fillText(store.monthLabels[y], xPos, 10);\n\t\t\tlastMonth = store.monthLabels[y];\n\t\t}\n\t}\n};\n\nconst drawPacman = (store: StoreType) => {\n\tconst x = store.pacman.y * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\tconst y = store.pacman.x * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2 + 15;\n\tconst radius = CELL_SIZE / 2;\n\n\t// Change Pac-Man's color to red if he's on power-up, dead, else yellow\n\tif (store.pacman.deadRemainingDuration) {\n\t\tstore.config.canvas.getContext('2d')!.fillStyle = PACMAN_COLOR_DEAD;\n\t} else if (store.pacman.powerupRemainingDuration) {\n\t\tstore.config.canvas.getContext('2d')!.fillStyle = PACMAN_COLOR_POWERUP;\n\t} else {\n\t\tstore.config.canvas.getContext('2d')!.fillStyle = PACMAN_COLOR;\n\t}\n\n\tconst mouthAngle = store.pacmanMouthOpen ? 0.35 * Math.PI : 0.1 * Math.PI;\n\n\tlet startAngle, endAngle;\n\tswitch (store.pacman.direction) {\n\t\tcase 'up':\n\t\t\tstartAngle = 1.5 * Math.PI + mouthAngle;\n\t\t\tendAngle = 1.5 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'down':\n\t\t\tstartAngle = 0.5 * Math.PI + mouthAngle;\n\t\t\tendAngle = 0.5 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'left':\n\t\t\tstartAngle = Math.PI + mouthAngle;\n\t\t\tendAngle = Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'right':\n\t\tdefault:\n\t\t\tstartAngle = 0 + mouthAngle;\n\t\t\tendAngle = 2 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t}\n\n\tstore.config.canvas.getContext('2d')!.beginPath();\n\tstore.config.canvas.getContext('2d')!.arc(x, y, radius, startAngle, endAngle);\n\tstore.config.canvas.getContext('2d')!.lineTo(x, y);\n\tstore.config.canvas.getContext('2d')!.fill();\n};\n\nconst drawGhosts = (store: StoreType) => {\n\tstore.ghosts.forEach((ghost) => {\n\t\tconst x = ghost.y * (CELL_SIZE + GAP_SIZE);\n\t\tconst y = ghost.x * (CELL_SIZE + GAP_SIZE) + 15;\n\t\tconst size = CELL_SIZE;\n\n\t\tconst ctx = store.config.canvas.getContext('2d')!;\n\t\tif (ghost.scared) {\n\t\t\tctx.drawImage(GHOSTS['scared'].img, x, y, size, size);\n\t\t} else {\n\t\t\tctx.drawImage(GHOSTS[ghost.name].img, x, y, size, size);\n\t\t}\n\t});\n};\n\nconst renderGameOver = (store: StoreType) => {\n\tstore.config.canvas.getContext('2d')!.fillStyle = Utils.getCurrentTheme(store).textColor;\n\tstore.config.canvas.getContext('2d')!.font = '20px Arial';\n\tstore.config.canvas.getContext('2d')!.textAlign = 'center';\n\tstore.config.canvas.getContext('2d')!.fillText('Game Over', store.config.canvas.width / 2, store.config.canvas.height / 2);\n};\n\nconst drawSoundController = (store: StoreType) => {\n\tif (!store.config.enableSounds) {\n\t\treturn;\n\t}\n\n\tconst width = 30,\n\t\theight = 30,\n\t\tleft = store.config.canvas.width - width - 10,\n\t\ttop = 10;\n\tstore.config.canvas.getContext('2d')!.fillStyle = `rgba(0, 0, 0, ${MusicPlayer.getInstance().isMuted ? 0.3 : 0.5})`;\n\tstore.config.canvas.getContext('2d')!.beginPath();\n\tstore.config.canvas.getContext('2d')!.moveTo(left + 10, top + 10);\n\tstore.config.canvas.getContext('2d')!.lineTo(left + 20, top + 5);\n\tstore.config.canvas.getContext('2d')!.lineTo(left + 20, top + 25);\n\tstore.config.canvas.getContext('2d')!.lineTo(left + 10, top + 20);\n\tstore.config.canvas.getContext('2d')!.closePath();\n\tstore.config.canvas.getContext('2d')!.fill();\n\n\tif (!MusicPlayer.getInstance().isMuted) {\n\t\tstore.config.canvas.getContext('2d')!.strokeStyle = `rgba(0, 0, 0, 0.4)`;\n\t\tstore.config.canvas.getContext('2d')!.lineWidth = 2;\n\n\t\t// First wave\n\t\tstore.config.canvas.getContext('2d')!.beginPath();\n\t\tstore.config.canvas.getContext('2d')!.arc(left + 25, top + 15, 5, 0, Math.PI * 2);\n\t\tstore.config.canvas.getContext('2d')!.stroke();\n\n\t\t// Second wave\n\t\tstore.config.canvas.getContext('2d')!.beginPath();\n\t\tstore.config.canvas.getContext('2d')!.arc(left + 25, top + 15, 8, 0, Math.PI * 2);\n\t\tstore.config.canvas.getContext('2d')!.stroke();\n\t} else {\n\t\t// Mute line\n\t\tstore.config.canvas.getContext('2d')!.strokeStyle = 'rgba(255, 0, 0, 0.6)';\n\t\tstore.config.canvas.getContext('2d')!.lineWidth = 3;\n\t\tstore.config.canvas.getContext('2d')!.beginPath();\n\t\tstore.config.canvas.getContext('2d')!.moveTo(left + 25, top + 5);\n\t\tstore.config.canvas.getContext('2d')!.lineTo(left + 5, top + 25);\n\t\tstore.config.canvas.getContext('2d')!.stroke();\n\t}\n};\n\nconst listenToSoundController = (store: StoreType) => {\n\tif (!store.config.enableSounds) {\n\t\treturn;\n\t}\n\tstore.config.canvas.addEventListener('click', function (event) {\n\t\tconst rect = store.config.canvas.getBoundingClientRect();\n\t\tconst x = event.clientX - rect.left,\n\t\t\ty = event.clientY - rect.top;\n\t\tconst width = 30,\n\t\t\theight = 30,\n\t\t\tleft = store.config.canvas.width - width - 10,\n\t\t\ttop = 10;\n\n\t\tif (x >= left && x <= left + this.width && y >= top && y <= top + this.height) {\n\t\t\tif (MusicPlayer.getInstance().isMuted) {\n\t\t\t\tMusicPlayer.getInstance().unmute();\n\t\t\t} else {\n\t\t\t\tMusicPlayer.getInstance().mute();\n\t\t\t}\n\t\t}\n\t});\n};\n\nexport const Canvas = {\n\tresizeCanvas,\n\tdrawGrid,\n\tdrawPacman,\n\tdrawGhosts,\n\trenderGameOver,\n\tdrawSoundController,\n\tlistenToSoundController\n};\n","import { GameTheme, GhostName, ThemeKeys } from './types';\n\nexport const CELL_SIZE = 20;\nexport const GAP_SIZE = 2;\nexport const GRID_WIDTH = 52;\nexport const GRID_HEIGHT = 7;\nexport const PACMAN_COLOR = 'yellow';\nexport const PACMAN_COLOR_POWERUP = 'red';\nexport const PACMAN_COLOR_DEAD = '#80808064';\nexport const GHOST_NAMES: GhostName[] = ['blinky', 'clyde', 'inky', 'pinky'];\nexport const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nexport const DELTA_TIME = 250;\nexport const PACMAN_DEATH_DURATION = 10;\nexport const PACMAN_POWERUP_DURATION = 15;\nexport const GAME_THEMES: { [key in ThemeKeys]: GameTheme } = {\n\tgithub: {\n\t\ttextColor: '#586069',\n\t\tgridBackground: '#ffffff',\n\t\tcontributionBoxColor: '#9be9a8',\n\t\temptyContributionBoxColor: '#ebedf0'\n\t},\n\t'github-dark': {\n\t\ttextColor: '#8b949e',\n\t\tgridBackground: '#0d1117',\n\t\tcontributionBoxColor: '#26a641',\n\t\temptyContributionBoxColor: '#161b22'\n\t},\n\tgitlab: {\n\t\ttextColor: '#626167',\n\t\tgridBackground: '#ffffff',\n\t\tcontributionBoxColor: '#7992f5',\n\t\temptyContributionBoxColor: '#ececef'\n\t},\n\t'gitlab-dark': {\n\t\ttextColor: '#999999',\n\t\tgridBackground: '#1f1f1f',\n\t\tcontributionBoxColor: '#2e7db1',\n\t\temptyContributionBoxColor: '#2d2d2d'\n\t}\n};\nexport const GHOSTS: { [key in GhostName | 'scared']: { imgDate: string; img: HTMLImageElement } } = {\n\tblinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAfUlEQVQ4T+2TUQ7AIAhDy/0PzQIRAqxmLtnn/DJPWypBAVkKKOMCyOQN7IRElLrcnIrDLNK4wVtxNbkb6Hq+jOcSbim6QVzKEstkw92gxVeFrMpqokix4wA+NvCOnvfArvcEbHoe2G9QmmhDMUc65p3xYC6q3zQPxtdl3NgF5QpL/b/rs3IAAAAASUVORK5CYIIA',\n\t\timg: new Image()\n\t},\n\tclyde: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgUlEQVQ4T+2T0Q6AIAhFLx9sH1MfTIPCAeLKrcd8PHqP4JBQLN7BFacNlHkAs+AQcqIueBs2mVWjgtWwl4yCdrd/pHYLLlVEgR2yK0wy4SoI5TcGXU4wM+AEJQfwsUCuXngDOR4rqKbngf0C94gyFHmkbd4rbkxD/pv2jfR1Ky7sBNrzXbHpnBX+AAAAAElFTkSuQmCC',\n\t\timg: new Image()\n\t},\n\tinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAg0lEQVQ4T+WTWxKAIAhFuQvK/a+jFoT5QAVxypn+6vMEx6sDIO/jk12OAMs1WDVOXV3UBW+bRVbTFMFu8yCZBExH/g26VHCXI0AJpKgdUCUrTlkwxE+FECdzS7HiJemXgvyeO29gE7jD8wDVFX4vSLNtR1q2z+OVlaZxTaXYrq7HbxYBS8VgMVrqzkEAAAAASUVORK5CYIIA',\n\t\timg: new Image()\n\t},\n\tpinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4T+2T0Q2AIAwF281wC50Qt9DNagoptqVESfyUz4N3vJCCECxaD4o47gt6bsAo2IWUqAnehkUmbYpgNqwlvSCnur+dtnnAuYUVyCGJimTAi8DUzwmwOoGI7hYjDgAfC/jqiTfg47ZBND0P7BeoR+Sh8CMt8x5xYSWkv2nbcF834swuA/9u49Yy5bgAAAAASUVORK5CYIIA',\n\t\timg: new Image()\n\t},\n\tscared: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeUlEQVQ4T82TUQ6AMAhD7UX0/sdyF0GREVmDmTN+bH9r6Bs0A0t2VpFULwDrrfBkZFcA3YC3ZodViAFGzQHyP0B2w2NrB0/1AoDbHwLoQ5/nrw1OBuD5e/crbM9Aiz35njHWzpSB/m3+0r40mV41M8U19WJe3Uw/tQOKt08pUUbBEQAAAABJRU5ErkJgggAA',\n\t\timg: new Image()\n\t}\n};\n","import { Canvas } from './canvas';\nimport {\n\tDELTA_TIME,\n\tGHOST_NAMES,\n\tGHOSTS,\n\tGRID_HEIGHT,\n\tGRID_WIDTH,\n\tMONTHS,\n\tPACMAN_DEATH_DURATION,\n\tPACMAN_POWERUP_DURATION\n} from './constants';\nimport { MusicPlayer, Sound } from './music-player';\nimport { SVG } from './svg';\nimport { StoreType } from './types';\n\nconst initializeGrid = (store: StoreType) => {\n\tstore.pacman.points = 0;\n\tstore.pacman.totalPoints = 0;\n\tstore.grid = Array.from({ length: GRID_HEIGHT }, () => Array.from({ length: GRID_WIDTH }, () => ({ commitsCount: 0, intensity: 0 })));\n\tstore.monthLabels = Array(GRID_WIDTH).fill('');\n\tlet maxCommits = 1;\n\n\tconst now = new Date();\n\tconst startOfCurrentWeek = new Date(now);\n\tstartOfCurrentWeek.setDate(now.getDate() - now.getDay());\n\n\tstore.contributions.forEach((contribution) => {\n\t\tconst contributionDate = new Date(contribution.date);\n\t\tconst dayOfWeek = contributionDate.getDay();\n\t\tconst weeksAgo = Math.floor((+startOfCurrentWeek - +contributionDate) / (1000 * 60 * 60 * 24 * 7));\n\n\t\tif (weeksAgo >= 0 && weeksAgo < GRID_WIDTH && dayOfWeek >= 0 && dayOfWeek < GRID_HEIGHT) {\n\t\t\tstore.grid[dayOfWeek][GRID_WIDTH - 1 - weeksAgo] = { commitsCount: contribution.count, intensity: 0 };\n\t\t\tif (contribution.count > maxCommits) maxCommits = contribution.count;\n\t\t}\n\t});\n\n\tfor (let x = 0; x < GRID_HEIGHT; x++) {\n\t\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\t\tif (store.grid[x][y].commitsCount > 0) {\n\t\t\t\tstore.grid[x][y].intensity = store.grid[x][y].commitsCount / maxCommits;\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\tconst weeksAgo = GRID_WIDTH - 1 - y;\n\t\tconst columnDate = new Date(startOfCurrentWeek);\n\t\tcolumnDate.setDate(columnDate.getDate() - weeksAgo * 7);\n\t\tstore.monthLabels[y] = MONTHS[columnDate.getMonth()];\n\t}\n};\n\nconst placePacman = (store: StoreType) => {\n\tlet validCells = [];\n\tfor (let x = 0; x < GRID_HEIGHT; x++) {\n\t\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\t\tif (store.grid[x][y].intensity > 0) validCells.push({ x, y });\n\t\t}\n\t}\n\tif (validCells.length > 0) {\n\t\tconst randomCell = validCells[Math.floor(Math.random() * validCells.length)];\n\t\tstore.pacman = {\n\t\t\tx: randomCell.x,\n\t\t\ty: randomCell.y,\n\t\t\tdirection: 'right',\n\t\t\tpoints: 0,\n\t\t\ttotalPoints: 0,\n\t\t\tdeadRemainingDuration: 0,\n\t\t\tpowerupRemainingDuration: 0\n\t\t};\n\t}\n\tif (store.config.outputFormat == 'canvas') Canvas.drawPacman(store);\n};\n\nconst placeGhosts = (store: StoreType) => {\n\tstore.ghosts = [];\n\tstore.scaredGhostsDestinations = [];\n\tfor (let i = 0; i < 4; i++) {\n\t\tlet x, y;\n\t\tdo {\n\t\t\tx = Math.floor(Math.random() * GRID_HEIGHT);\n\t\t\ty = Math.floor(Math.random() * GRID_WIDTH);\n\t\t} while (store.grid[x][y].intensity === 0);\n\t\tstore.ghosts.push({ x, y, name: GHOST_NAMES[i], scared: false, target: undefined });\n\t\tstore.scaredGhostsDestinations.push({ x: 0, y: 0 });\n\t}\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGhosts(store);\n};\n\nconst stopGame = async (store: StoreType) => {\n\tclearInterval(store.gameInterval);\n};\n\nconst startGame = async (store: StoreType) => {\n\tif (store.config.outputFormat == 'canvas') {\n\t\tstore.config.canvas = store.config.canvas;\n\t\tCanvas.resizeCanvas(store);\n\t\tCanvas.listenToSoundController(store);\n\t}\n\n\tstore.frameCount = 0;\n\tstore.ghosts.forEach((ghost) => (ghost.scared = false));\n\n\tinitializeGrid(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGrid(store);\n\n\tif (store.config.outputFormat == 'canvas') {\n\t\tif (!store.config.enableSounds) {\n\t\t\tMusicPlayer.getInstance().mute();\n\t\t}\n\t\tawait MusicPlayer.getInstance().preloadSounds();\n\t\tMusicPlayer.getInstance().startDefaultSound();\n\t\tawait MusicPlayer.getInstance().play(Sound.BEGINNING);\n\t}\n\n\tplacePacman(store);\n\tplaceGhosts(store);\n\n\tGHOSTS.blinky.img.src = GHOSTS.blinky.imgDate;\n\tGHOSTS.clyde.img.src = GHOSTS.clyde.imgDate;\n\tGHOSTS.inky.img.src = GHOSTS.inky.imgDate;\n\tGHOSTS.pinky.img.src = GHOSTS.pinky.imgDate;\n\tGHOSTS.scared.img.src = GHOSTS.scared.imgDate;\n\n\tif (store.config.outputFormat == 'svg') {\n\t\tconst remainingCells = () => store.grid.some((row) => row.some((cell) => cell.intensity > 0));\n\t\twhile (remainingCells()) {\n\t\t\tawait updateGame(store);\n\t\t}\n\t\t// One more time to generate svg\n\t\tawait updateGame(store);\n\t} else {\n\t\tclearInterval(store.gameInterval);\n\t\tstore.gameInterval = setInterval(async () => await updateGame(store), DELTA_TIME);\n\t}\n};\n\nconst updateGame = async (store: StoreType) => {\n\tstore.frameCount++;\n\tif (store.frameCount % store.config.gameSpeed !== 0) {\n\t\tstore.gameHistory.push({\n\t\t\tpacman: { ...store.pacman },\n\t\t\tghosts: store.ghosts.map((ghost) => ({ ...ghost })),\n\t\t\tgrid: store.grid.map((row) => [...row.map((col) => col.intensity)])\n\t\t});\n\t\treturn;\n\t}\n\n\tif (store.pacman.deadRemainingDuration) {\n\t\tstore.pacman.deadRemainingDuration--;\n\t\tif (!store.pacman.deadRemainingDuration) {\n\t\t\t// IT'S ALIVE!\n\t\t\tif (store.config.outputFormat == 'canvas')\n\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t.play(Sound.GAME_OVER)\n\t\t\t\t\t.then(() => MusicPlayer.getInstance().startDefaultSound());\n\t\t}\n\t}\n\n\tif (store.pacman.powerupRemainingDuration) {\n\t\tstore.pacman.powerupRemainingDuration--;\n\t\tif (!store.pacman.powerupRemainingDuration) {\n\t\t\tstore.ghosts.forEach((ghost) => (ghost.scared = false));\n\t\t\tstore.pacman.points = 0;\n\t\t}\n\t}\n\n\tconst remainingCells = store.grid.some((row) => row.some((cell) => cell.intensity > 0));\n\tif (!remainingCells) {\n\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\tclearInterval(store.gameInterval);\n\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\tCanvas.renderGameOver(store);\n\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t.play(Sound.BEGINNING)\n\t\t\t\t\t.then(() => MusicPlayer.getInstance().stopDefaultSound());\n\t\t\t}\n\t\t}\n\n\t\tif (store.config.outputFormat == 'svg') {\n\t\t\tconst animatedSVG = SVG.generateAnimatedSVG(store);\n\t\t\tconst svgBlob = new Blob([animatedSVG], {\n\t\t\t\ttype: 'image/svg+xml;charset=utf-8'\n\t\t\t});\n\t\t\tconst svgUrl = URL.createObjectURL(svgBlob);\n\t\t\tstore.config.svgCallback(svgUrl);\n\t\t}\n\n\t\tstore.config.gameOverCallback();\n\t\treturn;\n\t}\n\n\tmovePacman(store);\n\tmoveGhosts(store);\n\tcheckCollisions(store);\n\n\tstore.pacmanMouthOpen = !store.pacmanMouthOpen;\n\n\tstore.gameHistory.push({\n\t\tpacman: { ...store.pacman },\n\t\tghosts: store.ghosts.map((ghost) => ({ ...ghost })),\n\t\tgrid: store.grid.map((row) => [...row.map((col) => col.intensity)])\n\t});\n\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGrid(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawPacman(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGhosts(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawSoundController(store);\n};\n\nconst movePacman = (store: StoreType) => {\n\tif (store.pacman.deadRemainingDuration) {\n\t\treturn;\n\t}\n\tlet targetCells: { x: number; y: number; distance: number }[] = [];\n\n\tif (store.pacman.powerupRemainingDuration) {\n\t\ttargetCells = store.ghosts.map((ghost) => ({\n\t\t\tx: ghost.x,\n\t\t\ty: ghost.y,\n\t\t\tdistance: Infinity\n\t\t}));\n\t} else {\n\t\tfor (let x = 0; x < GRID_HEIGHT; x++) {\n\t\t\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\t\t\tif (store.grid[x][y].intensity > 0) targetCells.push({ x, y, distance: Infinity });\n\t\t\t}\n\t\t}\n\t}\n\n\tif (targetCells.length === 0) return;\n\n\tconst closest = targetCells.reduce(\n\t\t(closest, cell) => {\n\t\t\tconst distance = Math.abs(cell.x - store.pacman.x) + Math.abs(cell.y - store.pacman.y);\n\t\t\treturn distance < closest.distance ? { ...cell, distance } : closest;\n\t\t},\n\t\t{ x: store.pacman.x, y: store.pacman.y, distance: Infinity }\n\t);\n\n\tconst dx = closest.x - store.pacman.x;\n\tconst dy = closest.y - store.pacman.y;\n\n\tif (Math.abs(dx) > Math.abs(dy)) {\n\t\tstore.pacman.x += Math.sign(dx);\n\t\tstore.pacman.direction = dx > 0 ? 'down' : 'up';\n\t} else {\n\t\tstore.pacman.y += Math.sign(dy);\n\t\tstore.pacman.direction = dy > 0 ? 'right' : 'left';\n\t}\n\n\tif (store.grid[store.pacman.x][store.pacman.y].intensity > 0) {\n\t\tstore.pacman.totalPoints += store.grid[store.pacman.x][store.pacman.y].commitsCount;\n\t\tstore.pacman.points++;\n\t\tstore.config.pointsIncreasedCallback(store.pacman.totalPoints);\n\t\tstore.grid[store.pacman.x][store.pacman.y].intensity = 0;\n\n\t\tif (store.pacman.points >= 30) activatePowerUp(store);\n\t}\n};\n\nconst moveGhosts = (store: StoreType) => {\n\tstore.ghosts.forEach((ghost, index) => {\n\t\tif (ghost.scared) {\n\t\t\tif (!ghost.target) {\n\t\t\t\tghost.target = getRandomDestination(ghost.x, ghost.y);\n\t\t\t}\n\n\t\t\tconst dx = ghost.target.x - ghost.x;\n\t\t\tconst dy = ghost.target.y - ghost.y;\n\t\t\tconst moveX = Math.abs(dx) > Math.abs(dy) ? Math.sign(dx) : 0;\n\t\t\tconst moveY = Math.abs(dy) >= Math.abs(dx) ? Math.sign(dy) : 0;\n\n\t\t\tconst newX = ghost.x + moveX;\n\t\t\tconst newY = ghost.y + moveY;\n\n\t\t\tif (newX >= 0 && newX < GRID_HEIGHT && newY >= 0 && newY < GRID_WIDTH) {\n\t\t\t\tghost.x = newX;\n\t\t\t\tghost.y = newY;\n\t\t\t}\n\n\t\t\tif (ghost.x === ghost.target.x && ghost.y === ghost.target.y) {\n\t\t\t\tghost.target = getRandomDestination(ghost.x, ghost.y);\n\t\t\t}\n\t\t} else {\n\t\t\tconst directions = [\n\t\t\t\t[-1, 0],\n\t\t\t\t[1, 0],\n\t\t\t\t[0, -1],\n\t\t\t\t[0, 1]\n\t\t\t];\n\t\t\tconst [dx, dy] = directions[Math.floor(Math.random() * directions.length)];\n\n\t\t\t// If Pacman has the power-up, ghosts move slower (move every other frame)\n\t\t\tif (store.pacman.powerupRemainingDuration && Math.random() < 0.5) return;\n\n\t\t\tconst newX = ghost.x + dx;\n\t\t\tconst newY = ghost.y + dy;\n\n\t\t\tif (newX >= 0 && newX < GRID_HEIGHT && newY >= 0 && newY < GRID_WIDTH) {\n\t\t\t\tghost.x = newX;\n\t\t\t\tghost.y = newY;\n\t\t\t}\n\t\t}\n\t});\n};\n\nconst getRandomDestination = (x: number, y: number) => {\n\tconst maxDistance = 10;\n\tconst randomX = x + Math.floor(Math.random() * (2 * maxDistance + 1)) - maxDistance;\n\tconst randomY = y + Math.floor(Math.random() * (2 * maxDistance + 1)) - maxDistance;\n\treturn {\n\t\tx: Math.max(0, Math.min(randomX, GRID_HEIGHT - 1)),\n\t\ty: Math.max(0, Math.min(randomY, GRID_WIDTH - 1))\n\t};\n};\n\nconst checkCollisions = (store: StoreType) => {\n\tif (store.pacman.deadRemainingDuration) return;\n\n\tstore.ghosts.forEach((ghost, index) => {\n\t\tif (ghost.x === store.pacman.x && ghost.y === store.pacman.y) {\n\t\t\tif (store.pacman.powerupRemainingDuration && ghost.scared) {\n\t\t\t\trespawnGhost(store, index);\n\t\t\t\tstore.pacman.points += 10;\n\t\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\t\tMusicPlayer.getInstance().play(Sound.EAT_GHOST);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstore.pacman.points = 0;\n\t\t\t\tstore.pacman.powerupRemainingDuration = 0;\n\t\t\t\tstore.pacman.deadRemainingDuration = PACMAN_DEATH_DURATION;\n\t\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t\t.play(Sound.GAME_OVER)\n\t\t\t\t\t\t.then(() => MusicPlayer.getInstance().stopDefaultSound());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\nconst respawnGhost = (store: StoreType, ghostIndex: number) => {\n\tlet x, y;\n\tdo {\n\t\tx = Math.floor(Math.random() * GRID_HEIGHT);\n\t\ty = Math.floor(Math.random() * GRID_WIDTH);\n\t} while ((Math.abs(x - store.pacman.x) <= 2 && Math.abs(y - store.pacman.y) <= 2) || store.grid[x][y].intensity === 0);\n\tstore.ghosts[ghostIndex] = {\n\t\tx,\n\t\ty,\n\t\tname: GHOST_NAMES[ghostIndex % GHOST_NAMES.length],\n\t\tscared: false,\n\t\ttarget: undefined\n\t};\n};\n\nconst activatePowerUp = (store: StoreType) => {\n\tstore.pacman.powerupRemainingDuration = PACMAN_POWERUP_DURATION;\n\tstore.ghosts.forEach((ghost) => (ghost.scared = true));\n};\n\nexport const Game = {\n\tstartGame,\n\tstopGame\n};\n","export enum Sound {\n\tDEFAULT = 'https://cdn.jsdelivr.net/gh/abozanona/pacman-contribution-graph@1.0.2/src/assets/sounds/pacman_chomp.wav',\n\tBEGINNING = 'https://cdn.jsdelivr.net/gh/abozanona/pacman-contribution-graph@1.0.2/src/assets/sounds/pacman_beginning.wav',\n\tGAME_OVER = 'https://cdn.jsdelivr.net/gh/abozanona/pacman-contribution-graph@1.0.2/src/assets/sounds/pacman_death.wav',\n\tEAT_GHOST = 'https://cdn.jsdelivr.net/gh/abozanona/pacman-contribution-graph@1.0.2/src/assets/sounds/pacman_eatghost.wav'\n}\n\nexport class MusicPlayer {\n\tprivate static instance: MusicPlayer;\n\tprivate audioContext: AudioContext;\n\tprivate sounds: Map<Sound, AudioBuffer> = new Map();\n\tprivate currentSource: AudioBufferSourceNode | null = null;\n\tprivate defaultSource: AudioBufferSourceNode | null = null;\n\tpublic isMuted: boolean = false;\n\n\tprivate constructor() {\n\t\tthis.audioContext = new AudioContext();\n\t}\n\n\tpublic static getInstance(): MusicPlayer {\n\t\tif (!MusicPlayer.instance) {\n\t\t\tMusicPlayer.instance = new MusicPlayer();\n\t\t}\n\t\treturn MusicPlayer.instance;\n\t}\n\n\tpublic async preloadSounds(): Promise<void> {\n\t\tfor (const sound of Object.values(Sound)) {\n\t\t\tconst response = await fetch(sound);\n\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\tconst audioBuffer = await this.audioContext.decodeAudioData(arrayBuffer);\n\t\t\tthis.sounds.set(sound as Sound, audioBuffer);\n\t\t}\n\t}\n\n\tpublic async play(sound: Sound): Promise<void> {\n\t\tif (this.isMuted) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.currentSource) {\n\t\t\ttry {\n\t\t\t\tthis.currentSource.stop();\n\t\t\t} catch (ex) {}\n\t\t}\n\n\t\tconst buffer = this.sounds.get(sound);\n\t\tif (!buffer) {\n\t\t\tconsole.error(`Sound ${sound} not found`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.currentSource = this.audioContext.createBufferSource();\n\t\tthis.currentSource.buffer = buffer;\n\t\tthis.currentSource.connect(this.audioContext.destination);\n\n\t\tif (!this.isMuted) {\n\t\t\tthis.currentSource.start();\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.currentSource!.onended = () => {\n\t\t\t\tthis.currentSource = null;\n\t\t\t\tresolve();\n\t\t\t};\n\t\t});\n\t}\n\n\tpublic startDefaultSound(): void {\n\t\tif (this.defaultSource) {\n\t\t\ttry {\n\t\t\t\tthis.defaultSource.stop();\n\t\t\t} catch (ex) {}\n\t\t}\n\n\t\tconst buffer = this.sounds.get(Sound.DEFAULT);\n\t\tif (!buffer) {\n\t\t\tconsole.error('Default sound not found');\n\t\t\treturn;\n\t\t}\n\n\t\tthis.defaultSource = this.audioContext.createBufferSource();\n\t\tthis.defaultSource.buffer = buffer;\n\t\tthis.defaultSource.loop = true;\n\t\tthis.defaultSource.connect(this.audioContext.destination);\n\n\t\tif (!this.isMuted) {\n\t\t\tthis.defaultSource.start();\n\t\t}\n\t}\n\n\tpublic stopDefaultSound(): void {\n\t\tif (this.defaultSource) {\n\t\t\ttry {\n\t\t\t\tthis.defaultSource.stop();\n\t\t\t} catch (ex) {}\n\t\t\tthis.defaultSource = null;\n\t\t}\n\t}\n\n\tpublic mute(): void {\n\t\tthis.isMuted = true;\n\t\tif (this.currentSource) {\n\t\t\tthis.currentSource.disconnect();\n\t\t}\n\t\tif (this.defaultSource) {\n\t\t\tthis.defaultSource.disconnect();\n\t\t}\n\t}\n\n\tpublic unmute(): void {\n\t\tthis.isMuted = false;\n\t\tif (this.currentSource) {\n\t\t\tthis.currentSource.connect(this.audioContext.destination);\n\t\t}\n\t\tif (this.defaultSource) {\n\t\t\tthis.defaultSource.connect(this.audioContext.destination);\n\t\t}\n\t}\n}\n","import type { Config, StoreType } from './types';\n\nexport const Store: StoreType = {\n\tframeCount: 0,\n\tcontributions: [],\n\tpacman: {\n\t\tx: 0,\n\t\ty: 0,\n\t\tdirection: 'right',\n\t\tpoints: 0,\n\t\ttotalPoints: 0,\n\t\tdeadRemainingDuration: 0,\n\t\tpowerupRemainingDuration: 0\n\t},\n\tghosts: [],\n\tgrid: [],\n\tmonthLabels: [],\n\tpacmanMouthOpen: true,\n\tgameInterval: 0,\n\tscaredGhostsDestinations: [],\n\tgameHistory: [],\n\tconfig: undefined as unknown as Config\n};\n","import { CELL_SIZE, GAP_SIZE, GHOSTS, GRID_HEIGHT, GRID_WIDTH, PACMAN_COLOR, PACMAN_COLOR_DEAD, PACMAN_COLOR_POWERUP } from './constants';\nimport { StoreType } from './types';\nimport { Utils } from './utils';\n\nconst generateAnimatedSVG = (store: StoreType) => {\n\tconst svgWidth = GRID_WIDTH * (CELL_SIZE + GAP_SIZE);\n\tconst svgHeight = GRID_HEIGHT * (CELL_SIZE + GAP_SIZE) + 20;\n\tlet svg = `<svg width=\"${svgWidth}\" height=\"${svgHeight}\" xmlns=\"http://www.w3.org/2000/svg\">`;\n\tsvg += `<rect width=\"100%\" height=\"100%\" fill=\"${Utils.getCurrentTheme(store).gridBackground}\"/>`;\n\n\tsvg += generateGhostsPredefinition();\n\n\t// Month labels\n\tlet lastMonth = '';\n\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\tif (store.monthLabels[y] !== lastMonth) {\n\t\t\tconst xPos = y * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\t\t\tsvg += `<text x=\"${xPos}\" y=\"10\" text-anchor=\"middle\" font-size=\"10\" fill=\"${Utils.getCurrentTheme(store).textColor}\">${store.monthLabels[y]}</text>`;\n\t\t\tlastMonth = store.monthLabels[y];\n\t\t}\n\t}\n\n\t// Grid\n\tfor (let x = 0; x < GRID_HEIGHT; x++) {\n\t\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\t\tconst cellX = y * (CELL_SIZE + GAP_SIZE);\n\t\t\tconst cellY = x * (CELL_SIZE + GAP_SIZE) + 15;\n\t\t\tconst intensity = store.gameHistory[0].grid[x][y];\n\t\t\tconst color = intensity > 0 ? getContributionColor(store, intensity) : Utils.getCurrentTheme(store).emptyContributionBoxColor;\n\t\t\tsvg += `<rect id=\"cell-${x}-${y}\" x=\"${cellX}\" y=\"${cellY}\" width=\"${CELL_SIZE}\" height=\"${CELL_SIZE}\" rx=\"5\" fill=\"${color}\">\n <animate attributeName=\"fill\" dur=\"${store.gameHistory.length * 300}ms\" repeatCount=\"indefinite\" \n values=\"${generateCellColorValues(store, x, y)}\" \n keyTimes=\"${generateKeyTimes(store)}\"/>\n </rect>`;\n\t\t}\n\t}\n\n\t// Pacman\n\tsvg += `<path id=\"pacman\" d=\"${generatePacManPath(0.35)}\"\n transform=\"translate(${store.pacman.y * (CELL_SIZE + GAP_SIZE)}, ${store.pacman.x * (CELL_SIZE + GAP_SIZE) + 15})\">\n\t\t<animate attributeName=\"fill\" dur=\"${store.gameHistory.length * 300}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${generateKeyTimes(store)}\"\n values=\"${generatePacManColors(store)}\"/>\n <animateTransform attributeName=\"transform\" type=\"translate\" dur=\"${store.gameHistory.length * 300}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${generateKeyTimes(store)}\"\n values=\"${generatePacManPositions(store)}\"/>\n <animate attributeName=\"d\" dur=\"0.2s\" repeatCount=\"indefinite\"\n values=\"${generatePacManPath(0.25)};${generatePacManPath(0.05)};${generatePacManPath(0.25)}\"/>\n </path>`;\n\n\t// Ghosts\n\tstore.ghosts.forEach((ghost, index) => {\n\t\tsvg += `<use id=\"ghost${index}\" width=\"${CELL_SIZE}\" height=\"${CELL_SIZE}\" href=\"#ghost-${ghost.name}\">\n <animateTransform attributeName=\"transform\" type=\"translate\" dur=\"${store.gameHistory.length * 300}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${generateKeyTimes(store)}\"\n values=\"${generateGhostPositions(store, index)}\"/>\n <animate attributeName=\"href\" dur=\"${store.gameHistory.length * 300}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${generateKeyTimes(store)}\"\n values=\"${generateGhostColors(store, index)}\"/>\n </use>`;\n\t});\n\n\tsvg += '</svg>';\n\t// TODO: minify SVG\n\treturn svg;\n};\n\nconst generatePacManPath = (mouthAngle: number) => {\n\tconst radius = CELL_SIZE / 2;\n\tconst startAngle = mouthAngle;\n\tconst endAngle = 2 * Math.PI - mouthAngle;\n\n\treturn `M ${radius},${radius}\n L ${radius + radius * Math.cos(startAngle)},${radius + radius * Math.sin(startAngle)}\n A ${radius},${radius} 0 1,1 ${radius + radius * Math.cos(endAngle)},${radius + radius * Math.sin(endAngle)}\n Z`;\n};\n\nconst generateKeyTimes = (store: StoreType) => {\n\treturn store.gameHistory.map((_, index) => index / (store.gameHistory.length - 1)).join(';');\n};\n\nconst generatePacManPositions = (store: StoreType) => {\n\treturn store.gameHistory\n\t\t.map((state) => {\n\t\t\tconst x = state.pacman.y * (CELL_SIZE + GAP_SIZE);\n\t\t\tconst y = state.pacman.x * (CELL_SIZE + GAP_SIZE) + 15;\n\t\t\treturn `${x},${y}`;\n\t\t})\n\t\t.join(';');\n};\n\nconst generatePacManColors = (store: StoreType) => {\n\treturn store.gameHistory\n\t\t.map((state) => {\n\t\t\tif (state.pacman.deadRemainingDuration) {\n\t\t\t\treturn PACMAN_COLOR_DEAD;\n\t\t\t} else if (state.pacman.powerupRemainingDuration) {\n\t\t\t\treturn PACMAN_COLOR_POWERUP;\n\t\t\t} else {\n\t\t\t\treturn PACMAN_COLOR;\n\t\t\t}\n\t\t})\n\t\t.join(';');\n};\n\nconst generateCellColorValues = (store: StoreType, x: number, y: number) => {\n\treturn store.gameHistory\n\t\t.map((state) => {\n\t\t\tconst intensity = state.grid[x][y];\n\t\t\treturn intensity > 0 ? getContributionColor(store, intensity) : Utils.getCurrentTheme(store).emptyContributionBoxColor;\n\t\t})\n\t\t.join(';');\n};\n\nconst getContributionColor = (store: StoreType, intensity: number) => {\n\tconst adjustedIntensity = intensity < 0.2 ? 0.3 : intensity;\n\treturn Utils.hexToRGBA(Utils.getCurrentTheme(store).contributionBoxColor, adjustedIntensity);\n};\n\nconst generateGhostPositions = (store: StoreType, ghostIndex: number) => {\n\treturn store.gameHistory\n\t\t.map((state) => {\n\t\t\tconst ghost = state.ghosts[ghostIndex];\n\t\t\tconst x = ghost.y * (CELL_SIZE + GAP_SIZE);\n\t\t\tconst y = ghost.x * (CELL_SIZE + GAP_SIZE) + 15;\n\t\t\treturn `${x},${y}`;\n\t\t})\n\t\t.join(';');\n};\n\nconst generateGhostColors = (store: StoreType, ghostIndex: number) => {\n\treturn store.gameHistory\n\t\t.map((state) => {\n\t\t\tconst ghost = state.ghosts[ghostIndex];\n\t\t\treturn ghost.scared ? '#scared' : '#' + ghost.name;\n\t\t})\n\t\t.join(';');\n};\n\nconst generateGhostsPredefinition = () => {\n\treturn `<defs>\n\t\t<symbol id=\"blinky\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['blinky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"clyde\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['clyde'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"inky\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['inky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"pinky\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['pinky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"scared\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['scared'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t</defs>`;\n};\n\nexport const SVG = {\n\tgenerateAnimatedSVG\n};\n","import { GAME_THEMES } from './constants';\nimport type { Contribution, GameTheme, StoreType } from './types';\n\nconst getGitlabContribution = async (username: string): Promise<Contribution[]> => {\n\t// const response = await fetch(`https://gitlab.com/users/${username}/calendar.json`);\n\tconst response = await fetch(\n\t\t`https://v0-new-project-q1hhrdodoye-abozanona-gmailcoms-projects.vercel.app/api/contributions?username=${username}`\n\t);\n\tconst contributionsList = await response.json();\n\treturn Object.entries(contributionsList).map(([date, count]) => ({\n\t\tdate: new Date(date),\n\t\tcount: Number(count)\n\t}));\n};\n\nconst getGithubContribution = async (username: string): Promise<Contribution[]> => {\n\tconst response = await fetch(\n\t\t`https://api.github.com/search/commits?q=author:${username}&sort=author-date&order=desc&page=1&per_page=1000`\n\t);\n\tconst contributionsList = await response.json();\n\treturn Array.from(\n\t\tcontributionsList.items\n\t\t\t.reduce((map: any, item: any) => {\n\t\t\t\tconst dateString = item.commit.committer.date.split('T')[0];\n\t\t\t\tconst date = new Date(dateString);\n\t\t\t\tconst count = (map.get(dateString) || { count: 0 }).count + 1;\n\t\t\t\treturn map.set(dateString, { date, count });\n\t\t\t}, new Map())\n\t\t\t.values()\n\t);\n};\n\nconst getCurrentTheme = (store: StoreType): GameTheme => {\n\treturn GAME_THEMES[store.config.gameTheme] ?? GAME_THEMES['github'];\n};\n\nfunction hexToRGBA(hex: string, alpha: number): string {\n\tconst r = parseInt(hex.slice(1, 3), 16);\n\tconst g = parseInt(hex.slice(3, 5), 16);\n\tconst b = parseInt(hex.slice(5, 7), 16);\n\treturn `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport const Utils = {\n\tgetGitlabContribution,\n\tgetGithubContribution,\n\tgetCurrentTheme,\n\thexToRGBA\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Game } from './game';\nimport { Store } from './store';\nimport { Config, StoreType } from './types';\nimport { Utils } from './utils';\n\nexport class PacmanRenderer {\n\tstore: StoreType;\n\tconf: Config;\n\n\tconstructor(conf: Config) {\n\t\tthis.store = { ...Store };\n\t\tthis.conf = { ...conf };\n\t}\n\n\tpublic async start() {\n\t\tconst defaultConfing: Config = {\n\t\t\tplatform: 'github',\n\t\t\tusername: '',\n\t\t\tcanvas: undefined as unknown as HTMLCanvasElement,\n\t\t\toutputFormat: 'svg',\n\t\t\tsvgCallback: (_: string) => {},\n\t\t\tgameOverCallback: () => () => {},\n\t\t\tgameTheme: 'github',\n\t\t\tgameSpeed: 1,\n\t\t\tenableSounds: true,\n\t\t\tpointsIncreasedCallback: (_: number) => {}\n\t\t};\n\t\tthis.store.config = { ...defaultConfing, ...this.conf };\n\n\t\tswitch (this.conf.platform) {\n\t\t\tcase 'gitlab':\n\t\t\t\tthis.store.contributions = await Utils.getGitlabContribution(this.conf.username);\n\t\t\t\tbreak;\n\n\t\t\tcase 'github':\n\t\t\t\tthis.store.contributions = await Utils.getGithubContribution(this.conf.username);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tGame.startGame(this.store);\n\t}\n\n\tpublic stop() {\n\t\tGame.stopGame(this.store);\n\t}\n}\n"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"pacman-contribution-graph.js","mappings":"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","sources":["webpack://pacman-contribution-graph/./src/canvas.ts","webpack://pacman-contribution-graph/./src/constants.ts","webpack://pacman-contribution-graph/./src/game.ts","webpack://pacman-contribution-graph/./src/music-player.ts","webpack://pacman-contribution-graph/./src/store.ts","webpack://pacman-contribution-graph/./src/svg.ts","webpack://pacman-contribution-graph/./src/utils.ts","webpack://pacman-contribution-graph/webpack/bootstrap","webpack://pacman-contribution-graph/webpack/runtime/define property getters","webpack://pacman-contribution-graph/webpack/runtime/hasOwnProperty shorthand","webpack://pacman-contribution-graph/webpack/runtime/make namespace object","webpack://pacman-contribution-graph/./src/index.ts"],"sourcesContent":["import { CELL_SIZE, GAP_SIZE, GHOSTS, GRID_HEIGHT, GRID_WIDTH, PACMAN_COLOR, PACMAN_COLOR_DEAD, PACMAN_COLOR_POWERUP } from './constants';\nimport { MusicPlayer } from './music-player';\nimport { StoreType } from './types';\nimport { Utils } from './utils';\n\nconst resizeCanvas = (store: StoreType) => {\n\tconst canvasWidth = GRID_WIDTH * (CELL_SIZE + GAP_SIZE);\n\tconst canvasHeight = GRID_HEIGHT * (CELL_SIZE + GAP_SIZE) + 20; // Adding some space for months on top\n\n\tstore.config.canvas.width = canvasWidth;\n\tstore.config.canvas.height = canvasHeight;\n};\n\nconst drawGrid = (store: StoreType) => {\n\tstore.config.canvas.getContext('2d')!.fillStyle = Utils.getCurrentTheme(store).gridBackground;\n\tstore.config.canvas.getContext('2d')!.fillRect(0, 0, store.config.canvas.width, store.config.canvas.height);\n\n\tfor (let x = 0; x < GRID_HEIGHT; x++) {\n\t\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\t\tconst intensity = store.grid[x][y].intensity;\n\t\t\tif (intensity > 0) {\n\t\t\t\tconst adjustedIntensity = intensity < 0.2 ? 0.3 : intensity;\n\t\t\t\tconst color = Utils.hexToRGBA(Utils.getCurrentTheme(store).contributionBoxColor, adjustedIntensity);\n\t\t\t\tstore.config.canvas.getContext('2d')!.fillStyle = color;\n\t\t\t} else {\n\t\t\t\tstore.config.canvas.getContext('2d')!.fillStyle = Utils.getCurrentTheme(store).emptyContributionBoxColor;\n\t\t\t}\n\t\t\tstore.config.canvas.getContext('2d')!.beginPath();\n\t\t\tstore.config.canvas\n\t\t\t\t.getContext('2d')!\n\t\t\t\t.roundRect(y * (CELL_SIZE + GAP_SIZE), x * (CELL_SIZE + GAP_SIZE) + 15, CELL_SIZE, CELL_SIZE, 5);\n\t\t\tstore.config.canvas.getContext('2d')!.fill();\n\t\t}\n\t}\n\n\tstore.config.canvas.getContext('2d')!.fillStyle = Utils.getCurrentTheme(store).textColor;\n\tstore.config.canvas.getContext('2d')!.font = '10px Arial';\n\tstore.config.canvas.getContext('2d')!.textAlign = 'center';\n\n\tlet lastMonth = '';\n\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\tif (store.monthLabels[y] !== lastMonth) {\n\t\t\tconst xPos = y * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\t\t\tstore.config.canvas.getContext('2d')!.fillText(store.monthLabels[y], xPos, 10);\n\t\t\tlastMonth = store.monthLabels[y];\n\t\t}\n\t}\n};\n\nconst drawPacman = (store: StoreType) => {\n\tconst x = store.pacman.y * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\tconst y = store.pacman.x * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2 + 15;\n\tconst radius = CELL_SIZE / 2;\n\n\t// Change Pac-Man's color to red if he's on power-up, dead, else yellow\n\tif (store.pacman.deadRemainingDuration) {\n\t\tstore.config.canvas.getContext('2d')!.fillStyle = PACMAN_COLOR_DEAD;\n\t} else if (store.pacman.powerupRemainingDuration) {\n\t\tstore.config.canvas.getContext('2d')!.fillStyle = PACMAN_COLOR_POWERUP;\n\t} else {\n\t\tstore.config.canvas.getContext('2d')!.fillStyle = PACMAN_COLOR;\n\t}\n\n\tconst mouthAngle = store.pacmanMouthOpen ? 0.35 * Math.PI : 0.1 * Math.PI;\n\n\tlet startAngle, endAngle;\n\tswitch (store.pacman.direction) {\n\t\tcase 'up':\n\t\t\tstartAngle = 1.5 * Math.PI + mouthAngle;\n\t\t\tendAngle = 1.5 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'down':\n\t\t\tstartAngle = 0.5 * Math.PI + mouthAngle;\n\t\t\tendAngle = 0.5 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'left':\n\t\t\tstartAngle = Math.PI + mouthAngle;\n\t\t\tendAngle = Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'right':\n\t\tdefault:\n\t\t\tstartAngle = 0 + mouthAngle;\n\t\t\tendAngle = 2 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t}\n\n\tstore.config.canvas.getContext('2d')!.beginPath();\n\tstore.config.canvas.getContext('2d')!.arc(x, y, radius, startAngle, endAngle);\n\tstore.config.canvas.getContext('2d')!.lineTo(x, y);\n\tstore.config.canvas.getContext('2d')!.fill();\n};\n\nconst drawGhosts = (store: StoreType) => {\n\tstore.ghosts.forEach((ghost) => {\n\t\tconst x = ghost.y * (CELL_SIZE + GAP_SIZE);\n\t\tconst y = ghost.x * (CELL_SIZE + GAP_SIZE) + 15;\n\t\tconst size = CELL_SIZE;\n\n\t\tconst ctx = store.config.canvas.getContext('2d')!;\n\t\tif (ghost.scared) {\n\t\t\tctx.drawImage(GHOSTS['scared'].img, x, y, size, size);\n\t\t} else {\n\t\t\tctx.drawImage(GHOSTS[ghost.name].img, x, y, size, size);\n\t\t}\n\t});\n};\n\nconst renderGameOver = (store: StoreType) => {\n\tstore.config.canvas.getContext('2d')!.fillStyle = Utils.getCurrentTheme(store).textColor;\n\tstore.config.canvas.getContext('2d')!.font = '20px Arial';\n\tstore.config.canvas.getContext('2d')!.textAlign = 'center';\n\tstore.config.canvas.getContext('2d')!.fillText('Game Over', store.config.canvas.width / 2, store.config.canvas.height / 2);\n};\n\nconst drawSoundController = (store: StoreType) => {\n\tif (!store.config.enableSounds) {\n\t\treturn;\n\t}\n\n\tconst width = 30,\n\t\theight = 30,\n\t\tleft = store.config.canvas.width - width - 10,\n\t\ttop = 10;\n\tstore.config.canvas.getContext('2d')!.fillStyle = `rgba(0, 0, 0, ${MusicPlayer.getInstance().isMuted ? 0.3 : 0.5})`;\n\tstore.config.canvas.getContext('2d')!.beginPath();\n\tstore.config.canvas.getContext('2d')!.moveTo(left + 10, top + 10);\n\tstore.config.canvas.getContext('2d')!.lineTo(left + 20, top + 5);\n\tstore.config.canvas.getContext('2d')!.lineTo(left + 20, top + 25);\n\tstore.config.canvas.getContext('2d')!.lineTo(left + 10, top + 20);\n\tstore.config.canvas.getContext('2d')!.closePath();\n\tstore.config.canvas.getContext('2d')!.fill();\n\n\tif (!MusicPlayer.getInstance().isMuted) {\n\t\tstore.config.canvas.getContext('2d')!.strokeStyle = `rgba(0, 0, 0, 0.4)`;\n\t\tstore.config.canvas.getContext('2d')!.lineWidth = 2;\n\n\t\t// First wave\n\t\tstore.config.canvas.getContext('2d')!.beginPath();\n\t\tstore.config.canvas.getContext('2d')!.arc(left + 25, top + 15, 5, 0, Math.PI * 2);\n\t\tstore.config.canvas.getContext('2d')!.stroke();\n\n\t\t// Second wave\n\t\tstore.config.canvas.getContext('2d')!.beginPath();\n\t\tstore.config.canvas.getContext('2d')!.arc(left + 25, top + 15, 8, 0, Math.PI * 2);\n\t\tstore.config.canvas.getContext('2d')!.stroke();\n\t} else {\n\t\t// Mute line\n\t\tstore.config.canvas.getContext('2d')!.strokeStyle = 'rgba(255, 0, 0, 0.6)';\n\t\tstore.config.canvas.getContext('2d')!.lineWidth = 3;\n\t\tstore.config.canvas.getContext('2d')!.beginPath();\n\t\tstore.config.canvas.getContext('2d')!.moveTo(left + 25, top + 5);\n\t\tstore.config.canvas.getContext('2d')!.lineTo(left + 5, top + 25);\n\t\tstore.config.canvas.getContext('2d')!.stroke();\n\t}\n};\n\nconst listenToSoundController = (store: StoreType) => {\n\tif (!store.config.enableSounds) {\n\t\treturn;\n\t}\n\tstore.config.canvas.addEventListener('click', function (event) {\n\t\tconst rect = store.config.canvas.getBoundingClientRect();\n\t\tconst x = event.clientX - rect.left,\n\t\t\ty = event.clientY - rect.top;\n\t\tconst width = 30,\n\t\t\theight = 30,\n\t\t\tleft = store.config.canvas.width - width - 10,\n\t\t\ttop = 10;\n\n\t\tif (x >= left && x <= left + this.width && y >= top && y <= top + this.height) {\n\t\t\tif (MusicPlayer.getInstance().isMuted) {\n\t\t\t\tMusicPlayer.getInstance().unmute();\n\t\t\t} else {\n\t\t\t\tMusicPlayer.getInstance().mute();\n\t\t\t}\n\t\t}\n\t});\n};\n\nexport const Canvas = {\n\tresizeCanvas,\n\tdrawGrid,\n\tdrawPacman,\n\tdrawGhosts,\n\trenderGameOver,\n\tdrawSoundController,\n\tlistenToSoundController\n};\n","import { GameTheme, GhostName, ThemeKeys } from './types';\n\nexport const CELL_SIZE = 20;\nexport const GAP_SIZE = 2;\nexport const GRID_WIDTH = 52;\nexport const GRID_HEIGHT = 7;\nexport const PACMAN_COLOR = 'yellow';\nexport const PACMAN_COLOR_POWERUP = 'red';\nexport const PACMAN_COLOR_DEAD = '#80808064';\nexport const GHOST_NAMES: GhostName[] = ['blinky', 'clyde', 'inky', 'pinky'];\nexport const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nexport const DELTA_TIME = 250;\nexport const PACMAN_DEATH_DURATION = 10;\nexport const PACMAN_POWERUP_DURATION = 15;\nexport const GAME_THEMES: { [key in ThemeKeys]: GameTheme } = {\n\tgithub: {\n\t\ttextColor: '#586069',\n\t\tgridBackground: '#ffffff',\n\t\tcontributionBoxColor: '#9be9a8',\n\t\temptyContributionBoxColor: '#ebedf0'\n\t},\n\t'github-dark': {\n\t\ttextColor: '#8b949e',\n\t\tgridBackground: '#0d1117',\n\t\tcontributionBoxColor: '#26a641',\n\t\temptyContributionBoxColor: '#161b22'\n\t},\n\tgitlab: {\n\t\ttextColor: '#626167',\n\t\tgridBackground: '#ffffff',\n\t\tcontributionBoxColor: '#7992f5',\n\t\temptyContributionBoxColor: '#ececef'\n\t},\n\t'gitlab-dark': {\n\t\ttextColor: '#999999',\n\t\tgridBackground: '#1f1f1f',\n\t\tcontributionBoxColor: '#2e7db1',\n\t\temptyContributionBoxColor: '#2d2d2d'\n\t}\n};\nexport const GHOSTS: { [key in GhostName | 'scared']: { imgDate: string; img: HTMLImageElement } } = {\n\tblinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAfUlEQVQ4T+2TUQ7AIAhDy/0PzQIRAqxmLtnn/DJPWypBAVkKKOMCyOQN7IRElLrcnIrDLNK4wVtxNbkb6Hq+jOcSbim6QVzKEstkw92gxVeFrMpqokix4wA+NvCOnvfArvcEbHoe2G9QmmhDMUc65p3xYC6q3zQPxtdl3NgF5QpL/b/rs3IAAAAASUVORK5CYIIA',\n\t\timg: new Image()\n\t},\n\tclyde: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgUlEQVQ4T+2T0Q6AIAhFLx9sH1MfTIPCAeLKrcd8PHqP4JBQLN7BFacNlHkAs+AQcqIueBs2mVWjgtWwl4yCdrd/pHYLLlVEgR2yK0wy4SoI5TcGXU4wM+AEJQfwsUCuXngDOR4rqKbngf0C94gyFHmkbd4rbkxD/pv2jfR1Ky7sBNrzXbHpnBX+AAAAAElFTkSuQmCC',\n\t\timg: new Image()\n\t},\n\tinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAg0lEQVQ4T+WTWxKAIAhFuQvK/a+jFoT5QAVxypn+6vMEx6sDIO/jk12OAMs1WDVOXV3UBW+bRVbTFMFu8yCZBExH/g26VHCXI0AJpKgdUCUrTlkwxE+FECdzS7HiJemXgvyeO29gE7jD8wDVFX4vSLNtR1q2z+OVlaZxTaXYrq7HbxYBS8VgMVrqzkEAAAAASUVORK5CYIIA',\n\t\timg: new Image()\n\t},\n\tpinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4T+2T0Q2AIAwF281wC50Qt9DNagoptqVESfyUz4N3vJCCECxaD4o47gt6bsAo2IWUqAnehkUmbYpgNqwlvSCnur+dtnnAuYUVyCGJimTAi8DUzwmwOoGI7hYjDgAfC/jqiTfg47ZBND0P7BeoR+Sh8CMt8x5xYSWkv2nbcF834swuA/9u49Yy5bgAAAAASUVORK5CYIIA',\n\t\timg: new Image()\n\t},\n\tscared: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeUlEQVQ4T82TUQ6AMAhD7UX0/sdyF0GREVmDmTN+bH9r6Bs0A0t2VpFULwDrrfBkZFcA3YC3ZodViAFGzQHyP0B2w2NrB0/1AoDbHwLoQ5/nrw1OBuD5e/crbM9Aiz35njHWzpSB/m3+0r40mV41M8U19WJe3Uw/tQOKt08pUUbBEQAAAABJRU5ErkJgggAA',\n\t\timg: new Image()\n\t}\n};\n","import { Canvas } from './canvas';\nimport {\n\tDELTA_TIME,\n\tGHOST_NAMES,\n\tGHOSTS,\n\tGRID_HEIGHT,\n\tGRID_WIDTH,\n\tMONTHS,\n\tPACMAN_DEATH_DURATION,\n\tPACMAN_POWERUP_DURATION\n} from './constants';\nimport { MusicPlayer, Sound } from './music-player';\nimport { SVG } from './svg';\nimport { StoreType } from './types';\n\nconst initializeGrid = (store: StoreType) => {\n\tstore.pacman.points = 0;\n\tstore.pacman.totalPoints = 0;\n\tstore.grid = Array.from({ length: GRID_HEIGHT }, () => Array.from({ length: GRID_WIDTH }, () => ({ commitsCount: 0, intensity: 0 })));\n\tstore.monthLabels = Array(GRID_WIDTH).fill('');\n\tlet maxCommits = 1;\n\n\tconst now = new Date();\n\tconst startOfCurrentWeek = new Date(now);\n\tstartOfCurrentWeek.setDate(now.getDate() - now.getDay());\n\n\tstore.contributions.forEach((contribution) => {\n\t\tconst contributionDate = new Date(contribution.date);\n\t\tconst dayOfWeek = contributionDate.getDay();\n\t\tconst weeksAgo = Math.floor((+startOfCurrentWeek - +contributionDate) / (1000 * 60 * 60 * 24 * 7));\n\n\t\tif (weeksAgo >= 0 && weeksAgo < GRID_WIDTH && dayOfWeek >= 0 && dayOfWeek < GRID_HEIGHT) {\n\t\t\tstore.grid[dayOfWeek][GRID_WIDTH - 1 - weeksAgo] = { commitsCount: contribution.count, intensity: 0 };\n\t\t\tif (contribution.count > maxCommits) maxCommits = contribution.count;\n\t\t}\n\t});\n\n\tfor (let x = 0; x < GRID_HEIGHT; x++) {\n\t\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\t\tif (store.grid[x][y].commitsCount > 0) {\n\t\t\t\tstore.grid[x][y].intensity = store.grid[x][y].commitsCount / maxCommits;\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\tconst weeksAgo = GRID_WIDTH - 1 - y;\n\t\tconst columnDate = new Date(startOfCurrentWeek);\n\t\tcolumnDate.setDate(columnDate.getDate() - weeksAgo * 7);\n\t\tstore.monthLabels[y] = MONTHS[columnDate.getMonth()];\n\t}\n};\n\nconst placePacman = (store: StoreType) => {\n\tlet validCells = [];\n\tfor (let x = 0; x < GRID_HEIGHT; x++) {\n\t\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\t\tif (store.grid[x][y].intensity > 0) validCells.push({ x, y });\n\t\t}\n\t}\n\tif (validCells.length > 0) {\n\t\tconst randomCell = validCells[Math.floor(Math.random() * validCells.length)];\n\t\tstore.pacman = {\n\t\t\tx: randomCell.x,\n\t\t\ty: randomCell.y,\n\t\t\tdirection: 'right',\n\t\t\tpoints: 0,\n\t\t\ttotalPoints: 0,\n\t\t\tdeadRemainingDuration: 0,\n\t\t\tpowerupRemainingDuration: 0\n\t\t};\n\t}\n\tif (store.config.outputFormat == 'canvas') Canvas.drawPacman(store);\n};\n\nconst placeGhosts = (store: StoreType) => {\n\tstore.ghosts = [];\n\tstore.scaredGhostsDestinations = [];\n\tfor (let i = 0; i < 4; i++) {\n\t\tlet x, y;\n\t\tdo {\n\t\t\tx = Math.floor(Math.random() * GRID_HEIGHT);\n\t\t\ty = Math.floor(Math.random() * GRID_WIDTH);\n\t\t} while (store.grid[x][y].intensity === 0);\n\t\tstore.ghosts.push({ x, y, name: GHOST_NAMES[i], scared: false, target: undefined });\n\t\tstore.scaredGhostsDestinations.push({ x: 0, y: 0 });\n\t}\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGhosts(store);\n};\n\nconst stopGame = async (store: StoreType) => {\n\tclearInterval(store.gameInterval);\n};\n\nconst startGame = async (store: StoreType) => {\n\tif (store.config.outputFormat == 'canvas') {\n\t\tstore.config.canvas = store.config.canvas;\n\t\tCanvas.resizeCanvas(store);\n\t\tCanvas.listenToSoundController(store);\n\t}\n\n\tstore.frameCount = 0;\n\tstore.ghosts.forEach((ghost) => (ghost.scared = false));\n\n\tinitializeGrid(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGrid(store);\n\n\tif (store.config.outputFormat == 'canvas') {\n\t\tif (!store.config.enableSounds) {\n\t\t\tMusicPlayer.getInstance().mute();\n\t\t}\n\t\tawait MusicPlayer.getInstance().preloadSounds();\n\t\tMusicPlayer.getInstance().startDefaultSound();\n\t\tawait MusicPlayer.getInstance().play(Sound.BEGINNING);\n\t}\n\n\tconst remainingCells = () => store.grid.some((row) => row.some((cell) => cell.intensity > 0));\n\tif (remainingCells()) {\n\t\tplacePacman(store);\n\t\tplaceGhosts(store);\n\t}\n\n\tGHOSTS.blinky.img.src = GHOSTS.blinky.imgDate;\n\tGHOSTS.clyde.img.src = GHOSTS.clyde.imgDate;\n\tGHOSTS.inky.img.src = GHOSTS.inky.imgDate;\n\tGHOSTS.pinky.img.src = GHOSTS.pinky.imgDate;\n\tGHOSTS.scared.img.src = GHOSTS.scared.imgDate;\n\n\tif (store.config.outputFormat == 'svg') {\n\t\twhile (remainingCells()) {\n\t\t\tawait updateGame(store);\n\t\t}\n\t\t// One more time to generate svg\n\t\tawait updateGame(store);\n\t} else {\n\t\tclearInterval(store.gameInterval);\n\t\tstore.gameInterval = setInterval(async () => await updateGame(store), DELTA_TIME);\n\t}\n};\n\nconst updateGame = async (store: StoreType) => {\n\tstore.frameCount++;\n\tif (store.frameCount % store.config.gameSpeed !== 0) {\n\t\tstore.gameHistory.push({\n\t\t\tpacman: { ...store.pacman },\n\t\t\tghosts: store.ghosts.map((ghost) => ({ ...ghost })),\n\t\t\tgrid: store.grid.map((row) => [...row.map((col) => col.intensity)])\n\t\t});\n\t\treturn;\n\t}\n\n\tif (store.pacman.deadRemainingDuration) {\n\t\tstore.pacman.deadRemainingDuration--;\n\t\tif (!store.pacman.deadRemainingDuration) {\n\t\t\t// IT'S ALIVE!\n\t\t\tif (store.config.outputFormat == 'canvas')\n\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t.play(Sound.GAME_OVER)\n\t\t\t\t\t.then(() => MusicPlayer.getInstance().startDefaultSound());\n\t\t}\n\t}\n\n\tif (store.pacman.powerupRemainingDuration) {\n\t\tstore.pacman.powerupRemainingDuration--;\n\t\tif (!store.pacman.powerupRemainingDuration) {\n\t\t\tstore.ghosts.forEach((ghost) => (ghost.scared = false));\n\t\t\tstore.pacman.points = 0;\n\t\t}\n\t}\n\n\tconst remainingCells = store.grid.some((row) => row.some((cell) => cell.intensity > 0));\n\tif (!remainingCells) {\n\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\tclearInterval(store.gameInterval);\n\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\tCanvas.renderGameOver(store);\n\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t.play(Sound.BEGINNING)\n\t\t\t\t\t.then(() => MusicPlayer.getInstance().stopDefaultSound());\n\t\t\t}\n\t\t}\n\n\t\tif (store.config.outputFormat == 'svg') {\n\t\t\tconst animatedSVG = SVG.generateAnimatedSVG(store);\n\t\t\tstore.config.svgCallback(animatedSVG);\n\t\t}\n\n\t\tstore.config.gameOverCallback();\n\t\treturn;\n\t}\n\n\tmovePacman(store);\n\tmoveGhosts(store);\n\tcheckCollisions(store);\n\n\tstore.pacmanMouthOpen = !store.pacmanMouthOpen;\n\n\tstore.gameHistory.push({\n\t\tpacman: { ...store.pacman },\n\t\tghosts: store.ghosts.map((ghost) => ({ ...ghost })),\n\t\tgrid: store.grid.map((row) => [...row.map((col) => col.intensity)])\n\t});\n\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGrid(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawPacman(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGhosts(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawSoundController(store);\n};\n\nconst movePacman = (store: StoreType) => {\n\tif (store.pacman.deadRemainingDuration) {\n\t\treturn;\n\t}\n\tlet targetCells: { x: number; y: number; distance: number }[] = [];\n\n\tif (store.pacman.powerupRemainingDuration) {\n\t\ttargetCells = store.ghosts.map((ghost) => ({\n\t\t\tx: ghost.x,\n\t\t\ty: ghost.y,\n\t\t\tdistance: Infinity\n\t\t}));\n\t} else {\n\t\tfor (let x = 0; x < GRID_HEIGHT; x++) {\n\t\t\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\t\t\tif (store.grid[x][y].intensity > 0) targetCells.push({ x, y, distance: Infinity });\n\t\t\t}\n\t\t}\n\t}\n\n\tif (targetCells.length === 0) return;\n\n\tconst closest = targetCells.reduce(\n\t\t(closest, cell) => {\n\t\t\tconst distance = Math.abs(cell.x - store.pacman.x) + Math.abs(cell.y - store.pacman.y);\n\t\t\treturn distance < closest.distance ? { ...cell, distance } : closest;\n\t\t},\n\t\t{ x: store.pacman.x, y: store.pacman.y, distance: Infinity }\n\t);\n\n\tconst dx = closest.x - store.pacman.x;\n\tconst dy = closest.y - store.pacman.y;\n\n\tif (Math.abs(dx) > Math.abs(dy)) {\n\t\tstore.pacman.x += Math.sign(dx);\n\t\tstore.pacman.direction = dx > 0 ? 'down' : 'up';\n\t} else {\n\t\tstore.pacman.y += Math.sign(dy);\n\t\tstore.pacman.direction = dy > 0 ? 'right' : 'left';\n\t}\n\n\tif (store.grid[store.pacman.x][store.pacman.y].intensity > 0) {\n\t\tstore.pacman.totalPoints += store.grid[store.pacman.x][store.pacman.y].commitsCount;\n\t\tstore.pacman.points++;\n\t\tstore.config.pointsIncreasedCallback(store.pacman.totalPoints);\n\t\tstore.grid[store.pacman.x][store.pacman.y].intensity = 0;\n\n\t\tif (store.pacman.points >= 30) activatePowerUp(store);\n\t}\n};\n\nconst moveGhosts = (store: StoreType) => {\n\tstore.ghosts.forEach((ghost, index) => {\n\t\tif (ghost.scared) {\n\t\t\tif (!ghost.target) {\n\t\t\t\tghost.target = getRandomDestination(ghost.x, ghost.y);\n\t\t\t}\n\n\t\t\tconst dx = ghost.target.x - ghost.x;\n\t\t\tconst dy = ghost.target.y - ghost.y;\n\t\t\tconst moveX = Math.abs(dx) > Math.abs(dy) ? Math.sign(dx) : 0;\n\t\t\tconst moveY = Math.abs(dy) >= Math.abs(dx) ? Math.sign(dy) : 0;\n\n\t\t\tconst newX = ghost.x + moveX;\n\t\t\tconst newY = ghost.y + moveY;\n\n\t\t\tif (newX >= 0 && newX < GRID_HEIGHT && newY >= 0 && newY < GRID_WIDTH) {\n\t\t\t\tghost.x = newX;\n\t\t\t\tghost.y = newY;\n\t\t\t}\n\n\t\t\tif (ghost.x === ghost.target.x && ghost.y === ghost.target.y) {\n\t\t\t\tghost.target = getRandomDestination(ghost.x, ghost.y);\n\t\t\t}\n\t\t} else {\n\t\t\tconst directions = [\n\t\t\t\t[-1, 0],\n\t\t\t\t[1, 0],\n\t\t\t\t[0, -1],\n\t\t\t\t[0, 1]\n\t\t\t];\n\t\t\tconst [dx, dy] = directions[Math.floor(Math.random() * directions.length)];\n\n\t\t\t// If Pacman has the power-up, ghosts move slower (move every other frame)\n\t\t\tif (store.pacman.powerupRemainingDuration && Math.random() < 0.5) return;\n\n\t\t\tconst newX = ghost.x + dx;\n\t\t\tconst newY = ghost.y + dy;\n\n\t\t\tif (newX >= 0 && newX < GRID_HEIGHT && newY >= 0 && newY < GRID_WIDTH) {\n\t\t\t\tghost.x = newX;\n\t\t\t\tghost.y = newY;\n\t\t\t}\n\t\t}\n\t});\n};\n\nconst getRandomDestination = (x: number, y: number) => {\n\tconst maxDistance = 10;\n\tconst randomX = x + Math.floor(Math.random() * (2 * maxDistance + 1)) - maxDistance;\n\tconst randomY = y + Math.floor(Math.random() * (2 * maxDistance + 1)) - maxDistance;\n\treturn {\n\t\tx: Math.max(0, Math.min(randomX, GRID_HEIGHT - 1)),\n\t\ty: Math.max(0, Math.min(randomY, GRID_WIDTH - 1))\n\t};\n};\n\nconst checkCollisions = (store: StoreType) => {\n\tif (store.pacman.deadRemainingDuration) return;\n\n\tstore.ghosts.forEach((ghost, index) => {\n\t\tif (ghost.x === store.pacman.x && ghost.y === store.pacman.y) {\n\t\t\tif (store.pacman.powerupRemainingDuration && ghost.scared) {\n\t\t\t\trespawnGhost(store, index);\n\t\t\t\tstore.pacman.points += 10;\n\t\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\t\tMusicPlayer.getInstance().play(Sound.EAT_GHOST);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstore.pacman.points = 0;\n\t\t\t\tstore.pacman.powerupRemainingDuration = 0;\n\t\t\t\tstore.pacman.deadRemainingDuration = PACMAN_DEATH_DURATION;\n\t\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t\t.play(Sound.GAME_OVER)\n\t\t\t\t\t\t.then(() => MusicPlayer.getInstance().stopDefaultSound());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\nconst respawnGhost = (store: StoreType, ghostIndex: number) => {\n\tlet x, y;\n\tdo {\n\t\tx = Math.floor(Math.random() * GRID_HEIGHT);\n\t\ty = Math.floor(Math.random() * GRID_WIDTH);\n\t} while ((Math.abs(x - store.pacman.x) <= 2 && Math.abs(y - store.pacman.y) <= 2) || store.grid[x][y].intensity === 0);\n\tstore.ghosts[ghostIndex] = {\n\t\tx,\n\t\ty,\n\t\tname: GHOST_NAMES[ghostIndex % GHOST_NAMES.length],\n\t\tscared: false,\n\t\ttarget: undefined\n\t};\n};\n\nconst activatePowerUp = (store: StoreType) => {\n\tstore.pacman.powerupRemainingDuration = PACMAN_POWERUP_DURATION;\n\tstore.ghosts.forEach((ghost) => (ghost.scared = true));\n};\n\nexport const Game = {\n\tstartGame,\n\tstopGame\n};\n","export enum Sound {\n\tDEFAULT = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_chomp.wav',\n\tBEGINNING = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_beginning.wav',\n\tGAME_OVER = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_death.wav',\n\tEAT_GHOST = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_eatghost.wav'\n}\n\nexport class MusicPlayer {\n\tprivate static instance: MusicPlayer;\n\tprivate audioContext: AudioContext;\n\tprivate sounds: Map<Sound, AudioBuffer> = new Map();\n\tprivate currentSource: AudioBufferSourceNode | null = null;\n\tprivate defaultSource: AudioBufferSourceNode | null = null;\n\tpublic isMuted: boolean = false;\n\n\tprivate constructor() {\n\t\tthis.audioContext = new AudioContext();\n\t}\n\n\tpublic static getInstance(): MusicPlayer {\n\t\tif (!MusicPlayer.instance) {\n\t\t\tMusicPlayer.instance = new MusicPlayer();\n\t\t}\n\t\treturn MusicPlayer.instance;\n\t}\n\n\tpublic async preloadSounds(): Promise<void> {\n\t\tfor (const sound of Object.values(Sound)) {\n\t\t\tconst response = await fetch(sound);\n\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\tconst audioBuffer = await this.audioContext.decodeAudioData(arrayBuffer);\n\t\t\tthis.sounds.set(sound as Sound, audioBuffer);\n\t\t}\n\t}\n\n\tpublic async play(sound: Sound): Promise<void> {\n\t\tif (this.isMuted) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.currentSource) {\n\t\t\ttry {\n\t\t\t\tthis.currentSource.stop();\n\t\t\t} catch (ex) {}\n\t\t}\n\n\t\tconst buffer = this.sounds.get(sound);\n\t\tif (!buffer) {\n\t\t\tconsole.error(`Sound ${sound} not found`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.currentSource = this.audioContext.createBufferSource();\n\t\tthis.currentSource.buffer = buffer;\n\t\tthis.currentSource.connect(this.audioContext.destination);\n\n\t\tif (!this.isMuted) {\n\t\t\tthis.currentSource.start();\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.currentSource!.onended = () => {\n\t\t\t\tthis.currentSource = null;\n\t\t\t\tresolve();\n\t\t\t};\n\t\t});\n\t}\n\n\tpublic startDefaultSound(): void {\n\t\tif (this.defaultSource) {\n\t\t\ttry {\n\t\t\t\tthis.defaultSource.stop();\n\t\t\t} catch (ex) {}\n\t\t}\n\n\t\tconst buffer = this.sounds.get(Sound.DEFAULT);\n\t\tif (!buffer) {\n\t\t\tconsole.error('Default sound not found');\n\t\t\treturn;\n\t\t}\n\n\t\tthis.defaultSource = this.audioContext.createBufferSource();\n\t\tthis.defaultSource.buffer = buffer;\n\t\tthis.defaultSource.loop = true;\n\t\tthis.defaultSource.connect(this.audioContext.destination);\n\n\t\tif (!this.isMuted) {\n\t\t\tthis.defaultSource.start();\n\t\t}\n\t}\n\n\tpublic stopDefaultSound(): void {\n\t\tif (this.defaultSource) {\n\t\t\ttry {\n\t\t\t\tthis.defaultSource.stop();\n\t\t\t} catch (ex) {}\n\t\t\tthis.defaultSource = null;\n\t\t}\n\t}\n\n\tpublic mute(): void {\n\t\tthis.isMuted = true;\n\t\tif (this.currentSource) {\n\t\t\tthis.currentSource.disconnect();\n\t\t}\n\t\tif (this.defaultSource) {\n\t\t\tthis.defaultSource.disconnect();\n\t\t}\n\t}\n\n\tpublic unmute(): void {\n\t\tthis.isMuted = false;\n\t\tif (this.currentSource) {\n\t\t\tthis.currentSource.connect(this.audioContext.destination);\n\t\t}\n\t\tif (this.defaultSource) {\n\t\t\tthis.defaultSource.connect(this.audioContext.destination);\n\t\t}\n\t}\n}\n","import type { Config, StoreType } from './types';\n\nexport const Store: StoreType = {\n\tframeCount: 0,\n\tcontributions: [],\n\tpacman: {\n\t\tx: 0,\n\t\ty: 0,\n\t\tdirection: 'right',\n\t\tpoints: 0,\n\t\ttotalPoints: 0,\n\t\tdeadRemainingDuration: 0,\n\t\tpowerupRemainingDuration: 0\n\t},\n\tghosts: [],\n\tgrid: [],\n\tmonthLabels: [],\n\tpacmanMouthOpen: true,\n\tgameInterval: 0,\n\tscaredGhostsDestinations: [],\n\tgameHistory: [],\n\tconfig: undefined as unknown as Config\n};\n","import { CELL_SIZE, GAP_SIZE, GHOSTS, GRID_HEIGHT, GRID_WIDTH, PACMAN_COLOR, PACMAN_COLOR_DEAD, PACMAN_COLOR_POWERUP } from './constants';\nimport { StoreType } from './types';\nimport { Utils } from './utils';\n\nconst generateAnimatedSVG = (store: StoreType) => {\n\tconst svgWidth = GRID_WIDTH * (CELL_SIZE + GAP_SIZE);\n\tconst svgHeight = GRID_HEIGHT * (CELL_SIZE + GAP_SIZE) + 20;\n\tlet svg = `<svg width=\"${svgWidth}\" height=\"${svgHeight}\" xmlns=\"http://www.w3.org/2000/svg\">`;\n\tsvg += `<desc>Generated with https://github.com/abozanona/pacman-contribution-graph</desc>`;\n\tsvg += `<rect width=\"100%\" height=\"100%\" fill=\"${Utils.getCurrentTheme(store).gridBackground}\"/>`;\n\n\tsvg += generateGhostsPredefinition();\n\n\t// Month labels\n\tlet lastMonth = '';\n\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\tif (store.monthLabels[y] !== lastMonth) {\n\t\t\tconst xPos = y * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\t\t\tsvg += `<text x=\"${xPos}\" y=\"10\" text-anchor=\"middle\" font-size=\"10\" fill=\"${Utils.getCurrentTheme(store).textColor}\">${store.monthLabels[y]}</text>`;\n\t\t\tlastMonth = store.monthLabels[y];\n\t\t}\n\t}\n\n\t// Grid\n\tfor (let x = 0; x < GRID_HEIGHT; x++) {\n\t\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\t\tconst cellX = y * (CELL_SIZE + GAP_SIZE);\n\t\t\tconst cellY = x * (CELL_SIZE + GAP_SIZE) + 15;\n\t\t\tconst intensity = store.gameHistory[0].grid[x][y];\n\t\t\tconst color = intensity > 0 ? getContributionColor(store, intensity) : Utils.getCurrentTheme(store).emptyContributionBoxColor;\n\t\t\tsvg += `<rect id=\"cell-${x}-${y}\" x=\"${cellX}\" y=\"${cellY}\" width=\"${CELL_SIZE}\" height=\"${CELL_SIZE}\" rx=\"5\" fill=\"${color}\">\n <animate attributeName=\"fill\" dur=\"${store.gameHistory.length * 300}ms\" repeatCount=\"indefinite\" \n values=\"${generateCellColorValues(store, x, y)}\" \n keyTimes=\"${generateKeyTimes(store)}\"/>\n </rect>`;\n\t\t}\n\t}\n\n\t// Pacman\n\tsvg += `<path id=\"pacman\" d=\"${generatePacManPath(0.35)}\"\n transform=\"translate(${store.pacman.y * (CELL_SIZE + GAP_SIZE)}, ${store.pacman.x * (CELL_SIZE + GAP_SIZE) + 15})\">\n\t\t<animate attributeName=\"fill\" dur=\"${store.gameHistory.length * 300}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${generateKeyTimes(store)}\"\n values=\"${generatePacManColors(store)}\"/>\n <animateTransform attributeName=\"transform\" type=\"translate\" dur=\"${store.gameHistory.length * 300}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${generateKeyTimes(store)}\"\n values=\"${generatePacManPositions(store)}\"/>\n <animate attributeName=\"d\" dur=\"0.2s\" repeatCount=\"indefinite\"\n values=\"${generatePacManPath(0.25)};${generatePacManPath(0.05)};${generatePacManPath(0.25)}\"/>\n </path>`;\n\n\t// Ghosts\n\tstore.ghosts.forEach((ghost, index) => {\n\t\tsvg += `<use id=\"ghost${index}\" width=\"${CELL_SIZE}\" height=\"${CELL_SIZE}\" href=\"#ghost-${ghost.name}\">\n <animateTransform attributeName=\"transform\" type=\"translate\" dur=\"${store.gameHistory.length * 300}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${generateKeyTimes(store)}\"\n values=\"${generateGhostPositions(store, index)}\"/>\n <animate attributeName=\"href\" dur=\"${store.gameHistory.length * 300}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${generateKeyTimes(store)}\"\n values=\"${generateGhostColors(store, index)}\"/>\n </use>`;\n\t});\n\n\tsvg += '</svg>';\n\t// TODO: minify SVG\n\treturn svg;\n};\n\nconst generatePacManPath = (mouthAngle: number) => {\n\tconst radius = CELL_SIZE / 2;\n\tconst startAngle = mouthAngle;\n\tconst endAngle = 2 * Math.PI - mouthAngle;\n\n\treturn `M ${radius},${radius}\n L ${radius + radius * Math.cos(startAngle)},${radius + radius * Math.sin(startAngle)}\n A ${radius},${radius} 0 1,1 ${radius + radius * Math.cos(endAngle)},${radius + radius * Math.sin(endAngle)}\n Z`;\n};\n\nconst generateKeyTimes = (store: StoreType) => {\n\treturn store.gameHistory.map((_, index) => index / (store.gameHistory.length - 1)).join(';');\n};\n\nconst generatePacManPositions = (store: StoreType) => {\n\treturn store.gameHistory\n\t\t.map((state) => {\n\t\t\tconst x = state.pacman.y * (CELL_SIZE + GAP_SIZE);\n\t\t\tconst y = state.pacman.x * (CELL_SIZE + GAP_SIZE) + 15;\n\t\t\treturn `${x},${y}`;\n\t\t})\n\t\t.join(';');\n};\n\nconst generatePacManColors = (store: StoreType) => {\n\treturn store.gameHistory\n\t\t.map((state) => {\n\t\t\tif (state.pacman.deadRemainingDuration) {\n\t\t\t\treturn PACMAN_COLOR_DEAD;\n\t\t\t} else if (state.pacman.powerupRemainingDuration) {\n\t\t\t\treturn PACMAN_COLOR_POWERUP;\n\t\t\t} else {\n\t\t\t\treturn PACMAN_COLOR;\n\t\t\t}\n\t\t})\n\t\t.join(';');\n};\n\nconst generateCellColorValues = (store: StoreType, x: number, y: number) => {\n\treturn store.gameHistory\n\t\t.map((state) => {\n\t\t\tconst intensity = state.grid[x][y];\n\t\t\treturn intensity > 0 ? getContributionColor(store, intensity) : Utils.getCurrentTheme(store).emptyContributionBoxColor;\n\t\t})\n\t\t.join(';');\n};\n\nconst getContributionColor = (store: StoreType, intensity: number) => {\n\tconst adjustedIntensity = intensity < 0.2 ? 0.3 : intensity;\n\treturn Utils.hexToRGBA(Utils.getCurrentTheme(store).contributionBoxColor, adjustedIntensity);\n};\n\nconst generateGhostPositions = (store: StoreType, ghostIndex: number) => {\n\treturn store.gameHistory\n\t\t.map((state) => {\n\t\t\tconst ghost = state.ghosts[ghostIndex];\n\t\t\tconst x = ghost.y * (CELL_SIZE + GAP_SIZE);\n\t\t\tconst y = ghost.x * (CELL_SIZE + GAP_SIZE) + 15;\n\t\t\treturn `${x},${y}`;\n\t\t})\n\t\t.join(';');\n};\n\nconst generateGhostColors = (store: StoreType, ghostIndex: number) => {\n\treturn store.gameHistory\n\t\t.map((state) => {\n\t\t\tconst ghost = state.ghosts[ghostIndex];\n\t\t\treturn ghost.scared ? '#scared' : '#' + ghost.name;\n\t\t})\n\t\t.join(';');\n};\n\nconst generateGhostsPredefinition = () => {\n\treturn `<defs>\n\t\t<symbol id=\"blinky\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['blinky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"clyde\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['clyde'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"inky\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['inky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"pinky\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['pinky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"scared\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['scared'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t</defs>`;\n};\n\nexport const SVG = {\n\tgenerateAnimatedSVG\n};\n","import { GAME_THEMES } from './constants';\nimport type { Contribution, GameTheme, StoreType } from './types';\n\nconst getGitlabContribution = async (store: StoreType): Promise<Contribution[]> => {\n\t// const response = await fetch(`https://gitlab.com/users/${username}/calendar.json`);\n\tconst response = await fetch(\n\t\t`https://v0-new-project-q1hhrdodoye-abozanona-gmailcoms-projects.vercel.app/api/contributions?username=${store.config.username}`\n\t);\n\tconst contributionsList = await response.json();\n\treturn Object.entries(contributionsList).map(([date, count]) => ({\n\t\tdate: new Date(date),\n\t\tcount: Number(count)\n\t}));\n};\n\nconst getGithubContribution = async (store: StoreType): Promise<Contribution[]> => {\n\tconst commits = [];\n\tlet isComplete: boolean = false;\n\tlet page = 1;\n\t// TODO: Consider using GraphQL endpoint when user has an access token?\n\tdo {\n\t\ttry {\n\t\t\tconst headers: HeadersInit = {};\n\t\t\tif (store.config.githubSettings?.accessToken) {\n\t\t\t\theaders['Authorization'] = 'Bearer ' + store.config.githubSettings.accessToken;\n\t\t\t}\n\t\t\tconst response = await fetch(\n\t\t\t\t`https://api.github.com/search/commits?q=author:${store.config.username}&sort=author-date&order=desc&page=${page}&per_page=1000`,\n\t\t\t\t{\n\t\t\t\t\theaders\n\t\t\t\t}\n\t\t\t);\n\t\t\tconst contributionsList = await response.json();\n\t\t\tisComplete = contributionsList.items.length === 0;\n\t\t\tcommits.push(...contributionsList.items);\n\t\t\tpage++;\n\t\t} catch (ex) {\n\t\t\tisComplete = true;\n\t\t}\n\t} while (!isComplete);\n\treturn Array.from(\n\t\tcommits\n\t\t\t.reduce((map: any, item: any) => {\n\t\t\t\tconst dateString = item.commit.committer.date.split('T')[0];\n\t\t\t\tconst date = new Date(dateString);\n\t\t\t\tconst count = (map.get(dateString) || { count: 0 }).count + 1;\n\t\t\t\treturn map.set(dateString, { date, count });\n\t\t\t}, new Map())\n\t\t\t.values()\n\t);\n};\n\nconst getCurrentTheme = (store: StoreType): GameTheme => {\n\treturn GAME_THEMES[store.config.gameTheme] ?? GAME_THEMES['github'];\n};\n\nfunction hexToRGBA(hex: string, alpha: number): string {\n\tconst r = parseInt(hex.slice(1, 3), 16);\n\tconst g = parseInt(hex.slice(3, 5), 16);\n\tconst b = parseInt(hex.slice(5, 7), 16);\n\treturn `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport const Utils = {\n\tgetGitlabContribution,\n\tgetGithubContribution,\n\tgetCurrentTheme,\n\thexToRGBA\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Game } from './game';\nimport { Store } from './store';\nimport { Config, StoreType } from './types';\nimport { Utils } from './utils';\n\nexport class PacmanRenderer {\n\tstore: StoreType;\n\tconf: Config;\n\n\tconstructor(conf: Config) {\n\t\tthis.store = { ...Store };\n\t\tthis.conf = { ...conf };\n\t}\n\n\tpublic async start() {\n\t\tconst defaultConfing: Config = {\n\t\t\tplatform: 'github',\n\t\t\tusername: '',\n\t\t\tcanvas: undefined as unknown as HTMLCanvasElement,\n\t\t\toutputFormat: 'svg',\n\t\t\tsvgCallback: (_: string) => {},\n\t\t\tgameOverCallback: () => () => {},\n\t\t\tgameTheme: 'github',\n\t\t\tgameSpeed: 1,\n\t\t\tenableSounds: true,\n\t\t\tpointsIncreasedCallback: (_: number) => {}\n\t\t};\n\t\tthis.store.config = { ...defaultConfing, ...this.conf };\n\n\t\tswitch (this.conf.platform) {\n\t\t\tcase 'gitlab':\n\t\t\t\tthis.store.contributions = await Utils.getGitlabContribution(this.store);\n\t\t\t\tbreak;\n\n\t\t\tcase 'github':\n\t\t\t\tthis.store.contributions = await Utils.getGithubContribution(this.store);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tGame.startGame(this.store);\n\t}\n\n\tpublic stop() {\n\t\tGame.stopGame(this.store);\n\t}\n}\n"],"names":[],"sourceRoot":""}