Move app to apps/web-react in pnpm workspace layout

This commit is contained in:
Kalle
2026-08-16 09:20:33 +03:00
parent 7e365ccfcf
commit bbc8ea57af
2913 changed files with 227 additions and 250 deletions

View File

@@ -0,0 +1,51 @@
{
"name": "sendou.ink",
"start_url": "/",
"display": "standalone",
"id": "sendou.ink",
"description": "Competitive Splatoon Hub",
"theme_color": "#010115",
"background_color": "#02011e",
"icons": [
{
"src": "https://sendou-assets.nyc3.cdn.digitaloceanspaces.com/img/app-icon.png",
"type": "image/png",
"sizes": "512x512"
}
],
"shortcuts": [
{
"name": "Builds",
"url": "/builds",
"icons": [
{
"src": "https://sendou-assets.nyc3.cdn.digitaloceanspaces.com/img/pwa-icons/builds.png",
"type": "image/png",
"sizes": "96x96"
}
]
},
{
"name": "Build Analyzer",
"url": "/analyzer",
"icons": [
{
"src": "https://sendou-assets.nyc3.cdn.digitaloceanspaces.com/img/pwa-icons/analyzer.png",
"type": "image/png",
"sizes": "96x96"
}
]
},
{
"name": "Calendar",
"url": "/calendar",
"icons": [
{
"src": "https://sendou-assets.nyc3.cdn.digitaloceanspaces.com/img/pwa-icons/calendar.png",
"type": "image/png",
"sizes": "96x96"
}
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,2 @@
User-agent: *
Allow: /

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View File

@@ -0,0 +1,597 @@
{
"height": 19,
"glyphs": [
{
"char": "a",
"x": 2,
"y": 2,
"w": 12,
"h": 17,
"source": "fixture"
},
{
"char": "B",
"x": 16,
"y": 2,
"w": 12,
"h": 20,
"source": "fixture"
},
{
"char": "e",
"x": 30,
"y": 2,
"w": 12,
"h": 16,
"source": "fixture"
},
{
"char": "l",
"x": 44,
"y": 2,
"w": 6,
"h": 20,
"source": "fixture"
},
{
"char": "t",
"x": 52,
"y": 2,
"w": 10,
"h": 18,
"source": "fixture"
},
{
"char": "X",
"x": 64,
"y": 2,
"w": 11,
"h": 20,
"source": "fixture"
},
{
"char": "X",
"x": 77,
"y": 2,
"w": 11,
"h": 21,
"source": "font"
},
{
"char": "X",
"x": 90,
"y": 2,
"w": 12,
"h": 22,
"source": "font"
},
{
"char": "-",
"x": 104,
"y": 2,
"w": 12,
"h": 7,
"source": "font"
},
{
"char": "-",
"x": 118,
"y": 2,
"w": 12,
"h": 8,
"source": "font"
},
{
"char": "K",
"x": 132,
"y": 2,
"w": 12,
"h": 21,
"source": "font"
},
{
"char": "K",
"x": 146,
"y": 2,
"w": 12,
"h": 22,
"source": "font"
},
{
"char": "a",
"x": 160,
"y": 2,
"w": 12,
"h": 17,
"source": "font"
},
{
"char": "a",
"x": 174,
"y": 2,
"w": 13,
"h": 18,
"source": "font"
},
{
"char": "m",
"x": 189,
"y": 2,
"w": 16,
"h": 16,
"source": "font"
},
{
"char": "m",
"x": 207,
"y": 2,
"w": 17,
"h": 17,
"source": "font"
},
{
"char": "p",
"x": 226,
"y": 2,
"w": 12,
"h": 21,
"source": "font"
},
{
"char": "p",
"x": 240,
"y": 2,
"w": 13,
"h": 22,
"source": "font"
},
{
"char": "f",
"x": 255,
"y": 2,
"w": 12,
"h": 21,
"source": "font"
},
{
"char": "f",
"x": 269,
"y": 2,
"w": 11,
"h": 22,
"source": "font"
},
{
"char": "A",
"x": 282,
"y": 2,
"w": 13,
"h": 21,
"source": "font"
},
{
"char": "A",
"x": 297,
"y": 2,
"w": 14,
"h": 22,
"source": "font"
},
{
"char": "n",
"x": 313,
"y": 2,
"w": 11,
"h": 16,
"source": "font"
},
{
"char": "n",
"x": 326,
"y": 2,
"w": 12,
"h": 17,
"source": "font"
},
{
"char": "r",
"x": 340,
"y": 2,
"w": 10,
"h": 16,
"source": "font"
},
{
"char": "r",
"x": 352,
"y": 2,
"w": 10,
"h": 17,
"source": "font"
},
{
"char": "c",
"x": 364,
"y": 2,
"w": 13,
"h": 16,
"source": "font"
},
{
"char": "c",
"x": 379,
"y": 2,
"w": 12,
"h": 18,
"source": "font"
},
{
"char": "h",
"x": 393,
"y": 2,
"w": 12,
"h": 21,
"source": "font"
},
{
"char": "h",
"x": 407,
"y": 2,
"w": 12,
"h": 22,
"source": "font"
},
{
"char": "i",
"x": 421,
"y": 2,
"w": 6,
"h": 21,
"source": "font"
},
{
"char": "i",
"x": 429,
"y": 2,
"w": 6,
"h": 22,
"source": "font"
},
{
"char": "e",
"x": 437,
"y": 2,
"w": 13,
"h": 16,
"source": "font"
},
{
"char": "e",
"x": 452,
"y": 2,
"w": 13,
"h": 17,
"source": "font"
},
{
"char": "(",
"x": 467,
"y": 2,
"w": 10,
"h": 25,
"source": "font"
},
{
"char": "(",
"x": 479,
"y": 2,
"w": 11,
"h": 26,
"source": "font"
},
{
"char": "S",
"x": 492,
"y": 2,
"w": 14,
"h": 21,
"source": "font"
},
{
"char": "S",
"x": 508,
"y": 2,
"w": 14,
"h": 22,
"source": "font"
},
{
"char": ")",
"x": 524,
"y": 2,
"w": 11,
"h": 25,
"source": "font"
},
{
"char": ")",
"x": 537,
"y": 2,
"w": 11,
"h": 25,
"source": "font"
},
{
"char": "O",
"x": 550,
"y": 2,
"w": 13,
"h": 21,
"source": "font"
},
{
"char": "O",
"x": 565,
"y": 2,
"w": 13,
"h": 22,
"source": "font"
},
{
"char": "P",
"x": 580,
"y": 2,
"w": 13,
"h": 21,
"source": "font"
},
{
"char": "P",
"x": 595,
"y": 2,
"w": 13,
"h": 22,
"source": "font"
},
{
"char": "v",
"x": 610,
"y": 2,
"w": 12,
"h": 16,
"source": "font"
},
{
"char": "v",
"x": 624,
"y": 2,
"w": 13,
"h": 17,
"source": "font"
},
{
"char": "t",
"x": 639,
"y": 2,
"w": 10,
"h": 19,
"source": "font"
},
{
"char": "t",
"x": 651,
"y": 2,
"w": 11,
"h": 20,
"source": "font"
},
{
"char": "B",
"x": 664,
"y": 2,
"w": 12,
"h": 21,
"source": "font"
},
{
"char": "B",
"x": 678,
"y": 2,
"w": 13,
"h": 22,
"source": "font"
},
{
"char": "l",
"x": 693,
"y": 2,
"w": 6,
"h": 21,
"source": "font"
},
{
"char": "l",
"x": 701,
"y": 2,
"w": 6,
"h": 22,
"source": "font"
},
{
"char": "y",
"x": 709,
"y": 2,
"w": 13,
"h": 21,
"source": "font"
},
{
"char": "y",
"x": 724,
"y": 2,
"w": 13,
"h": 22,
"source": "font"
},
{
"char": "s",
"x": 739,
"y": 2,
"w": 12,
"h": 16,
"source": "font"
},
{
"char": "s",
"x": 753,
"y": 2,
"w": 12,
"h": 17,
"source": "font"
},
{
"char": "C",
"x": 767,
"y": 2,
"w": 13,
"h": 21,
"source": "font"
},
{
"char": "C",
"x": 782,
"y": 2,
"w": 14,
"h": 22,
"source": "font"
},
{
"char": "o",
"x": 798,
"y": 2,
"w": 12,
"h": 16,
"source": "font"
},
{
"char": "o",
"x": 812,
"y": 2,
"w": 13,
"h": 17,
"source": "font"
},
{
"char": "b",
"x": 827,
"y": 2,
"w": 13,
"h": 21,
"source": "font"
},
{
"char": "b",
"x": 842,
"y": 2,
"w": 13,
"h": 22,
"source": "font"
},
{
"char": "ó",
"x": 857,
"y": 2,
"w": 12,
"h": 22,
"source": "font"
},
{
"char": "ó",
"x": 871,
"y": 2,
"w": 13,
"h": 23,
"source": "font"
},
{
"char": "d",
"x": 886,
"y": 2,
"w": 13,
"h": 21,
"source": "font"
},
{
"char": "d",
"x": 901,
"y": 2,
"w": 13,
"h": 22,
"source": "font"
},
{
"char": "M",
"x": 916,
"y": 2,
"w": 15,
"h": 21,
"source": "font"
},
{
"char": "M",
"x": 933,
"y": 2,
"w": 16,
"h": 22,
"source": "font"
},
{
"char": "é",
"x": 951,
"y": 2,
"w": 13,
"h": 22,
"source": "font"
},
{
"char": "é",
"x": 966,
"y": 2,
"w": 13,
"h": 23,
"source": "font"
},
{
"char": "u",
"x": 981,
"y": 2,
"w": 13,
"h": 16,
"source": "font"
},
{
"char": "u",
"x": 996,
"y": 2,
"w": 13,
"h": 17,
"source": "font"
},
{
"char": "g",
"x": 1011,
"y": 2,
"w": 13,
"h": 21,
"source": "font"
},
{
"char": "g",
"x": 1026,
"y": 2,
"w": 12,
"h": 22,
"source": "font"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

View File

@@ -0,0 +1,381 @@
{
"height": 29,
"glyphs": [
{
"char": "0",
"x": 2,
"y": 2,
"w": 19,
"h": 31,
"source": "fixture"
},
{
"char": "0",
"x": 23,
"y": 2,
"w": 19,
"h": 30,
"source": "fixture"
},
{
"char": "0",
"x": 44,
"y": 2,
"w": 20,
"h": 30,
"source": "fixture"
},
{
"char": "0",
"x": 66,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "1",
"x": 86,
"y": 2,
"w": 10,
"h": 30,
"source": "fixture"
},
{
"char": "1",
"x": 98,
"y": 2,
"w": 10,
"h": 30,
"source": "fixture"
},
{
"char": "1",
"x": 110,
"y": 2,
"w": 10,
"h": 30,
"source": "fixture"
},
{
"char": "1",
"x": 122,
"y": 2,
"w": 10,
"h": 30,
"source": "fixture"
},
{
"char": "2",
"x": 134,
"y": 2,
"w": 18,
"h": 31,
"source": "fixture"
},
{
"char": "2",
"x": 154,
"y": 2,
"w": 18,
"h": 31,
"source": "fixture"
},
{
"char": "2",
"x": 174,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "2",
"x": 194,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "3",
"x": 214,
"y": 2,
"w": 19,
"h": 30,
"source": "fixture"
},
{
"char": "3",
"x": 235,
"y": 2,
"w": 19,
"h": 30,
"source": "fixture"
},
{
"char": "3",
"x": 256,
"y": 2,
"w": 19,
"h": 30,
"source": "fixture"
},
{
"char": "3",
"x": 277,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "4",
"x": 297,
"y": 2,
"w": 19,
"h": 30,
"source": "fixture"
},
{
"char": "4",
"x": 318,
"y": 2,
"w": 19,
"h": 31,
"source": "fixture"
},
{
"char": "4",
"x": 339,
"y": 2,
"w": 19,
"h": 30,
"source": "fixture"
},
{
"char": "4",
"x": 360,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "5",
"x": 380,
"y": 2,
"w": 18,
"h": 31,
"source": "fixture"
},
{
"char": "5",
"x": 400,
"y": 2,
"w": 17,
"h": 31,
"source": "fixture"
},
{
"char": "5",
"x": 419,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "5",
"x": 439,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "6",
"x": 459,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "6",
"x": 479,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "6",
"x": 499,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "6",
"x": 519,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "7",
"x": 539,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "7",
"x": 559,
"y": 2,
"w": 17,
"h": 30,
"source": "fixture"
},
{
"char": "7",
"x": 578,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "7",
"x": 598,
"y": 2,
"w": 17,
"h": 29,
"source": "fixture"
},
{
"char": "8",
"x": 617,
"y": 2,
"w": 18,
"h": 31,
"source": "fixture"
},
{
"char": "8",
"x": 637,
"y": 2,
"w": 19,
"h": 31,
"source": "fixture"
},
{
"char": "9",
"x": 658,
"y": 2,
"w": 18,
"h": 31,
"source": "fixture"
},
{
"char": "9",
"x": 678,
"y": 2,
"w": 18,
"h": 31,
"source": "fixture"
},
{
"char": "9",
"x": 698,
"y": 2,
"w": 18,
"h": 30,
"source": "fixture"
},
{
"char": "0",
"x": 718,
"y": 2,
"w": 20,
"h": 31,
"source": "font"
},
{
"char": "1",
"x": 740,
"y": 2,
"w": 11,
"h": 31,
"source": "font"
},
{
"char": "2",
"x": 753,
"y": 2,
"w": 18,
"h": 31,
"source": "font"
},
{
"char": "3",
"x": 773,
"y": 2,
"w": 19,
"h": 31,
"source": "font"
},
{
"char": "4",
"x": 794,
"y": 2,
"w": 19,
"h": 31,
"source": "font"
},
{
"char": "5",
"x": 815,
"y": 2,
"w": 17,
"h": 31,
"source": "font"
},
{
"char": "6",
"x": 834,
"y": 2,
"w": 19,
"h": 31,
"source": "font"
},
{
"char": "7",
"x": 855,
"y": 2,
"w": 17,
"h": 31,
"source": "font"
},
{
"char": "8",
"x": 874,
"y": 2,
"w": 19,
"h": 31,
"source": "font"
},
{
"char": "9",
"x": 895,
"y": 2,
"w": 19,
"h": 31,
"source": "font"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

View File

@@ -0,0 +1,517 @@
{
"height": 30,
"glyphs": [
{
"char": "W",
"x": 2,
"y": 2,
"w": 39,
"h": 31,
"source": "font"
},
{
"char": "W",
"x": 43,
"y": 2,
"w": 40,
"h": 32,
"source": "font"
},
{
"char": "I",
"x": 85,
"y": 2,
"w": 12,
"h": 31,
"source": "font"
},
{
"char": "I",
"x": 99,
"y": 2,
"w": 13,
"h": 32,
"source": "font"
},
{
"char": "N",
"x": 114,
"y": 2,
"w": 27,
"h": 31,
"source": "font"
},
{
"char": "N",
"x": 143,
"y": 2,
"w": 28,
"h": 32,
"source": "font"
},
{
"char": "L",
"x": 173,
"y": 2,
"w": 23,
"h": 31,
"source": "font"
},
{
"char": "L",
"x": 198,
"y": 2,
"w": 24,
"h": 32,
"source": "font"
},
{
"char": "O",
"x": 224,
"y": 2,
"w": 31,
"h": 31,
"source": "font"
},
{
"char": "O",
"x": 257,
"y": 2,
"w": 32,
"h": 32,
"source": "font"
},
{
"char": "S",
"x": 291,
"y": 2,
"w": 27,
"h": 31,
"source": "font"
},
{
"char": "S",
"x": 320,
"y": 2,
"w": 28,
"h": 32,
"source": "font"
},
{
"char": "E",
"x": 350,
"y": 2,
"w": 25,
"h": 31,
"source": "font"
},
{
"char": "E",
"x": 377,
"y": 2,
"w": 25,
"h": 32,
"source": "font"
},
{
"char": ".",
"x": 404,
"y": 2,
"w": 11,
"h": 9,
"source": "font"
},
{
"char": ".",
"x": 417,
"y": 2,
"w": 12,
"h": 9,
"source": "font"
},
{
"char": "i",
"x": 431,
"y": 2,
"w": 11,
"h": 31,
"source": "font"
},
{
"char": "i",
"x": 444,
"y": 2,
"w": 11,
"h": 32,
"source": "font"
},
{
"char": "e",
"x": 457,
"y": 2,
"w": 24,
"h": 23,
"source": "font"
},
{
"char": "e",
"x": 483,
"y": 2,
"w": 25,
"h": 23,
"source": "font"
},
{
"char": "g",
"x": 510,
"y": 2,
"w": 24,
"h": 31,
"source": "font"
},
{
"char": "g",
"x": 536,
"y": 2,
"w": 25,
"h": 31,
"source": "font"
},
{
"char": "!",
"x": 563,
"y": 2,
"w": 14,
"h": 31,
"source": "font"
},
{
"char": "!",
"x": 579,
"y": 2,
"w": 15,
"h": 32,
"source": "font"
},
{
"char": "V",
"x": 596,
"y": 2,
"w": 30,
"h": 31,
"source": "font"
},
{
"char": "V",
"x": 628,
"y": 2,
"w": 31,
"h": 32,
"source": "font"
},
{
"char": "r",
"x": 661,
"y": 2,
"w": 17,
"h": 23,
"source": "font"
},
{
"char": "r",
"x": 680,
"y": 2,
"w": 17,
"h": 24,
"source": "font"
},
{
"char": "l",
"x": 699,
"y": 2,
"w": 11,
"h": 31,
"source": "font"
},
{
"char": "l",
"x": 712,
"y": 2,
"w": 11,
"h": 32,
"source": "font"
},
{
"char": "o",
"x": 725,
"y": 2,
"w": 25,
"h": 23,
"source": "font"
},
{
"char": "o",
"x": 752,
"y": 2,
"w": 26,
"h": 23,
"source": "font"
},
{
"char": "n",
"x": 780,
"y": 2,
"w": 23,
"h": 23,
"source": "font"
},
{
"char": "n",
"x": 805,
"y": 2,
"w": 24,
"h": 24,
"source": "font"
},
{
"char": "C",
"x": 831,
"y": 2,
"w": 30,
"h": 31,
"source": "font"
},
{
"char": "C",
"x": 863,
"y": 2,
"w": 30,
"h": 32,
"source": "font"
},
{
"char": "T",
"x": 895,
"y": 2,
"w": 26,
"h": 31,
"source": "font"
},
{
"char": "T",
"x": 923,
"y": 2,
"w": 27,
"h": 32,
"source": "font"
},
{
"char": "R",
"x": 952,
"y": 2,
"w": 27,
"h": 31,
"source": "font"
},
{
"char": "R",
"x": 981,
"y": 2,
"w": 28,
"h": 32,
"source": "font"
},
{
"char": "Y",
"x": 1011,
"y": 2,
"w": 29,
"h": 31,
"source": "font"
},
{
"char": "Y",
"x": 1042,
"y": 2,
"w": 30,
"h": 32,
"source": "font"
},
{
"char": "D",
"x": 1074,
"y": 2,
"w": 29,
"h": 31,
"source": "font"
},
{
"char": "D",
"x": 1105,
"y": 2,
"w": 30,
"h": 32,
"source": "font"
},
{
"char": "F",
"x": 1137,
"y": 2,
"w": 23,
"h": 31,
"source": "font"
},
{
"char": "F",
"x": 1162,
"y": 2,
"w": 23,
"h": 32,
"source": "font"
},
{
"char": "A",
"x": 1187,
"y": 2,
"w": 32,
"h": 31,
"source": "font"
},
{
"char": "A",
"x": 1221,
"y": 2,
"w": 33,
"h": 32,
"source": "font"
},
{
"char": "¡",
"x": 1256,
"y": 2,
"w": 14,
"h": 32,
"source": "font"
},
{
"char": "¡",
"x": 1272,
"y": 2,
"w": 15,
"h": 32,
"source": "font"
},
{
"char": "c",
"x": 1289,
"y": 2,
"w": 23,
"h": 23,
"source": "font"
},
{
"char": "c",
"x": 1314,
"y": 2,
"w": 24,
"h": 23,
"source": "font"
},
{
"char": "t",
"x": 1340,
"y": 2,
"w": 16,
"h": 30,
"source": "font"
},
{
"char": "t",
"x": 1358,
"y": 2,
"w": 17,
"h": 30,
"source": "font"
},
{
"char": "a",
"x": 1377,
"y": 2,
"w": 24,
"h": 23,
"source": "font"
},
{
"char": "a",
"x": 1403,
"y": 2,
"w": 25,
"h": 23,
"source": "font"
},
{
"char": "é",
"x": 1430,
"y": 2,
"w": 24,
"h": 33,
"source": "font"
},
{
"char": "é",
"x": 1456,
"y": 2,
"w": 25,
"h": 33,
"source": "font"
},
{
"char": "f",
"x": 1483,
"y": 2,
"w": 17,
"h": 31,
"source": "font"
},
{
"char": "f",
"x": 1502,
"y": 2,
"w": 17,
"h": 32,
"source": "font"
},
{
"char": "G",
"x": 1521,
"y": 2,
"w": 30,
"h": 31,
"source": "font"
},
{
"char": "G",
"x": 1553,
"y": 2,
"w": 31,
"h": 32,
"source": "font"
},
{
"char": "w",
"x": 2,
"y": 37,
"w": 34,
"h": 23,
"source": "font"
},
{
"char": "w",
"x": 38,
"y": 37,
"w": 35,
"h": 23,
"source": "font"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -0,0 +1,373 @@
{
"height": 17,
"glyphs": [
{
"char": "0",
"x": 2,
"y": 2,
"w": 12,
"h": 19,
"source": "fixture"
},
{
"char": "0",
"x": 16,
"y": 2,
"w": 12,
"h": 19,
"source": "fixture"
},
{
"char": "0",
"x": 30,
"y": 2,
"w": 12,
"h": 19,
"source": "fixture"
},
{
"char": "0",
"x": 44,
"y": 2,
"w": 12,
"h": 18,
"source": "fixture"
},
{
"char": "1",
"x": 58,
"y": 2,
"w": 7,
"h": 19,
"source": "fixture"
},
{
"char": "1",
"x": 67,
"y": 2,
"w": 8,
"h": 19,
"source": "fixture"
},
{
"char": "1",
"x": 77,
"y": 2,
"w": 7,
"h": 19,
"source": "fixture"
},
{
"char": "1",
"x": 86,
"y": 2,
"w": 7,
"h": 18,
"source": "fixture"
},
{
"char": "2",
"x": 95,
"y": 2,
"w": 12,
"h": 19,
"source": "fixture"
},
{
"char": "2",
"x": 109,
"y": 2,
"w": 11,
"h": 19,
"source": "fixture"
},
{
"char": "2",
"x": 122,
"y": 2,
"w": 12,
"h": 19,
"source": "fixture"
},
{
"char": "2",
"x": 136,
"y": 2,
"w": 12,
"h": 19,
"source": "fixture"
},
{
"char": "3",
"x": 150,
"y": 2,
"w": 12,
"h": 18,
"source": "fixture"
},
{
"char": "3",
"x": 164,
"y": 2,
"w": 11,
"h": 18,
"source": "fixture"
},
{
"char": "3",
"x": 177,
"y": 2,
"w": 12,
"h": 18,
"source": "fixture"
},
{
"char": "3",
"x": 191,
"y": 2,
"w": 12,
"h": 18,
"source": "fixture"
},
{
"char": "4",
"x": 205,
"y": 2,
"w": 12,
"h": 19,
"source": "fixture"
},
{
"char": "4",
"x": 219,
"y": 2,
"w": 11,
"h": 19,
"source": "fixture"
},
{
"char": "4",
"x": 232,
"y": 2,
"w": 12,
"h": 19,
"source": "fixture"
},
{
"char": "4",
"x": 246,
"y": 2,
"w": 11,
"h": 18,
"source": "fixture"
},
{
"char": "5",
"x": 259,
"y": 2,
"w": 11,
"h": 19,
"source": "fixture"
},
{
"char": "5",
"x": 272,
"y": 2,
"w": 10,
"h": 19,
"source": "fixture"
},
{
"char": "5",
"x": 284,
"y": 2,
"w": 11,
"h": 19,
"source": "fixture"
},
{
"char": "5",
"x": 297,
"y": 2,
"w": 11,
"h": 18,
"source": "fixture"
},
{
"char": "6",
"x": 310,
"y": 2,
"w": 12,
"h": 18,
"source": "fixture"
},
{
"char": "6",
"x": 324,
"y": 2,
"w": 12,
"h": 18,
"source": "fixture"
},
{
"char": "6",
"x": 338,
"y": 2,
"w": 12,
"h": 18,
"source": "fixture"
},
{
"char": "6",
"x": 352,
"y": 2,
"w": 11,
"h": 17,
"source": "fixture"
},
{
"char": "7",
"x": 365,
"y": 2,
"w": 11,
"h": 19,
"source": "fixture"
},
{
"char": "7",
"x": 378,
"y": 2,
"w": 10,
"h": 19,
"source": "fixture"
},
{
"char": "8",
"x": 390,
"y": 2,
"w": 12,
"h": 19,
"source": "fixture"
},
{
"char": "8",
"x": 404,
"y": 2,
"w": 11,
"h": 19,
"source": "fixture"
},
{
"char": "8",
"x": 417,
"y": 2,
"w": 12,
"h": 18,
"source": "fixture"
},
{
"char": "8",
"x": 431,
"y": 2,
"w": 11,
"h": 19,
"source": "fixture"
},
{
"char": "9",
"x": 444,
"y": 2,
"w": 11,
"h": 19,
"source": "fixture"
},
{
"char": "9",
"x": 457,
"y": 2,
"w": 10,
"h": 18,
"source": "fixture"
},
{
"char": "0",
"x": 469,
"y": 2,
"w": 12,
"h": 19,
"source": "font"
},
{
"char": "1",
"x": 483,
"y": 2,
"w": 7,
"h": 19,
"source": "font"
},
{
"char": "2",
"x": 492,
"y": 2,
"w": 12,
"h": 19,
"source": "font"
},
{
"char": "3",
"x": 506,
"y": 2,
"w": 13,
"h": 19,
"source": "font"
},
{
"char": "4",
"x": 521,
"y": 2,
"w": 12,
"h": 19,
"source": "font"
},
{
"char": "5",
"x": 535,
"y": 2,
"w": 11,
"h": 19,
"source": "font"
},
{
"char": "6",
"x": 548,
"y": 2,
"w": 12,
"h": 19,
"source": "font"
},
{
"char": "7",
"x": 562,
"y": 2,
"w": 12,
"h": 19,
"source": "font"
},
{
"char": "8",
"x": 576,
"y": 2,
"w": 12,
"h": 19,
"source": "font"
},
{
"char": "9",
"x": 590,
"y": 2,
"w": 12,
"h": 19,
"source": "font"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -0,0 +1,149 @@
{
"height": 28,
"glyphs": [
{
"char": "0",
"x": 2,
"y": 2,
"w": 24,
"h": 28,
"source": "fixture"
},
{
"char": "0",
"x": 28,
"y": 2,
"w": 24,
"h": 28,
"source": "fixture"
},
{
"char": "0",
"x": 54,
"y": 2,
"w": 24,
"h": 28,
"source": "fixture"
},
{
"char": "0",
"x": 80,
"y": 2,
"w": 24,
"h": 28,
"source": "fixture"
},
{
"char": "5",
"x": 106,
"y": 2,
"w": 24,
"h": 29,
"source": "fixture"
},
{
"char": "5",
"x": 132,
"y": 2,
"w": 23,
"h": 29,
"source": "fixture"
},
{
"char": "5",
"x": 157,
"y": 2,
"w": 24,
"h": 29,
"source": "fixture"
},
{
"char": "5",
"x": 183,
"y": 2,
"w": 24,
"h": 29,
"source": "fixture"
},
{
"char": "0",
"x": 209,
"y": 2,
"w": 25,
"h": 30,
"source": "font"
},
{
"char": "1",
"x": 236,
"y": 2,
"w": 16,
"h": 30,
"source": "font"
},
{
"char": "2",
"x": 254,
"y": 2,
"w": 25,
"h": 30,
"source": "font"
},
{
"char": "3",
"x": 281,
"y": 2,
"w": 24,
"h": 30,
"source": "font"
},
{
"char": "4",
"x": 307,
"y": 2,
"w": 25,
"h": 30,
"source": "font"
},
{
"char": "5",
"x": 334,
"y": 2,
"w": 25,
"h": 30,
"source": "font"
},
{
"char": "6",
"x": 361,
"y": 2,
"w": 26,
"h": 30,
"source": "font"
},
{
"char": "7",
"x": 389,
"y": 2,
"w": 24,
"h": 30,
"source": "font"
},
{
"char": "8",
"x": 415,
"y": 2,
"w": 24,
"h": 30,
"source": "font"
},
{
"char": "9",
"x": 441,
"y": 2,
"w": 27,
"h": 30,
"source": "font"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,132 @@
{
"width": 120,
"height": 68,
"cols": 5,
"keys": [
"0-CB",
"0-RM",
"0-SZ",
"0-TC",
"0-TW",
"1-CB",
"1-RM",
"1-SZ",
"1-TC",
"1-TW",
"2-CB",
"2-RM",
"2-SZ",
"2-TC",
"2-TW",
"3-CB",
"3-RM",
"3-SZ",
"3-TC",
"3-TW",
"4-CB",
"4-RM",
"4-SZ",
"4-TC",
"4-TW",
"5-CB",
"5-RM",
"5-SZ",
"5-TC",
"5-TW",
"6-CB",
"6-RM",
"6-SZ",
"6-TC",
"6-TW",
"7-CB",
"7-RM",
"7-SZ",
"7-TC",
"7-TW",
"8-CB",
"8-RM",
"8-SZ",
"8-TC",
"8-TW",
"9-CB",
"9-RM",
"9-SZ",
"9-TC",
"9-TW",
"10-CB",
"10-RM",
"10-SZ",
"10-TC",
"10-TW",
"11-CB",
"11-RM",
"11-SZ",
"11-TC",
"11-TW",
"12-CB",
"12-RM",
"12-SZ",
"12-TC",
"12-TW",
"13-CB",
"13-RM",
"13-SZ",
"13-TC",
"13-TW",
"14-CB",
"14-RM",
"14-SZ",
"14-TC",
"14-TW",
"15-CB",
"15-RM",
"15-SZ",
"15-TC",
"15-TW",
"16-CB",
"16-RM",
"16-SZ",
"16-TC",
"16-TW",
"17-CB",
"17-RM",
"17-SZ",
"17-TC",
"17-TW",
"18-CB",
"18-RM",
"18-SZ",
"18-TC",
"18-TW",
"19-CB",
"19-RM",
"19-SZ",
"19-TC",
"19-TW",
"20-CB",
"20-RM",
"20-SZ",
"20-TC",
"20-TW",
"21-CB",
"21-RM",
"21-SZ",
"21-TC",
"21-TW",
"22-CB",
"22-RM",
"22-SZ",
"22-TC",
"22-TW",
"23-CB",
"23-RM",
"23-SZ",
"23-TC",
"23-TW",
"24-CB",
"24-RM",
"24-SZ",
"24-TC",
"24-TW"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 KiB

View File

@@ -0,0 +1,73 @@
self.addEventListener("fetch", () => {
return;
});
self.addEventListener("push", (event) => {
// a push that shows no notification can count against the subscription in
// some browsers, so a missing or malformed payload still shows a fallback
let title = "sendou.ink";
let options = { body: "You have a new notification" };
try {
const { title: payloadTitle, ...payloadOptions } = event.data.json();
if (payloadTitle) {
title = payloadTitle;
options = payloadOptions;
}
} catch {
// use the fallback
}
event.waitUntil(self.registration.showNotification(title, options));
});
self.addEventListener("pushsubscriptionchange", (event) => {
event.waitUntil(resubscribe(event));
});
async function resubscribe(event) {
let subscription = event.newSubscription;
if (!subscription) {
const applicationServerKey =
event.oldSubscription?.options.applicationServerKey;
// without the VAPID key subscribing is not possible from the worker;
// the next page load resubscribes instead
if (!applicationServerKey) return;
subscription = await self.registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey,
});
}
await fetch("/notifications/subscribe", {
method: "post",
body: JSON.stringify(subscription),
headers: { "content-type": "application/json" },
});
}
self.addEventListener("notificationclick", (event) => {
// notification links are relative paths; client urls are absolute
const targetUrl = new URL(
event.notification.data?.url ?? "/",
self.location.origin,
).href;
event.notification.close(); // Android needs explicit close.
event.waitUntil(
clients.matchAll({ type: "window" }).then((windowClients) => {
// Check if there is already a window/tab open with the target URL
for (let i = 0; i < windowClients.length; i++) {
const client = windowClients[i];
// If so, just focus it.
if (client.url === targetUrl && "focus" in client) {
return client.focus();
}
}
// If not, then open the target URL in a new window/tab.
if (clients.openWindow) {
return clients.openWindow(targetUrl);
}
}),
);
});