@mastra/factory 0.13.0-alpha.9 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +232 -10
  2. package/dist/auth.d.ts +2 -0
  3. package/dist/auth.d.ts.map +1 -1
  4. package/dist/auth.js +29 -4
  5. package/dist/auth.js.map +1 -1
  6. package/dist/boards/define-board.d.ts +36 -2
  7. package/dist/boards/define-board.d.ts.map +1 -1
  8. package/dist/boards/define-board.js +58 -1
  9. package/dist/boards/define-board.js.map +1 -1
  10. package/dist/boards/index.d.ts +4 -2
  11. package/dist/boards/index.d.ts.map +1 -1
  12. package/dist/boards/index.js +2 -1
  13. package/dist/boards/index.js.map +1 -1
  14. package/dist/boards/relocate.d.ts +17 -0
  15. package/dist/boards/relocate.d.ts.map +1 -0
  16. package/dist/boards/relocate.js +53 -0
  17. package/dist/boards/relocate.js.map +1 -0
  18. package/dist/boards/review.d.ts +1 -1
  19. package/dist/boards/review.d.ts.map +1 -1
  20. package/dist/boards/review.js +17 -4
  21. package/dist/boards/review.js.map +1 -1
  22. package/dist/boards/semantics.d.ts +28 -0
  23. package/dist/boards/semantics.d.ts.map +1 -0
  24. package/dist/boards/semantics.js +41 -0
  25. package/dist/boards/semantics.js.map +1 -0
  26. package/dist/boards/work-tool-rules.d.ts +8 -0
  27. package/dist/boards/work-tool-rules.d.ts.map +1 -0
  28. package/dist/boards/work-tool-rules.js +20 -0
  29. package/dist/boards/work-tool-rules.js.map +1 -0
  30. package/dist/boards/work.d.ts +1 -1
  31. package/dist/boards/work.d.ts.map +1 -1
  32. package/dist/boards/work.js +13 -0
  33. package/dist/boards/work.js.map +1 -1
  34. package/dist/capabilities/intake.d.ts +2 -0
  35. package/dist/capabilities/intake.d.ts.map +1 -1
  36. package/dist/factory.d.ts +5 -6
  37. package/dist/factory.d.ts.map +1 -1
  38. package/dist/factory.js +41 -12
  39. package/dist/factory.js.map +1 -1
  40. package/dist/integrations/base.d.ts +7 -4
  41. package/dist/integrations/base.d.ts.map +1 -1
  42. package/dist/integrations/github/default-rules.d.ts +2 -2
  43. package/dist/integrations/github/default-rules.d.ts.map +1 -1
  44. package/dist/integrations/github/default-rules.js +2 -2
  45. package/dist/integrations/github/default-rules.js.map +1 -1
  46. package/dist/integrations/github/issue-reconciler.d.ts.map +1 -1
  47. package/dist/integrations/github/issue-reconciler.js +4 -3
  48. package/dist/integrations/github/issue-reconciler.js.map +1 -1
  49. package/dist/integrations/github/rules.d.ts +6 -2
  50. package/dist/integrations/github/rules.d.ts.map +1 -1
  51. package/dist/integrations/github/rules.js +96 -15
  52. package/dist/integrations/github/rules.js.map +1 -1
  53. package/dist/integrations/github/sandbox.d.ts +6 -3
  54. package/dist/integrations/github/sandbox.d.ts.map +1 -1
  55. package/dist/integrations/github/sandbox.js +21 -2
  56. package/dist/integrations/github/sandbox.js.map +1 -1
  57. package/dist/integrations/issue-reconciler.d.ts +2 -0
  58. package/dist/integrations/issue-reconciler.d.ts.map +1 -1
  59. package/dist/integrations/issue-reconciler.js +1 -3
  60. package/dist/integrations/issue-reconciler.js.map +1 -1
  61. package/dist/integrations/linear/agent-tools.d.ts.map +1 -1
  62. package/dist/integrations/linear/agent-tools.js.map +1 -1
  63. package/dist/integrations/linear/default-rules.d.ts +2 -2
  64. package/dist/integrations/linear/default-rules.d.ts.map +1 -1
  65. package/dist/integrations/linear/default-rules.js +2 -2
  66. package/dist/integrations/linear/default-rules.js.map +1 -1
  67. package/dist/integrations/linear/integration.js +1 -0
  68. package/dist/integrations/linear/integration.js.map +1 -1
  69. package/dist/integrations/linear/issue-reconciler.d.ts.map +1 -1
  70. package/dist/integrations/linear/issue-reconciler.js +9 -4
  71. package/dist/integrations/linear/issue-reconciler.js.map +1 -1
  72. package/dist/integrations/linear/reconciliation-config.d.ts.map +1 -1
  73. package/dist/integrations/linear/reconciliation-config.js.map +1 -1
  74. package/dist/integrations/linear/routes.d.ts.map +1 -1
  75. package/dist/integrations/linear/routes.js +19 -26
  76. package/dist/integrations/linear/routes.js.map +1 -1
  77. package/dist/integrations/linear/rules.d.ts +7 -2
  78. package/dist/integrations/linear/rules.d.ts.map +1 -1
  79. package/dist/integrations/linear/rules.js +20 -8
  80. package/dist/integrations/linear/rules.js.map +1 -1
  81. package/dist/integrations/platform/api-client.d.ts.map +1 -1
  82. package/dist/integrations/platform/api-client.js +25 -4
  83. package/dist/integrations/platform/api-client.js.map +1 -1
  84. package/dist/integrations/platform/github/integration.d.ts +1 -0
  85. package/dist/integrations/platform/github/integration.d.ts.map +1 -1
  86. package/dist/integrations/platform/github/integration.js +5 -0
  87. package/dist/integrations/platform/github/integration.js.map +1 -1
  88. package/dist/integrations/platform/linear/integration.d.ts.map +1 -1
  89. package/dist/integrations/platform/linear/integration.js +5 -2
  90. package/dist/integrations/platform/linear/integration.js.map +1 -1
  91. package/dist/integrations/slack/emoji-shortcodes.generated.d.ts +8 -0
  92. package/dist/integrations/slack/emoji-shortcodes.generated.d.ts.map +1 -0
  93. package/dist/integrations/slack/emoji-shortcodes.generated.js +1985 -0
  94. package/dist/integrations/slack/emoji-shortcodes.generated.js.map +1 -0
  95. package/dist/integrations/slack/emoji.d.ts +3 -0
  96. package/dist/integrations/slack/emoji.d.ts.map +1 -0
  97. package/dist/integrations/slack/emoji.js +12 -0
  98. package/dist/integrations/slack/emoji.js.map +1 -0
  99. package/dist/integrations/slack/integration.js +1 -1
  100. package/dist/integrations/slack/integration.js.map +1 -1
  101. package/dist/integrations/slack/slack.d.ts.map +1 -1
  102. package/dist/integrations/slack/slack.js +16 -2
  103. package/dist/integrations/slack/slack.js.map +1 -1
  104. package/dist/routes/attention-activity.d.ts +2 -3
  105. package/dist/routes/attention-activity.d.ts.map +1 -1
  106. package/dist/routes/attention-activity.js +12 -3
  107. package/dist/routes/attention-activity.js.map +1 -1
  108. package/dist/routes/attention-parked.d.ts +22 -0
  109. package/dist/routes/attention-parked.d.ts.map +1 -0
  110. package/dist/routes/attention-parked.js +136 -0
  111. package/dist/routes/attention-parked.js.map +1 -0
  112. package/dist/routes/attention-providers.js +8 -8
  113. package/dist/routes/attention-providers.js.map +1 -1
  114. package/dist/routes/attention.d.ts +2 -0
  115. package/dist/routes/attention.d.ts.map +1 -1
  116. package/dist/routes/attention.js +47 -118
  117. package/dist/routes/attention.js.map +1 -1
  118. package/dist/routes/contracts.d.ts +627 -0
  119. package/dist/routes/contracts.d.ts.map +1 -0
  120. package/dist/routes/contracts.js +468 -0
  121. package/dist/routes/contracts.js.map +1 -0
  122. package/dist/routes/intake.d.ts +18 -0
  123. package/dist/routes/intake.d.ts.map +1 -1
  124. package/dist/routes/intake.js +265 -15
  125. package/dist/routes/intake.js.map +1 -1
  126. package/dist/routes/projects.d.ts.map +1 -1
  127. package/dist/routes/projects.js +26 -76
  128. package/dist/routes/projects.js.map +1 -1
  129. package/dist/routes/supervisor.d.ts +2 -0
  130. package/dist/routes/supervisor.d.ts.map +1 -1
  131. package/dist/routes/supervisor.js +7 -6
  132. package/dist/routes/supervisor.js.map +1 -1
  133. package/dist/routes/surface.d.ts +7 -4
  134. package/dist/routes/surface.d.ts.map +1 -1
  135. package/dist/routes/surface.js +17 -11
  136. package/dist/routes/surface.js.map +1 -1
  137. package/dist/routes/telemetry.d.ts +13 -0
  138. package/dist/routes/telemetry.d.ts.map +1 -0
  139. package/dist/routes/telemetry.js +60 -0
  140. package/dist/routes/telemetry.js.map +1 -0
  141. package/dist/routes/work-items.d.ts +3 -3
  142. package/dist/routes/work-items.d.ts.map +1 -1
  143. package/dist/routes/work-items.js +134 -250
  144. package/dist/routes/work-items.js.map +1 -1
  145. package/dist/rules/dispatch-errors.d.ts +2 -2
  146. package/dist/rules/dispatch-errors.d.ts.map +1 -1
  147. package/dist/rules/dispatch-errors.js +10 -6
  148. package/dist/rules/dispatch-errors.js.map +1 -1
  149. package/dist/rules/dispatcher.d.ts +9 -2
  150. package/dist/rules/dispatcher.d.ts.map +1 -1
  151. package/dist/rules/dispatcher.js +76 -23
  152. package/dist/rules/dispatcher.js.map +1 -1
  153. package/dist/rules/index.d.ts +4 -5
  154. package/dist/rules/index.d.ts.map +1 -1
  155. package/dist/rules/index.js +3 -4
  156. package/dist/rules/processor.d.ts +3 -3
  157. package/dist/rules/processor.d.ts.map +1 -1
  158. package/dist/rules/processor.js +24 -31
  159. package/dist/rules/processor.js.map +1 -1
  160. package/dist/rules/resolve.d.ts +1 -3
  161. package/dist/rules/resolve.d.ts.map +1 -1
  162. package/dist/rules/resolve.js +1 -4
  163. package/dist/rules/resolve.js.map +1 -1
  164. package/dist/rules/start-coordinator.d.ts.map +1 -1
  165. package/dist/rules/start-coordinator.js +3 -1
  166. package/dist/rules/start-coordinator.js.map +1 -1
  167. package/dist/rules/tools.d.ts.map +1 -1
  168. package/dist/rules/tools.js +20 -10
  169. package/dist/rules/tools.js.map +1 -1
  170. package/dist/rules/transition-service.d.ts +7 -7
  171. package/dist/rules/transition-service.d.ts.map +1 -1
  172. package/dist/rules/transition-service.js +21 -25
  173. package/dist/rules/transition-service.js.map +1 -1
  174. package/dist/rules/types.d.ts +16 -11
  175. package/dist/rules/types.d.ts.map +1 -1
  176. package/dist/rules/types.js.map +1 -1
  177. package/dist/rules/validation.d.ts +12 -2
  178. package/dist/rules/validation.d.ts.map +1 -1
  179. package/dist/rules/validation.js +29 -20
  180. package/dist/rules/validation.js.map +1 -1
  181. package/dist/session/live-sessions.d.ts +33 -3
  182. package/dist/session/live-sessions.d.ts.map +1 -1
  183. package/dist/session/live-sessions.js +67 -5
  184. package/dist/session/live-sessions.js.map +1 -1
  185. package/dist/storage/domains/intake/base.d.ts +54 -1
  186. package/dist/storage/domains/intake/base.d.ts.map +1 -1
  187. package/dist/storage/domains/intake/base.js +136 -4
  188. package/dist/storage/domains/intake/base.js.map +1 -1
  189. package/dist/storage/domains/work-items/base.d.ts +22 -7
  190. package/dist/storage/domains/work-items/base.d.ts.map +1 -1
  191. package/dist/storage/domains/work-items/base.js +41 -26
  192. package/dist/storage/domains/work-items/base.js.map +1 -1
  193. package/dist/supervisor/health-worker.d.ts +2 -0
  194. package/dist/supervisor/health-worker.d.ts.map +1 -1
  195. package/dist/supervisor/health-worker.js +3 -1
  196. package/dist/supervisor/health-worker.js.map +1 -1
  197. package/dist/supervisor/health.d.ts +12 -14
  198. package/dist/supervisor/health.d.ts.map +1 -1
  199. package/dist/supervisor/health.js +24 -52
  200. package/dist/supervisor/health.js.map +1 -1
  201. package/dist/supervisor/instructions.d.ts +1 -1
  202. package/dist/supervisor/instructions.d.ts.map +1 -1
  203. package/dist/supervisor/instructions.js +10 -8
  204. package/dist/supervisor/instructions.js.map +1 -1
  205. package/dist/supervisor/read-tools.d.ts +2 -0
  206. package/dist/supervisor/read-tools.d.ts.map +1 -1
  207. package/dist/supervisor/read-tools.js +2 -2
  208. package/dist/supervisor/read-tools.js.map +1 -1
  209. package/dist/supervisor/write-tools.d.ts.map +1 -1
  210. package/dist/supervisor/write-tools.js +6 -4
  211. package/dist/supervisor/write-tools.js.map +1 -1
  212. package/dist/telemetry-types.d.ts +7 -0
  213. package/dist/telemetry-types.d.ts.map +1 -0
  214. package/dist/telemetry-types.js +24 -0
  215. package/dist/telemetry-types.js.map +1 -0
  216. package/dist/telemetry.d.ts +9 -0
  217. package/dist/telemetry.d.ts.map +1 -0
  218. package/dist/telemetry.js +47 -0
  219. package/dist/telemetry.js.map +1 -0
  220. package/dist/work-item-branch.d.ts +2 -0
  221. package/dist/work-item-branch.d.ts.map +1 -1
  222. package/dist/work-item-branch.js +6 -1
  223. package/dist/work-item-branch.js.map +1 -1
  224. package/dist/workspace.d.ts.map +1 -1
  225. package/dist/workspace.js +3 -1
  226. package/dist/workspace.js.map +1 -1
  227. package/factory-skills/configure-factory-rules/SKILL.md +30 -10
  228. package/package.json +12 -10
  229. package/dist/rules/defaults.d.ts +0 -9
  230. package/dist/rules/defaults.d.ts.map +0 -1
  231. package/dist/rules/defaults.js +0 -50
  232. package/dist/rules/defaults.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji-shortcodes.generated.js","names":[],"sources":["../../../src/integrations/slack/emoji-shortcodes.generated.ts"],"sourcesContent":["/**\n * AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY\n *\n * Source: https://raw.githubusercontent.com/iamcal/emoji-data/097705020bcf82331c9ef10df3425aad15f5043c/emoji.json\n * Regenerate: node scripts/generate-slack-emoji.mjs (from mastracode/factory)\n */\n\nexport const emojiByShortcode: Record<string, string> = {\n hash: \"#️⃣\",\n keycap_star: \"*️⃣\",\n zero: \"0️⃣\",\n one: \"1️⃣\",\n two: \"2️⃣\",\n three: \"3️⃣\",\n four: \"4️⃣\",\n five: \"5️⃣\",\n six: \"6️⃣\",\n seven: \"7️⃣\",\n eight: \"8️⃣\",\n nine: \"9️⃣\",\n copyright: \"©️\",\n registered: \"®️\",\n mahjong: \"🀄\",\n black_joker: \"🃏\",\n a: \"🅰️\",\n b: \"🅱️\",\n o2: \"🅾️\",\n parking: \"🅿️\",\n ab: \"🆎\",\n cl: \"🆑\",\n cool: \"🆒\",\n free: \"🆓\",\n id: \"🆔\",\n new: \"🆕\",\n ng: \"🆖\",\n ok: \"🆗\",\n sos: \"🆘\",\n up: \"🆙\",\n vs: \"🆚\",\n \"flag-ac\": \"🇦🇨\",\n \"flag-ad\": \"🇦🇩\",\n \"flag-ae\": \"🇦🇪\",\n \"flag-af\": \"🇦🇫\",\n \"flag-ag\": \"🇦🇬\",\n \"flag-ai\": \"🇦🇮\",\n \"flag-al\": \"🇦🇱\",\n \"flag-am\": \"🇦🇲\",\n \"flag-ao\": \"🇦🇴\",\n \"flag-aq\": \"🇦🇶\",\n \"flag-ar\": \"🇦🇷\",\n \"flag-as\": \"🇦🇸\",\n \"flag-at\": \"🇦🇹\",\n \"flag-au\": \"🇦🇺\",\n \"flag-aw\": \"🇦🇼\",\n \"flag-ax\": \"🇦🇽\",\n \"flag-az\": \"🇦🇿\",\n \"flag-ba\": \"🇧🇦\",\n \"flag-bb\": \"🇧🇧\",\n \"flag-bd\": \"🇧🇩\",\n \"flag-be\": \"🇧🇪\",\n \"flag-bf\": \"🇧🇫\",\n \"flag-bg\": \"🇧🇬\",\n \"flag-bh\": \"🇧🇭\",\n \"flag-bi\": \"🇧🇮\",\n \"flag-bj\": \"🇧🇯\",\n \"flag-bl\": \"🇧🇱\",\n \"flag-bm\": \"🇧🇲\",\n \"flag-bn\": \"🇧🇳\",\n \"flag-bo\": \"🇧🇴\",\n \"flag-bq\": \"🇧🇶\",\n \"flag-br\": \"🇧🇷\",\n \"flag-bs\": \"🇧🇸\",\n \"flag-bt\": \"🇧🇹\",\n \"flag-bv\": \"🇧🇻\",\n \"flag-bw\": \"🇧🇼\",\n \"flag-by\": \"🇧🇾\",\n \"flag-bz\": \"🇧🇿\",\n \"flag-ca\": \"🇨🇦\",\n \"flag-cc\": \"🇨🇨\",\n \"flag-cd\": \"🇨🇩\",\n \"flag-cf\": \"🇨🇫\",\n \"flag-cg\": \"🇨🇬\",\n \"flag-ch\": \"🇨🇭\",\n \"flag-ci\": \"🇨🇮\",\n \"flag-ck\": \"🇨🇰\",\n \"flag-cl\": \"🇨🇱\",\n \"flag-cm\": \"🇨🇲\",\n cn: \"🇨🇳\",\n \"flag-cn\": \"🇨🇳\",\n \"flag-co\": \"🇨🇴\",\n \"flag-cp\": \"🇨🇵\",\n \"flag-sark\": \"🇨🇶\",\n \"flag-cr\": \"🇨🇷\",\n \"flag-cu\": \"🇨🇺\",\n \"flag-cv\": \"🇨🇻\",\n \"flag-cw\": \"🇨🇼\",\n \"flag-cx\": \"🇨🇽\",\n \"flag-cy\": \"🇨🇾\",\n \"flag-cz\": \"🇨🇿\",\n de: \"🇩🇪\",\n \"flag-de\": \"🇩🇪\",\n \"flag-dg\": \"🇩🇬\",\n \"flag-dj\": \"🇩🇯\",\n \"flag-dk\": \"🇩🇰\",\n \"flag-dm\": \"🇩🇲\",\n \"flag-do\": \"🇩🇴\",\n \"flag-dz\": \"🇩🇿\",\n \"flag-ea\": \"🇪🇦\",\n \"flag-ec\": \"🇪🇨\",\n \"flag-ee\": \"🇪🇪\",\n \"flag-eg\": \"🇪🇬\",\n \"flag-eh\": \"🇪🇭\",\n \"flag-er\": \"🇪🇷\",\n es: \"🇪🇸\",\n \"flag-es\": \"🇪🇸\",\n \"flag-et\": \"🇪🇹\",\n \"flag-eu\": \"🇪🇺\",\n \"flag-fi\": \"🇫🇮\",\n \"flag-fj\": \"🇫🇯\",\n \"flag-fk\": \"🇫🇰\",\n \"flag-fm\": \"🇫🇲\",\n \"flag-fo\": \"🇫🇴\",\n fr: \"🇫🇷\",\n \"flag-fr\": \"🇫🇷\",\n \"flag-ga\": \"🇬🇦\",\n gb: \"🇬🇧\",\n uk: \"🇬🇧\",\n \"flag-gb\": \"🇬🇧\",\n \"flag-gd\": \"🇬🇩\",\n \"flag-ge\": \"🇬🇪\",\n \"flag-gf\": \"🇬🇫\",\n \"flag-gg\": \"🇬🇬\",\n \"flag-gh\": \"🇬🇭\",\n \"flag-gi\": \"🇬🇮\",\n \"flag-gl\": \"🇬🇱\",\n \"flag-gm\": \"🇬🇲\",\n \"flag-gn\": \"🇬🇳\",\n \"flag-gp\": \"🇬🇵\",\n \"flag-gq\": \"🇬🇶\",\n \"flag-gr\": \"🇬🇷\",\n \"flag-gs\": \"🇬🇸\",\n \"flag-gt\": \"🇬🇹\",\n \"flag-gu\": \"🇬🇺\",\n \"flag-gw\": \"🇬🇼\",\n \"flag-gy\": \"🇬🇾\",\n \"flag-hk\": \"🇭🇰\",\n \"flag-hm\": \"🇭🇲\",\n \"flag-hn\": \"🇭🇳\",\n \"flag-hr\": \"🇭🇷\",\n \"flag-ht\": \"🇭🇹\",\n \"flag-hu\": \"🇭🇺\",\n \"flag-ic\": \"🇮🇨\",\n \"flag-id\": \"🇮🇩\",\n \"flag-ie\": \"🇮🇪\",\n \"flag-il\": \"🇮🇱\",\n \"flag-im\": \"🇮🇲\",\n \"flag-in\": \"🇮🇳\",\n \"flag-io\": \"🇮🇴\",\n \"flag-iq\": \"🇮🇶\",\n \"flag-ir\": \"🇮🇷\",\n \"flag-is\": \"🇮🇸\",\n it: \"🇮🇹\",\n \"flag-it\": \"🇮🇹\",\n \"flag-je\": \"🇯🇪\",\n \"flag-jm\": \"🇯🇲\",\n \"flag-jo\": \"🇯🇴\",\n jp: \"🇯🇵\",\n \"flag-jp\": \"🇯🇵\",\n \"flag-ke\": \"🇰🇪\",\n \"flag-kg\": \"🇰🇬\",\n \"flag-kh\": \"🇰🇭\",\n \"flag-ki\": \"🇰🇮\",\n \"flag-km\": \"🇰🇲\",\n \"flag-kn\": \"🇰🇳\",\n \"flag-kp\": \"🇰🇵\",\n kr: \"🇰🇷\",\n \"flag-kr\": \"🇰🇷\",\n \"flag-kw\": \"🇰🇼\",\n \"flag-ky\": \"🇰🇾\",\n \"flag-kz\": \"🇰🇿\",\n \"flag-la\": \"🇱🇦\",\n \"flag-lb\": \"🇱🇧\",\n \"flag-lc\": \"🇱🇨\",\n \"flag-li\": \"🇱🇮\",\n \"flag-lk\": \"🇱🇰\",\n \"flag-lr\": \"🇱🇷\",\n \"flag-ls\": \"🇱🇸\",\n \"flag-lt\": \"🇱🇹\",\n \"flag-lu\": \"🇱🇺\",\n \"flag-lv\": \"🇱🇻\",\n \"flag-ly\": \"🇱🇾\",\n \"flag-ma\": \"🇲🇦\",\n \"flag-mc\": \"🇲🇨\",\n \"flag-md\": \"🇲🇩\",\n \"flag-me\": \"🇲🇪\",\n \"flag-mf\": \"🇲🇫\",\n \"flag-mg\": \"🇲🇬\",\n \"flag-mh\": \"🇲🇭\",\n \"flag-mk\": \"🇲🇰\",\n \"flag-ml\": \"🇲🇱\",\n \"flag-mm\": \"🇲🇲\",\n \"flag-mn\": \"🇲🇳\",\n \"flag-mo\": \"🇲🇴\",\n \"flag-mp\": \"🇲🇵\",\n \"flag-mq\": \"🇲🇶\",\n \"flag-mr\": \"🇲🇷\",\n \"flag-ms\": \"🇲🇸\",\n \"flag-mt\": \"🇲🇹\",\n \"flag-mu\": \"🇲🇺\",\n \"flag-mv\": \"🇲🇻\",\n \"flag-mw\": \"🇲🇼\",\n \"flag-mx\": \"🇲🇽\",\n \"flag-my\": \"🇲🇾\",\n \"flag-mz\": \"🇲🇿\",\n \"flag-na\": \"🇳🇦\",\n \"flag-nc\": \"🇳🇨\",\n \"flag-ne\": \"🇳🇪\",\n \"flag-nf\": \"🇳🇫\",\n \"flag-ng\": \"🇳🇬\",\n \"flag-ni\": \"🇳🇮\",\n \"flag-nl\": \"🇳🇱\",\n \"flag-no\": \"🇳🇴\",\n \"flag-np\": \"🇳🇵\",\n \"flag-nr\": \"🇳🇷\",\n \"flag-nu\": \"🇳🇺\",\n \"flag-nz\": \"🇳🇿\",\n \"flag-om\": \"🇴🇲\",\n \"flag-pa\": \"🇵🇦\",\n \"flag-pe\": \"🇵🇪\",\n \"flag-pf\": \"🇵🇫\",\n \"flag-pg\": \"🇵🇬\",\n \"flag-ph\": \"🇵🇭\",\n \"flag-pk\": \"🇵🇰\",\n \"flag-pl\": \"🇵🇱\",\n \"flag-pm\": \"🇵🇲\",\n \"flag-pn\": \"🇵🇳\",\n \"flag-pr\": \"🇵🇷\",\n \"flag-ps\": \"🇵🇸\",\n \"flag-pt\": \"🇵🇹\",\n \"flag-pw\": \"🇵🇼\",\n \"flag-py\": \"🇵🇾\",\n \"flag-qa\": \"🇶🇦\",\n \"flag-re\": \"🇷🇪\",\n \"flag-ro\": \"🇷🇴\",\n \"flag-rs\": \"🇷🇸\",\n ru: \"🇷🇺\",\n \"flag-ru\": \"🇷🇺\",\n \"flag-rw\": \"🇷🇼\",\n \"flag-sa\": \"🇸🇦\",\n \"flag-sb\": \"🇸🇧\",\n \"flag-sc\": \"🇸🇨\",\n \"flag-sd\": \"🇸🇩\",\n \"flag-se\": \"🇸🇪\",\n \"flag-sg\": \"🇸🇬\",\n \"flag-sh\": \"🇸🇭\",\n \"flag-si\": \"🇸🇮\",\n \"flag-sj\": \"🇸🇯\",\n \"flag-sk\": \"🇸🇰\",\n \"flag-sl\": \"🇸🇱\",\n \"flag-sm\": \"🇸🇲\",\n \"flag-sn\": \"🇸🇳\",\n \"flag-so\": \"🇸🇴\",\n \"flag-sr\": \"🇸🇷\",\n \"flag-ss\": \"🇸🇸\",\n \"flag-st\": \"🇸🇹\",\n \"flag-sv\": \"🇸🇻\",\n \"flag-sx\": \"🇸🇽\",\n \"flag-sy\": \"🇸🇾\",\n \"flag-sz\": \"🇸🇿\",\n \"flag-ta\": \"🇹🇦\",\n \"flag-tc\": \"🇹🇨\",\n \"flag-td\": \"🇹🇩\",\n \"flag-tf\": \"🇹🇫\",\n \"flag-tg\": \"🇹🇬\",\n \"flag-th\": \"🇹🇭\",\n \"flag-tj\": \"🇹🇯\",\n \"flag-tk\": \"🇹🇰\",\n \"flag-tl\": \"🇹🇱\",\n \"flag-tm\": \"🇹🇲\",\n \"flag-tn\": \"🇹🇳\",\n \"flag-to\": \"🇹🇴\",\n \"flag-tr\": \"🇹🇷\",\n \"flag-tt\": \"🇹🇹\",\n \"flag-tv\": \"🇹🇻\",\n \"flag-tw\": \"🇹🇼\",\n \"flag-tz\": \"🇹🇿\",\n \"flag-ua\": \"🇺🇦\",\n \"flag-ug\": \"🇺🇬\",\n \"flag-um\": \"🇺🇲\",\n \"flag-un\": \"🇺🇳\",\n us: \"🇺🇸\",\n \"flag-us\": \"🇺🇸\",\n \"flag-uy\": \"🇺🇾\",\n \"flag-uz\": \"🇺🇿\",\n \"flag-va\": \"🇻🇦\",\n \"flag-vc\": \"🇻🇨\",\n \"flag-ve\": \"🇻🇪\",\n \"flag-vg\": \"🇻🇬\",\n \"flag-vi\": \"🇻🇮\",\n \"flag-vn\": \"🇻🇳\",\n \"flag-vu\": \"🇻🇺\",\n \"flag-wf\": \"🇼🇫\",\n \"flag-ws\": \"🇼🇸\",\n \"flag-xk\": \"🇽🇰\",\n \"flag-ye\": \"🇾🇪\",\n \"flag-yt\": \"🇾🇹\",\n \"flag-za\": \"🇿🇦\",\n \"flag-zm\": \"🇿🇲\",\n \"flag-zw\": \"🇿🇼\",\n koko: \"🈁\",\n sa: \"🈂️\",\n u7121: \"🈚\",\n u6307: \"🈯\",\n u7981: \"🈲\",\n u7a7a: \"🈳\",\n u5408: \"🈴\",\n u6e80: \"🈵\",\n u6709: \"🈶\",\n u6708: \"🈷️\",\n u7533: \"🈸\",\n u5272: \"🈹\",\n u55b6: \"🈺\",\n ideograph_advantage: \"🉐\",\n accept: \"🉑\",\n cyclone: \"🌀\",\n foggy: \"🌁\",\n closed_umbrella: \"🌂\",\n night_with_stars: \"🌃\",\n sunrise_over_mountains: \"🌄\",\n sunrise: \"🌅\",\n city_sunset: \"🌆\",\n city_sunrise: \"🌇\",\n rainbow: \"🌈\",\n bridge_at_night: \"🌉\",\n ocean: \"🌊\",\n volcano: \"🌋\",\n milky_way: \"🌌\",\n earth_africa: \"🌍\",\n earth_americas: \"🌎\",\n earth_asia: \"🌏\",\n globe_with_meridians: \"🌐\",\n new_moon: \"🌑\",\n waxing_crescent_moon: \"🌒\",\n first_quarter_moon: \"🌓\",\n moon: \"🌔\",\n waxing_gibbous_moon: \"🌔\",\n full_moon: \"🌕\",\n waning_gibbous_moon: \"🌖\",\n last_quarter_moon: \"🌗\",\n waning_crescent_moon: \"🌘\",\n crescent_moon: \"🌙\",\n new_moon_with_face: \"🌚\",\n first_quarter_moon_with_face: \"🌛\",\n last_quarter_moon_with_face: \"🌜\",\n full_moon_with_face: \"🌝\",\n sun_with_face: \"🌞\",\n star2: \"🌟\",\n stars: \"🌠\",\n thermometer: \"🌡️\",\n mostly_sunny: \"🌤️\",\n sun_small_cloud: \"🌤️\",\n barely_sunny: \"🌥️\",\n sun_behind_cloud: \"🌥️\",\n partly_sunny_rain: \"🌦️\",\n sun_behind_rain_cloud: \"🌦️\",\n rain_cloud: \"🌧️\",\n snow_cloud: \"🌨️\",\n lightning: \"🌩️\",\n lightning_cloud: \"🌩️\",\n tornado: \"🌪️\",\n tornado_cloud: \"🌪️\",\n fog: \"🌫️\",\n wind_blowing_face: \"🌬️\",\n hotdog: \"🌭\",\n taco: \"🌮\",\n burrito: \"🌯\",\n chestnut: \"🌰\",\n seedling: \"🌱\",\n evergreen_tree: \"🌲\",\n deciduous_tree: \"🌳\",\n palm_tree: \"🌴\",\n cactus: \"🌵\",\n hot_pepper: \"🌶️\",\n tulip: \"🌷\",\n cherry_blossom: \"🌸\",\n rose: \"🌹\",\n hibiscus: \"🌺\",\n sunflower: \"🌻\",\n blossom: \"🌼\",\n corn: \"🌽\",\n ear_of_rice: \"🌾\",\n herb: \"🌿\",\n four_leaf_clover: \"🍀\",\n maple_leaf: \"🍁\",\n fallen_leaf: \"🍂\",\n leaves: \"🍃\",\n brown_mushroom: \"🍄‍🟫\",\n mushroom: \"🍄\",\n tomato: \"🍅\",\n eggplant: \"🍆\",\n grapes: \"🍇\",\n melon: \"🍈\",\n watermelon: \"🍉\",\n tangerine: \"🍊\",\n lime: \"🍋‍🟩\",\n lemon: \"🍋\",\n banana: \"🍌\",\n pineapple: \"🍍\",\n apple: \"🍎\",\n green_apple: \"🍏\",\n pear: \"🍐\",\n peach: \"🍑\",\n cherries: \"🍒\",\n strawberry: \"🍓\",\n hamburger: \"🍔\",\n pizza: \"🍕\",\n meat_on_bone: \"🍖\",\n poultry_leg: \"🍗\",\n rice_cracker: \"🍘\",\n rice_ball: \"🍙\",\n rice: \"🍚\",\n curry: \"🍛\",\n ramen: \"🍜\",\n spaghetti: \"🍝\",\n bread: \"🍞\",\n fries: \"🍟\",\n sweet_potato: \"🍠\",\n dango: \"🍡\",\n oden: \"🍢\",\n sushi: \"🍣\",\n fried_shrimp: \"🍤\",\n fish_cake: \"🍥\",\n icecream: \"🍦\",\n shaved_ice: \"🍧\",\n ice_cream: \"🍨\",\n doughnut: \"🍩\",\n cookie: \"🍪\",\n chocolate_bar: \"🍫\",\n candy: \"🍬\",\n lollipop: \"🍭\",\n custard: \"🍮\",\n honey_pot: \"🍯\",\n cake: \"🍰\",\n bento: \"🍱\",\n stew: \"🍲\",\n fried_egg: \"🍳\",\n cooking: \"🍳\",\n fork_and_knife: \"🍴\",\n tea: \"🍵\",\n sake: \"🍶\",\n wine_glass: \"🍷\",\n cocktail: \"🍸\",\n tropical_drink: \"🍹\",\n beer: \"🍺\",\n beers: \"🍻\",\n baby_bottle: \"🍼\",\n knife_fork_plate: \"🍽️\",\n champagne: \"🍾\",\n popcorn: \"🍿\",\n ribbon: \"🎀\",\n gift: \"🎁\",\n birthday: \"🎂\",\n jack_o_lantern: \"🎃\",\n christmas_tree: \"🎄\",\n santa: \"🎅\",\n fireworks: \"🎆\",\n sparkler: \"🎇\",\n balloon: \"🎈\",\n tada: \"🎉\",\n confetti_ball: \"🎊\",\n tanabata_tree: \"🎋\",\n crossed_flags: \"🎌\",\n bamboo: \"🎍\",\n dolls: \"🎎\",\n flags: \"🎏\",\n wind_chime: \"🎐\",\n rice_scene: \"🎑\",\n school_satchel: \"🎒\",\n mortar_board: \"🎓\",\n medal: \"🎖️\",\n reminder_ribbon: \"🎗️\",\n studio_microphone: \"🎙️\",\n level_slider: \"🎚️\",\n control_knobs: \"🎛️\",\n film_frames: \"🎞️\",\n admission_tickets: \"🎟️\",\n carousel_horse: \"🎠\",\n ferris_wheel: \"🎡\",\n roller_coaster: \"🎢\",\n fishing_pole_and_fish: \"🎣\",\n microphone: \"🎤\",\n movie_camera: \"🎥\",\n cinema: \"🎦\",\n headphones: \"🎧\",\n art: \"🎨\",\n tophat: \"🎩\",\n circus_tent: \"🎪\",\n ticket: \"🎫\",\n clapper: \"🎬\",\n performing_arts: \"🎭\",\n video_game: \"🎮\",\n dart: \"🎯\",\n slot_machine: \"🎰\",\n \"8ball\": \"🎱\",\n game_die: \"🎲\",\n bowling: \"🎳\",\n flower_playing_cards: \"🎴\",\n musical_note: \"🎵\",\n notes: \"🎶\",\n saxophone: \"🎷\",\n guitar: \"🎸\",\n musical_keyboard: \"🎹\",\n trumpet: \"🎺\",\n violin: \"🎻\",\n musical_score: \"🎼\",\n running_shirt_with_sash: \"🎽\",\n tennis: \"🎾\",\n ski: \"🎿\",\n basketball: \"🏀\",\n checkered_flag: \"🏁\",\n snowboarder: \"🏂\",\n \"woman-running\": \"🏃‍♀️\",\n woman_running_facing_right: \"🏃‍♀️‍➡️\",\n \"man-running\": \"🏃‍♂️\",\n man_running_facing_right: \"🏃‍♂️‍➡️\",\n person_running_facing_right: \"🏃‍➡️\",\n runner: \"🏃\",\n running: \"🏃\",\n \"woman-surfing\": \"🏄‍♀️\",\n \"man-surfing\": \"🏄‍♂️\",\n surfer: \"🏄\",\n sports_medal: \"🏅\",\n trophy: \"🏆\",\n horse_racing: \"🏇\",\n football: \"🏈\",\n rugby_football: \"🏉\",\n \"woman-swimming\": \"🏊‍♀️\",\n \"man-swimming\": \"🏊‍♂️\",\n swimmer: \"🏊\",\n \"woman-lifting-weights\": \"🏋️‍♀️\",\n \"man-lifting-weights\": \"🏋️‍♂️\",\n weight_lifter: \"🏋️\",\n \"woman-golfing\": \"🏌️‍♀️\",\n \"man-golfing\": \"🏌️‍♂️\",\n golfer: \"🏌️\",\n racing_motorcycle: \"🏍️\",\n racing_car: \"🏎️\",\n cricket_bat_and_ball: \"🏏\",\n volleyball: \"🏐\",\n field_hockey_stick_and_ball: \"🏑\",\n ice_hockey_stick_and_puck: \"🏒\",\n table_tennis_paddle_and_ball: \"🏓\",\n snow_capped_mountain: \"🏔️\",\n camping: \"🏕️\",\n beach_with_umbrella: \"🏖️\",\n building_construction: \"🏗️\",\n house_buildings: \"🏘️\",\n cityscape: \"🏙️\",\n derelict_house_building: \"🏚️\",\n classical_building: \"🏛️\",\n desert: \"🏜️\",\n desert_island: \"🏝️\",\n national_park: \"🏞️\",\n stadium: \"🏟️\",\n house: \"🏠\",\n house_with_garden: \"🏡\",\n office: \"🏢\",\n post_office: \"🏣\",\n european_post_office: \"🏤\",\n hospital: \"🏥\",\n bank: \"🏦\",\n atm: \"🏧\",\n hotel: \"🏨\",\n love_hotel: \"🏩\",\n convenience_store: \"🏪\",\n school: \"🏫\",\n department_store: \"🏬\",\n factory: \"🏭\",\n izakaya_lantern: \"🏮\",\n lantern: \"🏮\",\n japanese_castle: \"🏯\",\n european_castle: \"🏰\",\n \"rainbow-flag\": \"🏳️‍🌈\",\n transgender_flag: \"🏳️‍⚧️\",\n waving_white_flag: \"🏳️\",\n pirate_flag: \"🏴‍☠️\",\n \"flag-england\": \"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\n \"flag-scotland\": \"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\n \"flag-wales\": \"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\n waving_black_flag: \"🏴\",\n rosette: \"🏵️\",\n label: \"🏷️\",\n badminton_racquet_and_shuttlecock: \"🏸\",\n bow_and_arrow: \"🏹\",\n amphora: \"🏺\",\n \"skin-tone-2\": \"🏻\",\n \"skin-tone-3\": \"🏼\",\n \"skin-tone-4\": \"🏽\",\n \"skin-tone-5\": \"🏾\",\n \"skin-tone-6\": \"🏿\",\n rat: \"🐀\",\n mouse2: \"🐁\",\n ox: \"🐂\",\n water_buffalo: \"🐃\",\n cow2: \"🐄\",\n tiger2: \"🐅\",\n leopard: \"🐆\",\n rabbit2: \"🐇\",\n black_cat: \"🐈‍⬛\",\n cat2: \"🐈\",\n dragon: \"🐉\",\n crocodile: \"🐊\",\n whale2: \"🐋\",\n snail: \"🐌\",\n snake: \"🐍\",\n racehorse: \"🐎\",\n ram: \"🐏\",\n goat: \"🐐\",\n sheep: \"🐑\",\n monkey: \"🐒\",\n rooster: \"🐓\",\n chicken: \"🐔\",\n service_dog: \"🐕‍🦺\",\n dog2: \"🐕\",\n pig2: \"🐖\",\n boar: \"🐗\",\n elephant: \"🐘\",\n octopus: \"🐙\",\n shell: \"🐚\",\n bug: \"🐛\",\n ant: \"🐜\",\n bee: \"🐝\",\n honeybee: \"🐝\",\n ladybug: \"🐞\",\n lady_beetle: \"🐞\",\n fish: \"🐟\",\n tropical_fish: \"🐠\",\n blowfish: \"🐡\",\n turtle: \"🐢\",\n hatching_chick: \"🐣\",\n baby_chick: \"🐤\",\n hatched_chick: \"🐥\",\n phoenix: \"🐦‍🔥\",\n black_bird: \"🐦‍⬛\",\n bird: \"🐦\",\n penguin: \"🐧\",\n koala: \"🐨\",\n poodle: \"🐩\",\n dromedary_camel: \"🐪\",\n camel: \"🐫\",\n dolphin: \"🐬\",\n flipper: \"🐬\",\n mouse: \"🐭\",\n cow: \"🐮\",\n tiger: \"🐯\",\n rabbit: \"🐰\",\n cat: \"🐱\",\n dragon_face: \"🐲\",\n whale: \"🐳\",\n horse: \"🐴\",\n monkey_face: \"🐵\",\n dog: \"🐶\",\n pig: \"🐷\",\n frog: \"🐸\",\n hamster: \"🐹\",\n wolf: \"🐺\",\n polar_bear: \"🐻‍❄️\",\n bear: \"🐻\",\n panda_face: \"🐼\",\n pig_nose: \"🐽\",\n feet: \"🐾\",\n paw_prints: \"🐾\",\n chipmunk: \"🐿️\",\n eyes: \"👀\",\n \"eye-in-speech-bubble\": \"👁️‍🗨️\",\n eye: \"👁️\",\n ear: \"👂\",\n nose: \"👃\",\n lips: \"👄\",\n tongue: \"👅\",\n point_up_2: \"👆\",\n point_down: \"👇\",\n point_left: \"👈\",\n point_right: \"👉\",\n facepunch: \"👊\",\n punch: \"👊\",\n wave: \"👋\",\n ok_hand: \"👌\",\n \"+1\": \"👍\",\n thumbsup: \"👍\",\n \"-1\": \"👎\",\n thumbsdown: \"👎\",\n clap: \"👏\",\n open_hands: \"👐\",\n crown: \"👑\",\n womans_hat: \"👒\",\n eyeglasses: \"👓\",\n necktie: \"👔\",\n shirt: \"👕\",\n tshirt: \"👕\",\n jeans: \"👖\",\n dress: \"👗\",\n kimono: \"👘\",\n bikini: \"👙\",\n womans_clothes: \"👚\",\n purse: \"👛\",\n handbag: \"👜\",\n pouch: \"👝\",\n mans_shoe: \"👞\",\n shoe: \"👞\",\n athletic_shoe: \"👟\",\n high_heel: \"👠\",\n sandal: \"👡\",\n boot: \"👢\",\n footprints: \"👣\",\n bust_in_silhouette: \"👤\",\n busts_in_silhouette: \"👥\",\n boy: \"👦\",\n girl: \"👧\",\n \"male-farmer\": \"👨‍🌾\",\n \"male-cook\": \"👨‍🍳\",\n man_feeding_baby: \"👨‍🍼\",\n \"male-student\": \"👨‍🎓\",\n \"male-singer\": \"👨‍🎤\",\n \"male-artist\": \"👨‍🎨\",\n \"male-teacher\": \"👨‍🏫\",\n \"male-factory-worker\": \"👨‍🏭\",\n \"man-boy-boy\": \"👨‍👦‍👦\",\n \"man-boy\": \"👨‍👦\",\n \"man-girl-boy\": \"👨‍👧‍👦\",\n \"man-girl-girl\": \"👨‍👧‍👧\",\n \"man-girl\": \"👨‍👧\",\n \"man-man-boy\": \"👨‍👨‍👦\",\n \"man-man-boy-boy\": \"👨‍👨‍👦‍👦\",\n \"man-man-girl\": \"👨‍👨‍👧\",\n \"man-man-girl-boy\": \"👨‍👨‍👧‍👦\",\n \"man-man-girl-girl\": \"👨‍👨‍👧‍👧\",\n \"man-woman-boy\": \"👨‍👩‍👦\",\n \"man-woman-boy-boy\": \"👨‍👩‍👦‍👦\",\n \"man-woman-girl\": \"👨‍👩‍👧\",\n \"man-woman-girl-boy\": \"👨‍👩‍👧‍👦\",\n \"man-woman-girl-girl\": \"👨‍👩‍👧‍👧\",\n \"male-technologist\": \"👨‍💻\",\n \"male-office-worker\": \"👨‍💼\",\n \"male-mechanic\": \"👨‍🔧\",\n \"male-scientist\": \"👨‍🔬\",\n \"male-astronaut\": \"👨‍🚀\",\n \"male-firefighter\": \"👨‍🚒\",\n man_with_white_cane_facing_right: \"👨‍🦯‍➡️\",\n man_with_probing_cane: \"👨‍🦯\",\n red_haired_man: \"👨‍🦰\",\n curly_haired_man: \"👨‍🦱\",\n bald_man: \"👨‍🦲\",\n white_haired_man: \"👨‍🦳\",\n man_in_motorized_wheelchair_facing_right: \"👨‍🦼‍➡️\",\n man_in_motorized_wheelchair: \"👨‍🦼\",\n man_in_manual_wheelchair_facing_right: \"👨‍🦽‍➡️\",\n man_in_manual_wheelchair: \"👨‍🦽\",\n \"male-doctor\": \"👨‍⚕️\",\n \"male-judge\": \"👨‍⚖️\",\n \"male-pilot\": \"👨‍✈️\",\n \"man-heart-man\": \"👨‍❤️‍👨\",\n \"man-kiss-man\": \"👨‍❤️‍💋‍👨\",\n man: \"👨\",\n \"female-farmer\": \"👩‍🌾\",\n \"female-cook\": \"👩‍🍳\",\n woman_feeding_baby: \"👩‍🍼\",\n \"female-student\": \"👩‍🎓\",\n \"female-singer\": \"👩‍🎤\",\n \"female-artist\": \"👩‍🎨\",\n \"female-teacher\": \"👩‍🏫\",\n \"female-factory-worker\": \"👩‍🏭\",\n \"woman-boy-boy\": \"👩‍👦‍👦\",\n \"woman-boy\": \"👩‍👦\",\n \"woman-girl-boy\": \"👩‍👧‍👦\",\n \"woman-girl-girl\": \"👩‍👧‍👧\",\n \"woman-girl\": \"👩‍👧\",\n \"woman-woman-boy\": \"👩‍👩‍👦\",\n \"woman-woman-boy-boy\": \"👩‍👩‍👦‍👦\",\n \"woman-woman-girl\": \"👩‍👩‍👧\",\n \"woman-woman-girl-boy\": \"👩‍👩‍👧‍👦\",\n \"woman-woman-girl-girl\": \"👩‍👩‍👧‍👧\",\n \"female-technologist\": \"👩‍💻\",\n \"female-office-worker\": \"👩‍💼\",\n \"female-mechanic\": \"👩‍🔧\",\n \"female-scientist\": \"👩‍🔬\",\n \"female-astronaut\": \"👩‍🚀\",\n \"female-firefighter\": \"👩‍🚒\",\n woman_with_white_cane_facing_right: \"👩‍🦯‍➡️\",\n woman_with_probing_cane: \"👩‍🦯\",\n red_haired_woman: \"👩‍🦰\",\n curly_haired_woman: \"👩‍🦱\",\n bald_woman: \"👩‍🦲\",\n white_haired_woman: \"👩‍🦳\",\n woman_in_motorized_wheelchair_facing_right: \"👩‍🦼‍➡️\",\n woman_in_motorized_wheelchair: \"👩‍🦼\",\n woman_in_manual_wheelchair_facing_right: \"👩‍🦽‍➡️\",\n woman_in_manual_wheelchair: \"👩‍🦽\",\n \"female-doctor\": \"👩‍⚕️\",\n \"female-judge\": \"👩‍⚖️\",\n \"female-pilot\": \"👩‍✈️\",\n \"woman-heart-man\": \"👩‍❤️‍👨\",\n \"woman-heart-woman\": \"👩‍❤️‍👩\",\n \"woman-kiss-man\": \"👩‍❤️‍💋‍👨\",\n \"woman-kiss-woman\": \"👩‍❤️‍💋‍👩\",\n woman: \"👩\",\n family: \"👪\",\n man_and_woman_holding_hands: \"👫\",\n woman_and_man_holding_hands: \"👫\",\n couple: \"👫\",\n two_men_holding_hands: \"👬\",\n men_holding_hands: \"👬\",\n two_women_holding_hands: \"👭\",\n women_holding_hands: \"👭\",\n \"female-police-officer\": \"👮‍♀️\",\n \"male-police-officer\": \"👮‍♂️\",\n cop: \"👮\",\n \"women-with-bunny-ears-partying\": \"👯‍♀️\",\n \"woman-with-bunny-ears-partying\": \"👯‍♀️\",\n \"men-with-bunny-ears-partying\": \"👯‍♂️\",\n \"man-with-bunny-ears-partying\": \"👯‍♂️\",\n dancers: \"👯\",\n woman_with_veil: \"👰‍♀️\",\n man_with_veil: \"👰‍♂️\",\n bride_with_veil: \"👰\",\n \"blond-haired-woman\": \"👱‍♀️\",\n \"blond-haired-man\": \"👱‍♂️\",\n person_with_blond_hair: \"👱\",\n man_with_gua_pi_mao: \"👲\",\n \"woman-wearing-turban\": \"👳‍♀️\",\n \"man-wearing-turban\": \"👳‍♂️\",\n man_with_turban: \"👳\",\n older_man: \"👴\",\n older_woman: \"👵\",\n baby: \"👶\",\n \"female-construction-worker\": \"👷‍♀️\",\n \"male-construction-worker\": \"👷‍♂️\",\n construction_worker: \"👷\",\n princess: \"👸\",\n japanese_ogre: \"👹\",\n japanese_goblin: \"👺\",\n ghost: \"👻\",\n angel: \"👼\",\n alien: \"👽\",\n space_invader: \"👾\",\n imp: \"👿\",\n skull: \"💀\",\n \"woman-tipping-hand\": \"💁‍♀️\",\n \"man-tipping-hand\": \"💁‍♂️\",\n information_desk_person: \"💁\",\n \"female-guard\": \"💂‍♀️\",\n \"male-guard\": \"💂‍♂️\",\n guardsman: \"💂\",\n dancer: \"💃\",\n lipstick: \"💄\",\n nail_care: \"💅\",\n \"woman-getting-massage\": \"💆‍♀️\",\n \"man-getting-massage\": \"💆‍♂️\",\n massage: \"💆\",\n \"woman-getting-haircut\": \"💇‍♀️\",\n \"man-getting-haircut\": \"💇‍♂️\",\n haircut: \"💇\",\n barber: \"💈\",\n syringe: \"💉\",\n pill: \"💊\",\n kiss: \"💋\",\n love_letter: \"💌\",\n ring: \"💍\",\n gem: \"💎\",\n couplekiss: \"💏\",\n bouquet: \"💐\",\n couple_with_heart: \"💑\",\n wedding: \"💒\",\n heartbeat: \"💓\",\n broken_heart: \"💔\",\n two_hearts: \"💕\",\n sparkling_heart: \"💖\",\n heartpulse: \"💗\",\n cupid: \"💘\",\n blue_heart: \"💙\",\n green_heart: \"💚\",\n yellow_heart: \"💛\",\n purple_heart: \"💜\",\n gift_heart: \"💝\",\n revolving_hearts: \"💞\",\n heart_decoration: \"💟\",\n diamond_shape_with_a_dot_inside: \"💠\",\n bulb: \"💡\",\n anger: \"💢\",\n bomb: \"💣\",\n zzz: \"💤\",\n boom: \"💥\",\n collision: \"💥\",\n sweat_drops: \"💦\",\n droplet: \"💧\",\n dash: \"💨\",\n hankey: \"💩\",\n poop: \"💩\",\n shit: \"💩\",\n muscle: \"💪\",\n dizzy: \"💫\",\n speech_balloon: \"💬\",\n thought_balloon: \"💭\",\n white_flower: \"💮\",\n \"100\": \"💯\",\n moneybag: \"💰\",\n currency_exchange: \"💱\",\n heavy_dollar_sign: \"💲\",\n credit_card: \"💳\",\n yen: \"💴\",\n dollar: \"💵\",\n euro: \"💶\",\n pound: \"💷\",\n money_with_wings: \"💸\",\n chart: \"💹\",\n seat: \"💺\",\n computer: \"💻\",\n briefcase: \"💼\",\n minidisc: \"💽\",\n floppy_disk: \"💾\",\n cd: \"💿\",\n dvd: \"📀\",\n file_folder: \"📁\",\n open_file_folder: \"📂\",\n page_with_curl: \"📃\",\n page_facing_up: \"📄\",\n date: \"📅\",\n calendar: \"📆\",\n card_index: \"📇\",\n chart_with_upwards_trend: \"📈\",\n chart_with_downwards_trend: \"📉\",\n bar_chart: \"📊\",\n clipboard: \"📋\",\n pushpin: \"📌\",\n round_pushpin: \"📍\",\n paperclip: \"📎\",\n straight_ruler: \"📏\",\n triangular_ruler: \"📐\",\n bookmark_tabs: \"📑\",\n ledger: \"📒\",\n notebook: \"📓\",\n notebook_with_decorative_cover: \"📔\",\n closed_book: \"📕\",\n book: \"📖\",\n open_book: \"📖\",\n green_book: \"📗\",\n blue_book: \"📘\",\n orange_book: \"📙\",\n books: \"📚\",\n name_badge: \"📛\",\n scroll: \"📜\",\n memo: \"📝\",\n pencil: \"📝\",\n telephone_receiver: \"📞\",\n pager: \"📟\",\n fax: \"📠\",\n satellite_antenna: \"📡\",\n loudspeaker: \"📢\",\n mega: \"📣\",\n outbox_tray: \"📤\",\n inbox_tray: \"📥\",\n package: \"📦\",\n \"e-mail\": \"📧\",\n incoming_envelope: \"📨\",\n envelope_with_arrow: \"📩\",\n mailbox_closed: \"📪\",\n mailbox: \"📫\",\n mailbox_with_mail: \"📬\",\n mailbox_with_no_mail: \"📭\",\n postbox: \"📮\",\n postal_horn: \"📯\",\n newspaper: \"📰\",\n iphone: \"📱\",\n calling: \"📲\",\n vibration_mode: \"📳\",\n mobile_phone_off: \"📴\",\n no_mobile_phones: \"📵\",\n signal_strength: \"📶\",\n camera: \"📷\",\n camera_with_flash: \"📸\",\n video_camera: \"📹\",\n tv: \"📺\",\n radio: \"📻\",\n vhs: \"📼\",\n film_projector: \"📽️\",\n prayer_beads: \"📿\",\n twisted_rightwards_arrows: \"🔀\",\n repeat: \"🔁\",\n repeat_one: \"🔂\",\n arrows_clockwise: \"🔃\",\n arrows_counterclockwise: \"🔄\",\n low_brightness: \"🔅\",\n high_brightness: \"🔆\",\n mute: \"🔇\",\n speaker: \"🔈\",\n sound: \"🔉\",\n loud_sound: \"🔊\",\n battery: \"🔋\",\n electric_plug: \"🔌\",\n mag: \"🔍\",\n mag_right: \"🔎\",\n lock_with_ink_pen: \"🔏\",\n closed_lock_with_key: \"🔐\",\n key: \"🔑\",\n lock: \"🔒\",\n unlock: \"🔓\",\n bell: \"🔔\",\n no_bell: \"🔕\",\n bookmark: \"🔖\",\n link: \"🔗\",\n radio_button: \"🔘\",\n back: \"🔙\",\n end: \"🔚\",\n on: \"🔛\",\n soon: \"🔜\",\n top: \"🔝\",\n underage: \"🔞\",\n keycap_ten: \"🔟\",\n capital_abcd: \"🔠\",\n abcd: \"🔡\",\n \"1234\": \"🔢\",\n symbols: \"🔣\",\n abc: \"🔤\",\n fire: \"🔥\",\n flashlight: \"🔦\",\n wrench: \"🔧\",\n hammer: \"🔨\",\n nut_and_bolt: \"🔩\",\n hocho: \"🔪\",\n knife: \"🔪\",\n gun: \"🔫\",\n microscope: \"🔬\",\n telescope: \"🔭\",\n crystal_ball: \"🔮\",\n six_pointed_star: \"🔯\",\n beginner: \"🔰\",\n trident: \"🔱\",\n black_square_button: \"🔲\",\n white_square_button: \"🔳\",\n red_circle: \"🔴\",\n large_blue_circle: \"🔵\",\n large_orange_diamond: \"🔶\",\n large_blue_diamond: \"🔷\",\n small_orange_diamond: \"🔸\",\n small_blue_diamond: \"🔹\",\n small_red_triangle: \"🔺\",\n small_red_triangle_down: \"🔻\",\n arrow_up_small: \"🔼\",\n arrow_down_small: \"🔽\",\n om_symbol: \"🕉️\",\n dove_of_peace: \"🕊️\",\n kaaba: \"🕋\",\n mosque: \"🕌\",\n synagogue: \"🕍\",\n menorah_with_nine_branches: \"🕎\",\n clock1: \"🕐\",\n clock2: \"🕑\",\n clock3: \"🕒\",\n clock4: \"🕓\",\n clock5: \"🕔\",\n clock6: \"🕕\",\n clock7: \"🕖\",\n clock8: \"🕗\",\n clock9: \"🕘\",\n clock10: \"🕙\",\n clock11: \"🕚\",\n clock12: \"🕛\",\n clock130: \"🕜\",\n clock230: \"🕝\",\n clock330: \"🕞\",\n clock430: \"🕟\",\n clock530: \"🕠\",\n clock630: \"🕡\",\n clock730: \"🕢\",\n clock830: \"🕣\",\n clock930: \"🕤\",\n clock1030: \"🕥\",\n clock1130: \"🕦\",\n clock1230: \"🕧\",\n candle: \"🕯️\",\n mantelpiece_clock: \"🕰️\",\n hole: \"🕳️\",\n man_in_business_suit_levitating: \"🕴️\",\n \"female-detective\": \"🕵️‍♀️\",\n \"male-detective\": \"🕵️‍♂️\",\n sleuth_or_spy: \"🕵️\",\n dark_sunglasses: \"🕶️\",\n spider: \"🕷️\",\n spider_web: \"🕸️\",\n joystick: \"🕹️\",\n man_dancing: \"🕺\",\n linked_paperclips: \"🖇️\",\n lower_left_ballpoint_pen: \"🖊️\",\n lower_left_fountain_pen: \"🖋️\",\n lower_left_paintbrush: \"🖌️\",\n lower_left_crayon: \"🖍️\",\n raised_hand_with_fingers_splayed: \"🖐️\",\n middle_finger: \"🖕\",\n reversed_hand_with_middle_finger_extended: \"🖕\",\n \"spock-hand\": \"🖖\",\n black_heart: \"🖤\",\n desktop_computer: \"🖥️\",\n printer: \"🖨️\",\n three_button_mouse: \"🖱️\",\n trackball: \"🖲️\",\n frame_with_picture: \"🖼️\",\n card_index_dividers: \"🗂️\",\n card_file_box: \"🗃️\",\n file_cabinet: \"🗄️\",\n wastebasket: \"🗑️\",\n spiral_note_pad: \"🗒️\",\n spiral_calendar_pad: \"🗓️\",\n compression: \"🗜️\",\n old_key: \"🗝️\",\n rolled_up_newspaper: \"🗞️\",\n dagger_knife: \"🗡️\",\n speaking_head_in_silhouette: \"🗣️\",\n left_speech_bubble: \"🗨️\",\n right_anger_bubble: \"🗯️\",\n ballot_box_with_ballot: \"🗳️\",\n world_map: \"🗺️\",\n mount_fuji: \"🗻\",\n tokyo_tower: \"🗼\",\n statue_of_liberty: \"🗽\",\n japan: \"🗾\",\n moyai: \"🗿\",\n grinning: \"😀\",\n grin: \"😁\",\n joy: \"😂\",\n smiley: \"😃\",\n smile: \"😄\",\n sweat_smile: \"😅\",\n laughing: \"😆\",\n satisfied: \"😆\",\n innocent: \"😇\",\n smiling_imp: \"😈\",\n wink: \"😉\",\n blush: \"😊\",\n yum: \"😋\",\n relieved: \"😌\",\n heart_eyes: \"😍\",\n sunglasses: \"😎\",\n smirk: \"😏\",\n neutral_face: \"😐\",\n expressionless: \"😑\",\n unamused: \"😒\",\n sweat: \"😓\",\n pensive: \"😔\",\n confused: \"😕\",\n confounded: \"😖\",\n kissing: \"😗\",\n kissing_heart: \"😘\",\n kissing_smiling_eyes: \"😙\",\n kissing_closed_eyes: \"😚\",\n stuck_out_tongue: \"😛\",\n stuck_out_tongue_winking_eye: \"😜\",\n stuck_out_tongue_closed_eyes: \"😝\",\n disappointed: \"😞\",\n worried: \"😟\",\n angry: \"😠\",\n rage: \"😡\",\n cry: \"😢\",\n persevere: \"😣\",\n triumph: \"😤\",\n disappointed_relieved: \"😥\",\n frowning: \"😦\",\n anguished: \"😧\",\n fearful: \"😨\",\n weary: \"😩\",\n sleepy: \"😪\",\n tired_face: \"😫\",\n grimacing: \"😬\",\n sob: \"😭\",\n face_exhaling: \"😮‍💨\",\n open_mouth: \"😮\",\n hushed: \"😯\",\n cold_sweat: \"😰\",\n scream: \"😱\",\n astonished: \"😲\",\n flushed: \"😳\",\n sleeping: \"😴\",\n face_with_spiral_eyes: \"😵‍💫\",\n dizzy_face: \"😵\",\n face_in_clouds: \"😶‍🌫️\",\n no_mouth: \"😶\",\n mask: \"😷\",\n smile_cat: \"😸\",\n joy_cat: \"😹\",\n smiley_cat: \"😺\",\n heart_eyes_cat: \"😻\",\n smirk_cat: \"😼\",\n kissing_cat: \"😽\",\n pouting_cat: \"😾\",\n crying_cat_face: \"😿\",\n scream_cat: \"🙀\",\n slightly_frowning_face: \"🙁\",\n head_shaking_horizontally: \"🙂‍↔️\",\n head_shaking_vertically: \"🙂‍↕️\",\n slightly_smiling_face: \"🙂\",\n upside_down_face: \"🙃\",\n face_with_rolling_eyes: \"🙄\",\n \"woman-gesturing-no\": \"🙅‍♀️\",\n \"man-gesturing-no\": \"🙅‍♂️\",\n no_good: \"🙅\",\n \"woman-gesturing-ok\": \"🙆‍♀️\",\n \"man-gesturing-ok\": \"🙆‍♂️\",\n ok_woman: \"🙆\",\n \"woman-bowing\": \"🙇‍♀️\",\n \"man-bowing\": \"🙇‍♂️\",\n bow: \"🙇\",\n see_no_evil: \"🙈\",\n hear_no_evil: \"🙉\",\n speak_no_evil: \"🙊\",\n \"woman-raising-hand\": \"🙋‍♀️\",\n \"man-raising-hand\": \"🙋‍♂️\",\n raising_hand: \"🙋\",\n raised_hands: \"🙌\",\n \"woman-frowning\": \"🙍‍♀️\",\n \"man-frowning\": \"🙍‍♂️\",\n person_frowning: \"🙍\",\n \"woman-pouting\": \"🙎‍♀️\",\n \"man-pouting\": \"🙎‍♂️\",\n person_with_pouting_face: \"🙎\",\n pray: \"🙏\",\n rocket: \"🚀\",\n helicopter: \"🚁\",\n steam_locomotive: \"🚂\",\n railway_car: \"🚃\",\n bullettrain_side: \"🚄\",\n bullettrain_front: \"🚅\",\n train2: \"🚆\",\n metro: \"🚇\",\n light_rail: \"🚈\",\n station: \"🚉\",\n tram: \"🚊\",\n train: \"🚋\",\n bus: \"🚌\",\n oncoming_bus: \"🚍\",\n trolleybus: \"🚎\",\n busstop: \"🚏\",\n minibus: \"🚐\",\n ambulance: \"🚑\",\n fire_engine: \"🚒\",\n police_car: \"🚓\",\n oncoming_police_car: \"🚔\",\n taxi: \"🚕\",\n oncoming_taxi: \"🚖\",\n car: \"🚗\",\n red_car: \"🚗\",\n oncoming_automobile: \"🚘\",\n blue_car: \"🚙\",\n truck: \"🚚\",\n articulated_lorry: \"🚛\",\n tractor: \"🚜\",\n monorail: \"🚝\",\n mountain_railway: \"🚞\",\n suspension_railway: \"🚟\",\n mountain_cableway: \"🚠\",\n aerial_tramway: \"🚡\",\n ship: \"🚢\",\n \"woman-rowing-boat\": \"🚣‍♀️\",\n \"man-rowing-boat\": \"🚣‍♂️\",\n rowboat: \"🚣\",\n speedboat: \"🚤\",\n traffic_light: \"🚥\",\n vertical_traffic_light: \"🚦\",\n construction: \"🚧\",\n rotating_light: \"🚨\",\n triangular_flag_on_post: \"🚩\",\n door: \"🚪\",\n no_entry_sign: \"🚫\",\n smoking: \"🚬\",\n no_smoking: \"🚭\",\n put_litter_in_its_place: \"🚮\",\n do_not_litter: \"🚯\",\n potable_water: \"🚰\",\n \"non-potable_water\": \"🚱\",\n bike: \"🚲\",\n no_bicycles: \"🚳\",\n \"woman-biking\": \"🚴‍♀️\",\n \"man-biking\": \"🚴‍♂️\",\n bicyclist: \"🚴\",\n \"woman-mountain-biking\": \"🚵‍♀️\",\n \"man-mountain-biking\": \"🚵‍♂️\",\n mountain_bicyclist: \"🚵\",\n \"woman-walking\": \"🚶‍♀️\",\n woman_walking_facing_right: \"🚶‍♀️‍➡️\",\n \"man-walking\": \"🚶‍♂️\",\n man_walking_facing_right: \"🚶‍♂️‍➡️\",\n person_walking_facing_right: \"🚶‍➡️\",\n walking: \"🚶\",\n no_pedestrians: \"🚷\",\n children_crossing: \"🚸\",\n mens: \"🚹\",\n womens: \"🚺\",\n restroom: \"🚻\",\n baby_symbol: \"🚼\",\n toilet: \"🚽\",\n wc: \"🚾\",\n shower: \"🚿\",\n bath: \"🛀\",\n bathtub: \"🛁\",\n passport_control: \"🛂\",\n customs: \"🛃\",\n baggage_claim: \"🛄\",\n left_luggage: \"🛅\",\n couch_and_lamp: \"🛋️\",\n sleeping_accommodation: \"🛌\",\n shopping_bags: \"🛍️\",\n bellhop_bell: \"🛎️\",\n bed: \"🛏️\",\n place_of_worship: \"🛐\",\n octagonal_sign: \"🛑\",\n shopping_trolley: \"🛒\",\n hindu_temple: \"🛕\",\n hut: \"🛖\",\n elevator: \"🛗\",\n wireless: \"🛜\",\n playground_slide: \"🛝\",\n wheel: \"🛞\",\n ring_buoy: \"🛟\",\n hammer_and_wrench: \"🛠️\",\n shield: \"🛡️\",\n oil_drum: \"🛢️\",\n motorway: \"🛣️\",\n railway_track: \"🛤️\",\n motor_boat: \"🛥️\",\n small_airplane: \"🛩️\",\n airplane_departure: \"🛫\",\n airplane_arriving: \"🛬\",\n satellite: \"🛰️\",\n passenger_ship: \"🛳️\",\n scooter: \"🛴\",\n motor_scooter: \"🛵\",\n canoe: \"🛶\",\n sled: \"🛷\",\n flying_saucer: \"🛸\",\n skateboard: \"🛹\",\n auto_rickshaw: \"🛺\",\n pickup_truck: \"🛻\",\n roller_skate: \"🛼\",\n large_orange_circle: \"🟠\",\n large_yellow_circle: \"🟡\",\n large_green_circle: \"🟢\",\n large_purple_circle: \"🟣\",\n large_brown_circle: \"🟤\",\n large_red_square: \"🟥\",\n large_blue_square: \"🟦\",\n large_orange_square: \"🟧\",\n large_yellow_square: \"🟨\",\n large_green_square: \"🟩\",\n large_purple_square: \"🟪\",\n large_brown_square: \"🟫\",\n heavy_equals_sign: \"🟰\",\n pinched_fingers: \"🤌\",\n white_heart: \"🤍\",\n brown_heart: \"🤎\",\n pinching_hand: \"🤏\",\n zipper_mouth_face: \"🤐\",\n money_mouth_face: \"🤑\",\n face_with_thermometer: \"🤒\",\n nerd_face: \"🤓\",\n thinking_face: \"🤔\",\n face_with_head_bandage: \"🤕\",\n robot_face: \"🤖\",\n hugging_face: \"🤗\",\n the_horns: \"🤘\",\n sign_of_the_horns: \"🤘\",\n call_me_hand: \"🤙\",\n raised_back_of_hand: \"🤚\",\n \"left-facing_fist\": \"🤛\",\n \"right-facing_fist\": \"🤜\",\n handshake: \"🤝\",\n crossed_fingers: \"🤞\",\n hand_with_index_and_middle_fingers_crossed: \"🤞\",\n i_love_you_hand_sign: \"🤟\",\n face_with_cowboy_hat: \"🤠\",\n clown_face: \"🤡\",\n nauseated_face: \"🤢\",\n rolling_on_the_floor_laughing: \"🤣\",\n drooling_face: \"🤤\",\n lying_face: \"🤥\",\n \"woman-facepalming\": \"🤦‍♀️\",\n \"man-facepalming\": \"🤦‍♂️\",\n face_palm: \"🤦\",\n sneezing_face: \"🤧\",\n face_with_raised_eyebrow: \"🤨\",\n face_with_one_eyebrow_raised: \"🤨\",\n \"star-struck\": \"🤩\",\n grinning_face_with_star_eyes: \"🤩\",\n zany_face: \"🤪\",\n grinning_face_with_one_large_and_one_small_eye: \"🤪\",\n shushing_face: \"🤫\",\n face_with_finger_covering_closed_lips: \"🤫\",\n face_with_symbols_on_mouth: \"🤬\",\n serious_face_with_symbols_covering_mouth: \"🤬\",\n face_with_hand_over_mouth: \"🤭\",\n smiling_face_with_smiling_eyes_and_hand_covering_mouth: \"🤭\",\n face_vomiting: \"🤮\",\n face_with_open_mouth_vomiting: \"🤮\",\n exploding_head: \"🤯\",\n shocked_face_with_exploding_head: \"🤯\",\n pregnant_woman: \"🤰\",\n \"breast-feeding\": \"🤱\",\n palms_up_together: \"🤲\",\n selfie: \"🤳\",\n prince: \"🤴\",\n woman_in_tuxedo: \"🤵‍♀️\",\n man_in_tuxedo: \"🤵‍♂️\",\n person_in_tuxedo: \"🤵\",\n mrs_claus: \"🤶\",\n mother_christmas: \"🤶\",\n \"woman-shrugging\": \"🤷‍♀️\",\n \"man-shrugging\": \"🤷‍♂️\",\n shrug: \"🤷\",\n \"woman-cartwheeling\": \"🤸‍♀️\",\n \"man-cartwheeling\": \"🤸‍♂️\",\n person_doing_cartwheel: \"🤸\",\n \"woman-juggling\": \"🤹‍♀️\",\n \"man-juggling\": \"🤹‍♂️\",\n juggling: \"🤹\",\n fencer: \"🤺\",\n \"woman-wrestling\": \"🤼‍♀️\",\n \"man-wrestling\": \"🤼‍♂️\",\n wrestlers: \"🤼\",\n \"woman-playing-water-polo\": \"🤽‍♀️\",\n \"man-playing-water-polo\": \"🤽‍♂️\",\n water_polo: \"🤽\",\n \"woman-playing-handball\": \"🤾‍♀️\",\n \"man-playing-handball\": \"🤾‍♂️\",\n handball: \"🤾\",\n diving_mask: \"🤿\",\n wilted_flower: \"🥀\",\n drum_with_drumsticks: \"🥁\",\n clinking_glasses: \"🥂\",\n tumbler_glass: \"🥃\",\n spoon: \"🥄\",\n goal_net: \"🥅\",\n first_place_medal: \"🥇\",\n second_place_medal: \"🥈\",\n third_place_medal: \"🥉\",\n boxing_glove: \"🥊\",\n martial_arts_uniform: \"🥋\",\n curling_stone: \"🥌\",\n lacrosse: \"🥍\",\n softball: \"🥎\",\n flying_disc: \"🥏\",\n croissant: \"🥐\",\n avocado: \"🥑\",\n cucumber: \"🥒\",\n bacon: \"🥓\",\n potato: \"🥔\",\n carrot: \"🥕\",\n baguette_bread: \"🥖\",\n green_salad: \"🥗\",\n shallow_pan_of_food: \"🥘\",\n stuffed_flatbread: \"🥙\",\n egg: \"🥚\",\n glass_of_milk: \"🥛\",\n peanuts: \"🥜\",\n kiwifruit: \"🥝\",\n pancakes: \"🥞\",\n dumpling: \"🥟\",\n fortune_cookie: \"🥠\",\n takeout_box: \"🥡\",\n chopsticks: \"🥢\",\n bowl_with_spoon: \"🥣\",\n cup_with_straw: \"🥤\",\n coconut: \"🥥\",\n broccoli: \"🥦\",\n pie: \"🥧\",\n pretzel: \"🥨\",\n cut_of_meat: \"🥩\",\n sandwich: \"🥪\",\n canned_food: \"🥫\",\n leafy_green: \"🥬\",\n mango: \"🥭\",\n moon_cake: \"🥮\",\n bagel: \"🥯\",\n smiling_face_with_3_hearts: \"🥰\",\n yawning_face: \"🥱\",\n smiling_face_with_tear: \"🥲\",\n partying_face: \"🥳\",\n woozy_face: \"🥴\",\n hot_face: \"🥵\",\n cold_face: \"🥶\",\n ninja: \"🥷\",\n disguised_face: \"🥸\",\n face_holding_back_tears: \"🥹\",\n pleading_face: \"🥺\",\n sari: \"🥻\",\n lab_coat: \"🥼\",\n goggles: \"🥽\",\n hiking_boot: \"🥾\",\n womans_flat_shoe: \"🥿\",\n crab: \"🦀\",\n lion_face: \"🦁\",\n scorpion: \"🦂\",\n turkey: \"🦃\",\n unicorn_face: \"🦄\",\n eagle: \"🦅\",\n duck: \"🦆\",\n bat: \"🦇\",\n shark: \"🦈\",\n owl: \"🦉\",\n fox_face: \"🦊\",\n butterfly: \"🦋\",\n deer: \"🦌\",\n gorilla: \"🦍\",\n lizard: \"🦎\",\n rhinoceros: \"🦏\",\n shrimp: \"🦐\",\n squid: \"🦑\",\n giraffe_face: \"🦒\",\n zebra_face: \"🦓\",\n hedgehog: \"🦔\",\n sauropod: \"🦕\",\n \"t-rex\": \"🦖\",\n cricket: \"🦗\",\n kangaroo: \"🦘\",\n llama: \"🦙\",\n peacock: \"🦚\",\n hippopotamus: \"🦛\",\n parrot: \"🦜\",\n raccoon: \"🦝\",\n lobster: \"🦞\",\n mosquito: \"🦟\",\n microbe: \"🦠\",\n badger: \"🦡\",\n swan: \"🦢\",\n mammoth: \"🦣\",\n dodo: \"🦤\",\n sloth: \"🦥\",\n otter: \"🦦\",\n orangutan: \"🦧\",\n skunk: \"🦨\",\n flamingo: \"🦩\",\n oyster: \"🦪\",\n beaver: \"🦫\",\n bison: \"🦬\",\n seal: \"🦭\",\n guide_dog: \"🦮\",\n probing_cane: \"🦯\",\n bone: \"🦴\",\n leg: \"🦵\",\n foot: \"🦶\",\n tooth: \"🦷\",\n female_superhero: \"🦸‍♀️\",\n male_superhero: \"🦸‍♂️\",\n superhero: \"🦸\",\n female_supervillain: \"🦹‍♀️\",\n male_supervillain: \"🦹‍♂️\",\n supervillain: \"🦹\",\n safety_vest: \"🦺\",\n ear_with_hearing_aid: \"🦻\",\n motorized_wheelchair: \"🦼\",\n manual_wheelchair: \"🦽\",\n mechanical_arm: \"🦾\",\n mechanical_leg: \"🦿\",\n cheese_wedge: \"🧀\",\n cupcake: \"🧁\",\n salt: \"🧂\",\n beverage_box: \"🧃\",\n garlic: \"🧄\",\n onion: \"🧅\",\n falafel: \"🧆\",\n waffle: \"🧇\",\n butter: \"🧈\",\n mate_drink: \"🧉\",\n ice_cube: \"🧊\",\n bubble_tea: \"🧋\",\n troll: \"🧌\",\n woman_standing: \"🧍‍♀️\",\n man_standing: \"🧍‍♂️\",\n standing_person: \"🧍\",\n woman_kneeling: \"🧎‍♀️\",\n woman_kneeling_facing_right: \"🧎‍♀️‍➡️\",\n man_kneeling: \"🧎‍♂️\",\n man_kneeling_facing_right: \"🧎‍♂️‍➡️\",\n person_kneeling_facing_right: \"🧎‍➡️\",\n kneeling_person: \"🧎\",\n deaf_woman: \"🧏‍♀️\",\n deaf_man: \"🧏‍♂️\",\n deaf_person: \"🧏\",\n face_with_monocle: \"🧐\",\n farmer: \"🧑‍🌾\",\n cook: \"🧑‍🍳\",\n person_feeding_baby: \"🧑‍🍼\",\n mx_claus: \"🧑‍🎄\",\n student: \"🧑‍🎓\",\n singer: \"🧑‍🎤\",\n artist: \"🧑‍🎨\",\n teacher: \"🧑‍🏫\",\n factory_worker: \"🧑‍🏭\",\n technologist: \"🧑‍💻\",\n office_worker: \"🧑‍💼\",\n mechanic: \"🧑‍🔧\",\n scientist: \"🧑‍🔬\",\n astronaut: \"🧑‍🚀\",\n firefighter: \"🧑‍🚒\",\n people_holding_hands: \"🧑‍🤝‍🧑\",\n person_with_white_cane_facing_right: \"🧑‍🦯‍➡️\",\n person_with_probing_cane: \"🧑‍🦯\",\n red_haired_person: \"🧑‍🦰\",\n curly_haired_person: \"🧑‍🦱\",\n bald_person: \"🧑‍🦲\",\n white_haired_person: \"🧑‍🦳\",\n person_in_motorized_wheelchair_facing_right: \"🧑‍🦼‍➡️\",\n person_in_motorized_wheelchair: \"🧑‍🦼\",\n person_in_manual_wheelchair_facing_right: \"🧑‍🦽‍➡️\",\n person_in_manual_wheelchair: \"🧑‍🦽\",\n family_adult_adult_child: \"🧑‍🧑‍🧒\",\n family_adult_adult_child_child: \"🧑‍🧑‍🧒‍🧒\",\n family_adult_child_child: \"🧑‍🧒‍🧒\",\n family_adult_child: \"🧑‍🧒\",\n health_worker: \"🧑‍⚕️\",\n judge: \"🧑‍⚖️\",\n pilot: \"🧑‍✈️\",\n adult: \"🧑\",\n child: \"🧒\",\n older_adult: \"🧓\",\n woman_with_beard: \"🧔‍♀️\",\n man_with_beard: \"🧔‍♂️\",\n bearded_person: \"🧔\",\n person_with_headscarf: \"🧕\",\n woman_in_steamy_room: \"🧖‍♀️\",\n man_in_steamy_room: \"🧖‍♂️\",\n person_in_steamy_room: \"🧖\",\n woman_climbing: \"🧗‍♀️\",\n man_climbing: \"🧗‍♂️\",\n person_climbing: \"🧗\",\n woman_in_lotus_position: \"🧘‍♀️\",\n man_in_lotus_position: \"🧘‍♂️\",\n person_in_lotus_position: \"🧘\",\n female_mage: \"🧙‍♀️\",\n male_mage: \"🧙‍♂️\",\n mage: \"🧙\",\n female_fairy: \"🧚‍♀️\",\n male_fairy: \"🧚‍♂️\",\n fairy: \"🧚\",\n female_vampire: \"🧛‍♀️\",\n male_vampire: \"🧛‍♂️\",\n vampire: \"🧛\",\n mermaid: \"🧜‍♀️\",\n merman: \"🧜‍♂️\",\n merperson: \"🧜\",\n female_elf: \"🧝‍♀️\",\n male_elf: \"🧝‍♂️\",\n elf: \"🧝\",\n female_genie: \"🧞‍♀️\",\n male_genie: \"🧞‍♂️\",\n genie: \"🧞\",\n female_zombie: \"🧟‍♀️\",\n male_zombie: \"🧟‍♂️\",\n zombie: \"🧟\",\n brain: \"🧠\",\n orange_heart: \"🧡\",\n billed_cap: \"🧢\",\n scarf: \"🧣\",\n gloves: \"🧤\",\n coat: \"🧥\",\n socks: \"🧦\",\n red_envelope: \"🧧\",\n firecracker: \"🧨\",\n jigsaw: \"🧩\",\n test_tube: \"🧪\",\n petri_dish: \"🧫\",\n dna: \"🧬\",\n compass: \"🧭\",\n abacus: \"🧮\",\n fire_extinguisher: \"🧯\",\n toolbox: \"🧰\",\n bricks: \"🧱\",\n magnet: \"🧲\",\n luggage: \"🧳\",\n lotion_bottle: \"🧴\",\n thread: \"🧵\",\n yarn: \"🧶\",\n safety_pin: \"🧷\",\n teddy_bear: \"🧸\",\n broom: \"🧹\",\n basket: \"🧺\",\n roll_of_paper: \"🧻\",\n soap: \"🧼\",\n sponge: \"🧽\",\n receipt: \"🧾\",\n nazar_amulet: \"🧿\",\n ballet_shoes: \"🩰\",\n \"one-piece_swimsuit\": \"🩱\",\n briefs: \"🩲\",\n shorts: \"🩳\",\n thong_sandal: \"🩴\",\n light_blue_heart: \"🩵\",\n grey_heart: \"🩶\",\n pink_heart: \"🩷\",\n drop_of_blood: \"🩸\",\n adhesive_bandage: \"🩹\",\n stethoscope: \"🩺\",\n \"x-ray\": \"🩻\",\n crutch: \"🩼\",\n \"yo-yo\": \"🪀\",\n kite: \"🪁\",\n parachute: \"🪂\",\n boomerang: \"🪃\",\n magic_wand: \"🪄\",\n pinata: \"🪅\",\n nesting_dolls: \"🪆\",\n maracas: \"🪇\",\n flute: \"🪈\",\n harp: \"🪉\",\n shovel: \"🪏\",\n ringed_planet: \"🪐\",\n chair: \"🪑\",\n razor: \"🪒\",\n axe: \"🪓\",\n diya_lamp: \"🪔\",\n banjo: \"🪕\",\n military_helmet: \"🪖\",\n accordion: \"🪗\",\n long_drum: \"🪘\",\n coin: \"🪙\",\n carpentry_saw: \"🪚\",\n screwdriver: \"🪛\",\n ladder: \"🪜\",\n hook: \"🪝\",\n mirror: \"🪞\",\n window: \"🪟\",\n plunger: \"🪠\",\n sewing_needle: \"🪡\",\n knot: \"🪢\",\n bucket: \"🪣\",\n mouse_trap: \"🪤\",\n toothbrush: \"🪥\",\n headstone: \"🪦\",\n placard: \"🪧\",\n rock: \"🪨\",\n mirror_ball: \"🪩\",\n identification_card: \"🪪\",\n low_battery: \"🪫\",\n hamsa: \"🪬\",\n folding_hand_fan: \"🪭\",\n hair_pick: \"🪮\",\n khanda: \"🪯\",\n fly: \"🪰\",\n worm: \"🪱\",\n beetle: \"🪲\",\n cockroach: \"🪳\",\n potted_plant: \"🪴\",\n wood: \"🪵\",\n feather: \"🪶\",\n lotus: \"🪷\",\n coral: \"🪸\",\n empty_nest: \"🪹\",\n nest_with_eggs: \"🪺\",\n hyacinth: \"🪻\",\n jellyfish: \"🪼\",\n wing: \"🪽\",\n leafless_tree: \"🪾\",\n goose: \"🪿\",\n anatomical_heart: \"🫀\",\n lungs: \"🫁\",\n people_hugging: \"🫂\",\n pregnant_man: \"🫃\",\n pregnant_person: \"🫄\",\n person_with_crown: \"🫅\",\n fingerprint: \"🫆\",\n moose: \"🫎\",\n donkey: \"🫏\",\n blueberries: \"🫐\",\n bell_pepper: \"🫑\",\n olive: \"🫒\",\n flatbread: \"🫓\",\n tamale: \"🫔\",\n fondue: \"🫕\",\n teapot: \"🫖\",\n pouring_liquid: \"🫗\",\n beans: \"🫘\",\n jar: \"🫙\",\n ginger_root: \"🫚\",\n pea_pod: \"🫛\",\n root_vegetable: \"🫜\",\n splatter: \"🫟\",\n melting_face: \"🫠\",\n saluting_face: \"🫡\",\n face_with_open_eyes_and_hand_over_mouth: \"🫢\",\n face_with_peeking_eye: \"🫣\",\n face_with_diagonal_mouth: \"🫤\",\n dotted_line_face: \"🫥\",\n biting_lip: \"🫦\",\n bubbles: \"🫧\",\n shaking_face: \"🫨\",\n face_with_bags_under_eyes: \"🫩\",\n hand_with_index_finger_and_thumb_crossed: \"🫰\",\n rightwards_hand: \"🫱\",\n leftwards_hand: \"🫲\",\n palm_down_hand: \"🫳\",\n palm_up_hand: \"🫴\",\n index_pointing_at_the_viewer: \"🫵\",\n heart_hands: \"🫶\",\n leftwards_pushing_hand: \"🫷\",\n rightwards_pushing_hand: \"🫸\",\n bangbang: \"‼️\",\n interrobang: \"⁉️\",\n tm: \"™️\",\n information_source: \"ℹ️\",\n left_right_arrow: \"↔️\",\n arrow_up_down: \"↕️\",\n arrow_upper_left: \"↖️\",\n arrow_upper_right: \"↗️\",\n arrow_lower_right: \"↘️\",\n arrow_lower_left: \"↙️\",\n leftwards_arrow_with_hook: \"↩️\",\n arrow_right_hook: \"↪️\",\n watch: \"⌚\",\n hourglass: \"⌛\",\n keyboard: \"⌨️\",\n eject: \"⏏️\",\n fast_forward: \"⏩\",\n rewind: \"⏪\",\n arrow_double_up: \"⏫\",\n arrow_double_down: \"⏬\",\n black_right_pointing_double_triangle_with_vertical_bar: \"⏭️\",\n black_left_pointing_double_triangle_with_vertical_bar: \"⏮️\",\n black_right_pointing_triangle_with_double_vertical_bar: \"⏯️\",\n alarm_clock: \"⏰\",\n stopwatch: \"⏱️\",\n timer_clock: \"⏲️\",\n hourglass_flowing_sand: \"⏳\",\n double_vertical_bar: \"⏸️\",\n black_square_for_stop: \"⏹️\",\n black_circle_for_record: \"⏺️\",\n m: \"Ⓜ️\",\n black_small_square: \"▪️\",\n white_small_square: \"▫️\",\n arrow_forward: \"▶️\",\n arrow_backward: \"◀️\",\n white_medium_square: \"◻️\",\n black_medium_square: \"◼️\",\n white_medium_small_square: \"◽\",\n black_medium_small_square: \"◾\",\n sunny: \"☀️\",\n cloud: \"☁️\",\n umbrella: \"☂️\",\n snowman: \"☃️\",\n comet: \"☄️\",\n phone: \"☎️\",\n telephone: \"☎️\",\n ballot_box_with_check: \"☑️\",\n umbrella_with_rain_drops: \"☔\",\n coffee: \"☕\",\n shamrock: \"☘️\",\n point_up: \"☝️\",\n skull_and_crossbones: \"☠️\",\n radioactive_sign: \"☢️\",\n biohazard_sign: \"☣️\",\n orthodox_cross: \"☦️\",\n star_and_crescent: \"☪️\",\n peace_symbol: \"☮️\",\n yin_yang: \"☯️\",\n wheel_of_dharma: \"☸️\",\n white_frowning_face: \"☹️\",\n relaxed: \"☺️\",\n female_sign: \"♀️\",\n male_sign: \"♂️\",\n aries: \"♈\",\n taurus: \"♉\",\n gemini: \"♊\",\n cancer: \"♋\",\n leo: \"♌\",\n virgo: \"♍\",\n libra: \"♎\",\n scorpius: \"♏\",\n sagittarius: \"♐\",\n capricorn: \"♑\",\n aquarius: \"♒\",\n pisces: \"♓\",\n chess_pawn: \"♟️\",\n spades: \"♠️\",\n clubs: \"♣️\",\n hearts: \"♥️\",\n diamonds: \"♦️\",\n hotsprings: \"♨️\",\n recycle: \"♻️\",\n infinity: \"♾️\",\n wheelchair: \"♿\",\n hammer_and_pick: \"⚒️\",\n anchor: \"⚓\",\n crossed_swords: \"⚔️\",\n medical_symbol: \"⚕️\",\n staff_of_aesculapius: \"⚕️\",\n scales: \"⚖️\",\n alembic: \"⚗️\",\n gear: \"⚙️\",\n atom_symbol: \"⚛️\",\n fleur_de_lis: \"⚜️\",\n warning: \"⚠️\",\n zap: \"⚡\",\n transgender_symbol: \"⚧️\",\n white_circle: \"⚪\",\n black_circle: \"⚫\",\n coffin: \"⚰️\",\n funeral_urn: \"⚱️\",\n soccer: \"⚽\",\n baseball: \"⚾\",\n snowman_without_snow: \"⛄\",\n partly_sunny: \"⛅\",\n thunder_cloud_and_rain: \"⛈️\",\n ophiuchus: \"⛎\",\n pick: \"⛏️\",\n helmet_with_white_cross: \"⛑️\",\n broken_chain: \"⛓️‍💥\",\n chains: \"⛓️\",\n no_entry: \"⛔\",\n shinto_shrine: \"⛩️\",\n church: \"⛪\",\n mountain: \"⛰️\",\n umbrella_on_ground: \"⛱️\",\n fountain: \"⛲\",\n golf: \"⛳\",\n ferry: \"⛴️\",\n boat: \"⛵\",\n sailboat: \"⛵\",\n skier: \"⛷️\",\n ice_skate: \"⛸️\",\n \"woman-bouncing-ball\": \"⛹️‍♀️\",\n \"man-bouncing-ball\": \"⛹️‍♂️\",\n person_with_ball: \"⛹️\",\n tent: \"⛺\",\n fuelpump: \"⛽\",\n scissors: \"✂️\",\n white_check_mark: \"✅\",\n airplane: \"✈️\",\n email: \"✉️\",\n envelope: \"✉️\",\n fist: \"✊\",\n hand: \"✋\",\n raised_hand: \"✋\",\n v: \"✌️\",\n writing_hand: \"✍️\",\n pencil2: \"✏️\",\n black_nib: \"✒️\",\n heavy_check_mark: \"✔️\",\n heavy_multiplication_x: \"✖️\",\n latin_cross: \"✝️\",\n star_of_david: \"✡️\",\n sparkles: \"✨\",\n eight_spoked_asterisk: \"✳️\",\n eight_pointed_black_star: \"✴️\",\n snowflake: \"❄️\",\n sparkle: \"❇️\",\n x: \"❌\",\n negative_squared_cross_mark: \"❎\",\n question: \"❓\",\n grey_question: \"❔\",\n grey_exclamation: \"❕\",\n exclamation: \"❗\",\n heavy_exclamation_mark: \"❗\",\n heavy_heart_exclamation_mark_ornament: \"❣️\",\n heart_on_fire: \"❤️‍🔥\",\n mending_heart: \"❤️‍🩹\",\n heart: \"❤️\",\n heavy_plus_sign: \"➕\",\n heavy_minus_sign: \"➖\",\n heavy_division_sign: \"➗\",\n arrow_right: \"➡️\",\n curly_loop: \"➰\",\n loop: \"➿\",\n arrow_heading_up: \"⤴️\",\n arrow_heading_down: \"⤵️\",\n arrow_left: \"⬅️\",\n arrow_up: \"⬆️\",\n arrow_down: \"⬇️\",\n black_large_square: \"⬛\",\n white_large_square: \"⬜\",\n star: \"⭐\",\n o: \"⭕\",\n wavy_dash: \"〰️\",\n part_alternation_mark: \"〽️\",\n congratulations: \"㊗️\",\n secret: \"㊙️\",\n};\n"],"mappings":";;;;;;;AAOA,MAAa,mBAA2C;CACtD,MAAM;CACN,aAAa;CACb,MAAM;CACN,KAAK;CACL,KAAK;CACL,OAAO;CACP,MAAM;CACN,MAAM;CACN,KAAK;CACL,OAAO;CACP,OAAO;CACP,MAAM;CACN,WAAW;CACX,YAAY;CACZ,SAAS;CACT,aAAa;CACb,GAAG;CACH,GAAG;CACH,IAAI;CACJ,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,MAAM;CACN,MAAM;CACN,IAAI;CACJ,KAAK;CACL,IAAI;CACJ,IAAI;CACJ,KAAK;CACL,IAAI;CACJ,IAAI;CACJ,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,IAAI;CACJ,WAAW;CACX,WAAW;CACX,WAAW;CACX,aAAa;CACb,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,IAAI;CACJ,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,IAAI;CACJ,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,IAAI;CACJ,WAAW;CACX,WAAW;CACX,IAAI;CACJ,IAAI;CACJ,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,IAAI;CACJ,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,IAAI;CACJ,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,IAAI;CACJ,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,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"}
@@ -0,0 +1,3 @@
1
+ /** Custom workspace emoji are images with no unicode char, so an unknown name keeps its colons. */
2
+ export declare function resolveEmojiShortcodes(text: string): string;
3
+ //# sourceMappingURL=emoji.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji.d.ts","sourceRoot":"","sources":["../../../src/integrations/slack/emoji.ts"],"names":[],"mappings":"AAQA,mGAAmG;AACnG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,12 @@
1
+ import { emojiByShortcode } from "./emoji-shortcodes.generated.js";
2
+ //#region src/integrations/slack/emoji.ts
3
+ const EMOJI_SHORTCODE = /:([a-z0-9_+-]+):/g;
4
+ const emojiTable = new Map(Object.entries(emojiByShortcode));
5
+ /** Custom workspace emoji are images with no unicode char, so an unknown name keeps its colons. */
6
+ function resolveEmojiShortcodes(text) {
7
+ return text.replace(EMOJI_SHORTCODE, (shortcode, name) => emojiTable.get(name) ?? shortcode);
8
+ }
9
+ //#endregion
10
+ export { resolveEmojiShortcodes };
11
+
12
+ //# sourceMappingURL=emoji.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji.js","names":[],"sources":["../../../src/integrations/slack/emoji.ts"],"sourcesContent":["import { emojiByShortcode } from './emoji-shortcodes.generated.js';\n\nconst EMOJI_SHORTCODE = /:([a-z0-9_+-]+):/g;\n\n// A Map, not the object: `:constructor:` matches the pattern, and an object\n// lookup would answer with `Object` and coerce it into the message.\nconst emojiTable = new Map(Object.entries(emojiByShortcode));\n\n/** Custom workspace emoji are images with no unicode char, so an unknown name keeps its colons. */\nexport function resolveEmojiShortcodes(text: string): string {\n return text.replace(EMOJI_SHORTCODE, (shortcode, name: string) => emojiTable.get(name) ?? shortcode);\n}\n"],"mappings":";;AAEA,MAAM,kBAAkB;AAIxB,MAAM,aAAa,IAAI,IAAI,OAAO,QAAQ,gBAAgB,CAAC;;AAG3D,SAAgB,uBAAuB,MAAsB;CAC3D,OAAO,KAAK,QAAQ,kBAAkB,WAAW,SAAiB,WAAW,IAAI,IAAI,KAAK,SAAS;AACrG"}
@@ -54,7 +54,7 @@ var SlackIntegration = class {
54
54
  projects: ctx.storage.projects,
55
55
  sourceControl: sourceControlOwner,
56
56
  memorySettings: ctx.storage.memorySettings,
57
- workItems: ctx.rules?.workItems,
57
+ workItems: ctx.runtime?.workItems,
58
58
  feed: ctx.feed,
59
59
  adapterOptions: {
60
60
  toolDisplay: "hidden",
@@ -1 +1 @@
1
- {"version":3,"file":"integration.js","names":["#config","#repoBackedSessions"],"sources":["../../../src/integrations/slack/integration.ts"],"sourcesContent":["/**\n * `SlackIntegration` — Slack as a `FactoryIntegration`.\n *\n * Slack contributes two things to a factory: the chat channels that carry\n * inbound messages into agent runs (`channels()`), and the browser-facing\n * account-link routes that bind a Slack sender to a Mastra tenant (`routes()`).\n * Both used to be assembled by hand in the deploy entry, which had to reach\n * into the prepared agent controller by string key, resolve storage domains\n * itself, mint its own state signer, and splice routes onto the factory's\n * assembled server config. Implementing the integration interface instead means\n * the factory does all of that the same way it already does for GitHub and\n * Linear, and the entry's job shrinks to reading Slack's env vars once.\n *\n * Slack ships as a factory built-in alongside GitHub and Linear (it originally\n * lived in `mastracode/web` to keep `@mastra/slack`/`chat` out of this package;\n * the team reversed that so `create-factory` consumers get Slack channels out\n * of the box). The integration interface remains open — third parties still add\n * capabilities by implementing `FactoryIntegration` from outside the package.\n */\n\nimport type { TypingStatusFn } from '@mastra/core/channels';\nimport type { ApiRoute } from '@mastra/core/server';\nimport type { SlackAdapterChannelConfig } from '@mastra/slack';\n\nimport type { WorkItemFeedPublisher } from '../../storage/domains/comments/feed-sync.js';\nimport type { FactoryChannelsConfig, FactoryIntegration, IntegrationContext } from '../base.js';\n\nimport { createSlackConnectRoutes } from './connect-route.js';\nimport { SlackFeedPublisher } from './feed-publisher.js';\nimport { createSlackChannelsConfig } from './slack.js';\n\n/**\n * Slack app credentials, read from env ONCE by the deploy entry. `signingSecret`\n * is required because the Slack adapter validates it at construction — an\n * integration constructed without it would throw during `prepare()` rather than\n * reporting itself unconfigured.\n */\nexport interface SlackIntegrationConfig {\n /** Verifies inbound Slack request signatures. Required. */\n signingSecret: string;\n /** Bot token used to post replies and ephemeral cards. */\n botToken?: string;\n /**\n * OAuth client credentials. Required for account linking: \"Sign in with\n * Slack\" (OIDC) is the only flow that writes a link, so without these the\n * settings surface reports `canConnect: false` and no sender can link.\n */\n clientId?: string;\n clientSecret?: string;\n /**\n * HTTPS origin Slack redirects back to. Slack requires HTTPS, so locally this\n * is the tunnel origin rather than the app's own public URL.\n */\n oidcRedirectBaseUrl?: string;\n /** SPA origin the post-connect redirect returns to. */\n uiOrigin?: string;\n /**\n * Overrides for the Slack channel adapter entry.\n *\n * @example\n * ```ts\n * new SlackIntegration({\n * signingSecret,\n * adapterOptions: {\n * streaming: true,\n * toolDisplay: 'grouped',\n * },\n * });\n * ```\n */\n adapterOptions?: SlackAdapterChannelConfig;\n}\n\nconst factoryTypingStatus: TypingStatusFn = (chunk, ctx) => {\n switch (chunk.type) {\n case 'reasoning-delta':\n return `is thinking${nextDots(ctx.currentStatus)}`;\n case 'text-delta':\n return 'is typing...';\n case 'tool-call':\n return `is working${nextDots(ctx.currentStatus)}`;\n default:\n return undefined;\n }\n};\n\nfunction nextDots(currentStatus: string | undefined): string {\n const dotCount = currentStatus?.match(/\\.*$/)?.[0].length ?? 1;\n return '.'.repeat(dotCount >= 5 ? 2 : dotCount + 1);\n}\n\n/**\n * Drops keys the caller set to `undefined` so spreading the overrides cannot\n * erase the Factory defaults they sit on top of.\n */\nfunction adapterOverrides(options: SlackAdapterChannelConfig | undefined): SlackAdapterChannelConfig {\n return Object.fromEntries(\n Object.entries(options ?? {}).filter(([, value]) => value !== undefined),\n ) as SlackAdapterChannelConfig;\n}\n\nexport class SlackIntegration implements FactoryIntegration {\n readonly id = 'slack';\n /**\n * The OIDC connect flow round-trips a signed `state` through Slack, so the\n * replica handling the callback must be able to verify a state a different\n * replica signed.\n */\n readonly requiresStableStateSigner = true;\n\n readonly #config: SlackIntegrationConfig;\n /**\n * Whether `channels()` found a source-control owner on the context and wired\n * repo-backed sessions. Set at the channels() attach path, which runs once at\n * boot before diagnostics are served.\n */\n #repoBackedSessions = false;\n\n constructor(config: SlackIntegrationConfig) {\n if (!config.signingSecret) {\n throw new Error(\n \"SlackIntegration: 'signingSecret' is required — Slack cannot verify inbound requests without it.\",\n );\n }\n this.#config = config;\n }\n\n channels(ctx: IntegrationContext): FactoryChannelsConfig {\n // Repo-backed sessions come from the factory's source-control owner\n // (GitHub, when registered) — no config-level wiring by the entry.\n const sourceControlOwner = ctx.storage.sourceControlOwner;\n this.#repoBackedSessions = Boolean(sourceControlOwner);\n return createSlackChannelsConfig({\n slack: {\n clientId: this.#config.clientId,\n clientSecret: this.#config.clientSecret,\n signingSecret: this.#config.signingSecret,\n botToken: this.#config.botToken,\n },\n accountLinks: ctx.storage.channelIdentity,\n projects: ctx.storage.projects,\n sourceControl: sourceControlOwner,\n memorySettings: ctx.storage.memorySettings,\n workItems: ctx.rules?.workItems,\n feed: ctx.feed,\n adapterOptions: {\n toolDisplay: 'hidden',\n typingStatus: factoryTypingStatus,\n ...adapterOverrides(this.#config.adapterOptions),\n },\n });\n }\n\n feedPublisher(ctx: IntegrationContext): WorkItemFeedPublisher {\n return new SlackFeedPublisher({ controller: ctx.controller });\n }\n\n routes(ctx: IntegrationContext): ApiRoute[] {\n const { clientId, clientSecret, oidcRedirectBaseUrl, uiOrigin } = this.#config;\n return createSlackConnectRoutes({\n auth: ctx.auth,\n accountLinks: ctx.storage.channelIdentity,\n tenantStateSigner: ctx.stateSigner,\n oidc:\n clientId && clientSecret && oidcRedirectBaseUrl\n ? { clientId, clientSecret, redirectBaseUrl: oidcRedirectBaseUrl, uiOrigin }\n : undefined,\n projects: ctx.storage.projects,\n });\n }\n\n diagnostics(): Record<string, unknown> {\n const { clientId, clientSecret, botToken, oidcRedirectBaseUrl } = this.#config;\n return {\n configured: true,\n botTokenConfigured: Boolean(botToken),\n oidcConfigured: Boolean(clientId && clientSecret && oidcRedirectBaseUrl),\n repoBackedSessions: this.#repoBackedSessions,\n };\n }\n}\n"],"mappings":";;;;AAyEA,MAAM,uBAAuC,OAAO,QAAQ;CAC1D,QAAQ,MAAM,MAAd;EACE,KAAK,mBACH,OAAO,cAAc,SAAS,IAAI,aAAa;EACjD,KAAK,cACH,OAAO;EACT,KAAK,aACH,OAAO,aAAa,SAAS,IAAI,aAAa;EAChD,SACE;CACJ;AACF;AAEA,SAAS,SAAS,eAA2C;CAC3D,MAAM,WAAW,eAAe,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU;CAC7D,OAAO,IAAI,OAAO,YAAY,IAAI,IAAI,WAAW,CAAC;AACpD;;;;;AAMA,SAAS,iBAAiB,SAA2E;CACnG,OAAO,OAAO,YACZ,OAAO,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,WAAW,UAAU,KAAA,CAAS,CACzE;AACF;AAEA,IAAa,mBAAb,MAA4D;CAC1D,KAAc;;;;;;CAMd,4BAAqC;CAErC;;;;;;CAMA,sBAAsB;CAEtB,YAAY,QAAgC;EAC1C,IAAI,CAAC,OAAO,eACV,MAAM,IAAI,MACR,kGACF;EAEF,KAAKA,UAAU;CACjB;CAEA,SAAS,KAAgD;EAGvD,MAAM,qBAAqB,IAAI,QAAQ;EACvC,KAAKC,sBAAsB,QAAQ,kBAAkB;EACrD,OAAO,0BAA0B;GAC/B,OAAO;IACL,UAAU,KAAKD,QAAQ;IACvB,cAAc,KAAKA,QAAQ;IAC3B,eAAe,KAAKA,QAAQ;IAC5B,UAAU,KAAKA,QAAQ;GACzB;GACA,cAAc,IAAI,QAAQ;GAC1B,UAAU,IAAI,QAAQ;GACtB,eAAe;GACf,gBAAgB,IAAI,QAAQ;GAC5B,WAAW,IAAI,OAAO;GACtB,MAAM,IAAI;GACV,gBAAgB;IACd,aAAa;IACb,cAAc;IACd,GAAG,iBAAiB,KAAKA,QAAQ,cAAc;GACjD;EACF,CAAC;CACH;CAEA,cAAc,KAAgD;EAC5D,OAAO,IAAI,mBAAmB,EAAE,YAAY,IAAI,WAAW,CAAC;CAC9D;CAEA,OAAO,KAAqC;EAC1C,MAAM,EAAE,UAAU,cAAc,qBAAqB,aAAa,KAAKA;EACvE,OAAO,yBAAyB;GAC9B,MAAM,IAAI;GACV,cAAc,IAAI,QAAQ;GAC1B,mBAAmB,IAAI;GACvB,MACE,YAAY,gBAAgB,sBACxB;IAAE;IAAU;IAAc,iBAAiB;IAAqB;GAAS,IACzE,KAAA;GACN,UAAU,IAAI,QAAQ;EACxB,CAAC;CACH;CAEA,cAAuC;EACrC,MAAM,EAAE,UAAU,cAAc,UAAU,wBAAwB,KAAKA;EACvE,OAAO;GACL,YAAY;GACZ,oBAAoB,QAAQ,QAAQ;GACpC,gBAAgB,QAAQ,YAAY,gBAAgB,mBAAmB;GACvE,oBAAoB,KAAKC;EAC3B;CACF;AACF"}
1
+ {"version":3,"file":"integration.js","names":["#config","#repoBackedSessions"],"sources":["../../../src/integrations/slack/integration.ts"],"sourcesContent":["/**\n * `SlackIntegration` — Slack as a `FactoryIntegration`.\n *\n * Slack contributes two things to a factory: the chat channels that carry\n * inbound messages into agent runs (`channels()`), and the browser-facing\n * account-link routes that bind a Slack sender to a Mastra tenant (`routes()`).\n * Both used to be assembled by hand in the deploy entry, which had to reach\n * into the prepared agent controller by string key, resolve storage domains\n * itself, mint its own state signer, and splice routes onto the factory's\n * assembled server config. Implementing the integration interface instead means\n * the factory does all of that the same way it already does for GitHub and\n * Linear, and the entry's job shrinks to reading Slack's env vars once.\n *\n * Slack ships as a factory built-in alongside GitHub and Linear (it originally\n * lived in `mastracode/web` to keep `@mastra/slack`/`chat` out of this package;\n * the team reversed that so `create-factory` consumers get Slack channels out\n * of the box). The integration interface remains open — third parties still add\n * capabilities by implementing `FactoryIntegration` from outside the package.\n */\n\nimport type { TypingStatusFn } from '@mastra/core/channels';\nimport type { ApiRoute } from '@mastra/core/server';\nimport type { SlackAdapterChannelConfig } from '@mastra/slack';\n\nimport type { WorkItemFeedPublisher } from '../../storage/domains/comments/feed-sync.js';\nimport type { FactoryChannelsConfig, FactoryIntegration, IntegrationContext } from '../base.js';\n\nimport { createSlackConnectRoutes } from './connect-route.js';\nimport { SlackFeedPublisher } from './feed-publisher.js';\nimport { createSlackChannelsConfig } from './slack.js';\n\n/**\n * Slack app credentials, read from env ONCE by the deploy entry. `signingSecret`\n * is required because the Slack adapter validates it at construction — an\n * integration constructed without it would throw during `prepare()` rather than\n * reporting itself unconfigured.\n */\nexport interface SlackIntegrationConfig {\n /** Verifies inbound Slack request signatures. Required. */\n signingSecret: string;\n /** Bot token used to post replies and ephemeral cards. */\n botToken?: string;\n /**\n * OAuth client credentials. Required for account linking: \"Sign in with\n * Slack\" (OIDC) is the only flow that writes a link, so without these the\n * settings surface reports `canConnect: false` and no sender can link.\n */\n clientId?: string;\n clientSecret?: string;\n /**\n * HTTPS origin Slack redirects back to. Slack requires HTTPS, so locally this\n * is the tunnel origin rather than the app's own public URL.\n */\n oidcRedirectBaseUrl?: string;\n /** SPA origin the post-connect redirect returns to. */\n uiOrigin?: string;\n /**\n * Overrides for the Slack channel adapter entry.\n *\n * @example\n * ```ts\n * new SlackIntegration({\n * signingSecret,\n * adapterOptions: {\n * streaming: true,\n * toolDisplay: 'grouped',\n * },\n * });\n * ```\n */\n adapterOptions?: SlackAdapterChannelConfig;\n}\n\nconst factoryTypingStatus: TypingStatusFn = (chunk, ctx) => {\n switch (chunk.type) {\n case 'reasoning-delta':\n return `is thinking${nextDots(ctx.currentStatus)}`;\n case 'text-delta':\n return 'is typing...';\n case 'tool-call':\n return `is working${nextDots(ctx.currentStatus)}`;\n default:\n return undefined;\n }\n};\n\nfunction nextDots(currentStatus: string | undefined): string {\n const dotCount = currentStatus?.match(/\\.*$/)?.[0].length ?? 1;\n return '.'.repeat(dotCount >= 5 ? 2 : dotCount + 1);\n}\n\n/**\n * Drops keys the caller set to `undefined` so spreading the overrides cannot\n * erase the Factory defaults they sit on top of.\n */\nfunction adapterOverrides(options: SlackAdapterChannelConfig | undefined): SlackAdapterChannelConfig {\n return Object.fromEntries(\n Object.entries(options ?? {}).filter(([, value]) => value !== undefined),\n ) as SlackAdapterChannelConfig;\n}\n\nexport class SlackIntegration implements FactoryIntegration {\n readonly id = 'slack';\n /**\n * The OIDC connect flow round-trips a signed `state` through Slack, so the\n * replica handling the callback must be able to verify a state a different\n * replica signed.\n */\n readonly requiresStableStateSigner = true;\n\n readonly #config: SlackIntegrationConfig;\n /**\n * Whether `channels()` found a source-control owner on the context and wired\n * repo-backed sessions. Set at the channels() attach path, which runs once at\n * boot before diagnostics are served.\n */\n #repoBackedSessions = false;\n\n constructor(config: SlackIntegrationConfig) {\n if (!config.signingSecret) {\n throw new Error(\n \"SlackIntegration: 'signingSecret' is required — Slack cannot verify inbound requests without it.\",\n );\n }\n this.#config = config;\n }\n\n channels(ctx: IntegrationContext): FactoryChannelsConfig {\n // Repo-backed sessions come from the factory's source-control owner\n // (GitHub, when registered) — no config-level wiring by the entry.\n const sourceControlOwner = ctx.storage.sourceControlOwner;\n this.#repoBackedSessions = Boolean(sourceControlOwner);\n return createSlackChannelsConfig({\n slack: {\n clientId: this.#config.clientId,\n clientSecret: this.#config.clientSecret,\n signingSecret: this.#config.signingSecret,\n botToken: this.#config.botToken,\n },\n accountLinks: ctx.storage.channelIdentity,\n projects: ctx.storage.projects,\n sourceControl: sourceControlOwner,\n memorySettings: ctx.storage.memorySettings,\n workItems: ctx.runtime?.workItems,\n feed: ctx.feed,\n adapterOptions: {\n toolDisplay: 'hidden',\n typingStatus: factoryTypingStatus,\n ...adapterOverrides(this.#config.adapterOptions),\n },\n });\n }\n\n feedPublisher(ctx: IntegrationContext): WorkItemFeedPublisher {\n return new SlackFeedPublisher({ controller: ctx.controller });\n }\n\n routes(ctx: IntegrationContext): ApiRoute[] {\n const { clientId, clientSecret, oidcRedirectBaseUrl, uiOrigin } = this.#config;\n return createSlackConnectRoutes({\n auth: ctx.auth,\n accountLinks: ctx.storage.channelIdentity,\n tenantStateSigner: ctx.stateSigner,\n oidc:\n clientId && clientSecret && oidcRedirectBaseUrl\n ? { clientId, clientSecret, redirectBaseUrl: oidcRedirectBaseUrl, uiOrigin }\n : undefined,\n projects: ctx.storage.projects,\n });\n }\n\n diagnostics(): Record<string, unknown> {\n const { clientId, clientSecret, botToken, oidcRedirectBaseUrl } = this.#config;\n return {\n configured: true,\n botTokenConfigured: Boolean(botToken),\n oidcConfigured: Boolean(clientId && clientSecret && oidcRedirectBaseUrl),\n repoBackedSessions: this.#repoBackedSessions,\n };\n }\n}\n"],"mappings":";;;;AAyEA,MAAM,uBAAuC,OAAO,QAAQ;CAC1D,QAAQ,MAAM,MAAd;EACE,KAAK,mBACH,OAAO,cAAc,SAAS,IAAI,aAAa;EACjD,KAAK,cACH,OAAO;EACT,KAAK,aACH,OAAO,aAAa,SAAS,IAAI,aAAa;EAChD,SACE;CACJ;AACF;AAEA,SAAS,SAAS,eAA2C;CAC3D,MAAM,WAAW,eAAe,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU;CAC7D,OAAO,IAAI,OAAO,YAAY,IAAI,IAAI,WAAW,CAAC;AACpD;;;;;AAMA,SAAS,iBAAiB,SAA2E;CACnG,OAAO,OAAO,YACZ,OAAO,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,WAAW,UAAU,KAAA,CAAS,CACzE;AACF;AAEA,IAAa,mBAAb,MAA4D;CAC1D,KAAc;;;;;;CAMd,4BAAqC;CAErC;;;;;;CAMA,sBAAsB;CAEtB,YAAY,QAAgC;EAC1C,IAAI,CAAC,OAAO,eACV,MAAM,IAAI,MACR,kGACF;EAEF,KAAKA,UAAU;CACjB;CAEA,SAAS,KAAgD;EAGvD,MAAM,qBAAqB,IAAI,QAAQ;EACvC,KAAKC,sBAAsB,QAAQ,kBAAkB;EACrD,OAAO,0BAA0B;GAC/B,OAAO;IACL,UAAU,KAAKD,QAAQ;IACvB,cAAc,KAAKA,QAAQ;IAC3B,eAAe,KAAKA,QAAQ;IAC5B,UAAU,KAAKA,QAAQ;GACzB;GACA,cAAc,IAAI,QAAQ;GAC1B,UAAU,IAAI,QAAQ;GACtB,eAAe;GACf,gBAAgB,IAAI,QAAQ;GAC5B,WAAW,IAAI,SAAS;GACxB,MAAM,IAAI;GACV,gBAAgB;IACd,aAAa;IACb,cAAc;IACd,GAAG,iBAAiB,KAAKA,QAAQ,cAAc;GACjD;EACF,CAAC;CACH;CAEA,cAAc,KAAgD;EAC5D,OAAO,IAAI,mBAAmB,EAAE,YAAY,IAAI,WAAW,CAAC;CAC9D;CAEA,OAAO,KAAqC;EAC1C,MAAM,EAAE,UAAU,cAAc,qBAAqB,aAAa,KAAKA;EACvE,OAAO,yBAAyB;GAC9B,MAAM,IAAI;GACV,cAAc,IAAI,QAAQ;GAC1B,mBAAmB,IAAI;GACvB,MACE,YAAY,gBAAgB,sBACxB;IAAE;IAAU;IAAc,iBAAiB;IAAqB;GAAS,IACzE,KAAA;GACN,UAAU,IAAI,QAAQ;EACxB,CAAC;CACH;CAEA,cAAuC;EACrC,MAAM,EAAE,UAAU,cAAc,UAAU,wBAAwB,KAAKA;EACvE,OAAO;GACL,YAAY;GACZ,oBAAoB,QAAQ,QAAQ;GACpC,gBAAgB,QAAQ,YAAY,gBAAgB,mBAAmB;GACvE,oBAAoB,KAAKC;EAC3B;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/integrations/slack/slack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/integrations/slack/slack.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,26 @@
1
1
  import { actorFromChannelAuthor } from "../../storage/domains/comments/actor.js";
2
2
  import { readRequestContextOrgId, seedSessionOrg } from "../../session/org-seed.js";
3
3
  import { hydrateFactorySession, resolveFactoryDefaultModelId, resolveFactoryProjectForSession, resolveFactorySourceRepository } from "../../session/factory-session.js";
4
+ import { resolveEmojiShortcodes } from "./emoji.js";
4
5
  import { slackCommentSource } from "./feed-publisher.js";
5
6
  import { randomUUID } from "crypto";
6
7
  import { createSlackAdapter } from "@mastra/slack";
7
8
  import { Actions, Card, CardText, LinkButton } from "chat";
8
9
  //#region src/integrations/slack/slack.ts
9
10
  const SLACK_REQUEST_TIMEOUT_MS = 15e3;
11
+ const MAX_WORK_ITEM_TITLE_CHARS = 80;
12
+ const graphemes = new Intl.Segmenter(void 0, { granularity: "grapheme" });
13
+ /**
14
+ * A card is titled with what the sender wrote. Cutting counts graphemes, not
15
+ * code points: `👍🏼` is a base plus a skin-tone modifier, and a cut between
16
+ * them leaves the wrong emoji.
17
+ */
18
+ function workItemTitleFrom(messageText) {
19
+ const resolved = resolveEmojiShortcodes(messageText);
20
+ const characters = [...graphemes.segment(resolved)].map(({ segment }) => segment);
21
+ if (characters.length <= MAX_WORK_ITEM_TITLE_CHARS) return resolved;
22
+ return `${characters.slice(0, MAX_WORK_ITEM_TITLE_CHARS - 1).join("")}…`;
23
+ }
10
24
  /**
11
25
  * Read the Slack team id off a raw platform payload (Events API envelope or
12
26
  * slash-command body — both carry `team_id`), duck-typed to build the
@@ -364,7 +378,7 @@ async function findThreadWorkItem(workItems, thread, teamId) {
364
378
  */
365
379
  async function upsertThreadWorkItem({ workItems, thread, message, link, factoryProjectId, session, url }) {
366
380
  try {
367
- const title = message.text.length > 80 ? `${message.text.slice(0, 79)}…` : message.text;
381
+ const title = workItemTitleFrom(message.text);
368
382
  await workItems.upsert({
369
383
  orgId: link.orgId ?? "",
370
384
  userId: link.userId,
@@ -436,7 +450,7 @@ function createNewSessionChatHandler(deps) {
436
450
  */
437
451
  async function ingestAside(thread, message, { feed, workItems, accountLinks }) {
438
452
  if (!feed || !workItems) return;
439
- const body = message.text.replace(/^aside\b[,:]?\s*/i, "").trim();
453
+ const body = resolveEmojiShortcodes(message.text.replace(/^aside\b[,:]?\s*/i, "").trim());
440
454
  if (!body) return;
441
455
  try {
442
456
  const teamId = slackTeamId(message);