├── .github └── workflows │ └── release.yml ├── .gitignore ├── .nvmrc ├── README.md ├── blobbee.afdesign ├── changelog-config.json ├── package-lock.json ├── package.json ├── scripts ├── generateManifest.ts ├── generateMeta.ts ├── generatePNGs.ts └── generatePreview.ts ├── svg ├── blobbee.svg ├── blobbee_3c.svg ├── blobbee_aww.svg ├── blobbee_blep.svg ├── blobbee_blush.svg ├── blobbee_blush_hide.svg ├── blobbee_boop.svg ├── blobbee_bottom.svg ├── blobbee_box.svg ├── blobbee_cat_ears.svg ├── blobbee_checkmark.svg ├── blobbee_cowboy.svg ├── blobbee_cross.svg ├── blobbee_cross_stitch.svg ├── blobbee_cutlery.svg ├── blobbee_cutlery_eyes.svg ├── blobbee_drake_dislike.svg ├── blobbee_drake_like.svg ├── blobbee_eyes.svg ├── blobbee_facepalm.svg ├── blobbee_filament.svg ├── blobbee_fingerguns.svg ├── blobbee_fingerguns_cool.svg ├── blobbee_flag_ace.svg ├── blobbee_flag_agender.svg ├── blobbee_flag_aro.svg ├── blobbee_flag_bi.svg ├── blobbee_flag_lesbian.svg ├── blobbee_flag_nb.svg ├── blobbee_flag_pan.svg ├── blobbee_flag_rainbow.svg ├── blobbee_flag_trans.svg ├── blobbee_fox_ears.svg ├── blobbee_gamer.svg ├── blobbee_gamer_angry.svg ├── blobbee_grimace.svg ├── blobbee_halo.svg ├── blobbee_happy.svg ├── blobbee_hat_tip.svg ├── blobbee_heart.svg ├── blobbee_heart_eyes.svg ├── blobbee_hmph.svg ├── blobbee_hug.svg ├── blobbee_hug_bread.svg ├── blobbee_hug_bread_heart.svg ├── blobbee_hug_bun.svg ├── blobbee_hug_bun_heart.svg ├── blobbee_hug_cat.svg ├── blobbee_hug_cat_heart.svg ├── blobbee_hug_fox.svg ├── blobbee_hug_fox_heart.svg ├── blobbee_hug_heart.svg ├── blobbee_hug_mouse.svg ├── blobbee_hug_mouse_heart.svg ├── blobbee_hug_potato.svg ├── blobbee_hug_potato_heart.svg ├── blobbee_hug_wolf.svg ├── blobbee_hug_wolf_heart.svg ├── blobbee_kisser.svg ├── blobbee_knife.svg ├── blobbee_laptop.svg ├── blobbee_laugh.svg ├── blobbee_laugh_sweat.svg ├── blobbee_laugh_tears.svg ├── blobbee_lego.svg ├── blobbee_meeple.svg ├── blobbee_megaphone.svg ├── blobbee_mug.svg ├── blobbee_neurodiverse.svg ├── blobbee_nom_potato.svg ├── blobbee_party.svg ├── blobbee_pat.svg ├── blobbee_peek.svg ├── blobbee_pensive.svg ├── blobbee_pleading.svg ├── blobbee_pleased.svg ├── blobbee_popcorn.svg ├── blobbee_sad.svg ├── blobbee_scream.svg ├── blobbee_scream_angry.svg ├── blobbee_shrug.svg ├── blobbee_sleep.svg ├── blobbee_smug.svg ├── blobbee_snuggle.svg ├── blobbee_snuggle_fox.svg ├── blobbee_sob.svg ├── blobbee_sob_loud.svg ├── blobbee_surprise.svg ├── blobbee_think.svg ├── blobbee_train_wagon.svg ├── blobbee_upside_down.svg ├── blobbee_uwu.svg ├── blobbee_verified.svg ├── blobbee_wave.svg ├── blobbee_wink.svg ├── blobbee_woem.svg ├── blobbee_woozy.svg ├── neocat_hug_bee.svg ├── neocat_hug_bee_heart.svg ├── neocat_train_wagon.svg ├── neofox_hug_bee.svg ├── neofox_hug_bee_heart.svg └── neofox_train_wagon.svg └── tsconfig.json /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Create Release 2 | on: 3 | push: 4 | tags: 5 | - '*' 6 | 7 | jobs: 8 | create-release: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | 15 | - name: Install node 16 | uses: actions/setup-node@v4 17 | with: 18 | node-version: 20 19 | 20 | - name: Install dependencies 21 | run: npm install 22 | 23 | - name: Generate PNGs 24 | run: npm run generate-pngs 25 | 26 | - name: Generate hi-res PNGs 27 | run: npm run generate-pngs -- --size 2048 --outdir ./png-2048 28 | 29 | - name: Create tar archive 30 | run: tar -czvf blobbee.tar.gz -C png . 31 | 32 | - name: Generate meta 33 | run: npm run generate-meta 34 | 35 | - name: Generate preview 36 | run: npm run generate-preview 37 | 38 | - name: Create PNG archive 39 | run: zip -rj blobbee.zip png/* 40 | 41 | - name: Create hi-res PNG archive 42 | run: zip -rj blobbee-hires.zip png-2048/* 43 | 44 | - name: Generate checksum 45 | id: checksum 46 | run: 47 | echo "checksum=$(sha256sum blobbee.zip | cut -d " " -f 1)" >> 48 | $GITHUB_OUTPUT 49 | 50 | - name: Generate manifest 51 | run: npm run generate-manifest ${{ steps.checksum.outputs.checksum }} 52 | 53 | - name: Create SVG archive 54 | run: zip -rj blobbee-svg.zip svg/* 55 | 56 | - name: Create changelog 57 | id: changelog 58 | if: ${{ !contains(github.ref_name, 'prerelease') }} 59 | uses: mikepenz/release-changelog-builder-action@v4 60 | with: 61 | configuration: 'changelog-config.json' 62 | commitMode: true 63 | 64 | - name: Create release 65 | uses: softprops/action-gh-release@v2 66 | if: ${{ !contains(github.ref_name, 'prerelease') }} 67 | with: 68 | body: ${{ steps.changelog.outputs.changelog }} 69 | prerelease: ${{ contains(github.ref_name, 'prerelease') }} 70 | files: | 71 | preview.png 72 | blobbee.zip 73 | blobbee-hires.zip 74 | blobbee.tar.gz 75 | blobbee-svg.zip 76 | manifest.json 77 | filemap.json 78 | 79 | - name: Create prerelease 80 | uses: softprops/action-gh-release@v2 81 | if: ${{ contains(github.ref_name, 'prerelease') }} 82 | with: 83 | body: 84 | '![A grid of bee emojis making various 85 | expressions](https://github.com/olivvybee/blobbee/releases/download/${{github.ref_name}}/preview.png)' 86 | prerelease: true 87 | files: | 88 | preview.png 89 | blobbee.zip 90 | blobbee-hires.zip 91 | blobbee.tar.gz 92 | blobbee-svg.zip 93 | manifest.json 94 | filemap.json 95 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.afdesign~lock~ 3 | node_modules 4 | png 5 | *.zip 6 | manifest.json 7 | filemap.json 8 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 20 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Blobbee 2 | 3 | Blobbee is a set of bee emojis, originally designed to just be pride flag bees 4 | but then expanded to become a full set. 5 | 6 | **_Note: blobbee has moved to a 7 | [new repo](https://github.com/olivvybee/emojis)!_** 8 | 9 | This repo is no longer under active development and exists only to preserve the 10 | history of blobbee. 11 | -------------------------------------------------------------------------------- /blobbee.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/olivvybee/blobbee/59551097c396869ad69ed56708dbdadae7cf4bf4/blobbee.afdesign -------------------------------------------------------------------------------- /changelog-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "pr_template": "- #{{TITLE}}", 3 | "template": "#{{CHANGELOG}}\n\n## Changes in this release\n\n#{{UNCATEGORIZED}}\n\n![A grid of bee emojis making various expressions](https://github.com/olivvybee/blobbee/releases/download/#{{TO_TAG}}/preview.png)\n\n*See the [README](https://github.com/olivvybee/blobbee/) for usage instructions.*", 4 | "categories": [] 5 | } 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "blobbee", 3 | "version": "1.0.0", 4 | "description": "A set of bread emojis based on Neofox and Neocat.", 5 | "scripts": { 6 | "generate-pngs": "tsx ./scripts/generatePNGs.ts", 7 | "generate-manifest": "tsx ./scripts/generateManifest.ts", 8 | "generate-meta": "tsx ./scripts/generateMeta.ts", 9 | "generate-preview": "tsx ./scripts/generatePreview.ts" 10 | }, 11 | "license": "MIT", 12 | "dependencies": { 13 | "@types/archiver": "^6.0.2", 14 | "@types/cli-progress": "^3.11.5", 15 | "@types/node": "^20.11.30", 16 | "@types/yargs": "^17.0.32", 17 | "archiver": "^7.0.1", 18 | "canvas": "^2.11.2", 19 | "cli-progress": "^3.12.0", 20 | "nan": "^2.19.0", 21 | "svg2img": "^1.0.0-beta.2", 22 | "tsx": "^4.7.1", 23 | "typescript": "^5.4.2", 24 | "yargs": "^17.7.2" 25 | }, 26 | "engines": { 27 | "node": ">=20" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /scripts/generateManifest.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import fs from 'fs'; 3 | import { argv } from 'process'; 4 | 5 | const checksum = argv[2]; 6 | if (!checksum) { 7 | throw new Error('No checksum provided'); 8 | } 9 | 10 | const pngDirectory = path.resolve('.', 'png'); 11 | 12 | if (!fs.existsSync(pngDirectory)) { 13 | throw new Error('png directory does not exist'); 14 | } 15 | 16 | const filenames = fs 17 | .readdirSync(pngDirectory) 18 | .filter((filename) => filename.endsWith('.png')); 19 | 20 | const fileMap = filenames.reduce((processed, filename) => { 21 | const name = filename.replace('.png', ''); 22 | return { 23 | ...processed, 24 | [name]: filename, 25 | }; 26 | }, {}); 27 | 28 | const fileMapOutput = path.resolve('.', 'filemap.json'); 29 | fs.writeFileSync(fileMapOutput, JSON.stringify(fileMap, null, 2)); 30 | 31 | const manifest = { 32 | blobbee: { 33 | description: 'Bee emojis by @olivvybee@honeycomb.engineer', 34 | files: 35 | 'https://github.com/olivvybee/blobbee/releases/latest/download/filemap.json', 36 | homepage: 'https://github.com/olivvybee/blobbee/', 37 | src: 'https://github.com/olivvybee/blobbee/releases/latest/download/blobbee.zip', 38 | src_sha256: checksum, 39 | license: 'CC BY-NC-SA 4.0', 40 | }, 41 | }; 42 | 43 | const manifestOutput = path.resolve('.', 'manifest.json'); 44 | fs.writeFileSync(manifestOutput, JSON.stringify(manifest, null, 2)); 45 | -------------------------------------------------------------------------------- /scripts/generateMeta.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import fs from 'fs'; 3 | 4 | const baseMeta = { 5 | metaVersion: 2, 6 | host: 'beehive.gay', 7 | exportedAt: new Date().toISOString(), 8 | }; 9 | 10 | const pngDirectory = path.resolve('.', 'png'); 11 | 12 | if (!fs.existsSync(pngDirectory)) { 13 | throw new Error('png directory does not exist'); 14 | } 15 | 16 | const filenames = fs 17 | .readdirSync(pngDirectory) 18 | .filter((filename) => filename.endsWith('.png')); 19 | 20 | const emojis = filenames.map((filename) => { 21 | const name = filename.replace('.png', ''); 22 | 23 | const firstUnderscore = name.indexOf('_'); 24 | const category = 25 | firstUnderscore !== -1 ? name.slice(0, firstUnderscore) : name; 26 | 27 | return { 28 | downloaded: true, 29 | fileName: filename, 30 | emoji: { 31 | name, 32 | category, 33 | aliases: [], 34 | }, 35 | }; 36 | }); 37 | 38 | const meta = { 39 | ...baseMeta, 40 | emojis, 41 | }; 42 | 43 | const outPath = path.resolve(pngDirectory, 'meta.json'); 44 | fs.writeFileSync(outPath, JSON.stringify(meta, null, 2)); 45 | -------------------------------------------------------------------------------- /scripts/generatePNGs.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import fs from 'fs'; 3 | 4 | import yargs from 'yargs'; 5 | import cliProgress, { Presets } from 'cli-progress'; 6 | import svg2imgWithCallback, { svg2imgOptions } from 'svg2img'; 7 | 8 | const svg2img = (svg: string, options?: svg2imgOptions): Promise => 9 | new Promise((resolve, reject) => 10 | svg2imgWithCallback(svg, options, (err, buffer) => { 11 | if (err) { 12 | reject(err); 13 | } 14 | resolve(buffer); 15 | }) 16 | ); 17 | 18 | interface RunArgs { 19 | newOnly?: boolean; 20 | size: number; 21 | outdir: string; 22 | } 23 | 24 | const DEFAULT_SIZE = 256; 25 | const DEFAULT_DIR = path.resolve('.', 'png'); 26 | 27 | const run = async ({ 28 | newOnly = false, 29 | size = DEFAULT_SIZE, 30 | outdir = DEFAULT_DIR, 31 | }: RunArgs) => { 32 | const svgDirectory = path.resolve('.', 'svg'); 33 | const svgs = fs 34 | .readdirSync(svgDirectory) 35 | .filter((filename) => filename.endsWith('.svg')); 36 | 37 | if (!fs.existsSync(outdir)) { 38 | fs.mkdirSync(outdir); 39 | } 40 | 41 | const existingPngs = fs 42 | .readdirSync(outdir) 43 | .filter((filename) => filename.endsWith('.png')); 44 | 45 | const svgsToProcess = newOnly 46 | ? svgs.filter( 47 | (filename) => !existingPngs.includes(filename.replace('svg', 'png')) 48 | ) 49 | : svgs; 50 | 51 | if (svgsToProcess.length === 0) { 52 | console.log('No new SVGs found to process.'); 53 | return; 54 | } 55 | 56 | const progress = new cliProgress.MultiBar({}, Presets.shades_classic); 57 | const progressBar = progress.create(svgsToProcess.length, 0); 58 | 59 | for (let i = 0; i < svgsToProcess.length; i++) { 60 | const svgFilename = svgsToProcess[i]; 61 | const svgPath = path.resolve(svgDirectory, svgFilename); 62 | const pngFilename = svgFilename.replace('svg', 'png'); 63 | const pngPath = path.resolve(outdir, pngFilename); 64 | 65 | const buffer = await svg2img(svgPath, { 66 | resvg: { 67 | fitTo: { 68 | mode: 'width', 69 | value: size, 70 | }, 71 | }, 72 | }); 73 | 74 | fs.writeFileSync(pngPath, buffer); 75 | progress.log(`${svgFilename} -> ${pngFilename}\n`); 76 | progressBar.increment(); 77 | } 78 | 79 | progress.remove(progressBar); 80 | progress.stop(); 81 | }; 82 | 83 | const argv = yargs(process.argv) 84 | .option('newOnly', { 85 | alias: 'n', 86 | type: 'boolean', 87 | description: 88 | "Only generate PNGs for SVGs that don't already have a PNG version", 89 | }) 90 | .option('size', { 91 | alias: 's', 92 | type: 'number', 93 | description: 'The size to generate PNGs at, in pixels', 94 | default: DEFAULT_SIZE, 95 | }) 96 | .option('outdir', { 97 | alias: 'o', 98 | type: 'string', 99 | description: 'Output directory to save PNGs into', 100 | default: DEFAULT_DIR, 101 | }) 102 | .parseSync(); 103 | 104 | run(argv); 105 | -------------------------------------------------------------------------------- /scripts/generatePreview.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import fs from 'fs'; 3 | import { createCanvas, Image } from 'canvas'; 4 | 5 | const MAX_COLUMNS = 10; 6 | const EMOJI_SIZE = 256; 7 | const SPACE_PER_EMOJI = 300; 8 | const SPACING = SPACE_PER_EMOJI - EMOJI_SIZE; 9 | 10 | const pngDirectory = path.resolve('.', 'png'); 11 | 12 | if (!fs.existsSync(pngDirectory)) { 13 | throw new Error('png directory does not exist'); 14 | } 15 | 16 | const filenames = fs 17 | .readdirSync(pngDirectory) 18 | .filter((filename) => filename.endsWith('.png')); 19 | 20 | const rows = Math.ceil(filenames.length / MAX_COLUMNS); 21 | const columns = rows === 1 ? filenames.length : MAX_COLUMNS; 22 | 23 | const height = rows * SPACE_PER_EMOJI; 24 | const width = columns * SPACE_PER_EMOJI; 25 | 26 | const canvas = createCanvas(width, height); 27 | const ctx = canvas.getContext('2d'); 28 | 29 | ctx.fillStyle = '#cfb0eb'; 30 | ctx.fillRect(0, 0, width, height); 31 | 32 | filenames.forEach((filename, index) => { 33 | const filePath = path.resolve(pngDirectory, filename); 34 | 35 | const x = (index % MAX_COLUMNS) * SPACE_PER_EMOJI + SPACING / 2; 36 | const y = Math.floor(index / MAX_COLUMNS) * SPACE_PER_EMOJI + SPACING / 2; 37 | 38 | const fileData = fs.readFileSync(filePath); 39 | const image = new Image(); 40 | image.onload = () => { 41 | ctx.drawImage(image, x, y); 42 | }; 43 | image.src = fileData; 44 | image.width = EMOJI_SIZE; 45 | }); 46 | 47 | const output = canvas.toBuffer(); 48 | const outPath = path.resolve('.', 'preview.png'); 49 | 50 | fs.writeFileSync(outPath, output); 51 | -------------------------------------------------------------------------------- /svg/blobbee.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /svg/blobbee_3c.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /svg/blobbee_blep.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /svg/blobbee_blush.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /svg/blobbee_cat_ears.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /svg/blobbee_drake_dislike.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /svg/blobbee_drake_like.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /svg/blobbee_eyes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /svg/blobbee_facepalm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /svg/blobbee_flag_ace.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /svg/blobbee_flag_agender.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /svg/blobbee_flag_aro.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /svg/blobbee_flag_bi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /svg/blobbee_flag_lesbian.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /svg/blobbee_flag_nb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /svg/blobbee_flag_pan.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /svg/blobbee_flag_trans.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /svg/blobbee_fox_ears.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /svg/blobbee_grimace.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /svg/blobbee_halo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /svg/blobbee_happy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /svg/blobbee_kisser.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /svg/blobbee_laugh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /svg/blobbee_laugh_sweat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /svg/blobbee_laugh_tears.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /svg/blobbee_pat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /svg/blobbee_pensive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /svg/blobbee_pleading.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /svg/blobbee_pleased.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /svg/blobbee_sad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /svg/blobbee_scream.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /svg/blobbee_scream_angry.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /svg/blobbee_sleep.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /svg/blobbee_smug.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /svg/blobbee_sob.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /svg/blobbee_sob_loud.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /svg/blobbee_think.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /svg/blobbee_upside_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /svg/blobbee_uwu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /svg/blobbee_wave.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /svg/blobbee_wink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /svg/blobbee_woem.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /svg/blobbee_woozy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "esModuleInterop": true, 5 | "module": "ESNext", 6 | "moduleResolution": "node", 7 | "strict": true, 8 | "target": "es2017", 9 | "noImplicitAny": false 10 | }, 11 | "include": ["scripts/**/*"] 12 | } 13 | --------------------------------------------------------------------------------