{"version":3,"sources":["jsdelivr-header.js","/npm/canvacord@6.0.4/src/index.ts","/npm/canvacord@6.0.4/src/assets/Font.ts","/npm/canvacord@6.0.4/src/assets/AssetsFactory.ts","/npm/canvacord@6.0.4/src/assets/fonts/fonts.ts","/npm/canvacord@6.0.4/src/helpers/StyleSheet.ts","/npm/canvacord@6.0.4/src/helpers/jsx.ts","/npm/canvacord@6.0.4/src/helpers/loadImage.ts","/npm/canvacord@6.0.4/src/helpers/image.ts","/npm/canvacord@6.0.4/src/helpers/decoder.ts","/npm/canvacord@6.0.4/src/canvas/utils.ts","/npm/canvacord@6.0.4/src/canvas/ImageGen.ts","/npm/canvacord@6.0.4/src/canvas/Encodable.ts","/npm/canvacord@6.0.4/src/assets/TemplateFactory.ts","/npm/canvacord@6.0.4/src/helpers/utils.ts","/npm/canvacord@6.0.4/src/template/Builder.tsx","/npm/canvacord@6.0.4/src/template/BuilderOptionsManager.ts","/npm/canvacord@6.0.4/src/components/LeaderboardBuilder.tsx","/npm/canvacord@6.0.4/src/components/RankCardBuilder.tsx","/npm/canvacord@6.0.4/src/components/rank-card/NeoClassicalCard.tsx","/npm/canvacord@6.0.4/src/canvas/CanvasHelper.ts","/npm/canvacord@6.0.4/src/canvas/ImageFilterer.ts","/npm/canvacord@6.0.4/src/canvas/CanvasImage.ts","/npm/canvacord@6.0.4/src/canvas/ImageManipulator.ts","/npm/canvacord@6.0.4/src/canvas/Canvacord.ts"],"names":[],"mappings":"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","file":"/npm/canvacord@6.0.4/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/canvacord@6.0.4/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","export * from \"./assets\";\nexport * from \"./components\";\nexport * from \"./helpers\";\nexport * from \"./template\";\nexport * from \"./canvas\";\n","import { randomUUID } from \"crypto\";\nimport { readFileSync } from \"fs\";\nimport { readFile } from \"fs/promises\";\nimport { Font as FontData } from \"satori\";\nimport { FontFactory } from \"./AssetsFactory\";\nimport { GlobalFonts } from \"@napi-rs/canvas\";\nimport { Fonts } from \"./fonts/fonts\";\n\nconst randomAlias = () => randomUUID() as string;\n\nlet defaultLoaded: Font;\n\nexport class Font {\n  /**\n   * Creates and registers a new Font instance for both canvas and builder apis.\n   * @param data The font data\n   * @param [alias] The font alias. If not provided, a random UUID will be used.\n   *\n   * const data = await readFile('path/to/font.ttf');\n   * const font = new Font(data, 'my-font');\n   \n   */\n  public constructor(\n    public data: Buffer,\n    public alias = randomAlias(),\n  ) {\n    GlobalFonts.register(data, alias);\n    FontFactory.set(this.alias, this);\n  }\n\n  /**\n   * The alias for this font.\n   */\n  public get name() {\n    return this.alias;\n  }\n\n  /**\n   * Returns the font data that includes information such as the font name, weight, data, and style.\n   */\n  public getData(): FontData {\n    return {\n      data: this.data,\n      name: this.alias,\n      weight: 400,\n      style: \"normal\",\n    };\n  }\n\n  /**\n   * String representation of this font.\n   */\n  public toString() {\n    return this.alias;\n  }\n\n  /**\n   * JSON representation of this font.\n   */\n  public toJSON() {\n    return this.getData();\n  }\n\n  /**\n   * Creates a new Font instance from a file.\n   * @param path The path to the font file\n   * @param [alias] The font alias. If not provided, a random UUID will be used.\n   *\n   * const font = await Font.fromFile('path/to/font.ttf', 'my-font');\n   \n   */\n  public static async fromFile(path: string, alias?: string) {\n    const buffer = await readFile(path);\n    return new Font(buffer, alias);\n  }\n\n  /**\n   * Creates a new Font instance from a file synchronously.\n   * @param path The path to the font file\n   * @param [alias] The font alias. If not provided, a random UUID will be used.\n   *\n   * const font = Font.fromFileSync('path/to/font.ttf', 'my-font');\n   */\n  public static fromFileSync(path: string, alias?: string) {\n    const buffer = readFileSync(path);\n    return new Font(buffer, alias);\n  }\n\n  /**\n   * Creates a new Font instance from a buffer.\n   * @param buffer The buffer containing the font data\n   * @param [alias] The font alias. If not provided, a random UUID will be used.\n   *\n   * const buffer = await readFile('path/to/font.ttf');\n   * const font = Font.fromBuffer(buffer, 'my-font');\n   \n   */\n  public static fromBuffer(buffer: Buffer, alias?: string) {\n    return new Font(buffer, alias);\n  }\n\n  /**\n   * Loads the default font bundled with this package.\n   *\n   * const font = Font.loadDefault();\n   \n   */\n  public static loadDefault() {\n    if (defaultLoaded) return defaultLoaded;\n    defaultLoaded = Font.fromBuffer(Fonts.Geist, \"geist\");\n    return defaultLoaded;\n  }\n\n  /**\n   * Unloads the font from the canvas and builder apis.\n   */\n  public unloadAll() {\n    FontFactory.clear();\n  }\n}\n","import type { Font } from \"./Font\";\n\nexport const FontFactory = new Map<string, Font>();\n\nconst BASE_URL =\n  process.env.CANVACORD_ASSETS_BASE_URL ||\n  \"https://raw.githubusercontent.com/neplextech/canvacord-assets/main/public/canvacord\";\nconst prepareURL = (path: string) => `${BASE_URL}/${path}`;\n\n/**\n * The image assets factory.\n */\nexport const ImageFactory = {\n  AFFECT: prepareURL(\"AFFECT.png\"),\n  BATSLAP: prepareURL(\"BATSLAP.png\"),\n  BEAUTIFUL: prepareURL(\"BEAUTIFUL.png\"),\n  BED: prepareURL(\"BED.png\"),\n  BOTBADGE: prepareURL(\"BOTBADGE.png\"),\n  CAPTCHA: prepareURL(\"CAPTCHA.png\"),\n  CHANGEMYMIND: prepareURL(\"CHANGEMYMIND.png\"),\n  CLYDE: prepareURL(\"CLYDE.png\"),\n  DELETE: prepareURL(\"DELETE.png\"),\n  DISCORD: prepareURL(\"DISCORD.png\"),\n  DISTRACTED: prepareURL(\"DISTRACTED.png\"),\n  DND: prepareURL(\"DND.png\"),\n  FACEPALM: prepareURL(\"FACEPALM.png\"),\n  RAINBOW: prepareURL(\"RAINBOW.png\"),\n  HITLER: prepareURL(\"HITLER.png\"),\n  IDLE: prepareURL(\"IDLE.png\"),\n  IMPOSTER: prepareURL(\"IMPOSTER.png\"),\n  IMPOSTERWITH: prepareURL(\"IMPOSTERWITH.png\"),\n  JAIL: prepareURL(\"JAIL.png\"),\n  JOKEOVERHEAD: prepareURL(\"JOKEOVERHEAD.png\"),\n  KICK: prepareURL(\"KICK.png\"),\n  KISS: prepareURL(\"KISS.png\"),\n  KO: prepareURL(\"KO.png\"),\n  OFFLINE: prepareURL(\"OFFLINE.png\"),\n  OHNO: prepareURL(\"OHNO.png\"),\n  ONLINE: prepareURL(\"ONLINE.png\"),\n  OPINION: prepareURL(\"OPINION.png\"),\n  PHUB: prepareURL(\"PHUB.png\"),\n  PUNCH: prepareURL(\"PUNCH.png\"),\n  RIP: prepareURL(\"RIP.png\"),\n  SHIT: prepareURL(\"SHIT.png\"),\n  SNOWFLAKE: prepareURL(\"SNOWFLAKE.png\"),\n  SPANK: prepareURL(\"SPANK.png\"),\n  TOBECONTINUED: prepareURL(\"TOBECONTINUED.png\"),\n  TRASH: prepareURL(\"TRASH.png\"),\n  TRIGGERED: prepareURL(\"TRIGGERED.png\"),\n  WANTED: prepareURL(\"WANTED.png\"),\n  WASTED: prepareURL(\"WASTED.png\"),\n  WELCOMEBG: prepareURL(\"WELCOMEBG.png\"),\n  YOUTUBE: prepareURL(\"YOUTUBE.png\"),\n};\n","/**\n * The bundled fonts in this package.\n */\nexport const Fonts = {\n  /**\n   * Geist sans font\n   * @see https://vercel.com/font/sans\n   */\n  get Geist() {\n    return Buffer.from(\n      \"T1RUTwAMAIAAAwBAQ0ZGIC9Bk94AABT8AACZE0dERUY4EjfYAACuEAAAARJHUE9TxZMpCAAAryQAABi2R1NVQowLjN4AAMfcAAASgE9TLzJOyiLSAAALgAAAAGBjbWFwDu5h1AAADngAAAZkaGVhZCrJAR4AAADUAAAANmhoZWEM+AmbAAALXAAAACRobXR4vqWNQQAAAQwAAApObWF4cAKUUAAAAADMAAAABm5hbWU8hhcjAAAL4AAAApdwb3N0/58AMgAAFNwAAAAgAABQAAKUAAAAAQAAAAEAg3lXnhpfDzz1AAMD6AAAAADhXF5uAAAAAOFcXm7/1/8lCSIDtgAAAAcAAgAAAAAAAAGuAFAA+gAAApwAFQKcABUCnAAVApwAFQKcABUCnAAVApwAFQKcABUCvAAVApwAFQKcABUDywAVAqYAXAK8ADECvAAxArwAMQK8ADECvAAxArwAMQK9AFwDFQAxAr0AXAMVADECWgBcAloAXAJaAFwCWgBcAloAXAJaAFwCWgBcAloAXAJaAFwCWgBcAtEAMQJNAFwCwwAxAsMAMQLDADECwwAxAsMAMQLDADECvgBcA2UAXAK+AFwBDQBcAxMAXAENAFwBDf/+AQ0AEQENAFsBDQAOAQ0ABwENADABDf/fAlQAQwJUAEMCVABDAosAXAKLAFwCQwBcAkMAXAIfAFwCQwBcAmUAFgNsAFwC4QBcAuEAXALhAFwC4QBcAuEAXALkADEC5AAxAuQAMQLkADEC5AAxAuQAMQLkADEC6QAyAuQAMQQ9ADECiQBcAmsAXALkADECngBcAp4AXAKeAFwCngBcAocAOwKHADsAuQAxAocAOwKHADsChwA7AocAOwKVAFwCQgAZAkIAGQJCABkCQgAZArAATQKwAE0CsABNArAATQKwAE0CsABNArAATQKwAE0CsABNArAATQKwAE0CnAAVA44AFQOOABUDjgAVA44AFQOOABUCdAAbAnQAFQJ0ABUCdAAVAnQAFQJ0ABUCdAAVAh4AGwIeABsCHgAbAh4AGwJDAFwC4QBcAqMAXAKjAFwCowBcAqMAXAGuADEBrgAxAa4AMQGuADEBrgAxAa4AMQGuADEBrgAxAa4AMAK8ADECvAAxArwAMQK8ADECvAAxArwAMQKcABUCvAAxAloAXAJaAFwCwwAxAQ0AAQENAFMC5AAxArAATQOOABUCdAAVAh4AGwGuADEBrgAxArwAMQRKABUEXgBNAj4ALwI+AC8CPgAvAj4ALwI+AC8CPgAvAj4ALwI+AC8CPgAvAj4ALwI+AC8DpAAvAloAVQInAC8CJwAvAicALwInAC8CJwAvAicALwJaAC8CVAAvAvIALwKPAC8CNwAvAjcALwI3AC8CNwAvAjcALwI3AC8CNwAvAjcALwI3AC8CNwAvAjcALwGRAEECWQAvAlkALwJZAC8CWQAvAlkALwJZAC8CSABVAjkAGQJI//YA/ABTAPwAVQD8AFUA/P/2APwACQD8AFMA/AAGAfQAUwD8//8A/AAmAPz/1wEC//sBAv/7AQL/+wEC//sCUgBVAlIAVQEgAFcBIABXAZIAVwEgAE0BfwBXA28AVQJIAFUCSABVAkgAVQJIAFUCSABVAkIALwJCAC8CQgAvAkIALwJCAC8CQgAvAkIALwIyAAwCQgAvA8UALwJaAFUCWgBVAloALwGBAFUBgQBVAYEAPgGBAB8CEQAvAhEALwC5ADECEQAvAhEALwIRAC8CEQAvAlIAVQGPADwBvwA8AY8APAGPADwCSgBXAkoAVwJKAFcCSgBXAkoAVwJKAFcCSgBXAkoAVwJKAFcCSgBXAkoAVwIWABYDMQAWAzEAFgMxABYDMQAWAzEAFgJIAC8CFwAWAhcAFgIXABYCFwAWAhcAFgIXABYCJQA5AiUAOQIlADkCJQA5ASAATQJIAFUCLwAqAi8AKgIvACoCLwAqAi8AKgIvACoCLwAqAi8AKgIvACoCLwAqAi8AKgJUAC8CVAAvAlQALwJUAC8CVAAvAlQALwJUAC8CVAAvAlQALwJUAC8CVAAvAQsAXAELAFwBnABXAQsAJwGAAFcCPgAvAicALwI3AC8CNwAvAlkALwD8AEsA/P/5APwASwH0AEsA/AAmAQL/+wJCAC8CSgBXAzEAFgIXABYCJQA5Ai8AKgJUAC8CrgBBArsAPAKOAEECngBBAj4ALwJCAC8C4gAxApYAPAKUADEBXAAZAlQAMQJuADECSAAZAloAMQJZADECKQAZAm0AMQJZADEDQAAvA0AALwNAAC8DQAAvA0AALwNAAC8DQAAvA0AALwNAAC8DQAAvA0AALwNAAC8DQAAvA0AALwNAAC8DQAAvA0AALwNAAC8DQAAvA0AALwKUADEBsAAZAlgAEAJYAH8CWAAxAlgAKgJYABkCWAAvAlgALgJYAC0CWAAkAlgALgJYAA4DzQAyA8EAMgO6ADEDvAAyA80AMQO1ADIDvwAyA9AAMQPLADIEsACmAlgAlQJYALQCWACgAlgAoAJYAIQCWACmAlgApQJYAKYCWACfAlgAqAJYAJUCWAC0AlgAoAJYAKACWACEAlgApgJYAKUCWACmAlgAnwJYAKgA+gAAAV8ALwlgAD4HCAA+BLAAPgDIAC8AyAAvASIAXAEiAF0COgAvANYANgDWADYCMwAvAjMALwDIAC8BIwAvAbQALwFxAC8B3v/2Ad8AKAHcADQCfgAxAbQALwOPAC8B1wAvAMgALwDIAC8BEgA3Ad7/9gL+AC8AyAAvAjMALwFcAC8AtQAvAMgALwHeACcAzwAvASkAXAEqAFwCQgAvAM8ALwDPAC8CMwAvAjMALwDPAC8CMgAvAM8ALwESADAAzwAvAjMALwDQAC8BqAAvAa0ALwJUAC8DkAAvAjIALwNWAC8C0AAvATQALwE0AC8BpQAvAaUALwFLAC8BSwAvAWQALwFkAC8BbwAvAW8ALwGlAC8BpQAvAYwALwGMAC8CCwAvAgsALwGMADABjAAvAY0ALwGNAC8BZwAvAWcALwFLAC8BSwAvATQALwE0AC8AzAAxAWUAMQFlADEBZQAxAMwAMQDMADECFwAvAhcALwFNAC8BTQAvAWAAMQC5ADEB1ABBAn8AXASwAD4HCAA+CWAAPgcHAD4DQAAvA0AALwOTADECfAAxAkgAIwItADsDRAAxAlsAMQJbADEDegBcAYgALwD5AC8BcQAvAQUAXAEFAFwCOQBcAjkAXARCAFwDVwAxAicALwJJADEChwA7At8AOwKhADsCzQAtAqUAXAMEAFwCZwA7AnQAFQI6AC8COgAvAeUALwI6AC8ClQBcAjoALwIpADECJQAvAjoALwI6AC8COgAvAhcALwIXAC8B5QAvAY4ALwNKAC8BeQAAAosAFQJoABkCEQAbAmIAFgJVAC8CUABaAv4ALwQ/AC8C0QAxAnUAMQMoADECdQAxAtEAMQJ1ADEDKAAxAnUAMQQTADEC0QAxApAAMQKlADECpQAxApcAMQKXADECnQAxAp0AMQKdADECogAxAp0AMQMZABUBoQAxAl0AMQMGADECXQAxAaEAMQJdADIDBgAxAl0AMQNLADEBoQAyA1QAMQNUADEDVAAxAhkAMQNdABUDOABcA10AFQM4ABYDXQAVAzgAXANdABUDOAAWAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwFDAC8AtAAvAPkALwD5AC8BcAAvAW8ALwFvAC8BeAAvARYALwGsAC8BXQAvATQALwECAC8BZAAvAMUALwJYAAADQAAvAC8AAAABAAADmP8kAGQJYP/X/oMJIgABAAAAAAAAAAAAAAAAAAACkwAEAkwBkAAFAAgCigJYAAAASwKKAlgAAAFeADIBCQAAAAAAAAAAAAAAAKEAAP8AAeT7AAAAEAAAAABVS1dOAMAAIP9dA5j/JABkA5gA3CAAAJMAAAAAAhICxgAAACAABAAAABYBDgABAAAAAAABAAUAAAABAAAAAAACAAcABQABAAAAAAAEAA0ADAABAAAAAAAFACEAGQABAAAAAAAGAA0AOgADAAEECQABAAoARwADAAEECQACAA4AUQADAAEECQADADAAXwADAAEECQAEABoAjwADAAEECQAFAEIAqQADAAEECQAGABoA6wADAAEECQAQAAoARwADAAEECQARAA4AUQADAAEECQEAABIBBQADAAEECQEBAAoBFwADAAEECQECAAoBIQADAAEECQEDAAoBKwADAAEECQEEAAoBNQADAAEECQEFAAoBPwADAAEECQEGABQBSQADAAEECQEHABYBXQADAAEECQEIABYBc0dlaXN0UmVndWxhckdlaXN0IFJlZ3VsYXJWZXJzaW9uIDEuMDAyO0dseXBocyAzLjEuMiAoMzE1MSlHZWlzdC1SZWd1bGFyAEcAZQBpAHMAdABSAGUAZwB1AGwAYQByADEALgAwADAAMgA7AFUASwBXAE4AOwBHAGUAaQBzAHQALQBSAGUAZwB1AGwAYQByAEcAZQBpAHMAdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwADAAMgA7AEcAbAB5AHAAaABzACAAMwAuADEALgAyACAAKAAzADEANQAxACkARwBlAGkAcwB0AC0AUgBlAGcAdQBsAGEAcgBOAG8AIAB0AGEAaQBsACAAYQBBAGwAdAAgAGEAQQBsAHQAIABsAEEAbAB0ACAAUgBBAGwAdAAgAEkAQQBsAHQAIABHAEEAbAB0ACAAYQByAHIAbwB3AHMAUgBvAHUAbgBkAGUAZAAgAGQAbwB0AEEAbAB0ACAAbgB1AG0AYgBlAHIAcwAAAAACAAAAAwAAABQAAwABAAAAFAAEBlAAAADEAIAABgBEAC8AOQB+ARMBKwE3AT4BSAFNAWUBfgGPAZIBzgIbAjcCWQLHAt0DBAMIAwwDEgMoA6kDwA4/HiEehR6eHr0e8x75IBQgGiAeICIgJiAwIDMgOiBEIHAgeSCJIKogrCC0ILkgvSEXISIhVSFeIZkhnSGqIbEhtSHlIeciAiIGIg8iEiIaIh4iKyJIImAiZSPOJGgk6iT/JbMltyW9JcElzCXPJjonfjADMBEwFzAcp4z/A/8K/w//G/8g/z3/P/9b/13//wAAACAAMAA6AKABFgEuATkBQQFMAVABaAGPAZIBzQIYAjcCWQLGAtgDAAMGAwoDEgMmA6kDwA4/HiAegB6eHrwe8h74IBMgGCAcICAgJiAwIDIgOSBEIHAgdCCAIKogrCC0ILkgvSEWISIhUyFbIZAhnSGpIbAhsyHkIeciAiIGIg8iESIaIh4iKyJIImAiZCPOJGAk6iT/JbIltiW8JcAlyiXPJjkndjACMAgwFDAcp4v/Af8F/wz/Gv8f/zv/P/9b/13//wAAAS8AAAAAAAAAAAAAAAAAAAAAAAD+lAB2AAAAAP6o/m//wQAAAAAAAAAA/2n/Vv20/Z7zygAAAADhwgAAAAAAAOHKAAAAAAAA4YviE+Hn4cvhReEu4S7hFOF+4XjhceFu4WkAAOD1AADgNQAA4LHgqOCj4KLga+Bx4D7gNuAuAADgJeAc4BDf7t/QAADeUt0U3IncagAAAAAAAAAAAADclNvV2fQAAAAAAADRxAAAAAAAAAAAAAAAAAAAApYCkQKQAAEAxAAAAOABaAJOAngCigKUAqICpALOAAAAAAL2AvgAAAAAAAAC+AMCAwoDDgAAAAAAAAAAAAADCAMKAAADEgMUAxYAAAMWAxoDHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwgAAAMIAAADCgAAAAAAAAAAAAAAAAAAAAAAAAMKAAAAAAAAAAAAAAMCAAAAAAAAAAAC/AL+AwADAgMEAAAAAAAAAwIDBAMWAAADGgMcAyADKgMwAzIDNAAAAAAAAAAAAAEBsgIGAboCIwJCAhECBwHiAeMBuAIrAa4B2wGtAbsBrwGwAjICLwIxAbQCEAACAA4ADwAVABkAJAAlACsALgA4ADsAPQBCAEMASABSAFQAVQBZAGEAZQBwAHEAdgB3AH0B5gG8AecCOQHfAoQApwCzALQAugC+AMkAygDQANMA3gDiAOQA6QDqAO8A+QD7APwBAAEIAQwBFwEYAR0BHgEkAeQCGwHlAjcBqAGzAiECKQIiAioCHAITAoICFAFbAgICOAHcAhUCjAIYAjUBoAGhAoUCQQISAbYCjQGfAVwCAwGNAYoBjgG1AAgAAwAGAAwABwALAA0AEgAfABoAHAAdADQAMAAxADIAFgBHAEwASQBKAFAASwItAE8AagBmAGgAaQB4AFMBBwCtAKgAqwCxAKwAsACyALcAxAC/AMEAwgDZANUA1gDXALsA7gDzAPAA8QD3APICLgD2AREBDQEPARABHwD6ASEACQCuAAQAqQAKAK8AEAC1ABMAuAAUALkAEQC2ABcAvAAYAL0AIADFAB4AwwAhAMYAGwDAACcAzAAmAMsAKQDOACgAzQAtANIALADRADcA3QA1ANsANgDcADMA1AAvANoAOgDhADwA4wA+AOUAQADnAD8A5gBBAOgARADrAEYA7QBFAOwATgD1AE0A9ABRAPgAVgD9AFgA/wBXAP4AWgEBAF4BBQBdAQQAXAEDAGMBCgBiAQkAbwEWAGwBEwBnAQ4AbgEVAGsBEgBtARQAcwEaAHkBIAB6AH4BJQCAAScAfwEmAAUAqgBfAQYAZAELAokCgwKKAo4CiwKGAnECcgJ1AnkCegJ3AnACbwJ4AnMCdgAqAM8AdQEcAHIBGQB0ARsAIgDHAHsBIgB8ASMCAAIBAfwB/gH/Af0CHQIeAbcCHwIWAYsBjAGPAkoCRAJGAkgCTAJNAksCRQJHAkkCPgIsAjQCMwJnAmsCaAJsAmkCbQJqAm4CZgJkAmUBqQG5AegB6QHwAfEB7gHvAfQB9QHqAesB8gHzAfYB9wBbAQIBwwHIAcQBxQG9AckB+gH7Ab4BwgHhAcYBywHBAcoBxwG/AfgBwAH5AAMAAAAAAAD/nAAyAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQCAAEBAQ5HZWlzdC1SZWd1bGFyAAEBASn4EQD5zAH5zQL4GAT7EQwDYvtvHAki+koFHCnHDxwsuRGpHQAAiQwSAbMCAAEABwAOABUAHAAiACgAMwA9AEMASQBPAFkAYABnAG4AdQB7AIYAjQCXAJ4AogCtAK8AuQDAAMcAzQDYAOMA6gDwAPYA/QEDAQkBEAEdASQBKgEwATcBPQFEAUwBVwFeAWUBawFyAXkBfwGMAZMBmgGfAaUBqwG2Ab8BxQHQAdYB3QHjAe0B/AILAhECHAInAjMCOQJEAlQCYgJxAnwCiAKUAp8CpQKwAsACzALbAucC9QMEAxIDIQMwAz4DTQNbA2kDdwOFA5QDpwO7A88D1wPfA+UD7APzA/oEAAQGBBEEGwQhBCcELQQ3BD4ERQRMBFMEWQRkBGsEdQR8BIAEiwSUBJYEnQSkBKoEsQS8BMcEzgTUBNoE4QTnBO0E9AUBBQgFDgUUBRsFIQUoBTAFOwVCBUgFTwVWBVwFaQVwBXcFfAWCBYgFkwWcBaIFrQWzBboFwAXKBdkF6AXuBfkGBAYQBiAGLgY5BkUGUQZbBmYGbAZ3BoIGjgaeBqwGtwbDBs8G2QbkBuoG9QcABwwHFwclBzQHQgdRB2AHZgd0B4IHiQeVB5sHqQe3B8UH0wfiB/UICAgQCBgIHwgmCC0ILwg2CD0IRAhLCFIIWQhgCGcIbgh1CHwIgwiKCJEImAifCKYIrQi0CLsIxAjMCNMI2QjfCOcI7gj1CPsJAwkLCRIJGQkgCScJLgk1CTwJQwlKCVEJWAlfCWYJbQl0CXsJggmJCZAJlwmeCaUJrAmzCboJwQniCfwKDwoWCh0KJAorCjIKOQpACkcKTgpVClwKYwpqCnEKeAp/CooKlAqiCq8KugrJCtYK5wr6CwELDQsZCyULMQs9C0QLSwtSC1kLYAtnC24LdQt8C4MLiguRC5gLnwumC60LtAu7C8ILyQvQC9cL3gvlC/UMDAwqDEIMSQxSDFkMXwxlDGwMcwx3DH4MhQyMDJMMmwynDLAMuwzDDMsM0gzZDOIM6Qz0DPsNAg0JDRMNGg0jDSoNMw06DUMNTA1TDVoNYQ1oDW8Ndg19DYQNiw2ZDaANrA24DccN0w3hDe0N+w4HDhUOIw4qDjAONw4+DkUOTA5TDloOYQ5oDm8Odg59DoQOjQ6WDp0OqA6vDrYOvQ7EDs0O1A7bDuIO6Q7wDv8PCw8XDyQPMg88D0gPWg9rD3hBYnJldmV1bmkwMUNEQW1hY3JvbkFvZ29uZWtDYWN1dGVDY2Fyb25DY2lyY3VtZmxleENkb3RhY2NlbnREY2Fyb25EY3JvYXRFY2Fyb25FZG90YWNjZW50RW1hY3JvbkVvZ29uZWt1bmkxRUJDdW5pMDE4RkdicmV2ZUdjaXJjdW1mbGV4dW5pMDEyMkdkb3RhY2NlbnR1bmkxRTIwSGJhckhjaXJjdW1mbGV4SUpJZG90YWNjZW50SW1hY3JvbklvZ29uZWtJdGlsZGV1bmkwMDRBMDMwMUpjaXJjdW1mbGV4dW5pMDEzNkxhY3V0ZUxjYXJvbnVuaTAxM0JOYWN1dGVOY2Fyb251bmkwMTQ1T2h1bmdhcnVtbGF1dE9tYWNyb25SYWN1dGVSY2Fyb251bmkwMTU2U2FjdXRldW5pQTc4QlNjZWRpbGxhU2NpcmN1bWZsZXh1bmkwMjE4dW5pMUU5RVRjYXJvbnVuaTAxNjJ1bmkwMjFBVWJyZXZlVWh1bmdhcnVtbGF1dFVtYWNyb25Vb2dvbmVrVXJpbmdVdGlsZGVXYWN1dGVXY2lyY3VtZmxleFdkaWVyZXNpc1dncmF2ZVljaXJjdW1mbGV4WWdyYXZldW5pMUVGOFphY3V0ZVpkb3RhY2NlbnR1bmkwMTNCLmxvY2xNQUh1bmkwMTQ1LmxvY2xNQUhSLnNzMDRSYWN1dGUuc3MwNFJjYXJvbi5zczA0dW5pMDE1Ni5zczA0SS5zczA1SWFjdXRlLnNzMDVJY2lyY3VtZmxleC5zczA1SWRpZXJlc2lzLnNzMDVJZG90YWNjZW50LnNzMDVJZ3JhdmUuc3MwNUltYWNyb24uc3MwNUlvZ29uZWsuc3MwNUl0aWxkZS5zczA1Ry5zczA2R2JyZXZlLnNzMDZHY2lyY3VtZmxleC5zczA2dW5pMDEyMi5zczA2R2RvdGFjY2VudC5zczA2dW5pMUUyMC5zczA2QWRpZXJlc2lzLnNzMDhDZG90YWNjZW50LnNzMDhFZGllcmVzaXMuc3MwOEVkb3RhY2NlbnQuc3MwOEdkb3RhY2NlbnQuc3MwOElkaWVyZXNpcy5zczA4SWRvdGFjY2VudC5zczA4T2RpZXJlc2lzLnNzMDhVZGllcmVzaXMuc3MwOFdkaWVyZXNpcy5zczA4WWRpZXJlc2lzLnNzMDhaZG90YWNjZW50LnNzMDhJZGllcmVzaXMuc3MwNS5zczA4SWRvdGFjY2VudC5zczA1LnNzMDhHZG90YWNjZW50LnNzMDYuc3MwOEFfSS5kbGlnVV9JLmRsaWdhYnJldmV1bmkwMUNFYW1hY3JvbmFvZ29uZWtjYWN1dGVjY2Fyb25jY2lyY3VtZmxleGNkb3RhY2NlbnRkY2Fyb25kY3JvYXRlY2Fyb25lZG90YWNjZW50ZW1hY3JvbmVvZ29uZWt1bmkxRUJEdW5pMDI1OWdicmV2ZWdjaXJjdW1mbGV4dW5pMDEyM2dkb3RhY2NlbnR1bmkxRTIxaGJhcmhjaXJjdW1mbGV4aS5sb2NsVFJLaWppbWFjcm9uaW9nb25la2l0aWxkZXVuaTAyMzd1bmkwMDZBMDMwMWpjaXJjdW1mbGV4dW5pMDEzN2xhY3V0ZWxjYXJvbnVuaTAxM0NuYWN1dGVuY2Fyb251bmkwMTQ2b2h1bmdhcnVtbGF1dG9tYWNyb25yYWN1dGVyY2Fyb251bmkwMTU3c2FjdXRldW5pQTc4Q3NjZWRpbGxhc2NpcmN1bWZsZXh1bmkwMjE5dGNhcm9udW5pMDE2M3VuaTAyMUJ1YnJldmV1aHVuZ2FydW1sYXV0dW1hY3JvbnVvZ29uZWt1cmluZ3V0aWxkZXdhY3V0ZXdjaXJjdW1mbGV4d2RpZXJlc2lzd2dyYXZleWNpcmN1bWZsZXh5Z3JhdmV1bmkxRUY5emFjdXRlemRvdGFjY2VudHVuaTAxM0MubG9jbE1BSHVuaTAxNDYubG9jbE1BSGEuc3MwMWFhY3V0ZS5zczAxYWJyZXZlLnNzMDF1bmkwMUNFLnNzMDFhY2lyY3VtZmxleC5zczAxYWRpZXJlc2lzLnNzMDFhZ3JhdmUuc3MwMWFtYWNyb24uc3MwMWFvZ29uZWsuc3MwMWFyaW5nLnNzMDFhdGlsZGUuc3MwMWEuc3MwMmFhY3V0ZS5zczAyYWJyZXZlLnNzMDJ1bmkwMUNFLnNzMDJhY2lyY3VtZmxleC5zczAyYWRpZXJlc2lzLnNzMDJhZ3JhdmUuc3MwMmFtYWNyb24uc3MwMmFvZ29uZWsuc3MwMmFyaW5nLnNzMDJhdGlsZGUuc3MwMmwuc3MwM2xhY3V0ZS5zczAzbGNhcm9uLnNzMDN1bmkwMTNDLnNzMDNsc2xhc2guc3MwM2FkaWVyZXNpcy5zczA4Y2RvdGFjY2VudC5zczA4ZWRpZXJlc2lzLnNzMDhlZG90YWNjZW50LnNzMDhnZG90YWNjZW50LnNzMDhpLnNzMDhpZGllcmVzaXMuc3MwOGkubG9jbFRSSy5zczA4aWouc3MwOGlvZ29uZWsuc3MwOGouc3MwOG9kaWVyZXNpcy5zczA4dWRpZXJlc2lzLnNzMDh3ZGllcmVzaXMuc3MwOHlkaWVyZXNpcy5zczA4emRvdGFjY2VudC5zczA4YWRpZXJlc2lzLnNzMDEuc3MwOGFkaWVyZXNpcy5zczAyLnNzMDhmX2YubGlnYXRfdC5saWdhZmkubGlnYWZsLmxpZ2F1bmkwM0E5cGl1bmkyNEZGdW5pMjc3NnVuaTI3Nzd1bmkyNzc4dW5pMjc3OXVuaTI3N0F1bmkyNzdCdW5pMjc3Q3VuaTI3N0R1bmkyNzdFdW5pMjRFQXVuaTI0NjB1bmkyNDYxdW5pMjQ2MnVuaTI0NjN1bmkyNDY0dW5pMjQ2NXVuaTI0NjZ1bmkyNDY3dW5pMjQ2OHplcm8uc3MwOW9uZS5zczA5emVyby50Zm9uZS50ZnR3by50ZnRocmVlLnRmZm91ci50ZmZpdmUudGZzaXgudGZzZXZlbi50ZmVpZ2h0LnRmbmluZS50ZnVuaTIxNTN1bmkyMTU0dW5pMjE1NXVuaTIwODB1bmkyMDgxdW5pMjA4MnVuaTIwODN1bmkyMDg0dW5pMjA4NXVuaTIwODZ1bmkyMDg3dW5pMjA4OHVuaTIwODl1bmkyMDcwdW5pMDBCOXVuaTAwQjJ1bmkwMEIzdW5pMjA3NHVuaTIwNzV1bmkyMDc2dW5pMjA3N3VuaTIwNzh1bmkyMDc5dW5pMDBBMHVuaTMwMDJoeXBoZW5faHlwaGVuX2h5cGhlbl9ncmVhdGVyLmxpZ2FoeXBoZW5faHlwaGVuX2dyZWF0ZXIubGlnYWh5cGhlbl9ncmVhdGVyLmxpZ2F1bmkzMDAzdW5pRkYwNnVuaUZGMEF1bmlGRjIwdW5pRkYzQ3VuaUZGMUF1bmlGRjBDdW5pRkYwMXVuaUZGMDN1bmlGRjA1dW5pRkYwRXVuaUZGMUZ1bmlGRjAydW5pRkYwN3VuaUZGMUJ1bmlGRjBGcGVyaW9kLnNzMDhjb2xvbi5zczA4c2VtaWNvbG9uLnNzMDhlbGxpcHNpcy5zczA4ZXhjbGFtLnNzMDhleGNsYW1kb3duLnNzMDhxdWVzdGlvbi5zczA4cXVlc3Rpb25kb3duLnNzMDhwZXJpb2RjZW50ZXJlZC5zczA4dW5pRkYzRnVuaUZGMUEuc3MwOHVuaUZGMDEuc3MwOHVuaUZGMEUuc3MwOHVuaUZGMUYuc3MwOHVuaUZGMUIuc3MwOHVuaTAwQUR1bmkzMDFDdW5pRkYwRHVuaTMwMDh1bmkzMDA5dW5pMzAxMHVuaTMwMTF1bmlGRjVCdW5pRkY1RHVuaTMwMEN1bmkzMDBEdW5pMzAwQXVuaTMwMEJ1bmkzMDE0dW5pMzAxNXVuaTMwMEV1bmkzMDBGdW5pMzAxNnVuaTMwMTd1bmlGRjNCdW5pRkYzRHVuaUZGMDh1bmlGRjA5dW5pMEUzRmxlc3NfaHlwaGVuLmxpZ2FsZXNzX2h5cGhlbl9oeXBoZW4ubGlnYWxlc3NfaHlwaGVuX2h5cGhlbl9oeXBoZW4ubGlnYWxlc3NfaHlwaGVuX2dyZWF0ZXIubGlnYXVuaTI2MzlzbWlsZWZhY2V1bmkyMTE3bWludXRlc2Vjb25kdW5pMjExNnVuaTIzQ0VFdXJvdW5pMjBCNHVuaTIwQkR1bmkyMEI5dW5pMjBBQW5vdGVxdWFsZ3JlYXRlcmVxdWFsbGVzc2VxdWFsYXBwcm94ZXF1YWxpbmZpbml0eWludGVncmFsdW5pMjIwNnByb2R1Y3RzdW1tYXRpb25yYWRpY2FscGFydGlhbGRpZmZ1bmkwMEI1YXJyb3d1cHVuaTIxOTdhcnJvd3JpZ2h0dW5pMjE5OGFycm93ZG93bnVuaTIxOTlhcnJvd2xlZnR1bmkyMTk2YXJyb3dib3RoYXJyb3d1cGRudW5pMjE5RHVuaTIxRTR1bmkyMUU1dW5pMjFBOXVuaTIxQUF1bmkyMUIwdW5pMjFCMXVuaTIxQjN1bmkyMUI0Y2FycmlhZ2VyZXR1cm51bmkyMUU3YXJyb3d1cC5zczA3dW5pMjE5Ny5zczA3YXJyb3dyaWdodC5zczA3dW5pMjE5OC5zczA3YXJyb3dkb3duLnNzMDd1bmkyMTk5LnNzMDdhcnJvd2xlZnQuc3MwN3VuaTIxOTYu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ClwHgggAClwH+ggAClwH+ggAClwH+ggAClwH+ggAClwH+ggAClwH+ggAClwH+ggAClwH+ggAAAAHiAAAAAAHiAAAAAAHiAAAAAAHjgeUAAAHjgeUAAAH+gfKAAAH+gfKAAAH+gfKAAAH+gfKAAAHmgegAAAH0AfWAAAH0AfWAAAH0AfWAAAH0AfWAAAH0AfWAAAIPAhCAAAIPAhCAAAIPAhCAAAIPAhCAAAIPAhCAAAIPAhCAAAIPAhCAAAHpgesAAAIPAhCAAAIPAhCAAAHsge4AAAHsge4AAAHsge4AAAHsge4AAAHvgfiAAAHvgfiAAAHvgfiAAAHvgfiAAAHvgfiAAAHvgfiAAAHxAmMAAAHxAmMAAAHxAmMAAAHxAmMCrYKvArCCrYKvArCCrYKvArCCrYKvArCCrYKvArCCrYKvArCCrYKvArCCrYKvArCCrYKvArCCrYKvArCCrYKvArCAAAIBggMAAAIBggMAAAIBggMAAAIBggMAAAIBggMAAAIEggYAAAIEggYAAAIEggYAAAIEggYAAAIEggYAAAIEggYAAAIHggkAAAIHggkAAAIHggkAAAIHggkAAAH+gfKAAAH0AfWAAAH3AfiAAAH3AfiAAAH3AfiAAAH3AfiCCoIMAg2CCoIMAg2CCoIMAg2CCoIMAg2CCoIMAg2CCoIMAg2CCoIMAg2CCoIMAg2CCoIMAg2AAAIPAhCAAAIPAhCAAAIPAhCAAAIPAhCAAAIPAhCAAAIPAhCCooKkAAAAAAIPAhCB+gH7gf0B+gH7gf0AAAIPAhCClwH+ggAClwH+ggAAAAIPAhCCrYKvArCAAAIBggMAAAIEggYAAAIHggkCCoIMAg2CCoIMAg2AAAIPAhCCXQJegmACXQJegmACXQJegmACXQJegmACXQJegmACXQJegmACXQJegmACXQJegmACXQJegmACXQJegmACXQJegmACEgITghUAAAJhgmMAAAJhgmMAAAJhgmMAAAJhgmMAAAJhgmMAAAJhgmMCPAI9gmMCPAI9gmMCPAI9gmMCPAI9gmMCPAI9gmMCPAI9gmMCPAI9gmMCPAI9gmMCPAI9gmMCPAI9gmMCFoIYAhmAAAI/AAAAAAI/AAAAAAI/AAAAAAI/AAAAAAI/AAAAAAI/AAAAAAIbAAAAAAIbAAAAAAIbAAACQ4JFAAACQ4JFAAA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BkBmd2lkBkBmd2lkBkBsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsb2NsBkxsb2NsBmRsb2NsBmRsb2NsBmRsb2NsBlJsb2NsBl5sb2NsBlhsb2NsBl5sb2NsBmRsb2NsBmRvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA4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\",\n      \"base64\",\n    );\n  },\n};\n","import type { CSSProperties } from \"react\";\nimport { ClassNameValue, twMerge } from \"tailwind-merge\";\n\nexport type Stylable =\n  | {\n      style: CSSPropertiesLike;\n      className?: string;\n    }\n  | string;\n\n/**\n * The CSS properties like object.\n */\nexport type CSSPropertiesLike<K extends string | number | symbol = string> = Record<K, CSSProperties>;\n\n/**\n * Performs object cleanup by deleting all undefined properties that could interfere with builder methods.\n */\nexport const performObjectCleanup = (\n  // biome-ignore lint: any is tolerated here\n  obj: Record<string, any>,\n  deep = false,\n) => {\n  for (const prop in obj) {\n    if (obj[prop] === undefined) delete obj[prop];\n    if (typeof obj[prop] === \"object\" && deep) performObjectCleanup(obj[prop], deep);\n  }\n};\n\nexport class StyleSheet extends null {\n  private constructor() {}\n\n  /**\n   * Creates a new CSSPropertiesLike object.\n   */\n  public static create<O extends CSSPropertiesLike, K extends keyof O>(\n    styles: CSSPropertiesLike<K>,\n  ): CSSPropertiesLike<K> {\n    if (!styles || typeof styles !== \"object\") return {} as O;\n\n    performObjectCleanup(styles);\n\n    return styles as O;\n  }\n\n  /**\n   * Composes two CSSPropertiesLike objects.\n   */\n  public static compose(style1: CSSProperties, style2: CSSProperties) {\n    performObjectCleanup(style1);\n    performObjectCleanup(style2);\n\n    return Object.assign(style1, style2);\n  }\n\n  /**\n   * Flattens an array of CSSPropertiesLike objects.\n   */\n  public static flatten(style: CSSProperties[]) {\n    return style.reduce((previous, current) => {\n      performObjectCleanup(current);\n      return Object.assign(previous, current);\n    }, {} as CSSProperties);\n  }\n\n  /**\n   * Merges multiple tailwind-like class names into appropriate class names.\n   */\n  public static cn(...classes: ClassNameValue[]) {\n    return twMerge(...classes);\n  }\n\n  /**\n   * Returns the className string from stylable data.\n   */\n  public static tw(data?: Stylable) {\n    if (typeof data === \"string\") return data;\n    return data?.className ?? \"\";\n  }\n\n  /**\n   * Returns the style object from stylable data.\n   */\n  public static css(data?: Stylable) {\n    if (typeof data === \"string\") return {};\n    return data?.style ?? {};\n  }\n}\n","import type * as React from \"react\";\nimport { performObjectCleanup, StyleSheet } from \"./StyleSheet\";\nimport { Node } from \"../template/Builder\";\n\nconst isNode = (node: unknown): node is Node => {\n  return typeof node === \"object\" && node != null && \"toElement\" in node;\n};\n\n/**\n * The element initialization options.\n */\nexport type ElementInit = {\n  type: string;\n  props: Record<string, unknown>;\n  key?: React.Key | null;\n  // biome-ignore lint: any is tolerated here\n  children?: any;\n};\n\n/**\n * The JSX element.\n */\nexport class Element {\n  /**\n   * The type of the element.\n   */\n  public type: string;\n  /**\n   * The props of the element.\n   */\n  public props: Record<string, unknown>;\n  /**\n   * The key of the element.\n   */\n  public key: React.Key | null;\n  /**\n   * The children of the element.\n   */\n  // biome-ignore lint: any is tolerated here\n  public children?: any;\n\n  /**\n   * Creates a new JSX element.\n   * @param _init The initialization options\n   */\n  public constructor(_init: ElementInit) {\n    this.type = _init.type;\n    this.props = _init.props;\n    this.key = _init.key ?? null;\n    this.children = _init.children;\n  }\n}\n\nconst cleanStyles = <T extends Record<string, unknown>>(properties: T): T => {\n  performObjectCleanup(properties, true);\n  return properties;\n};\n\n/**\n * The JSX factory for canvacord jsx.\n */\nexport const JSX = {\n  /**\n   * The JSX element instance.\n   */\n  Element,\n  /**\n   * Creates a new JSX element.\n   * @param type The type of the element\n   * @param props The props of the element\n   * @param children The children of the element\n   * @returns The created element\n   */\n  createElement(\n    type: string | Element,\n    props: Record<string, unknown>,\n    ...children: Element[]\n  ): Element {\n    if (type instanceof Element) return type;\n\n    // biome-ignore lint: reassigning function parameter\n    props ??= {};\n\n    // biome-ignore lint: delete is necessary here\n    if (isObjectEmpty(props.style)) delete props.style;\n\n    // monkey-patch layout issues\n    if (\"className\" in props) props.tw ??= props.className;\n\n    if (type === \"div\") {\n      if (!(\"tw\" in props) && !(\"style\" in props)) {\n        props.tw = StyleSheet.cn(\n          \"flex flex-col content-start shrink-0\",\n          props.tw as string\n        );\n      }\n    }\n\n    return new Element({\n      type,\n      props: {\n        ...cleanStyles(props),\n        children,\n      },\n      children,\n    });\n  },\n  /**\n   * Creates a new JSX fragment.\n   * @param children The children of the fragment\n   */\n  Fragment({ children }: { children: Element[] | string }): Element {\n    return new Element({ type: \"Fragment\", props: { children }, children });\n  },\n};\n\n/**\n * Renders the components.\n */\nexport function render(components: (Node | Element | unknown)[]) {\n  return components.flatMap((component) => {\n    if (component == null) return [];\n    if (component instanceof Element) return component;\n    if (isNode(component)) return component.toElement();\n\n    const child = String(component) as unknown as Element;\n    return JSX.createElement(\"span\", { children: child }, child);\n  });\n}\n\n// biome-ignore lint: any is tolerated here\nfunction isObjectEmpty(obj: any) {\n  return typeof obj === \"object\" && obj != null\n    ? Object.keys(obj).length === 0\n    : false;\n}\n","// https://github.com/Brooooooklyn/canvas/blob/db81050f0f2064b4b544575db9db318ab5847d33/load-image.js\n\nimport { Readable } from \"stream\";\nimport * as fs from \"fs\";\nimport { CanvacordImage } from \"./image\";\nimport * as fileType from \"file-type\";\nimport { Image } from \"@napi-rs/canvas\";\nimport { buffer } from \"stream/consumers\";\nimport { OutputType, decodeImage } from \"./decoder\";\n\n// biome-ignore lint: declare variables separately\nlet http: typeof import(\"http\"), https: typeof import(\"https\");\n\n// biome-ignore lint: declare variables separately\nconst MAX_REDIRECTS = 20,\n  REDIRECT_STATUSES = new Set([301, 302]),\n  DATA_URI = /^\\s*data:/;\n\nconst NEEDS_TRANSFORMATION = [\n  \"image/webp\",\n  \"image/gif\",\n  \"image/bmp\",\n  \"image/icns\",\n  \"image/tiff\",\n  \"image/avif\",\n];\n\n/**\n * The supported image sources. It can be a buffer, a readable stream, a string, a URL instance or an Image instance.\n */\nexport type ImageSource =\n  | CanvacordImage\n  | Buffer\n  | ArrayBuffer\n  | Uint16Array\n  | Uint32Array\n  | Uint8Array\n  | Uint8ClampedArray\n  | SharedArrayBuffer\n  | Readable\n  | string\n  | URL\n  | Image;\n\n/**\n * The options for loading an image.\n */\nexport interface LoadImageOptions {\n  /**\n   * The headers to use when downloading the image.\n   */\n  headers?: Record<string, string>;\n  /**\n   * The maximum number of redirects to follow.\n   */\n  maxRedirects?: number;\n  /**\n   * Other request options to use when downloading the image.\n   */\n  requestOptions?: import(\"http\").RequestOptions;\n}\n\n/**\n * Loads an image from the specified source.\n * @param source The image source\n * @param [options] The options for loading the image\n */\nexport async function loadImage(\n  source: ImageSource,\n  options: LoadImageOptions = {}\n) {\n  // load canvacord image\n  if (source instanceof CanvacordImage) return source;\n  // load readable stream as image\n  if (source instanceof Readable) return createImage(await buffer(source));\n  // use the same buffer without copying if the source is a buffer\n  if (Buffer.isBuffer(source)) return createImage(source);\n  // construct a buffer if the source is buffer-like\n  // @ts-expect-error\n  if (isBufferLike(source)) return createImage(Buffer.from(source));\n  // if the source is Image instance, copy the image src to new image\n  if (source instanceof Image) return createImage(source.src as Buffer);\n  // if source is string and in data uri format, construct image using data uri\n  if (typeof source === \"string\" && DATA_URI.test(source)) {\n    const commaIdx = source.indexOf(\",\");\n    const encoding =\n      source.lastIndexOf(\"base64\", commaIdx) < 0 ? \"utf-8\" : \"base64\";\n    const data = Buffer.from(source.slice(commaIdx + 1), encoding);\n    return createImage(data);\n  }\n  // if source is a string or URL instance\n  if (typeof source === \"string\" || source instanceof URL) {\n    // if the source exists as a file, construct image from that file\n    if (await exists(source)) {\n      return createImage(await fs.promises.readFile(source));\n    }\n    if (typeof fetch !== \"undefined\") {\n      return fetch(source, {\n        redirect: \"follow\",\n        // @ts-expect-error\n        headers: options.requestOptions?.headers,\n      }).then(async (res) => {\n        if (!res.ok)\n          throw new Error(\n            `remote source rejected with status code ${res.status}`\n          );\n        return await createImage(Buffer.from(await res.arrayBuffer()));\n      });\n    }\n    // the source is a remote url here\n    // biome-ignore lint: any is tolerated here\n    source = source instanceof URL ? source : new URL(source);\n    // attempt to download the remote source and construct image\n    const data = await new Promise<Buffer>((resolve, reject) =>\n      makeRequest(\n        source as URL,\n        resolve,\n        reject,\n        typeof options.maxRedirects === \"number\" && options.maxRedirects >= 0\n          ? options.maxRedirects\n          : MAX_REDIRECTS,\n        options.requestOptions || {}\n      )\n    );\n    return createImage(data);\n  }\n\n  // throw error as don't support that source\n  throw new TypeError(\"unsupported image source\");\n}\n\nfunction makeRequest(\n  url: URL,\n  resolve: (res: Buffer) => void,\n  reject: (err: unknown) => void,\n  redirectCount: number,\n  requestOptions: import(\"http\").RequestOptions\n) {\n  const isHttps = url.protocol === \"https:\";\n  // lazy load the lib\n  const lib: typeof import(\"http\") = isHttps\n    ? !https\n      ? // biome-ignore lint: assignment should not be an expression\n        (https = require(\"https\"))\n      : https\n    : !http\n    ? // biome-ignore lint: assignment should not be an expression\n      (http = require(\"http\"))\n    : http;\n\n  lib\n    .get(url.toString(), requestOptions || {}, (res) => {\n      const shouldRedirect =\n        // biome-ignore lint: forbidden non-null-assertion\n        REDIRECT_STATUSES.has(res.statusCode!) &&\n        typeof res.headers.location === \"string\";\n      if (shouldRedirect && redirectCount > 0)\n        return makeRequest(\n          // biome-ignore lint: forbidden non-null-assertion\n          new URL(res.headers.location!),\n          resolve,\n          reject,\n          redirectCount - 1,\n          requestOptions\n        );\n      if (\n        typeof res.statusCode === \"number\" &&\n        (res.statusCode < 200 || res.statusCode >= 300)\n      ) {\n        return reject(\n          new Error(`remote source rejected with status code ${res.statusCode}`)\n        );\n      }\n\n      buffer(res).then(resolve, reject);\n    })\n    .on(\"error\", reject);\n}\n\nasync function createImage(src: Buffer) {\n  const mime = await fileType.fromBuffer(src);\n  if (!mime?.mime) throw new Error(\"failed to load image\");\n\n  if (NEEDS_TRANSFORMATION.includes(mime.mime)) {\n    const transformed = await decodeImage(src, OutputType.PNG);\n    return new CanvacordImage(transformed, \"image/png\");\n  }\n\n  return new CanvacordImage(src, mime.mime);\n}\n\nfunction isBufferLike(src: ImageSource) {\n  return (\n    // @ts-ignore\n    (src && src.type === \"Buffer\") ||\n    Array.isArray(src) ||\n    src instanceof ArrayBuffer ||\n    src instanceof SharedArrayBuffer ||\n    src instanceof Object.getPrototypeOf(Uint8Array)\n  );\n}\n\nasync function exists(path: string | URL) {\n  try {\n    await fs.promises.access(path, fs.constants.F_OK);\n    return true;\n  } catch {\n    return false;\n  }\n}\n","import type { ResvgRenderOptions } from \"@resvg/resvg-js\";\nimport { EncodingFormat } from \"../canvas/Encodable\";\nimport { AvifConfig, PngEncodeOptions, Transformer } from \"@napi-rs/image\";\nimport { getResvg, getSharp } from \"./decoder\";\n\n/**\n * The options for rendering the svg.\n */\nexport type RenderSvgOptions = PngEncodeOptions | AvifConfig | number | null;\n\n/**\n * Renders the svg to the specified format.\n * @param svg The svg `string` or `Buffer` to render\n * @param format The format to render to\n * @param [options] The options for rendering\n * @param [signal] The abort signal\n */\nexport async function renderSvg({\n  svg,\n  format,\n  options,\n  signal,\n}: {\n  svg: string | Buffer;\n  format: EncodingFormat;\n  options?: RenderSvgOptions;\n  signal?: AbortSignal | null;\n}): Promise<Buffer> {\n  const opts: ResvgRenderOptions = {\n    font: {\n      loadSystemFonts: false,\n    },\n    logLevel: \"off\",\n  };\n\n  const sharp = await getSharp();\n\n  if (sharp) {\n    const input = Buffer.isBuffer(svg) ? svg : Buffer.from(svg);\n    const img = sharp(input)\n      .toFormat(format, {\n        quality: 100,\n      })\n      .toBuffer();\n\n    return img;\n  }\n\n  const renderAsync = await getResvg();\n\n  if (!renderAsync) {\n    throw new Error(\"Could not load @resvg/resvg-js package\");\n  }\n\n  const output = await renderAsync(svg, opts);\n\n  if (format === \"raw\") {\n    return output.pixels;\n  }\n\n  if (format === \"png\") {\n    return output.asPng();\n  }\n\n  const transformer = Transformer.fromRgbaPixels(output.pixels, output.width, output.height);\n\n  options ??= null;\n  signal ??= null;\n\n  switch (format) {\n    case \"avif\":\n      return transformer.avif(options as AvifConfig, signal);\n    case \"jpeg\":\n      return transformer.jpeg(options as number, signal);\n    case \"webp\":\n      return transformer.webp(options as number, signal);\n    default:\n      throw new TypeError(`Unsupported encoding format: \"${format}\"`);\n  }\n}\n\nconst createSvgBase64 = (svg: string | Buffer) =>\n  `data:image/svg+xml;base64,${Buffer.isBuffer(svg) ? svg.toString(\"base64\") : Buffer.from(svg).toString(\"base64\")}`;\n\nexport class CanvacordImage {\n  public constructor(\n    public data: Buffer,\n    public mime: string,\n  ) {}\n\n  public toBase64() {\n    return this.data.toString(\"base64\");\n  }\n\n  public toDataURL() {\n    return `data:${this.mime};base64,${this.toBase64()}`;\n  }\n}\n","import { Transformer } from \"@napi-rs/image\";\n\nexport async function getSharp() {\n  try {\n    const { default: sharp } = await import(\"sharp\");\n    return sharp;\n  } catch {\n    return null;\n  }\n}\n\nexport async function getResvg() {\n  try {\n    const { renderAsync } = await import(\"@resvg/resvg-js\");\n    return renderAsync;\n  } catch {\n    return null;\n  }\n}\n\nexport enum OutputType {\n  PNG = 0,\n  JPEG = 1,\n  WEBP = 2,\n}\n\nexport async function decodeImage(src: Buffer, output: OutputType): Promise<Buffer> {\n  const sharp = await getSharp();\n\n  if (!sharp) {\n    const transformer = new Transformer(src);\n\n    switch (output) {\n      case OutputType.PNG:\n        return transformer.png();\n      case OutputType.JPEG:\n        return transformer.jpeg(100);\n      case OutputType.WEBP:\n        return transformer.webp(100);\n      default:\n        throw new Error(\"Invalid output type\");\n    }\n  }\n\n  const image = sharp(src, {\n    animated: false,\n    unlimited: false,\n  });\n\n  switch (output) {\n    case OutputType.JPEG:\n      image.jpeg({ quality: 100 });\n      break;\n    case OutputType.WEBP:\n      image.webp({ quality: 100 });\n      break;\n    case OutputType.PNG:\n      image.png({ quality: 100 });\n      break;\n    default:\n      throw new Error(\"Invalid output type\");\n  }\n\n  const result = await image.toBuffer({ resolveWithObject: false });\n\n  return result;\n}\n","import { ImageSource, loadImage } from \"../helpers\";\nimport { loadImage as createImage, SKRSContext2D } from \"@napi-rs/canvas\";\n\n/**\n * Creates a canvas image from the image source.\n * @param img The image source\n * @returns The canvas image\n *\n * const image = await createCanvasImage('https://example.com/image.png');\n */\nexport const createCanvasImage = async (img: ImageSource) => {\n  const canvacordImg = await loadImage(img);\n  const nativeImage = await createImage(canvacordImg.data);\n\n  return nativeImage;\n};\n\n/**\n * The steps to apply to the canvas.\n * @param ctx The canvas context\n */\nexport type ContextManipulationStep = (ctx: SKRSContext2D) => Awaited<void>;\n","import { Canvas, createCanvas, SKRSContext2D } from \"@napi-rs/canvas\";\nimport { GifEncoder, EncoderOptions } from \"@skyra/gifenc\";\nimport { Encodable } from \"./Encodable\";\nimport { TemplateImage } from \"../assets/TemplateFactory\";\n\nexport interface ImageGenerationStep {\n  /**\n   * The image to render.\n   */\n  image?: ImgenStep[];\n  /**\n   * The text to render.\n   */\n  text?: TextGenerationStep[];\n  /**\n   * The custom steps to apply to the canvas.\n   */\n  custom?: CustomGenerationStep[];\n  /**\n   * The function to call before processing this step.\n   */\n  preprocess?: (\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    step: ImageGenerationStep\n  ) => Awaited<void>;\n  /**\n   * The function to call when processing this step.\n   */\n  process?: (\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    step: ImageGenerationStep\n  ) => Awaited<void>;\n  /**\n   * The function to call after processing has finished.\n   */\n  postprocess?: (\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    step: ImageGenerationStep\n  ) => Awaited<void>;\n}\n\nexport interface CustomGenerationStep {\n  /**\n   * The function to call when processing this step.\n   */\n  process: (\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    step: ImageGenerationStep\n  ) => Awaited<void>;\n}\n\nexport interface ImgenStep {\n  /**\n   * The image to render.\n   */\n  source: TemplateImage;\n  /**\n   * The x position of the image.\n   */\n  x: number;\n  /**\n   * The y position of the image.\n   */\n  y: number;\n  /**\n   * The width of the image.\n   */\n  width?: number;\n  /**\n   * The height of the image.\n   */\n  height?: number;\n  /**\n   * The function to call before processing this step.\n   */\n  preprocess?: (\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    source: ImgenStep\n  ) => Awaited<void>;\n  /**\n   * The function to call when processing this step.\n   */\n  process?: (\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    source: ImgenStep\n  ) => Awaited<void>;\n  /**\n   * The function to call after processing has finished.\n   */\n  postprocess?: (\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    source: ImgenStep\n  ) => Awaited<void>;\n}\n\nexport interface TextGenerationStep {\n  /**\n   * The text to render.\n   */\n  value: string;\n  /**\n   * The font of the text.\n   */\n  font: string;\n  /**\n   * The color of the text.\n   */\n  color: string;\n  /**\n   * Whether to stroke the text.\n   */\n  stroke?: boolean;\n  /**\n   * The x position of the text.\n   */\n  x: number;\n  /**\n   * The y position of the text.\n   */\n  y: number;\n  /**\n   * The maximum width of the text.\n   */\n  maxWidth?: number;\n  /**\n   * The line height of the text.\n   */\n  lineHeight?: number;\n  /**\n   * The line width of the text.\n   */\n  lineWidth?: number;\n  /**\n   * The alignment of the text.\n   */\n  align?: \"left\" | \"center\" | \"right\";\n  /**\n   * The baseline of the text.\n   */\n  baseline?: \"top\" | \"middle\" | \"bottom\";\n  /**\n   * The directionality of the text.\n   */\n  direction?: \"inherit\" | \"ltr\" | \"rtl\";\n  /**\n   * The function to call before processing this step.\n   */\n  preprocess?: (\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    text: TextGenerationStep\n  ) => Awaited<void>;\n  /**\n   * The function to call when processing this step.\n   */\n  process?: (\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    text: TextGenerationStep\n  ) => Awaited<void>;\n  /**\n   * The function to call after processing has finished.\n   */\n  postprocess?: (\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    text: TextGenerationStep\n  ) => Awaited<void>;\n}\n\n/**\n * The template to use for image generation.\n */\nexport interface IImageGenerationTemplate {\n  /**\n   * The width of the template.\n   */\n  width?: number;\n  /**\n   * The height of the template.\n   */\n  height?: number;\n  /**\n   * The steps to apply to the canvas.\n   */\n  steps: ImageGenerationStep[];\n  /**\n   * The gif options.\n   */\n  gif?: EncoderOptions;\n}\n\nexport class ImageGenerationTemplate implements IImageGenerationTemplate {\n  /**\n   * The steps to apply to the canvas.\n   */\n  public steps: ImageGenerationStep[] = [];\n  /**\n   * The gif options.\n   */\n  public gif?: EncoderOptions;\n\n  /**\n   * Creates a new ImageGenerationTemplate instance from a template.\n   * @param template The template to use\n   * @returns The created template\n   */\n  public static from(template: IImageGenerationTemplate) {\n    return new ImageGenerationTemplate(template.width, template.height)\n      .setSteps(template.steps)\n      .setGifOptions(template.gif);\n  }\n\n  /**\n   * Creates a new ImageGenerationTemplate instance.\n   * @param width The width of the template\n   * @param height The height of the template\n   */\n  public constructor(\n    public readonly width?: number,\n    public readonly height?: number\n  ) {}\n\n  /**\n   * Sets the steps. This will overwrite any existing steps.\n   * @param steps The steps to set\n   */\n  public setSteps(steps: ImageGenerationStep[]) {\n    this.steps = steps;\n    return this;\n  }\n\n  /**\n   * Sets the gif options.\n   * @param options The gif options\n   */\n  public setGifOptions(options?: EncoderOptions) {\n    this.gif = options;\n    return this;\n  }\n\n  /**\n   * Returns whether the template is a gif.\n   */\n  public isGif() {\n    return this.gif != null;\n  }\n\n  /**\n   * Adds a step to the template.\n   * @param step The step to add\n   */\n  public addStep(step: ImageGenerationStep) {\n    this.steps.push(step);\n    return this;\n  }\n\n  /**\n   * Adds steps to the template.\n   * @param steps The steps to add\n   */\n  public addSteps(steps: ImageGenerationStep[]) {\n    this.steps.push(...steps);\n    return this;\n  }\n\n  /**\n   * Clears the steps.\n   */\n  public clearSteps() {\n    this.steps = [];\n    return this;\n  }\n\n  /**\n   * Returns whether the size is inferrable.\n   */\n  public isInferrable() {\n    return [this.width, this.height].some((r) => r != null);\n  }\n\n  /**\n   * Returns the width of the template.\n   */\n  public getWidth() {\n    return this.width ?? this.height;\n  }\n\n  /**\n   * Returns the height of the template.\n   */\n  public getHeight() {\n    return this.height ?? this.width;\n  }\n\n  /**\n   * Returns the JSON representation of the template.\n   */\n  public toJSON(): IImageGenerationTemplate {\n    return {\n      width: this.width,\n      height: this.height,\n      steps: this.steps,\n      gif: this.gif,\n    };\n  }\n}\n\nexport class ImageGen extends Encodable {\n  private _canvas!: Canvas;\n  /**\n   * Creates a new ImageGen instance.\n   * @param template The template to use\n   */\n  public constructor(public template: ImageGenerationTemplate) {\n    super();\n  }\n\n  /**\n   * Adds a step to the template.\n   * @param step The step to add\n   */\n  public addStep(step: ImageGenerationStep) {\n    this.template.addStep(step);\n    return this;\n  }\n\n  /**\n   * Adds steps to the template.\n   * @param steps The steps to add\n   */\n  public addSteps(steps: ImageGenerationStep[]) {\n    this.template.addSteps(steps);\n    return this;\n  }\n\n  /**\n   * Sets the gif options.\n   * @param options The gif options\n   */\n  public setGifOptions(options?: EncoderOptions) {\n    this.template.setGifOptions(options);\n    return this;\n  }\n\n  /**\n   * Returns whether the template is a gif.\n   */\n  public isGif() {\n    return this.template.isGif();\n  }\n\n  async #inferSize() {\n    if (this.template.isInferrable())\n      return {\n        // biome-ignore lint: non-null assertion\n        width: this.template.getWidth()!,\n        // biome-ignore lint: non-null assertion\n        height: this.template.getHeight()!,\n      };\n\n    if (!this.template.steps.length)\n      throw new Error(\"Cannot infer size from empty template\");\n    const firstImg = this.template.steps.find((s) => s.image?.length)\n      ?.image?.[0];\n    if (!firstImg) throw new Error(\"Cannot infer size from non-image template\");\n\n    const img = await firstImg.source.resolve();\n\n    return { width: img.width, height: img.height };\n  }\n\n  /**\n   * Generates a readable stream containing GIF data by applying the steps.\n   */\n  public async generateGif() {\n    if (this.template.gif == null)\n      throw new Error(\"Cannot generate gif on non-gif template\");\n    const options = this.template.gif;\n\n    const { width, height } = await this.#inferSize();\n\n    const encoder = new GifEncoder(width, height);\n\n    if (options.repeat != null) encoder.setRepeat(options.repeat);\n    if (options.delay != null) encoder.setDelay(options.delay);\n    if (options.quality != null) encoder.setQuality(options.quality);\n    if (options.dispose != null) encoder.setDispose(options.dispose);\n    if (options.framerate != null) encoder.setFramerate(options.framerate);\n    if (options.transparent != null)\n      encoder.setTransparent(options.transparent);\n\n    // biome-ignore lint: assignment should not be an expression\n    const canvas = (this._canvas = createCanvas(width, height));\n    const ctx = canvas.getContext(\"2d\");\n\n    const stream = encoder.createReadStream();\n\n    encoder.start();\n\n    for (const step of this.template.steps) {\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n      await this.#applyGeneration(canvas, ctx, step);\n      encoder.addFrame(ctx as any);\n    }\n\n    encoder.finish();\n\n    return stream;\n  }\n\n  /**\n   * Renders the image by applying the steps.\n   */\n  public async render() {\n    const { width, height } = await this.#inferSize();\n\n    // biome-ignore lint: assignment should not be an expression\n    const canvas = (this._canvas = createCanvas(width, height));\n    const ctx = canvas.getContext(\"2d\");\n\n    for (const step of this.template.steps) {\n      await this.#applyGeneration(canvas, ctx, step);\n    }\n\n    return this;\n  }\n\n  /**\n   * Returns the canvas instance by applying the steps.\n   */\n  public getFinalCanvas(): Promise<Canvas> {\n    if (!this._canvas)\n      throw new Error(\n        \"render() or generateGif() must be called before accessing the final canvas\"\n      );\n    return Promise.resolve(this._canvas);\n  }\n\n  async #applyGeneration(\n    canvas: Canvas,\n    ctx: SKRSContext2D,\n    step: ImageGenerationStep\n  ) {\n    if (step.preprocess) {\n      await step.preprocess(canvas, ctx, step);\n    }\n\n    if (step.process) {\n      await step.process(canvas, ctx, step);\n    } else {\n      if (step.custom) {\n        for (const custom of step.custom) {\n          await custom.process(canvas, ctx, step);\n        }\n      }\n\n      if (step.image) {\n        for (const img of step.image) {\n          if (img.preprocess) {\n            await img.preprocess(canvas, ctx, img);\n          }\n\n          if (img.process) {\n            await img.process(canvas, ctx, img);\n          } else {\n            const image = await img.source.resolve();\n\n            if (!img.width || !img.height) {\n              ctx.drawImage(image, img.x, img.y, canvas.width, canvas.height);\n            } else {\n              ctx.drawImage(image, img.x, img.y, img.width, img.height);\n            }\n          }\n\n          if (img.postprocess) {\n            await img.postprocess(canvas, ctx, img);\n          }\n        }\n      }\n\n      if (step.text) {\n        for (const text of step.text) {\n          if (text.preprocess) {\n            await text.preprocess(canvas, ctx, text);\n          }\n\n          if (text.process) {\n            await text.process(canvas, ctx, text);\n          } else {\n            if (text.font != null) ctx.font = text.font;\n            if (text.color != null)\n              ctx[text.stroke ? \"strokeStyle\" : \"fillStyle\"] = text.color;\n            if (text.align != null) ctx.textAlign = text.align;\n            if (text.baseline != null) ctx.textBaseline = text.baseline;\n            if (text.direction != null) ctx.direction = text.direction;\n            if (text.lineWidth != null) ctx.lineWidth = text.lineWidth;\n\n            ctx[text.stroke ? \"strokeText\" : \"fillText\"](\n              text.value,\n              text.x,\n              text.y,\n              text.maxWidth\n            );\n          }\n\n          if (text.postprocess) {\n            await text.postprocess(canvas, ctx, text);\n          }\n        }\n      }\n    }\n\n    if (step.postprocess) {\n      await step.postprocess(canvas, ctx, step);\n    }\n  }\n}\n\n/**\n * Creates a new image generator.\n * @param template The template to use\n */\nexport function createImageGenerator(template: ImageGenerationTemplate) {\n  const gen = new ImageGen(template);\n\n  return gen;\n}\n","import { AvifConfig, Canvas } from \"@napi-rs/canvas\";\n\nexport type EncodingFormat = \"png\" | \"jpeg\" | \"webp\" | \"avif\" | \"raw\";\n\nexport abstract class Encodable {\n  /**\n   * Returns the canvas instance by applying the steps.\n   */\n  public abstract getFinalCanvas(): Promise<Canvas>;\n\n  /**\n   * Encodes the canvas to a buffer.\n   */\n  public async encode(): Promise<Buffer>;\n  /**\n   * Encodes the canvas to a png buffer.\n   * @param format The encoding format - `png`\n   */\n  public async encode(format: \"png\"): Promise<Buffer>;\n  /**\n   * Encodes the canvas to a jpeg or webp buffer.\n   * @param format The encoding format - `jpeg` or `webp`\n   * @param [options] The quality of the image\n   */\n  public async encode(format: \"jpeg\" | \"webp\", options?: number): Promise<Buffer>;\n  /**\n   * Encodes the canvas to an avif buffer.\n   * @param format The encoding format - `avif`\n   * @param [options] The encoding options\n   */\n  public async encode(format: \"avif\", options?: AvifConfig): Promise<Buffer>;\n  /**\n   * Encodes the canvas to a buffer.\n   * @param format The encoding format\n   * @param [options] The encoding options or quality\n   */\n  public async encode(format: EncodingFormat = \"png\", options?: number | AvifConfig): Promise<Buffer> {\n    const canvas = await this.getFinalCanvas();\n\n    switch (format) {\n      case \"raw\":\n        return canvas.data();\n      case \"png\":\n        return canvas.encode(format);\n      case \"jpeg\":\n      case \"webp\":\n        // Passing args conditionally because canvas may panic due to `undefined` value\n        if (typeof options === \"number\") return canvas.encode(format, options);\n        return canvas.encode(format);\n      case \"avif\":\n        if (typeof options === \"object\") return canvas.encode(format, options);\n        return canvas.encode(format);\n      default:\n        throw new TypeError(`Invalid encoding format: \"${format}\"`);\n    }\n  }\n}\n","import { createCanvasImage } from \"../canvas/utils\";\nimport { IImageGenerationTemplate, ImageGenerationStep, ImageGenerationTemplate } from \"../canvas/ImageGen\";\nimport { ImageSource } from \"../helpers\";\nimport { ImageFactory } from \"./AssetsFactory\";\nimport type { Image, SKRSContext2D } from \"@napi-rs/canvas\";\n\nexport class TemplateImage {\n  #resolved: Image | null = null;\n\n  /**\n   * Creates a new TemplateImage instance.\n   * @param source The image source\n   *\n   * const image = new TemplateImage('https://example.com/image.png');\n   \n   */\n  public constructor(public source: ImageSource) {}\n\n  /**\n   * Whether this image has been resolved.\n   */\n  public resolved() {\n    return this.#resolved != null;\n  }\n\n  /**\n   * Resolves this image to consumable form.\n   */\n  public async resolve(): Promise<Image> {\n    if (this.#resolved) return this.#resolved;\n    // biome-ignore lint: assignment should not be an expression\n    return (this.#resolved = await createCanvasImage(this.source));\n  }\n}\n\n/**\n * Creates a new template from the provided template.\n * @param template The template to create from\n */\nexport const createTemplate = <\n  // biome-ignore lint: any is tolerable here\n  F extends (...args: any[]) => any,\n  P extends Parameters<F>,\n>(\n  cb: (...args: P) => IImageGenerationTemplate,\n) => {\n  return (...args: Parameters<typeof cb>) => {\n    const template = cb(...args);\n\n    return ImageGenerationTemplate.from(template);\n  };\n};\n\n/**\n * The built-in template factory.\n */\nexport const TemplateFactory = {\n  Affect: createTemplate((image: ImageSource) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.AFFECT),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 180,\n              y: 383,\n              width: 200,\n              height: 157,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Triggered: createTemplate((image: ImageSource) => {\n    const src = new TemplateImage(image);\n    const factory = new TemplateImage(ImageFactory.TRIGGERED);\n\n    return {\n      gif: {\n        repeat: 0,\n        delay: 15,\n      },\n      width: 256,\n      height: 310,\n      steps: (() => {\n        const d: ImageGenerationStep[] = [];\n\n        const BR = 30;\n        const LR = 20;\n\n        for (let i = 0; i < 9; i++) {\n          d.push({\n            image: [\n              {\n                source: src,\n                x: Math.floor(Math.random() * BR) - BR,\n                y: Math.floor(Math.random() * BR) - BR,\n                width: 256 + BR,\n                height: 310 - 54 + BR,\n              },\n              {\n                source: factory,\n                x: Math.floor(Math.random() * LR) - LR,\n                y: 310 - 54 + Math.floor(Math.random() * LR) - LR,\n                width: 256 + LR,\n                height: 54 + LR,\n              },\n            ],\n          });\n        }\n\n        return d;\n      })(),\n    };\n  }),\n  Fuse: createTemplate((destination: ImageSource, source: ImageSource) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(destination),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          preprocess(canvas, ctx) {\n            ctx.globalCompositeOperation = \"multiply\";\n          },\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(source),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Kiss: createTemplate((image1: ImageSource, image2: ImageSource) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.KISS),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image1),\n              x: 370,\n              y: 25,\n              width: 200,\n              height: 200,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image2),\n              x: 150,\n              y: 25,\n              width: 200,\n              height: 200,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Spank: createTemplate((image1: ImageSource, image2: ImageSource) => {\n    return {\n      width: 500,\n      height: 500,\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.SPANK),\n              x: 0,\n              y: 0,\n              width: 500,\n              height: 500,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image1),\n              x: 350,\n              y: 220,\n              width: 120,\n              height: 120,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image2),\n              x: 225,\n              y: 5,\n              width: 140,\n              height: 140,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Slap: createTemplate((image1: ImageSource, image2: ImageSource) => {\n    return {\n      width: 1000,\n      height: 500,\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.BATSLAP),\n              x: 0,\n              y: 0,\n              width: 1000,\n              height: 500,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image1),\n              x: 350,\n              y: 70,\n              width: 220,\n              height: 220,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image2),\n              x: 580,\n              y: 260,\n              width: 200,\n              height: 200,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Beautiful: createTemplate((image: ImageSource) => {\n    return {\n      width: 376,\n      height: 400,\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.BEAUTIFUL),\n              x: 0,\n              y: 0,\n              width: 376,\n              height: 400,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 258,\n              y: 28,\n              width: 84,\n              height: 95,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 258,\n              y: 229,\n              width: 84,\n              height: 95,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Facepalm: createTemplate((image: ImageSource) => {\n    return {\n      width: 632,\n      height: 357,\n      steps: [\n        {\n          preprocess(canvas, ctx) {\n            ctx.fillStyle = \"#000000\";\n            ctx.fillRect(0, 0, canvas.width, canvas.height);\n          },\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 199,\n              y: 112,\n              width: 235,\n              height: 235,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.FACEPALM),\n              x: 0,\n              y: 0,\n              width: 632,\n              height: 357,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Rainbow: createTemplate((image: ImageSource) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.RAINBOW),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Rip: createTemplate((image: ImageSource) => {\n    return {\n      width: 244,\n      height: 253,\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.RIP),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 63,\n              y: 110,\n              width: 90,\n              height: 90,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Trash: createTemplate((image: ImageSource) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.TRASH),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 309,\n              y: 0,\n              width: 309,\n              height: 304,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Hitler: createTemplate((image: ImageSource) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.HITLER),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 46,\n              y: 43,\n              width: 140,\n              height: 140,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Distracted: createTemplate((image1: ImageSource, image2: ImageSource, image3?: ImageSource | null) => {\n    return {\n      steps: (() => {\n        const clipCircle = (ctx: SKRSContext2D, width: number, height: number) => {\n          ctx.save();\n          ctx.globalCompositeOperation = \"destination-in\";\n          ctx.beginPath();\n          ctx.arc(width / 2, height / 2, width / 2, 0, Math.PI * 2);\n          ctx.closePath();\n          ctx.fill();\n          ctx.restore();\n        };\n\n        const ret: ImageGenerationStep[] = [\n          {\n            image: [\n              {\n                source: new TemplateImage(ImageFactory.DISTRACTED),\n                x: 0,\n                y: 0,\n              },\n            ],\n          },\n          {\n            image: [\n              {\n                source: new TemplateImage(image1),\n                x: 180,\n                y: 90,\n                width: 150,\n                height: 150,\n                postprocess(canvas, ctx) {\n                  clipCircle(ctx, 150, 150);\n                },\n              },\n            ],\n          },\n          {\n            image: [\n              {\n                source: new TemplateImage(image2),\n                x: 480,\n                y: 35,\n                width: 130,\n                height: 130,\n                postprocess(canvas, ctx) {\n                  clipCircle(ctx, 130, 130);\n                },\n              },\n            ],\n          },\n        ];\n\n        if (image3) {\n          ret.push({\n            image: [\n              {\n                source: new TemplateImage(image3),\n                x: 730,\n                y: 110,\n                width: 130,\n                height: 130,\n                postprocess(canvas, ctx) {\n                  clipCircle(ctx, 130, 130);\n                },\n              },\n            ],\n          });\n        }\n\n        return ret;\n      })(),\n    };\n  }),\n  Colorfy: createTemplate((image: ImageSource, color: string) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          preprocess(canvas, ctx) {\n            ctx.globalCompositeOperation = \"color\";\n            ctx.fillStyle = color;\n            ctx.fillRect(0, 0, canvas.width, canvas.height);\n          },\n        },\n      ],\n    };\n  }),\n  Jail: createTemplate((image: ImageSource, greyscale?: boolean) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.JAIL),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 0,\n              y: 0,\n              width: 256,\n              height: 256,\n              postprocess(canvas, ctx) {\n                if (greyscale) {\n                  ctx.filter = \"grayscale(100%)\";\n                }\n              },\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Bed: createTemplate((image1: ImageSource, image2: ImageSource) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.BED),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image1),\n              x: 0,\n              y: 0,\n              width: 256,\n              height: 256,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image2),\n              x: 256,\n              y: 0,\n              width: 256,\n              height: 256,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  JokeOverHead: createTemplate((image: ImageSource) => {\n    return {\n      steps: [\n        {\n          preprocess(_canvas, ctx) {\n            ctx.globalCompositeOperation = \"color\";\n            ctx.fillStyle = \"black\";\n            ctx.fillRect(0, 0, 425, 404);\n          },\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 125,\n              y: 130,\n              width: 140,\n              height: 135,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.JOKEOVERHEAD),\n              x: 0,\n              y: 0,\n              width: 425,\n              height: 404,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Delete: createTemplate((image: ImageSource) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.DELETE),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 120,\n              y: 135,\n              width: 195,\n              height: 195,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Wanted: createTemplate((image: ImageSource) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.WANTED),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 145,\n              y: 282,\n              width: 447,\n              height: 447,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Wasted: createTemplate((image: ImageSource) => {\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 0,\n              y: 0,\n              preprocess(_canvas, ctx) {\n                ctx.filter = \"greyscale(100%)\";\n              },\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.WASTED),\n              x: 145,\n              y: 282,\n            },\n          ],\n        },\n      ],\n    };\n  }),\n  Shit: createTemplate((image: ImageSource) => {\n    const clipCircle = (ctx: SKRSContext2D, width: number, height: number) => {\n      ctx.save();\n      ctx.globalCompositeOperation = \"destination-in\";\n      ctx.beginPath();\n      ctx.arc(width / 2, height / 2, width / 2, 0, Math.PI * 2);\n      ctx.closePath();\n      ctx.fill();\n      ctx.restore();\n    };\n\n    return {\n      steps: [\n        {\n          image: [\n            {\n              source: new TemplateImage(ImageFactory.SHIT),\n              x: 0,\n              y: 0,\n            },\n          ],\n        },\n        {\n          image: [\n            {\n              source: new TemplateImage(image),\n              x: 210,\n              y: 700,\n              width: 170,\n              height: 170,\n              preprocess(_canvas, ctx) {\n                clipCircle(ctx, 170, 170);\n              },\n            },\n          ],\n        },\n      ],\n    };\n  }),\n};\n","import { Font, FontFactory } from \"../assets\";\n\n/**\n * Abbreviates the given number.\n */\nexport const fixed = (v: number, r: boolean) => {\n  if (!r) return v;\n  const formatter = new Intl.NumberFormat(\"en-US\", { notation: \"compact\" });\n  return formatter.format(v);\n};\n\n/**\n * Resolves the first registered font instance if available.\n */\nexport const getDefaultFont = () => {\n  return (FontFactory.values().next().value ?? null) as Font | null;\n};\n\nexport const chunkArrayInGroups = <T>(arr: T[], size: number): T[][] => {\n  const result: T[][] = [];\n\n  for (let i = 0; i < arr.length; i += size) {\n    result.push(arr.slice(i, i + size));\n  }\n\n  return result;\n};\n","import type { CSSProperties } from \"react\";\nimport satori, { SatoriOptions } from \"satori\";\nimport { FontFactory } from \"../assets/AssetsFactory\";\nimport { CSSPropertiesLike, StyleSheet } from \"../helpers\";\nimport { renderSvg, RenderSvgOptions } from \"../helpers/image\";\nimport { JSX, Element } from \"../helpers/jsx\";\nimport { BuilderOptionsManager } from \"./BuilderOptionsManager\";\n\nexport type GraphemeProvider = Record<string, string>;\n\nconst isEmoji = (str: string) => {\n  const emojiRegex = /^[\\p{Emoji}]$/u;\n  return emojiRegex.test(str);\n};\n\nfunction emojiToUnicode(emoji: string): string {\n  if (emoji.length === 1) return emoji.charCodeAt(0).toString(16);\n  const comp = (emoji.charCodeAt(0) - 0xd800) * 0x400 + (emoji.charCodeAt(1) - 0xdc00) + 0x10000;\n  if (comp < 0) return emoji.charCodeAt(0).toString(16);\n  return comp.toString(16).toLowerCase();\n}\n\nexport const createEmojiProvider = (builder: (code: string) => string): GraphemeProvider => {\n  const graphemeProvider: GraphemeProvider = {};\n\n  const handler: ProxyHandler<GraphemeProvider> = {\n    has(target, p) {\n      return isEmoji(p as string) || p in target;\n    },\n    get(_target, prop: string) {\n      if (isEmoji(prop)) {\n        const code = emojiToUnicode(prop);\n        const url = builder(code);\n\n        return url;\n      }\n\n      return prop;\n    },\n  };\n\n  return new Proxy(graphemeProvider, handler);\n};\n\nconst FluentEmojiBase = (s: string) => `https://cdn.jsdelivr.net/gh/shuding/fluentui-emoji-unicode/assets/${s}.svg`;\n\nexport const BuiltInGraphemeProvider = {\n  Twemoji: createEmojiProvider(\n    (code: string) => `https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/svg/${code}.svg`,\n  ),\n  FluentEmojiHighContrast: createEmojiProvider((code) => FluentEmojiBase(`${code}_high-contrast`)),\n  FluentEmojiFlat: createEmojiProvider((code) => FluentEmojiBase(`${code}_flat`)),\n  FluentEmojiColor: createEmojiProvider((code) => FluentEmojiBase(`${code}_color`)),\n  Openmoji: createEmojiProvider(\n    (code) => `https://cdn.jsdelivr.net/npm/@svgmoji/openmoji@2.0.0/svg/${code.toUpperCase()}.svg`,\n  ),\n  Noto: createEmojiProvider(\n    (code) => `https://cdn.jsdelivr.net/gh/svgmoji/svgmoji/packages/svgmoji__noto/svg/${code.toUpperCase()}.svg`,\n  ),\n  Blobmoji: createEmojiProvider(\n    (code) => `https://cdn.jsdelivr.net/npm/@svgmoji/blob@2.0.0/svg/${code.toUpperCase()}.svg`,\n  ),\n  None: {} as GraphemeProvider,\n};\n\nexport const EmojiCache = new Map<string, string>();\n\n/**\n * The builder template.\n */\nexport interface BuilderTemplate {\n  /**\n   * The components of this template.\n   */\n  components: Array<Node | Element>;\n  /**\n   * The width of this template.\n   */\n  width: number;\n  /**\n   * The height of this template.\n   */\n  height: number;\n  /**\n   * The style of this template.\n   */\n  style?: CSSProperties;\n}\n\n/**\n * The build output format.\n */\nexport type BuildFormat = \"svg\" | \"png\" | \"avif\" | \"jpeg\" | \"webp\";\n\n/**\n * The builder build options.\n */\nexport type BuilderBuildOptions = {\n  /**\n   * The output format.\n   */\n  format?: BuildFormat;\n  /**\n   * The options for this build.\n   */\n  options?: RenderSvgOptions;\n  /**\n   * The abort signal.\n   */\n  signal?: AbortSignal;\n} & SatoriOptions;\n\n/**\n * The builder node.\n */\nexport interface Node {\n  /**\n   * Convert this node to element.\n   */\n  toElement(): Element;\n}\n\n// biome-ignore lint: we do not know the type of the component\nexport class Builder<T extends Record<string, any> = Record<string, unknown>> {\n  #style: CSSPropertiesLike = {};\n  /**\n   * The tailwind subset to apply to this builder.\n   */\n  public tw = \"\";\n  /**\n   * The components of this builder.\n   */\n  public components = new Array<Node | Element>();\n  /**\n   * The options manager of this builder.\n   */\n  public options = new BuilderOptionsManager<T>();\n\n  /**\n   * The grapheme provider of this builder.\n   */\n  public graphemeProvider: GraphemeProvider = BuiltInGraphemeProvider.Twemoji;\n\n  /**\n   * Create a new builder.\n   * @param width the width of this builder.\n   * @param height the height of this builder.\n   */\n  public constructor(\n    public width: number,\n    public height: number,\n  ) {\n    this.adjustCanvas();\n  }\n\n  /**\n   * Bootstrap this builder with data.\n   */\n  public bootstrap(data: T) {\n    this.options.setOptions(data);\n  }\n\n  /**\n   * Adjust the canvas size.\n   */\n  public adjustCanvas() {\n    this.#style = StyleSheet.create({\n      root: {\n        width: `${this.width}px`,\n        height: `${this.height}px`,\n      },\n    });\n    return this;\n  }\n\n  /**\n   * Get the style of this builder.\n   */\n  public get style() {\n    return this.#style.root;\n  }\n\n  /**\n   * Set the style of this builder.\n   */\n  public set style(newStyle: CSSProperties) {\n    StyleSheet.compose(this.#style.root, newStyle);\n  }\n\n  /**\n   * Add component to this builder.\n   * @param component the component to add.\n   */\n  public addComponent<T extends Node | Element>(component: T | T[]) {\n    if (\n      component instanceof Element &&\n      // biome-ignore lint: Function could be a component\n      (component.type as unknown as Function) === JSX.Fragment\n    )\n      // biome-ignore lint: Reassigning is considered\n      component = component.children;\n    // biome-ignore lint: Reassigning is considered\n    if (!Array.isArray(component)) component = [component];\n    this.components.push(...component);\n    return this;\n  }\n\n  /**\n   * Set grapheme image provider for this builder.\n   */\n  public setGraphemeProvider(provider: GraphemeProvider) {\n    this.graphemeProvider = provider;\n    return this;\n  }\n\n  /**\n   * Set the style of this builder.\n   * @param newStyle the new style.\n   */\n  public setStyle(newStyle: CSSProperties) {\n    StyleSheet.compose(this.#style.root || {}, newStyle || {});\n    return this;\n  }\n\n  private _render() {\n    return this.components.flatMap((component) => {\n      if (component == null) return [];\n      if (component instanceof Element) return component;\n      if (component.toElement) return component.toElement();\n      return <span>{String(component)}</span>;\n    }) as React.ReactNode[];\n  }\n\n  /**\n   * Render this builder.\n   */\n  public async render(): Promise<React.ReactNode> {\n    return <div style={this.style}>{this._render()}</div>;\n  }\n\n  /**\n   * Convert this builder into an image.\n   * @param options the build options.\n   * @returns the image buffer or svg string.\n   */\n  public async build(options: Partial<BuilderBuildOptions> = {}) {\n    options.format ??= \"png\";\n\n    const fonts = options?.fonts ?? Array.from(FontFactory.values()).map((font) => font.getData());\n    const element = await this.render();\n\n    const svg = await satori(element, {\n      ...options,\n      height: this.height,\n      width: this.width,\n      fonts,\n      embedFont: true,\n      loadAdditionalAsset: async (languageCode, segment) => {\n        const fallback = () => options?.loadAdditionalAsset?.(languageCode, segment) ?? segment;\n        if (languageCode === \"emoji\" && this.graphemeProvider) {\n          const cached = EmojiCache.get(segment);\n          if (cached) return cached;\n          const isSupported = segment in this.graphemeProvider;\n          if (!isSupported) return fallback();\n\n          try {\n            const url = this.graphemeProvider[segment];\n            const response = await fetch(url);\n            if (!response.ok) return fallback();\n            const svg = await response.arrayBuffer();\n            const base64 = `data:image/svg+xml;base64,${Buffer.from(svg).toString(\"base64\")}`;\n            EmojiCache.set(segment, base64);\n            return base64;\n          } catch {\n            return fallback();\n          }\n        }\n\n        return fallback();\n      },\n    });\n\n    return options?.format === \"svg\"\n      ? svg\n      : renderSvg({\n          svg,\n          format: options.format,\n          options: options.options,\n          signal: options.signal,\n        });\n  }\n\n  /**\n   * Create a builder from builder template.\n   */\n  public static from(template: BuilderTemplate) {\n    const builder = new Builder(template.width, template.height);\n\n    if (template.style) builder.style = template.style;\n    builder.components = template.components;\n\n    return builder;\n  }\n}\n","// biome-ignore lint: any is tolerated here\nexport class BuilderOptionsManager<T extends Record<string, any>> {\n  /**\n   * Creates a new builder options manager.\n   * @param options The options to use\n   */\n  constructor(private options: T = {} as T) {}\n\n  /**\n   * Returns the options.\n   */\n  public getOptions(): T {\n    return this.options;\n  }\n\n  /**\n   * Sets the options. This will override the previous options.\n   * @param options The options to use\n   */\n  public setOptions(options: T): void {\n    this.options = options;\n  }\n\n  /**\n   * Get an option by name.\n   * @param key The option name\n   * @returns The option value\n   */\n  public get<K extends keyof T>(key: K): T[K] {\n    return this.options[key];\n  }\n\n  /**\n   * Set an option by name.\n   * @param key The option name\n   * @param value The option value\n   */\n  public set<K extends keyof T>(key: K, value: T[K]): void {\n    this.options[key] = value;\n  }\n\n  /**\n   * Merge new data to old data on an option by name.\n   */\n  public merge<K extends keyof T>(key: K, value: Partial<T[K]>): void {\n    this.options[key] = { ...this.options[key], ...value };\n  }\n}\n","import { JSX, loadImage, StyleSheet } from \"../helpers\";\nimport { ImageSource } from \"../helpers\";\nimport { chunkArrayInGroups, fixed } from \"../helpers/utils\";\nimport { Builder } from \"../template\";\n\nconst DefaultColors = {\n  Yellow: \"#FFAA00\",\n  Blue: \"#009BD6\",\n  Green: \"#00D95F\",\n};\n\nexport interface LeaderboardProps {\n  /**\n   * The background image.\n   */\n  background: ImageSource | null;\n  /**\n   * The background color.\n   */\n  backgroundColor: string;\n  /**\n   * The header of this leaderboard ui.\n   */\n  header?: {\n    /**\n     * The title of this leaderboard ui.\n     */\n    title: string;\n    /**\n     * The subtitle of this leaderboard ui.\n     */\n    subtitle: string;\n    /**\n     * The image of this leaderboard ui.\n     */\n    image: ImageSource;\n  };\n  /**\n   * The players of this leaderboard ui.\n   */\n  players: {\n    /**\n     * The display name of this player.\n     */\n    displayName: string;\n    /**\n     * The username of this player.\n     */\n    username: string;\n    /**\n     * The level of this player.\n     */\n    level: number;\n    /**\n     * The xp of this player.\n     */\n    xp: number;\n    /**\n     * The rank of this player.\n     */\n    rank: number;\n    /**\n     * The avatar of this player.\n     */\n    avatar: ImageSource;\n  }[];\n  /**\n   * The text values of this leaderboard ui.\n   */\n  text: {\n    level: string;\n    xp: string;\n    rank: string;\n  };\n  /**\n   * Whether or not to abbreviate the numeric values.\n   */\n  abbreviate: boolean;\n}\n\nconst Crown = () => {\n  return (\n    // biome-ignore lint: alternative text title\n    <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path\n        d=\"M16.5 17.5H3.5C3.225 17.5 3 17.7813 3 18.125V19.375C3 19.7188 3.225 20 3.5 20H16.5C16.775 20 17 19.7188 17 19.375V18.125C17 17.7813 16.775 17.5 16.5 17.5ZM18.5 5C17.6719 5 17 5.83984 17 6.875C17 7.15234 17.05 7.41016 17.1375 7.64844L14.875 9.34375C14.3937 9.70313 13.7719 9.5 13.4937 8.89063L10.9469 3.32031C11.2812 2.97656 11.5 2.46094 11.5 1.875C11.5 0.839844 10.8281 0 10 0C9.17188 0 8.5 0.839844 8.5 1.875C8.5 2.46094 8.71875 2.97656 9.05313 3.32031L6.50625 8.89063C6.22812 9.5 5.60312 9.70313 5.125 9.34375L2.86562 7.64844C2.95 7.41406 3.00312 7.15234 3.00312 6.875C3.00312 5.83984 2.33125 5 1.50312 5C0.675 5 0 5.83984 0 6.875C0 7.91016 0.671875 8.75 1.5 8.75C1.58125 8.75 1.6625 8.73438 1.74063 8.71875L4 16.25H16L18.2594 8.71875C18.3375 8.73438 18.4188 8.75 18.5 8.75C19.3281 8.75 20 7.91016 20 6.875C20 5.83984 19.3281 5 18.5 5Z\"\n        fill=\"#FFAA00\"\n      />\n    </svg>\n  );\n};\n\nconst MIN_RENDER_HEIGHT = 420;\nconst HEIGHT_INTERVAL = [394, 498, 594, 690, 786, 882, 978, 1074] as const;\n\nexport const LeaderboardVariants = {\n  Default: \"default\",\n  Horizontal: \"horizontal\",\n} as const;\n\nexport type LeaderboardVariants = (typeof LeaderboardVariants)[keyof typeof LeaderboardVariants];\n\nexport class LeaderboardBuilder extends Builder<LeaderboardProps> {\n  public variant?: LeaderboardVariants;\n\n  /**\n   * Create a new leaderboard ui builder\n   */\n  public constructor() {\n    super(500, MIN_RENDER_HEIGHT);\n\n    this.bootstrap({\n      background: null,\n      backgroundColor: \"#7c563c\",\n      players: [],\n      abbreviate: true,\n      text: {\n        level: \"Level\",\n        rank: \"Rank\",\n        xp: \"XP\",\n      },\n    });\n\n    this.setStyle({\n      borderRadius: \"1.5rem\",\n    });\n  }\n\n  /**\n   * Set the ui variant for this leaderboard\n   * @param variant ui type\n   */\n  public setVariant(variant: LeaderboardVariants) {\n    this.variant = variant;\n    return this;\n  }\n\n  /**\n   * Set background for this leaderboard ui\n   * @param background background image\n   */\n  public setBackground(background: ImageSource) {\n    this.options.set(\"background\", background);\n    return this;\n  }\n\n  /**\n   * Set background color for this leaderboard ui\n   * @param color background color\n   */\n  public setBackgroundColor(color: string) {\n    this.options.set(\"backgroundColor\", color);\n    return this;\n  }\n\n  /**\n   * Set header for this leaderboard ui\n   * @param data header data\n   */\n  public setHeader(data: LeaderboardProps[\"header\"] & {}) {\n    this.options.set(\"header\", data);\n    return this;\n  }\n\n  /**\n   * Set players for this leaderboard ui. The canvas size will be adjusted automatically based on the number of players.\n   * @param players players data\n   */\n  public setPlayers(players: LeaderboardProps[\"players\"]) {\n    const items = players.slice(0, 10);\n    this.options.set(\"players\", items);\n\n    return this;\n  }\n\n  /**\n   * Configures the text renderer for this leaderboard.\n   * @param config The configuration for this leaderboard.\n   */\n  public setTextStyles(config: Partial<LeaderboardProps[\"text\"]>) {\n    this.options.merge(\"text\", config);\n    return this;\n  }\n\n  /**\n   * Render this leaderboard ui on the canvas\n   */\n  public async render() {\n    if (!this.variant || this.variant === LeaderboardVariants.Default) {\n      return this.renderDefaultVariant();\n    }\n\n    return this.renderHorizontalVariant();\n  }\n\n  /**\n   * Render players ui on the canvas\n   */\n  public renderDefaultPlayers(players: JSX.Element[]) {\n    return <div className=\"mt-4 flex flex-col items-center justify-center w-[95%]\">{players}</div>;\n  }\n\n  /**\n   * Render top players ui on the canvas\n   */\n  public async renderDefaultTop({\n    avatar,\n    displayName,\n    level,\n    rank,\n    username,\n    xp,\n  }: LeaderboardProps[\"players\"][number]) {\n    const image = await loadImage(avatar);\n    const currentColor = DefaultColors[rank === 1 ? \"Yellow\" : rank === 2 ? \"Blue\" : \"Green\"];\n    const crown = rank === 1;\n\n    return (\n      <div\n        className={StyleSheet.cn(\n          \"relative flex flex-col items-center justify-center p-4 bg-[#1E2237CC] w-[35%] rounded-md\",\n          crown ? \"-mt-4 bg-[#252A40CC] rounded-b-none h-[113%]\" : \"\",\n          rank === 2 ? \"rounded-br-none\" : rank === 3 ? \"rounded-bl-none\" : \"\",\n        )}\n      >\n        {crown && (\n          <div className=\"absolute flex -top-16\">\n            <Crown />\n          </div>\n        )}\n        <div className=\"flex items-center justify-center flex-col absolute -top-10\">\n          <img\n            src={image.toDataURL()}\n            className={StyleSheet.cn(`border-[3px] border-[${currentColor}] rounded-full h-18 w-18`)}\n            alt=\"avatar\"\n          />\n          <div\n            className={`flex items-center justify-center text-xs p-2 text-center font-bold h-3 w-3 rounded-full text-white absolute bg-[${currentColor}] -bottom-[0.4rem]`}\n          >\n            {rank}\n          </div>\n        </div>\n        <div className=\"flex flex-col items-center justify-center mt-5\">\n          <h1 className=\"text-white text-base font-extrabold m-0\">{displayName}</h1>\n          <h2 className=\"text-white text-xs font-thin m-0 mb-2\">@{username}</h2>\n          <h4 className={`text-sm text-[${currentColor}] m-0`}>\n            {this.options.get(\"text\").level} {level}\n          </h4>\n          <h4 className={`text-sm text-[${currentColor}] m-0`}>\n            {fixed(xp, this.options.get(\"abbreviate\"))} {this.options.get(\"text\").xp}\n          </h4>\n        </div>\n      </div>\n    );\n  }\n\n  /**\n   * Render player ui on the canvas\n   */\n  public async renderDefaultPlayer({\n    avatar,\n    displayName,\n    level,\n    rank,\n    username,\n    xp,\n  }: LeaderboardProps[\"players\"][number]) {\n    const image = await loadImage(avatar);\n\n    return (\n      <div className=\"bg-[#252A40BB] p-4 rounded-md flex flex-row justify-between items-center w-full mb-2\">\n        <div className=\"flex flex-row\">\n          <div className=\"flex flex-col items-center justify-center mr-2\">\n            <h1 className=\"text-white font-extrabold text-xl m-0\">{rank}</h1>\n            <h4 className=\"text-white font-medium text-sm m-0\">{this.options.get(\"text\").rank}</h4>\n          </div>\n          <img src={image.toDataURL()} className=\"rounded-full h-14 w-14 mr-2\" alt=\"avatar\" />\n          <div className=\"flex flex-col items-start justify-center\">\n            <h1 className=\"text-white font-extrabold text-xl m-0\">{displayName}</h1>\n            <h4 className=\"text-white font-medium text-sm m-0\">@{username}</h4>\n          </div>\n        </div>\n        <div className=\"flex flex-col items-start justify-center\">\n          <h4 className=\"text-white font-medium text-sm m-0\">\n            {this.options.get(\"text\").level} {level}\n          </h4>\n          <h4 className=\"text-white font-medium text-sm m-0\">\n            {fixed(xp, this.options.get(\"abbreviate\"))} {this.options.get(\"text\").xp}\n          </h4>\n        </div>\n      </div>\n    );\n  }\n\n  public async renderDefaultVariant() {\n    const options = this.options.getOptions();\n    const total = options.players.length;\n\n    if (!total) {\n      throw new RangeError(\"Number of players must be greater than 0\");\n    }\n\n    const adjustedHeight = HEIGHT_INTERVAL[total - 3] ?? MIN_RENDER_HEIGHT;\n\n    this.height = adjustedHeight;\n\n    this.adjustCanvas();\n\n    // biome-ignore lint: declare variables separately\n    let background, headerImg;\n\n    if (options.background) {\n      background = await loadImage(options.background);\n    }\n\n    if (options.header) {\n      headerImg = await loadImage(options.header.image);\n    }\n\n    const winners = [options.players[1], options.players[0], options.players[2]].filter(Boolean);\n\n    return (\n      <div className=\"h-full w-full flex relative\">\n        {background && (\n          <img src={background.toDataURL()} className=\"absolute top-0 left-0 h-full w-full\" alt=\"background\" />\n        )}\n        <div className=\"py-[30px] flex flex-col items-center w-full\">\n          {options.header && headerImg ? (\n            <div className=\"flex items-center justify-center flex-col w-full\">\n              <img src={headerImg.toDataURL()} className=\"rounded-full w-16 h-w-16\" alt=\"header\" />\n              <h1 className=\"text-white text-xl font-extrabold m-0 mt-2\">{options.header.title}</h1>\n              <h2 className=\"text-white text-sm font-thin m-0\">{options.header.subtitle}</h2>\n            </div>\n          ) : null}\n          <div\n            className={StyleSheet.cn(\n              \"flex flex-row w-[90%] justify-center items-center mt-16\",\n              winners.length ? \"mt-24\" : \"\",\n            )}\n          >\n            {await Promise.all(winners.map((winner) => this.renderDefaultTop(winner)))}\n          </div>\n          {this.renderDefaultPlayers(\n            await Promise.all(\n              options.players.filter((f) => !winners.includes(f)).map((m) => this.renderDefaultPlayer(m)),\n            ),\n          )}\n        </div>\n      </div>\n    );\n  }\n\n  public async renderHorizontalPlayer({\n    avatar,\n    displayName,\n    level,\n    rank,\n    username,\n    xp,\n  }: LeaderboardProps[\"players\"][number]) {\n    const image = await loadImage(avatar);\n\n    return (\n      <div className=\"flex items-center bg-white/15 rounded-xl p-2 px-3 justify-between\">\n        <div className=\"flex justify-between items-center\">\n          <div className=\"flex mr-2 text-2xl w-[25px]\">{rank}</div>\n\n          <img src={image.toDataURL()} width={49.25} height={49.58} className=\"rounded-full flex\" alt=\"avatar\" />\n\n          <div className=\"flex flex-col justify-center ml-3\">\n            {displayName && <div className=\"text-xl font-semibold -mb-1 flex\">{displayName}</div>}\n            {username && <div className=\"text-lg font-medium text-gray-300 flex\">{username}</div>}\n          </div>\n        </div>\n\n        <div className=\"flex flex-col items-end\">\n          <div className=\"text-xl font-medium flex\">{fixed(xp, this.options.get(\"abbreviate\"))} XP</div>\n          <div className=\"text-xl font-medium flex\">Level {level}</div>\n        </div>\n      </div>\n    );\n  }\n\n  public async renderHorizontalVariant() {\n    const options = this.options.getOptions();\n    const total = options.players.length;\n\n    if (!total) {\n      throw new RangeError(\"Number of players must be greater than 0\");\n    }\n\n    this.width = 1002;\n    this.height = 512;\n\n    this.adjustCanvas();\n\n    // biome-ignore lint: declare variables separately\n    let background, headerImg;\n\n    if (options.background) {\n      background = await loadImage(options.background);\n    }\n\n    if (options.header) {\n      headerImg = await loadImage(options.header.image);\n    }\n\n    const playerGroupChunks = chunkArrayInGroups(options.players, 5) as Array<typeof options.players>;\n\n    const processedPlayerGroups = await Promise.all(\n      playerGroupChunks.map(async (playerGroup) => {\n        const renderedPlayers = await Promise.all(playerGroup.map((player) => this.renderHorizontalPlayer(player)));\n        return renderedPlayers;\n      }),\n    );\n\n    return (\n      <div className=\"flex relative w-full flex-col\">\n        {background && <img src={background.toDataURL()} className=\"flex absolute top-0 left-0\" alt=\"background\" />}\n\n        {/* <---------- HEADER ----------> */}\n        <div className=\"flex justify-center w-full m-0 my-5\">\n          {options.header && headerImg && (\n            <img\n              src={headerImg.toDataURL()}\n              width={49.53}\n              height={50.44}\n              className=\"flex rounded-full mr-3\"\n              alt=\"header\"\n            />\n          )}\n          <div className=\"flex flex-col items-center justify-center\">\n            {options.header?.title && (\n              <div className=\"text-white font-semibold text-2xl flex\">{options.header.title}</div>\n            )}\n            {options.header?.subtitle && (\n              <div className=\"text-gray-300 font-medium flex\">{options.header.subtitle}</div>\n            )}\n          </div>\n        </div>\n\n        {/* <---------- PLAYER LIST ----------> */}\n        <div className=\"flex text-white p-2 px-3\" style={{ gap: \"6\" }}>\n          {processedPlayerGroups.map((renderedPlayers) => (\n            <div className=\"flex flex-col flex-1\" style={{ gap: \"6\" }}>\n              {renderedPlayers}\n            </div>\n          ))}\n        </div>\n      </div>\n    );\n  }\n}\n","import { Transformer } from \"@napi-rs/image\";\nimport { FontFactory } from \"../assets\";\nimport { ImageSource, JSX, loadImage } from \"../helpers\";\nimport { getDefaultFont } from \"../helpers/utils\";\nimport { Builder } from \"../template/Builder\";\nimport { NeoClassicalCard, RankCardProps, RankCardUserStatus, StatusData } from \"./rank-card/NeoClassicalCard\";\n\n/**\n * The rank card builder props.\n */\ninterface RankCardBuilderProps extends Omit<RankCardProps, \"avatar\" | \"backgroundColor\"> {\n  avatar: ImageSource;\n  background: ImageSource;\n  backgroundCrop?: Partial<{\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n  }>;\n  fonts: Partial<{\n    username: Partial<{\n      name: string;\n      handle: string;\n    }>;\n    progress: Partial<{\n      level: Partial<{\n        text: string;\n        value: string;\n      }>;\n      xp: Partial<{\n        text: string;\n        value: string;\n      }>;\n      rank: Partial<{\n        text: string;\n        value: string;\n      }>;\n    }>;\n  }>;\n}\n\nexport class RankCardBuilder extends Builder<RankCardBuilderProps> {\n  /**\n   * Creates a new rank card builder.\n   * @example\n   * const card = new RankCardBuilder()\n   *     .setUsername('kiki')\n   *     .setDisplayName('Kiki')\n   *     .setDiscriminator('1234')\n   *     .setAvatar('...')\n   *     .setCurrentXP(300)\n   *     .setRequiredXP(600)\n   *     .setLevel(2)\n   *     .setRank(5)\n   *     .setStatus('online');\n   *\n   * const pngBuffer = await card.build({\n   *   format: 'png'\n   * });\n   */\n  public constructor() {\n    super(930, 280);\n\n    this.bootstrap({\n      avatar: \"\",\n      abbreviate: true,\n      background: \"#2C2F33\",\n      currentXP: 0,\n      handle: null,\n      level: null,\n      overlay: 90,\n      rank: null,\n      requiredXP: 0,\n      status: RankCardUserStatus.None,\n      styles: {},\n      texts: {},\n      username: null,\n      fonts: {},\n      calculateProgress: (currentXP, requiredXP) => ((currentXP ?? 0) / (requiredXP ?? 0)) * 100,\n    });\n  }\n\n  /**\n   * Sets the fonts to be used for this rank card.\n   * @param fontConfig The fonts to be used for this rank card.\n   */\n  public setFonts(fontConfig: Required<RankCardBuilderProps[\"fonts\"]>) {\n    this.options.set(\"fonts\", fontConfig);\n    return this;\n  }\n\n  /**\n   * Sets the avatar for this rank card.\n   * @param image The avatar for this rank card.\n   */\n  public setAvatar(image: ImageSource) {\n    this.options.set(\"avatar\", image);\n    return this;\n  }\n\n  /**\n   * Sets the background for this rank card.\n   * @param image The background for this rank card.\n   */\n  public setBackground(image: ImageSource) {\n    this.options.set(\"background\", image);\n    return this;\n  }\n\n  /**\n   * Sets the status for this rank card.\n   * @param status The status for this rank card.\n   */\n  public setStatus(status: RankCardUserStatus | StatusData) {\n    this.options.set(\"status\", status);\n    return this;\n  }\n\n  /**\n   * Sets the username for this rank card.\n   * @param name The username for this rank card.\n   */\n  public setDisplayName(name: string) {\n    this.options.set(\"username\", name);\n    return this;\n  }\n\n  /**\n   * Sets the handle name for this rank card.\n   * @param name The handle name for this rank card.\n   */\n  public setUsername(name: string) {\n    this.options.set(\"handle\", name);\n    return this;\n  }\n\n  /**\n   * Set overlay for this rank card.\n   */\n  public setOverlay(overlay: RankCardProps[\"overlay\"]) {\n    this.options.set(\"overlay\", overlay);\n    return this;\n  }\n\n  /**\n   * Sets the current xp for this rank card.\n   * @param xp The current xp for this rank card.\n   */\n  public setCurrentXP(xp: number) {\n    this.options.set(\"currentXP\", xp);\n    return this;\n  }\n\n  /**\n   * Sets the required xp for this rank card.\n   * @param xp The required xp for this rank card.\n   */\n  public setRequiredXP(xp: number) {\n    this.options.set(\"requiredXP\", xp);\n    return this;\n  }\n\n  /**\n   * Sets the level of this rank card.\n   * @param level The level of this rank card.\n   */\n  public setLevel(level: number) {\n    this.options.set(\"level\", level);\n    return this;\n  }\n\n  /**\n   * Sets the rank of this rank card.\n   * @param rank The rank of this rank card.\n   */\n  public setRank(rank: number) {\n    this.options.set(\"rank\", rank);\n    return this;\n  }\n\n  /**\n   * Configures the renderer for this rank card.\n   * @param config The configuration for this rank card.\n   */\n  public setStyles(config: Partial<RankCardBuilderProps[\"styles\"]>) {\n    this.options.merge(\"styles\", config);\n    return this;\n  }\n\n  /**\n   * Set background crop for this rank card.\n   */\n  public setBackgroundCrop(pos: Partial<RankCardBuilderProps[\"backgroundCrop\"]>) {\n    this.options.set(\"backgroundCrop\", pos);\n    return this;\n  }\n\n  /**\n   * Configures the texts for this rank card.\n   * @param config The configuration for this rank card.\n   */\n  public setTextStyles(config: Partial<RankCardBuilderProps[\"texts\"]>) {\n    this.options.merge(\"texts\", config);\n    return this;\n  }\n\n  /**\n   * Sets the progress calculator for this rank card. The value returned by this calculator defines the width of the progress bar.\n   * Valid range is 0-100. Returning a number less than 0 or greater than 100 will be clamped within this range, or invalid values will result in 0% width.\n   * @param calc The progress calculator for this rank card.\n   */\n  public setProgressCalculator(calc: RankCardProps[\"calculateProgress\"]) {\n    this.options.set(\"calculateProgress\", calc);\n    return this;\n  }\n\n  /**\n   * Renders this rank card into the canvas.\n   */\n  public async render() {\n    const options = this.options.getOptions();\n\n    if (!options.avatar) throw new Error(\"Avatar is required.\");\n    if (!FontFactory.size) throw new Error(\"No fonts are loaded.\");\n\n    const avatar = await loadImage(options.avatar);\n\n    let background;\n    if (options.background) {\n      background = await loadImage(options.background).then(\n        async (e) => {\n          if (options.backgroundCrop) {\n            const x = options.backgroundCrop.x ?? 0;\n            const y = options.backgroundCrop.y ?? 0;\n            const width = options.backgroundCrop.width ?? this.width;\n            const height = options.backgroundCrop.height ?? this.height;\n\n            const buffer = await new Transformer(e.data).crop(x, y, width, height).png();\n\n            e.data = buffer;\n          }\n\n          return `url(${e.toDataURL()})`;\n        },\n        () => options.background as string,\n      );\n    }\n\n    const firstFont = getDefaultFont();\n\n    if (firstFont) {\n      options.fonts.username ??= {\n        name: firstFont.name,\n        handle: firstFont.name,\n      };\n      options.fonts.progress ??= {\n        level: {\n          text: firstFont.name,\n          value: firstFont.name,\n        },\n        xp: {\n          text: firstFont.name,\n          value: firstFont.name,\n        },\n        rank: {\n          text: firstFont.name,\n          value: firstFont.name,\n        },\n      };\n    }\n\n    return (\n      <NeoClassicalCard\n        {...{\n          ...options,\n          avatar: avatar.toDataURL(),\n          // biome-ignore lint: forbidden non-null assertion\n          backgroundColor: background!,\n        }}\n      />\n    );\n  }\n}\n","import { JSX, Stylable, StyleSheet } from \"../..\";\nimport { fixed } from \"../../helpers/utils\";\n\nexport const RankCardUserStatus = {\n  Online: \"online\",\n  Idle: \"idle\",\n  DoNotDisturb: \"dnd\",\n  Offline: \"offline\",\n  Streaming: \"streaming\",\n  None: \"none\",\n  Invisible: \"invisible\",\n} as const;\n\nexport type RankCardUserStatus = (typeof RankCardUserStatus)[keyof typeof RankCardUserStatus];\n\n// backwards compatibility\nexport type StatusData = RankCardUserStatus;\n\nexport interface RankCardProps {\n  handle: string | null;\n  username: string | null;\n  avatar: string;\n  status: RankCardUserStatus | StatusData | null;\n  currentXP: number | null;\n  requiredXP: number | null;\n  rank: number | null;\n  level: number | null;\n  backgroundColor: string;\n  overlay: boolean | number | string;\n  abbreviate: boolean;\n  calculateProgress: (current: number, required: number) => number;\n  texts: Partial<{\n    level: string;\n    xp: string;\n    rank: string;\n  }>;\n  styles: Partial<{\n    container: Stylable;\n    background: Stylable;\n    overlay: Stylable;\n    avatar: Partial<{\n      container: Stylable;\n      image: Stylable;\n      status: Stylable;\n    }>;\n    username: Partial<{\n      container: Stylable;\n      name: Stylable;\n      handle: Stylable;\n    }>;\n    progressbar: Partial<{\n      container: Stylable;\n      thumb: Stylable;\n      track: Stylable;\n    }>;\n    statistics: Partial<{\n      container: Stylable;\n      level: Partial<{\n        container: Stylable;\n        text: Stylable;\n        value: Stylable;\n      }>;\n      xp: Partial<{\n        container: Stylable;\n        text: Stylable;\n        value: Stylable;\n      }>;\n      rank: Partial<{\n        container: Stylable;\n        text: Stylable;\n        value: Stylable;\n      }>;\n    }>;\n  }>;\n}\n\nconst Colors = {\n  online: \"#43b581\",\n  idle: \"#faa61a\",\n  dnd: \"#f04747\",\n  offline: \"#747f8d\",\n  streaming: \"#593695\",\n  invisible: \"#747f8d\",\n};\n\nconst clamp = (value: number) => Math.max(0, Math.min(100, value));\n\nexport function NeoClassicalCard(props: RankCardProps) {\n  const {\n    rank,\n    level,\n    currentXP,\n    requiredXP,\n    abbreviate,\n    username,\n    handle,\n    avatar,\n    status,\n    styles,\n    texts,\n    backgroundColor,\n    overlay,\n    calculateProgress,\n  } = props;\n\n  const shouldSkipStats = currentXP == null && requiredXP == null;\n  const progress = calculateProgress(currentXP ?? 0, requiredXP ?? 0);\n  const progressWidth = typeof progress !== \"number\" || Number.isNaN(progress) ? 0 : clamp(progress);\n\n  return (\n    <div\n      className={StyleSheet.cn(\n        backgroundColor && !backgroundColor.startsWith(\"url(\") ? `bg-[${backgroundColor}]` : \"bg-[#23272a]\",\n        \"flex flex-col h-full rounded-md w-full p-6\",\n        StyleSheet.tw(styles.background),\n      )}\n      style={StyleSheet.compose(\n        {\n          backgroundImage: backgroundColor?.startsWith(\"url(\") ? backgroundColor : undefined,\n          backgroundSize: backgroundColor?.startsWith(\"url(\") ? \"100% 100%\" : undefined,\n        },\n        StyleSheet.css(styles.background),\n      )}\n    >\n      <div\n        className={StyleSheet.cn(\n          overlay\n            ? `bg-[${typeof overlay === \"string\" ? overlay : \"#2b2f35\"}]/${\n                typeof overlay === \"number\" ? overlay : \"90\"\n              }`\n            : null,\n          \"flex items-center rounded-lg h-full w-full px-4\",\n          StyleSheet.tw(styles.overlay),\n        )}\n        style={StyleSheet.css(styles.overlay)}\n      >\n        <div\n          className={StyleSheet.cn(\"flex relative\", StyleSheet.tw(styles.avatar?.container))}\n          style={StyleSheet.css(styles.avatar?.container)}\n        >\n          <img\n            alt=\"avatar\"\n            src={avatar}\n            className={StyleSheet.cn(\"h-38 w-38 rounded-full ml-4\", StyleSheet.tw(styles.avatar?.image))}\n            style={StyleSheet.css(styles.avatar?.image)}\n          />\n          {status && status !== RankCardUserStatus.None ? (\n            <div\n              className={StyleSheet.cn(\n                \"absolute h-8 w-8 rounded-full bottom-5 right-0 flex\",\n                `bg-[${Colors[status]}]`,\n                StyleSheet.tw(styles.avatar?.status),\n              )}\n              style={StyleSheet.css(styles.avatar?.status)}\n            />\n          ) : null}\n        </div>\n        <div\n          className={StyleSheet.cn(\"flex flex-col ml-8\", StyleSheet.tw(styles.container))}\n          style={StyleSheet.css(styles.container)}\n        >\n          <div\n            className={StyleSheet.cn(\"flex flex-col\", StyleSheet.tw(styles.username?.container))}\n            style={StyleSheet.css(styles.username?.container)}\n          >\n            {username && (\n              <h1\n                className={StyleSheet.cn(\n                  \"text-white font-semibold text-3xl mb-0\",\n                  StyleSheet.tw(styles.username?.name),\n                  !handle ? \"mb-2\" : \"\",\n                )}\n                style={StyleSheet.css(styles.username?.name)}\n              >\n                {username}\n              </h1>\n            )}\n            {handle && (\n              <p\n                className={StyleSheet.cn(\n                  \"text-[#808386] font-semibold text-lg mt-0\",\n                  StyleSheet.tw(styles.username?.handle),\n                )}\n                style={StyleSheet.css(styles.username?.handle)}\n              >\n                {handle}\n              </p>\n            )}\n          </div>\n          <div\n            className={StyleSheet.cn(\"flex relative\", StyleSheet.tw(styles.progressbar?.container))}\n            style={StyleSheet.css(styles.progressbar?.container)}\n          >\n            <div\n              className={StyleSheet.cn(\n                \"bg-[#484b4e] w-160 h-6 rounded-xl flex\",\n                StyleSheet.tw(styles.progressbar?.track),\n              )}\n              style={StyleSheet.css(styles.progressbar?.track)}\n            />\n            <div\n              className={StyleSheet.cn(\n                \"bg-[#fff] max-w-160 h-6 rounded-xl absolute flex\",\n                `w-[${progressWidth}%]`,\n                StyleSheet.tw(styles.progressbar?.thumb),\n              )}\n              style={StyleSheet.css(styles.progressbar?.thumb)}\n            />\n          </div>\n          <div\n            className={StyleSheet.cn(\"flex\", StyleSheet.tw(styles.statistics?.container))}\n            style={StyleSheet.css(styles.statistics?.container)}\n          >\n            {level != null && (\n              <div\n                className={StyleSheet.cn(\n                  \"flex items-center text-[#808386] font-medium\",\n                  StyleSheet.tw(styles.statistics?.level?.container),\n                )}\n                style={StyleSheet.css(styles.statistics?.level?.container)}\n              >\n                <h3\n                  className={StyleSheet.tw(styles.statistics?.level?.text)}\n                  style={StyleSheet.css(styles.statistics?.level?.text)}\n                >\n                  {texts.level || \"LEVEL:\"}\n                  <span\n                    className={StyleSheet.cn(\"text-white ml-1\", StyleSheet.tw(styles.statistics?.level?.value))}\n                    style={StyleSheet.css(styles.statistics?.level?.value)}\n                  >\n                    {fixed(level, abbreviate)}\n                  </span>\n                </h3>\n              </div>\n            )}\n            {!shouldSkipStats && (\n              <div\n                className={StyleSheet.cn(\n                  \"flex items-center text-[#808386] font-medium ml-8\",\n                  StyleSheet.tw(styles.statistics?.xp?.container),\n                )}\n                style={StyleSheet.css(styles.statistics?.xp?.container)}\n              >\n                <h3\n                  className={StyleSheet.tw(styles.statistics?.xp?.text)}\n                  style={StyleSheet.css(styles.statistics?.xp?.text)}\n                >\n                  {texts.xp || \"XP:\"}\n                  <span\n                    className={StyleSheet.cn(\"text-white ml-1\", StyleSheet.tw(styles.statistics?.xp?.value))}\n                    style={StyleSheet.css(styles.statistics?.xp?.value)}\n                  >\n                    {fixed(currentXP ?? 0, abbreviate)}/{fixed(requiredXP ?? 0, abbreviate)}\n                  </span>\n                </h3>\n              </div>\n            )}\n            {rank != null && (\n              <div\n                className={StyleSheet.cn(\n                  \"flex items-center text-[#808386] font-medium ml-8\",\n                  StyleSheet.tw(styles.statistics?.rank?.container),\n                )}\n                style={StyleSheet.css(styles.statistics?.rank?.container)}\n              >\n                <h3\n                  className={StyleSheet.tw(styles.statistics?.rank?.text)}\n                  style={StyleSheet.css(styles.statistics?.rank?.text)}\n                >\n                  {texts.rank || \"RANK:\"}\n                  <span\n                    className={StyleSheet.cn(\"text-white ml-1\", StyleSheet.tw(styles.statistics?.rank?.value))}\n                    style={StyleSheet.css(styles.statistics?.rank?.value)}\n                  >\n                    #{fixed(rank, abbreviate)}\n                  </span>\n                </h3>\n              </div>\n            )}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n","import { Canvas, createCanvas, SKRSContext2D } from \"@napi-rs/canvas\";\nimport { Encodable } from \"./Encodable\";\nimport { ContextManipulationStep } from \"./utils\";\n\nexport abstract class CanvasHelper extends Encodable {\n  /**\n   * The steps to apply to the canvas.\n   */\n  public steps: ContextManipulationStep[] = [];\n  private _canvas!: Canvas;\n\n  /**\n   * Creates a new CanvasHelper instance.\n   * @param width The width of the canvas\n   * @param height The height of the canvas\n   */\n  public constructor(\n    public width: number,\n    public height: number,\n  ) {\n    super();\n  }\n\n  /**\n   * Returns the canvas instance by applying the steps.\n   */\n  public async getFinalCanvas(): Promise<Canvas> {\n    this._canvas ??= createCanvas(this.width, this.height);\n    const ctx = this._canvas.getContext(\"2d\");\n\n    await this.process(this._canvas, ctx);\n\n    return this._canvas;\n  }\n\n  /**\n   * Processes the steps and applies them to the canvas.\n   */\n  public abstract process(canvas: Canvas, ctx: SKRSContext2D): Promise<void>;\n}\n","import { Canvas, Image, SKRSContext2D } from \"@napi-rs/canvas\";\nimport { ImageSource } from \"../helpers\";\nimport { CanvasHelper } from \"./CanvasHelper\";\nimport { createCanvasImage } from \"./utils\";\n\nexport class ImageFilterer extends CanvasHelper {\n  #filters = [] as string[];\n\n  /**\n   * Draws the image to the canvas.\n   * @param image The image to draw\n   * @param x The x position to draw the image\n   * @param y The y position to draw the image\n   * @param [width] The width of the image\n   * @param [height] The height of the image\n   */\n  public drawImage(image: ImageSource, x = 0, y = 0, width = this.width, height = this.height) {\n    this.steps.push(async (ctx) => {\n      const img = await createCanvasImage(image);\n      ctx.drawImage(img, x, y, width, height);\n    });\n\n    return this;\n  }\n\n  /**\n   * Applies invert filter to the image.\n   * @param value The filter intensity\n   */\n  public invert(value: number) {\n    if (typeof value !== \"number\") throw new TypeError(`Expected \"value\" to be a number, received ${typeof value}`);\n    this.#filters.push(`invert(${value}%)`);\n    return this;\n  }\n\n  /**\n   * Applies grayscale filter to the image.\n   * @param value The filter intensity\n   */\n  public grayscale(value = 100) {\n    this.#filters.push(`grayscale(${value}%)`);\n    return this;\n  }\n\n  /**\n   * Applies sepia filter to the image.\n   * @param value The filter intensity\n   */\n  public sepia(value: number) {\n    if (typeof value !== \"number\") throw new TypeError(`Expected \"value\" to be a number, received ${typeof value}`);\n    this.#filters.push(`sepia(${value}%)`);\n    return this;\n  }\n\n  /**\n   * Applies opacity filter to the image.\n   * @param value The filter intensity\n   */\n  public opacity(value: number) {\n    if (typeof value !== \"number\") throw new TypeError(`Expected \"value\" to be a number, received ${typeof value}`);\n    this.#filters.push(`opacity(${value}%)`);\n    return this;\n  }\n\n  /**\n   * Applies saturate filter to the image.\n   * @param value The filter intensity\n   */\n  public saturate(value: number) {\n    if (typeof value !== \"number\") throw new TypeError(`Expected \"value\" to be a number, received ${typeof value}`);\n    this.#filters.push(`saturate(${value}%)`);\n    return this;\n  }\n\n  /**\n   * Applies hue-rotate filter to the image.\n   * @param value The degrees to rotate\n   */\n  public hueRotate(value: number) {\n    if (typeof value !== \"number\") throw new TypeError(`Expected \"value\" to be a number, received ${typeof value}`);\n    this.#filters.push(`hue-rotate(${value}deg)`);\n    return this;\n  }\n\n  /**\n   * Applies contrast filter to the image.\n   * @param value The filter intensity\n   */\n  public contrast(value: number) {\n    if (typeof value !== \"number\") throw new TypeError(`Expected \"value\" to be a number, received ${typeof value}`);\n    this.#filters.push(`contrast(${value}%)`);\n    return this;\n  }\n\n  /**\n   * Applies brightness filter to the image.\n   * @param value The filter intensity\n   */\n  public brightness(value: number) {\n    if (typeof value !== \"number\") throw new TypeError(`Expected \"value\" to be a number, received ${typeof value}`);\n    this.#filters.push(`brightness(${value}%)`);\n    return this;\n  }\n\n  /**\n   * Applies blur filter to the image.\n   * @param value The filter intensity\n   */\n  public blur(value: number) {\n    if (typeof value !== \"number\") throw new TypeError(`Expected \"value\" to be a number, received ${typeof value}`);\n    this.#filters.push(`blur(${value}px)`);\n    return this;\n  }\n\n  /**\n   * Applies drop-shadow filter to the image.\n   * @param config The drop-shadow config\n   * @param config.x The x offset of the shadow\n   * @param config.y The y offset of the shadow\n   * @param config.radius The blur radius of the shadow\n   * @param config.color The color of the shadow\n   */\n  public dropShadow(config: DropShadowConfig) {\n    const { x, y, radius, color } = config;\n\n    this.#filters.push(`drop-shadow(${[x, y, `${radius}px`, color].join(\" \")})`);\n    return this;\n  }\n\n  /**\n   * Renders the applied filters to the canvas.\n   * @param canvas The canvas to render the filters to\n   * @param ctx The canvas context\n   */\n  public async process(canvas: Canvas, ctx: SKRSContext2D) {\n    if (this.#filters.length) ctx.filter = this.#filters.join(\" \");\n\n    while (this.steps.length > 0) {\n      // biome-ignore lint: non-null assertion\n      await this.steps.shift()!(ctx);\n    }\n  }\n}\n\nexport interface DropShadowConfig {\n  x: number;\n  y: number;\n  radius: number;\n  color: string;\n}\n","import { Canvas, Image, SKRSContext2D } from \"@napi-rs/canvas\";\nimport { ImageSource } from \"../helpers\";\nimport { ImageFilterer } from \"./ImageFilterer\";\nimport { createCanvasImage } from \"./utils\";\n\nexport class CanvasImage extends ImageFilterer {\n  #img: Image | null = null;\n\n  /**\n   * Creates a new CanvasImage instance.\n   * @param source The image source\n   * @param [width] The width of the image\n   * @param [height] The height of the image\n   */\n  public constructor(\n    public source: ImageSource,\n    width = -1,\n    height = -1,\n  ) {\n    super(width, height);\n    if (source instanceof Image) this.#setImg(source);\n  }\n\n  #setImg(src: Image) {\n    this.#img = src;\n    if (this.width === -1) this.width = src.width;\n    if (this.height === -1) this.height = src.height;\n    return this.#img;\n  }\n\n  /**\n   * Draws the image to the canvas.\n   * @param x The x position to draw the image\n   * @param y The y position to draw the image\n   * @param [width] The width of the image\n   * @param [height] The height of the image\n   */\n  public draw(x = 0, y = 0, width?: number, height?: number) {\n    this.steps.push(async (ctx) => {\n      const img = this.#img || this.#setImg(await createCanvasImage(this.source));\n\n      // biome-ignore lint: reassignment\n      width ??= this.width;\n      // biome-ignore lint: reassignment\n      height ??= this.height;\n\n      ctx.drawImage(img, x, y, width, height);\n    });\n\n    return this;\n  }\n\n  /**\n   * Draws the image to the canvas with a circle clip.\n   * @param [width] The width of the image\n   * @param [height] The height of the image\n   */\n  public circle(width?: number, height?: number) {\n    this.steps.push((ctx) => {\n      // biome-ignore lint: reassignment\n      width ??= ctx.canvas.width;\n      // biome-ignore lint: reassignment\n      height ??= ctx.canvas.height;\n\n      ctx.globalCompositeOperation = \"destination-in\";\n      ctx.beginPath();\n      ctx.arc(width / 2, height / 2, width / 2, 0, Math.PI * 2);\n      ctx.closePath();\n      ctx.fill();\n    });\n\n    return this;\n  }\n\n  /**\n   * Draws pixelated image to the canvas.\n   * @param [pixels=5] The amount of pixels to use\n   */\n  public pixelate(pixels = 5) {\n    this.steps.push((ctx) => {\n      const pixel = pixels / 100;\n      const { canvas } = ctx;\n\n      ctx.imageSmoothingEnabled = false;\n      ctx.drawImage(\n        canvas,\n        0,\n        0,\n        canvas.width * pixel,\n        canvas.height * pixel,\n        0,\n        0,\n        canvas.width + 5,\n        canvas.height + 5,\n      );\n    });\n\n    return this;\n  }\n\n  /**\n   * Saves the canvas context state.\n   */\n  public save() {\n    this.steps.push((ctx) => {\n      ctx.save();\n    });\n\n    return this;\n  }\n\n  /**\n   * Restores the last saved canvas context state.\n   */\n  public restore() {\n    this.steps.push((ctx) => {\n      ctx.restore();\n    });\n\n    return this;\n  }\n\n  /**\n   * Returns the canvas instance by applying the steps.\n   */\n  public async getFinalCanvas(): Promise<Canvas> {\n    if (this.width === -1 || this.height === -1) {\n      if (!this.#img) this.#setImg(await createCanvasImage(this.source));\n    }\n\n    return super.getFinalCanvas();\n  }\n}\n","import { Canvas, SKRSContext2D } from \"@napi-rs/canvas\";\nimport { CanvasImage } from \"./CanvasImage\";\nimport { ContextManipulationStep } from \"./utils\";\n\nexport class ImageManipulator extends CanvasImage {\n  #steps: ContextManipulationStep[] = [];\n\n  /**\n   * Rotates the canvas.\n   */\n  public rotate(degrees: number) {\n    this.#steps.push((ctx) => {\n      ctx.rotate(degrees);\n    });\n\n    return this;\n  }\n\n  /**\n   * Flips the canvas.\n   * @param axis The axis to flip, `x` or `y`.\n   */\n  public flip(axis: \"x\" | \"y\") {\n    this.#steps.push((ctx) => {\n      switch (axis) {\n        case \"x\":\n          ctx.scale(-1, 1);\n          break;\n        case \"y\":\n          ctx.scale(1, -1);\n          break;\n      }\n    });\n  }\n\n  /**\n   * Scales the canvas.\n   * @param x The x scale\n   * @param y The y scale\n   */\n  public scale(x: number, y: number) {\n    this.#steps.push((ctx) => {\n      ctx.scale(x, y);\n    });\n  }\n\n  /**\n   * Translates the canvas.\n   * @param x The x position to translate\n   * @param y The y position to translate\n   */\n  public translate(x: number, y: number) {\n    this.#steps.push((ctx) => {\n      ctx.translate(x, y);\n    });\n  }\n\n  /**\n   * Erases a part of the canvas.\n   * @param x The x position to erase\n   * @param y The y position to erase\n   * @param width The width of the area to erase\n   * @param height The height of the area to erase\n   */\n  public erase(x: number, y: number, width: number, height: number) {\n    this.#steps.push((ctx) => {\n      ctx.clearRect(x, y, width, height);\n    });\n  }\n\n  /**\n   * Applies a transform to the canvas.\n   */\n  public transform(a: number, b: number, c: number, d: number, e: number, f: number) {\n    this.#steps.push((ctx) => {\n      ctx.transform(a, b, c, d, e, f);\n    });\n  }\n\n  /**\n   * Resets the transform of the canvas.\n   */\n  public resetTransform() {\n    this.#steps.push((ctx) => {\n      ctx.resetTransform();\n    });\n  }\n\n  /**\n   * Applies a circular clip to the image.\n   * @param width The width of the image\n   * @param height The height of the image\n   */\n  public circularize(width: number, height: number) {\n    // TODO: Implement this\n  }\n\n  /**\n   * Processes the steps and applies them to the canvas.\n   * @param canvas The canvas to apply the steps to\n   * @param ctx The canvas context to apply the steps to\n   */\n  public async process(canvas: Canvas, ctx: SKRSContext2D) {\n    for (const step of this.#steps) {\n      await step(ctx);\n    }\n  }\n}\n","import { ImageSource } from \"../helpers\";\nimport { ImageGen } from \"./ImageGen\";\nimport { buffer } from \"stream/consumers\";\nimport type { Readable } from \"stream\";\nimport { ImageFilterer } from \"./ImageFilterer\";\nimport { CanvasImage } from \"./CanvasImage\";\nimport { TemplateFactory } from \"../assets/TemplateFactory\";\n\nexport type ImageGeneratorImplementor = {\n  [K in Lowercase<Exclude<keyof typeof TemplateFactory, \"Triggered\">>]: (\n    // @ts-expect-error\n    ...args: Parameters<(typeof TemplateFactory)[Capitalize<K>]>\n  ) => Promise<Buffer>;\n};\n\nexport interface CanvacordFactory extends ImageGeneratorImplementor {\n  /**\n   * Creates a new ImageFilterer instance.\n   * @param width The width of the image\n   * @param height The height of the image\n   */\n  filters(width: number, height: number): ImageFilterer;\n\n  /**\n   * Generates Triggered gif with the provided image.\n   * @param image The image to use\n   * @param [asBuffer] Whether to return a buffer instead of a stream\n   * @returns The generated gif\n   */\n  triggered(image: ImageSource): Promise<Readable>;\n  /**\n   * Generates Triggered gif with the provided image.\n   * @param image The image to use\n   * @param [asBuffer] Whether to return a buffer instead of a stream\n   * @returns The generated gif\n   */\n  triggered(image: ImageSource, asBuffer: false): Promise<Readable>;\n  /**\n   * Generates Triggered gif with the provided image.\n   * @param image The image to use\n   * @param [asBuffer] Whether to return a buffer instead of a stream\n   * @returns The generated gif\n   */\n  triggered(image: ImageSource, asBuffer: true): Promise<Buffer>;\n  /**\n   * Generates Triggered gif with the provided image.\n   * @param image The image to use\n   * @param [asBuffer] Whether to return a buffer instead of a stream\n   * @returns The generated gif\n   */\n  triggered(image: ImageSource, asBuffer?: boolean): Promise<Readable | Buffer>;\n}\n\nconst factory = {\n  filters(width: number, height: number) {\n    return new ImageFilterer(width, height);\n  },\n  async triggered(\n    image: ImageSource,\n    asBuffer?: boolean\n  ): Promise<Readable | Buffer> {\n    const generator = new ImageGen(TemplateFactory.Triggered(image));\n    const img = await generator.generateGif();\n\n    if (!asBuffer) return img;\n    return buffer(img);\n  },\n} as CanvacordFactory;\n\nconst capitalize = <S extends string>(str: S) =>\n  (str[0].toUpperCase() + str.slice(1)) as Capitalize<S>;\n\nfor (const key in TemplateFactory) {\n  const method = key.toLowerCase() as Lowercase<keyof typeof TemplateFactory>;\n  if (method === \"triggered\") continue;\n\n  factory[method] = async (\n    ...args: Parameters<CanvacordFactory[typeof method]>\n  ) => {\n    // @ts-expect-error\n    const template = TemplateFactory[capitalize(method)](...args);\n    const generator = new ImageGen(template);\n\n    await generator.render();\n\n    return generator.encode();\n  };\n}\n\nexport interface CanvacordInit {\n  /**\n   * The width of the image. Defaults to `-1` (auto).\n   */\n  width?: number;\n\n  /**\n   * The height of the image. Defaults to `-1` (auto).\n   */\n  height?: number;\n}\n\n/**\n * Creates a new Canvacord image processor.\n * @param source The image source to use\n * @param options The options to use\n * @returns The image processor\n */\nfunction CanvacordConstructor(source: ImageSource, options?: CanvacordInit) {\n  // biome-ignore lint: reassignment is tolerable here\n  options ??= {};\n\n  const img = new CanvasImage(\n    source,\n    options?.width ?? -1,\n    options?.height ?? -1\n  );\n  img.draw();\n\n  return img;\n}\n\nObject.assign(CanvacordConstructor, factory);\n\nexport type Canvacord = CanvacordFactory & typeof CanvacordConstructor;\n\n/**\n * Creates a new Canvacord image processor.\n * @param source The image source to use\n * @param options The options to use\n * @returns The image processor\n */\nexport const canvacord = CanvacordConstructor as Canvacord;\n"]}