@utilix-tech/sdk 0.33.0 → 0.35.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 (35) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +26 -8
  3. package/dist/{chunk-CSNTHZHF.js → chunk-3YUKLV5N.js} +81 -1
  4. package/dist/{chunk-ZPQOE7KD.js → chunk-7AJRK57W.js} +29 -1
  5. package/dist/{chunk-H2USEUHD.js → chunk-F2CEN226.js} +306 -1
  6. package/dist/{chunk-6FIB72KX.js → chunk-YEXQDI3J.js} +63 -1
  7. package/dist/{data-C4lCByXw.d.cts → data-CFeS9kes.d.cts} +35 -2
  8. package/dist/{data-C4lCByXw.d.ts → data-CFeS9kes.d.ts} +35 -2
  9. package/dist/index.cjs +475 -0
  10. package/dist/index.d.cts +4 -4
  11. package/dist/index.d.ts +4 -4
  12. package/dist/index.js +4 -4
  13. package/dist/{network-D7Epuerc.d.cts → network-DfY5Ikvr.d.cts} +34 -2
  14. package/dist/{network-D7Epuerc.d.ts → network-DfY5Ikvr.d.ts} +34 -2
  15. package/dist/{text-CA-zuD0C.d.cts → text-kHkT9VtT.d.cts} +34 -2
  16. package/dist/{text-CA-zuD0C.d.ts → text-kHkT9VtT.d.ts} +34 -2
  17. package/dist/tools/data.cjs +62 -0
  18. package/dist/tools/data.d.cts +1 -1
  19. package/dist/tools/data.d.ts +1 -1
  20. package/dist/tools/data.js +1 -1
  21. package/dist/tools/network.cjs +80 -0
  22. package/dist/tools/network.d.cts +1 -1
  23. package/dist/tools/network.d.ts +1 -1
  24. package/dist/tools/network.js +1 -1
  25. package/dist/tools/text.cjs +305 -0
  26. package/dist/tools/text.d.cts +1 -1
  27. package/dist/tools/text.d.ts +1 -1
  28. package/dist/tools/text.js +1 -1
  29. package/dist/tools/units.cjs +28 -0
  30. package/dist/tools/units.d.cts +1 -1
  31. package/dist/tools/units.d.ts +1 -1
  32. package/dist/tools/units.js +1 -1
  33. package/dist/{units-BhoxdHhs.d.ts → units-c90DW-OZ.d.cts} +30 -2
  34. package/dist/{units-BhoxdHhs.d.cts → units-c90DW-OZ.d.ts} +30 -2
  35. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -2013,6 +2013,7 @@ var text_exports = {};
2013
2013
  __export(text_exports, {
2014
2014
  CASE_FORMATS: () => CASE_FORMATS,
2015
2015
  DEFAULT_CONVERT_OPTIONS: () => DEFAULT_CONVERT_OPTIONS,
2016
+ EMOJI_TABLE: () => EMOJI_TABLE,
2016
2017
  ESCAPE_MODES: () => ESCAPE_MODES,
2017
2018
  LINE_OPS: () => LINE_OPS,
2018
2019
  MORSE_CODE: () => MORSE_CODE,
@@ -2046,6 +2047,10 @@ __export(text_exports, {
2046
2047
  generateSentences: () => generateSentences,
2047
2048
  generateWords: () => generateWords,
2048
2049
  getAvailableFonts: () => getAvailableFonts,
2050
+ getEmojiByCategory: () => getEmojiByCategory,
2051
+ getEmojiByChar: () => getEmojiByChar,
2052
+ getEmojiByShortcode: () => getEmojiByShortcode,
2053
+ getEmojiCategories: () => getEmojiCategories,
2049
2054
  getMorseForChar: () => getMorseForChar,
2050
2055
  getMorseTiming: () => getMorseTiming,
2051
2056
  htmlToMarkdown: () => htmlToMarkdown,
@@ -2062,6 +2067,7 @@ __export(text_exports, {
2062
2067
  renderMarkdown: () => renderMarkdown,
2063
2068
  romanToNumber: () => romanToNumber,
2064
2069
  scoreReadability: () => scoreReadability,
2070
+ searchEmoji: () => searchEmoji,
2065
2071
  sentenceCount: () => sentenceCount,
2066
2072
  slugify: () => slugify,
2067
2073
  slugifyAll: () => slugifyAll,
@@ -4671,6 +4677,305 @@ function analyzeSentenceLengths(text) {
4671
4677
  buckets
4672
4678
  };
4673
4679
  }
4680
+ var EMOJI_TABLE = [
4681
+ { emoji: "\u{1F600}", name: "grinning face", shortcode: "grinning", codepoint: "U+1F600", category: "Smileys & Emotion", keywords: ["happy", "smile"] },
4682
+ { emoji: "\u{1F603}", name: "grinning face with big eyes", shortcode: "smiley", codepoint: "U+1F603", category: "Smileys & Emotion", keywords: ["happy", "joy"] },
4683
+ { emoji: "\u{1F604}", name: "grinning face with smiling eyes", shortcode: "smile", codepoint: "U+1F604", category: "Smileys & Emotion", keywords: ["happy", "joy"] },
4684
+ { emoji: "\u{1F601}", name: "beaming face with smiling eyes", shortcode: "grin", codepoint: "U+1F601", category: "Smileys & Emotion", keywords: ["happy", "teeth"] },
4685
+ { emoji: "\u{1F606}", name: "grinning squinting face", shortcode: "laughing", codepoint: "U+1F606", category: "Smileys & Emotion", keywords: ["laugh", "haha"] },
4686
+ { emoji: "\u{1F605}", name: "grinning face with sweat", shortcode: "sweat_smile", codepoint: "U+1F605", category: "Smileys & Emotion", keywords: ["nervous", "relief"] },
4687
+ { emoji: "\u{1F923}", name: "rolling on the floor laughing", shortcode: "rofl", codepoint: "U+1F923", category: "Smileys & Emotion", keywords: ["lol", "funny"] },
4688
+ { emoji: "\u{1F602}", name: "face with tears of joy", shortcode: "joy", codepoint: "U+1F602", category: "Smileys & Emotion", keywords: ["lol", "funny", "crying laughing"] },
4689
+ { emoji: "\u{1F642}", name: "slightly smiling face", shortcode: "slightly_smiling_face", codepoint: "U+1F642", category: "Smileys & Emotion", keywords: ["smile"] },
4690
+ { emoji: "\u{1F643}", name: "upside-down face", shortcode: "upside_down_face", codepoint: "U+1F643", category: "Smileys & Emotion", keywords: ["silly", "sarcasm"] },
4691
+ { emoji: "\u{1F609}", name: "winking face", shortcode: "wink", codepoint: "U+1F609", category: "Smileys & Emotion", keywords: ["flirt"] },
4692
+ { emoji: "\u{1F60A}", name: "smiling face with smiling eyes", shortcode: "blush", codepoint: "U+1F60A", category: "Smileys & Emotion", keywords: ["happy", "warm"] },
4693
+ { emoji: "\u{1F607}", name: "smiling face with halo", shortcode: "innocent", codepoint: "U+1F607", category: "Smileys & Emotion", keywords: ["angel"] },
4694
+ { emoji: "\u{1F970}", name: "smiling face with hearts", shortcode: "smiling_face_with_three_hearts", codepoint: "U+1F970", category: "Smileys & Emotion", keywords: ["love", "adore"] },
4695
+ { emoji: "\u{1F60D}", name: "smiling face with heart-eyes", shortcode: "heart_eyes", codepoint: "U+1F60D", category: "Smileys & Emotion", keywords: ["love", "crush"] },
4696
+ { emoji: "\u{1F929}", name: "star-struck", shortcode: "star_struck", codepoint: "U+1F929", category: "Smileys & Emotion", keywords: ["excited", "wow"] },
4697
+ { emoji: "\u{1F618}", name: "face blowing a kiss", shortcode: "kissing_heart", codepoint: "U+1F618", category: "Smileys & Emotion", keywords: ["kiss", "love"] },
4698
+ { emoji: "\u{1F617}", name: "kissing face", shortcode: "kissing", codepoint: "U+1F617", category: "Smileys & Emotion", keywords: ["kiss"] },
4699
+ { emoji: "\u{1F60B}", name: "face savoring food", shortcode: "yum", codepoint: "U+1F60B", category: "Smileys & Emotion", keywords: ["tasty", "delicious"] },
4700
+ { emoji: "\u{1F61B}", name: "face with tongue", shortcode: "stuck_out_tongue", codepoint: "U+1F61B", category: "Smileys & Emotion", keywords: ["playful"] },
4701
+ { emoji: "\u{1F61C}", name: "winking face with tongue", shortcode: "stuck_out_tongue_winking_eye", codepoint: "U+1F61C", category: "Smileys & Emotion", keywords: ["silly"] },
4702
+ { emoji: "\u{1F92A}", name: "zany face", shortcode: "zany_face", codepoint: "U+1F92A", category: "Smileys & Emotion", keywords: ["crazy", "wild"] },
4703
+ { emoji: "\u{1F61D}", name: "squinting face with tongue", shortcode: "stuck_out_tongue_closed_eyes", codepoint: "U+1F61D", category: "Smileys & Emotion", keywords: ["silly"] },
4704
+ { emoji: "\u{1F911}", name: "money-mouth face", shortcode: "money_mouth_face", codepoint: "U+1F911", category: "Smileys & Emotion", keywords: ["rich", "dollar"] },
4705
+ { emoji: "\u{1F917}", name: "smiling face with open hands", shortcode: "hugs", codepoint: "U+1F917", category: "Smileys & Emotion", keywords: ["hug"] },
4706
+ { emoji: "\u{1F92D}", name: "face with hand over mouth", shortcode: "hand_over_mouth", codepoint: "U+1F92D", category: "Smileys & Emotion", keywords: ["oops", "giggle"] },
4707
+ { emoji: "\u{1F92B}", name: "shushing face", shortcode: "shushing_face", codepoint: "U+1F92B", category: "Smileys & Emotion", keywords: ["quiet", "secret"] },
4708
+ { emoji: "\u{1F914}", name: "thinking face", shortcode: "thinking", codepoint: "U+1F914", category: "Smileys & Emotion", keywords: ["hmm", "consider"] },
4709
+ { emoji: "\u{1F910}", name: "zipper-mouth face", shortcode: "zipper_mouth_face", codepoint: "U+1F910", category: "Smileys & Emotion", keywords: ["secret", "silence"] },
4710
+ { emoji: "\u{1F928}", name: "face with raised eyebrow", shortcode: "raised_eyebrow", codepoint: "U+1F928", category: "Smileys & Emotion", keywords: ["skeptical", "suspicious"] },
4711
+ { emoji: "\u{1F610}", name: "neutral face", shortcode: "neutral_face", codepoint: "U+1F610", category: "Smileys & Emotion", keywords: ["meh"] },
4712
+ { emoji: "\u{1F611}", name: "expressionless face", shortcode: "expressionless", codepoint: "U+1F611", category: "Smileys & Emotion", keywords: ["blank"] },
4713
+ { emoji: "\u{1F636}", name: "face without mouth", shortcode: "no_mouth", codepoint: "U+1F636", category: "Smileys & Emotion", keywords: ["speechless"] },
4714
+ { emoji: "\u{1F60F}", name: "smirking face", shortcode: "smirk", codepoint: "U+1F60F", category: "Smileys & Emotion", keywords: ["smug"] },
4715
+ { emoji: "\u{1F612}", name: "unamused face", shortcode: "unamused", codepoint: "U+1F612", category: "Smileys & Emotion", keywords: ["annoyed"] },
4716
+ { emoji: "\u{1F644}", name: "face with rolling eyes", shortcode: "roll_eyes", codepoint: "U+1F644", category: "Smileys & Emotion", keywords: ["annoyed", "whatever"] },
4717
+ { emoji: "\u{1F62C}", name: "grimacing face", shortcode: "grimacing", codepoint: "U+1F62C", category: "Smileys & Emotion", keywords: ["awkward", "yikes"] },
4718
+ { emoji: "\u{1F60C}", name: "relieved face", shortcode: "relieved", codepoint: "U+1F60C", category: "Smileys & Emotion", keywords: ["calm", "content"] },
4719
+ { emoji: "\u{1F614}", name: "pensive face", shortcode: "pensive", codepoint: "U+1F614", category: "Smileys & Emotion", keywords: ["sad", "thoughtful"] },
4720
+ { emoji: "\u{1F62A}", name: "sleepy face", shortcode: "sleepy", codepoint: "U+1F62A", category: "Smileys & Emotion", keywords: ["tired"] },
4721
+ { emoji: "\u{1F924}", name: "drooling face", shortcode: "drooling_face", codepoint: "U+1F924", category: "Smileys & Emotion", keywords: ["hungry"] },
4722
+ { emoji: "\u{1F634}", name: "sleeping face", shortcode: "sleeping", codepoint: "U+1F634", category: "Smileys & Emotion", keywords: ["zzz", "asleep"] },
4723
+ { emoji: "\u{1F637}", name: "face with medical mask", shortcode: "mask", codepoint: "U+1F637", category: "Smileys & Emotion", keywords: ["sick", "ill"] },
4724
+ { emoji: "\u{1F912}", name: "face with thermometer", shortcode: "face_with_thermometer", codepoint: "U+1F912", category: "Smileys & Emotion", keywords: ["sick", "fever"] },
4725
+ { emoji: "\u{1F915}", name: "face with head-bandage", shortcode: "face_with_head_bandage", codepoint: "U+1F915", category: "Smileys & Emotion", keywords: ["hurt", "injured"] },
4726
+ { emoji: "\u{1F922}", name: "nauseated face", shortcode: "nauseated_face", codepoint: "U+1F922", category: "Smileys & Emotion", keywords: ["sick", "gross"] },
4727
+ { emoji: "\u{1F92E}", name: "face vomiting", shortcode: "vomiting_face", codepoint: "U+1F92E", category: "Smileys & Emotion", keywords: ["sick", "gross"] },
4728
+ { emoji: "\u{1F927}", name: "sneezing face", shortcode: "sneezing_face", codepoint: "U+1F927", category: "Smileys & Emotion", keywords: ["sick", "cold"] },
4729
+ { emoji: "\u{1F975}", name: "hot face", shortcode: "hot_face", codepoint: "U+1F975", category: "Smileys & Emotion", keywords: ["heat", "sweating"] },
4730
+ { emoji: "\u{1F976}", name: "cold face", shortcode: "cold_face", codepoint: "U+1F976", category: "Smileys & Emotion", keywords: ["freezing", "frozen"] },
4731
+ { emoji: "\u{1F635}", name: "knocked-out face", shortcode: "dizzy_face", codepoint: "U+1F635", category: "Smileys & Emotion", keywords: ["dizzy", "confused"] },
4732
+ { emoji: "\u{1F92F}", name: "exploding head", shortcode: "exploding_head", codepoint: "U+1F92F", category: "Smileys & Emotion", keywords: ["mind blown", "shocked"] },
4733
+ { emoji: "\u{1F973}", name: "partying face", shortcode: "partying_face", codepoint: "U+1F973", category: "Smileys & Emotion", keywords: ["celebrate", "party"] },
4734
+ { emoji: "\u{1F60E}", name: "smiling face with sunglasses", shortcode: "sunglasses", codepoint: "U+1F60E", category: "Smileys & Emotion", keywords: ["cool"] },
4735
+ { emoji: "\u{1F913}", name: "nerd face", shortcode: "nerd_face", codepoint: "U+1F913", category: "Smileys & Emotion", keywords: ["geek", "glasses"] },
4736
+ { emoji: "\u{1F9D0}", name: "face with monocle", shortcode: "monocle_face", codepoint: "U+1F9D0", category: "Smileys & Emotion", keywords: ["inspect", "curious"] },
4737
+ { emoji: "\u{1F615}", name: "confused face", shortcode: "confused", codepoint: "U+1F615", category: "Smileys & Emotion", keywords: ["puzzled"] },
4738
+ { emoji: "\u{1F61F}", name: "worried face", shortcode: "worried", codepoint: "U+1F61F", category: "Smileys & Emotion", keywords: ["concerned"] },
4739
+ { emoji: "\u{1F641}", name: "slightly frowning face", shortcode: "slightly_frowning_face", codepoint: "U+1F641", category: "Smileys & Emotion", keywords: ["sad"] },
4740
+ { emoji: "\u{1F62E}", name: "face with open mouth", shortcode: "open_mouth", codepoint: "U+1F62E", category: "Smileys & Emotion", keywords: ["surprised", "wow"] },
4741
+ { emoji: "\u{1F62F}", name: "hushed face", shortcode: "hushed", codepoint: "U+1F62F", category: "Smileys & Emotion", keywords: ["surprised"] },
4742
+ { emoji: "\u{1F632}", name: "astonished face", shortcode: "astonished", codepoint: "U+1F632", category: "Smileys & Emotion", keywords: ["shocked"] },
4743
+ { emoji: "\u{1F633}", name: "flushed face", shortcode: "flushed", codepoint: "U+1F633", category: "Smileys & Emotion", keywords: ["embarrassed", "blush"] },
4744
+ { emoji: "\u{1F97A}", name: "pleading face", shortcode: "pleading_face", codepoint: "U+1F97A", category: "Smileys & Emotion", keywords: ["puppy eyes", "begging"] },
4745
+ { emoji: "\u{1F626}", name: "frowning face with open mouth", shortcode: "frowning", codepoint: "U+1F626", category: "Smileys & Emotion", keywords: ["shocked"] },
4746
+ { emoji: "\u{1F627}", name: "anguished face", shortcode: "anguished", codepoint: "U+1F627", category: "Smileys & Emotion", keywords: ["distressed"] },
4747
+ { emoji: "\u{1F628}", name: "fearful face", shortcode: "fearful", codepoint: "U+1F628", category: "Smileys & Emotion", keywords: ["scared", "afraid"] },
4748
+ { emoji: "\u{1F630}", name: "anxious face with sweat", shortcode: "cold_sweat", codepoint: "U+1F630", category: "Smileys & Emotion", keywords: ["nervous"] },
4749
+ { emoji: "\u{1F625}", name: "sad but relieved face", shortcode: "disappointed_relieved", codepoint: "U+1F625", category: "Smileys & Emotion", keywords: ["sad"] },
4750
+ { emoji: "\u{1F622}", name: "crying face", shortcode: "cry", codepoint: "U+1F622", category: "Smileys & Emotion", keywords: ["sad", "tear"] },
4751
+ { emoji: "\u{1F62D}", name: "loudly crying face", shortcode: "sob", codepoint: "U+1F62D", category: "Smileys & Emotion", keywords: ["sad", "bawling"] },
4752
+ { emoji: "\u{1F631}", name: "face screaming in fear", shortcode: "scream", codepoint: "U+1F631", category: "Smileys & Emotion", keywords: ["shocked", "horror"] },
4753
+ { emoji: "\u{1F616}", name: "confounded face", shortcode: "confounded", codepoint: "U+1F616", category: "Smileys & Emotion", keywords: ["frustrated"] },
4754
+ { emoji: "\u{1F623}", name: "persevering face", shortcode: "persevere", codepoint: "U+1F623", category: "Smileys & Emotion", keywords: ["struggling"] },
4755
+ { emoji: "\u{1F61E}", name: "disappointed face", shortcode: "disappointed", codepoint: "U+1F61E", category: "Smileys & Emotion", keywords: ["sad", "let down"] },
4756
+ { emoji: "\u{1F613}", name: "downcast face with sweat", shortcode: "sweat", codepoint: "U+1F613", category: "Smileys & Emotion", keywords: ["tired", "stressed"] },
4757
+ { emoji: "\u{1F629}", name: "weary face", shortcode: "weary", codepoint: "U+1F629", category: "Smileys & Emotion", keywords: ["tired", "exhausted"] },
4758
+ { emoji: "\u{1F62B}", name: "tired face", shortcode: "tired_face", codepoint: "U+1F62B", category: "Smileys & Emotion", keywords: ["exhausted"] },
4759
+ { emoji: "\u{1F971}", name: "yawning face", shortcode: "yawning_face", codepoint: "U+1F971", category: "Smileys & Emotion", keywords: ["tired", "bored"] },
4760
+ { emoji: "\u{1F624}", name: "face with steam from nose", shortcode: "triumph", codepoint: "U+1F624", category: "Smileys & Emotion", keywords: ["angry", "proud"] },
4761
+ { emoji: "\u{1F621}", name: "pouting face", shortcode: "rage", codepoint: "U+1F621", category: "Smileys & Emotion", keywords: ["angry", "mad"] },
4762
+ { emoji: "\u{1F620}", name: "angry face", shortcode: "angry", codepoint: "U+1F620", category: "Smileys & Emotion", keywords: ["mad"] },
4763
+ { emoji: "\u{1F92C}", name: "face with symbols on mouth", shortcode: "cursing_face", codepoint: "U+1F92C", category: "Smileys & Emotion", keywords: ["swearing", "angry"] },
4764
+ { emoji: "\u{1F608}", name: "smiling face with horns", shortcode: "smiling_imp", codepoint: "U+1F608", category: "Smileys & Emotion", keywords: ["devil", "evil"] },
4765
+ { emoji: "\u{1F47F}", name: "angry face with horns", shortcode: "imp", codepoint: "U+1F47F", category: "Smileys & Emotion", keywords: ["devil"] },
4766
+ { emoji: "\u{1F480}", name: "skull", shortcode: "skull", codepoint: "U+1F480", category: "Smileys & Emotion", keywords: ["dead", "death"] },
4767
+ { emoji: "\u{1F921}", name: "clown face", shortcode: "clown_face", codepoint: "U+1F921", category: "Smileys & Emotion", keywords: ["joker"] },
4768
+ { emoji: "\u{1F47B}", name: "ghost", shortcode: "ghost", codepoint: "U+1F47B", category: "Smileys & Emotion", keywords: ["spooky", "halloween"] },
4769
+ { emoji: "\u{1F47D}", name: "alien", shortcode: "alien", codepoint: "U+1F47D", category: "Smileys & Emotion", keywords: ["ufo", "extraterrestrial"] },
4770
+ { emoji: "\u{1F916}", name: "robot", shortcode: "robot", codepoint: "U+1F916", category: "Smileys & Emotion", keywords: ["ai", "bot"] },
4771
+ { emoji: "\u{1F63A}", name: "grinning cat", shortcode: "smiley_cat", codepoint: "U+1F63A", category: "Smileys & Emotion", keywords: ["cat"] },
4772
+ { emoji: "\u{1F639}", name: "cat with tears of joy", shortcode: "joy_cat", codepoint: "U+1F639", category: "Smileys & Emotion", keywords: ["cat", "laugh"] },
4773
+ { emoji: "\u{1F63B}", name: "smiling cat with heart-eyes", shortcode: "heart_eyes_cat", codepoint: "U+1F63B", category: "Smileys & Emotion", keywords: ["cat", "love"] },
4774
+ { emoji: "\u{1F44D}", name: "thumbs up", shortcode: "thumbsup", codepoint: "U+1F44D", category: "People & Body", keywords: ["approve", "like", "yes"] },
4775
+ { emoji: "\u{1F44E}", name: "thumbs down", shortcode: "thumbsdown", codepoint: "U+1F44E", category: "People & Body", keywords: ["disapprove", "no"] },
4776
+ { emoji: "\u{1F44C}", name: "OK hand", shortcode: "ok_hand", codepoint: "U+1F44C", category: "People & Body", keywords: ["okay", "perfect"] },
4777
+ { emoji: "\u270C\uFE0F", name: "victory hand", shortcode: "v", codepoint: "U+270C U+FE0F", category: "People & Body", keywords: ["peace"] },
4778
+ { emoji: "\u{1F91E}", name: "crossed fingers", shortcode: "crossed_fingers", codepoint: "U+1F91E", category: "People & Body", keywords: ["luck", "hope"] },
4779
+ { emoji: "\u{1F918}", name: "sign of the horns", shortcode: "metal", codepoint: "U+1F918", category: "People & Body", keywords: ["rock"] },
4780
+ { emoji: "\u{1F44F}", name: "clapping hands", shortcode: "clap", codepoint: "U+1F44F", category: "People & Body", keywords: ["applause", "bravo"] },
4781
+ { emoji: "\u{1F64C}", name: "raising hands", shortcode: "raised_hands", codepoint: "U+1F64C", category: "People & Body", keywords: ["celebrate", "hooray"] },
4782
+ { emoji: "\u{1F450}", name: "open hands", shortcode: "open_hands", codepoint: "U+1F450", category: "People & Body", keywords: ["hug"] },
4783
+ { emoji: "\u{1F91D}", name: "handshake", shortcode: "handshake", codepoint: "U+1F91D", category: "People & Body", keywords: ["deal", "agreement"] },
4784
+ { emoji: "\u{1F64F}", name: "folded hands", shortcode: "pray", codepoint: "U+1F64F", category: "People & Body", keywords: ["please", "thanks", "praying"] },
4785
+ { emoji: "\u270D\uFE0F", name: "writing hand", shortcode: "writing_hand", codepoint: "U+270D U+FE0F", category: "People & Body", keywords: ["write"] },
4786
+ { emoji: "\u{1F4AA}", name: "flexed biceps", shortcode: "muscle", codepoint: "U+1F4AA", category: "People & Body", keywords: ["strong", "gym"] },
4787
+ { emoji: "\u{1F590}\uFE0F", name: "hand with fingers splayed", shortcode: "raised_hand_with_fingers_splayed", codepoint: "U+1F590 U+FE0F", category: "People & Body", keywords: ["stop"] },
4788
+ { emoji: "\u{1F44B}", name: "waving hand", shortcode: "wave", codepoint: "U+1F44B", category: "People & Body", keywords: ["hello", "goodbye", "bye"] },
4789
+ { emoji: "\u{1F440}", name: "eyes", shortcode: "eyes", codepoint: "U+1F440", category: "People & Body", keywords: ["look", "watching"] },
4790
+ { emoji: "\u{1F9E0}", name: "brain", shortcode: "brain", codepoint: "U+1F9E0", category: "People & Body", keywords: ["smart", "mind"] },
4791
+ { emoji: "\u2764\uFE0F", name: "red heart", shortcode: "heart", codepoint: "U+2764 U+FE0F", category: "Smileys & Emotion", keywords: ["love"] },
4792
+ { emoji: "\u{1F9E1}", name: "orange heart", shortcode: "orange_heart", codepoint: "U+1F9E1", category: "Smileys & Emotion", keywords: ["love"] },
4793
+ { emoji: "\u{1F49B}", name: "yellow heart", shortcode: "yellow_heart", codepoint: "U+1F49B", category: "Smileys & Emotion", keywords: ["love"] },
4794
+ { emoji: "\u{1F49A}", name: "green heart", shortcode: "green_heart", codepoint: "U+1F49A", category: "Smileys & Emotion", keywords: ["love"] },
4795
+ { emoji: "\u{1F499}", name: "blue heart", shortcode: "blue_heart", codepoint: "U+1F499", category: "Smileys & Emotion", keywords: ["love"] },
4796
+ { emoji: "\u{1F49C}", name: "purple heart", shortcode: "purple_heart", codepoint: "U+1F49C", category: "Smileys & Emotion", keywords: ["love"] },
4797
+ { emoji: "\u{1F5A4}", name: "black heart", shortcode: "black_heart", codepoint: "U+1F5A4", category: "Smileys & Emotion", keywords: ["love", "dark"] },
4798
+ { emoji: "\u{1F90D}", name: "white heart", shortcode: "white_heart", codepoint: "U+1F90D", category: "Smileys & Emotion", keywords: ["love"] },
4799
+ { emoji: "\u{1F494}", name: "broken heart", shortcode: "broken_heart", codepoint: "U+1F494", category: "Smileys & Emotion", keywords: ["heartbroken", "sad"] },
4800
+ { emoji: "\u{1F495}", name: "two hearts", shortcode: "two_hearts", codepoint: "U+1F495", category: "Smileys & Emotion", keywords: ["love"] },
4801
+ { emoji: "\u{1F496}", name: "sparkling heart", shortcode: "sparkling_heart", codepoint: "U+1F496", category: "Smileys & Emotion", keywords: ["love"] },
4802
+ { emoji: "\u{1F4AF}", name: "hundred points", shortcode: "100", codepoint: "U+1F4AF", category: "Smileys & Emotion", keywords: ["perfect", "score"] },
4803
+ { emoji: "\u{1F525}", name: "fire", shortcode: "fire", codepoint: "U+1F525", category: "Travel & Places", keywords: ["lit", "hot", "flame"] },
4804
+ { emoji: "\u2728", name: "sparkles", shortcode: "sparkles", codepoint: "U+2728", category: "Travel & Places", keywords: ["shiny", "glitter"] },
4805
+ { emoji: "\u2B50", name: "star", shortcode: "star", codepoint: "U+2B50", category: "Travel & Places", keywords: ["favorite"] },
4806
+ { emoji: "\u{1F31F}", name: "glowing star", shortcode: "star2", codepoint: "U+1F31F", category: "Travel & Places", keywords: ["shiny"] },
4807
+ { emoji: "\u{1F389}", name: "party popper", shortcode: "tada", codepoint: "U+1F389", category: "Activities", keywords: ["celebrate", "congrats"] },
4808
+ { emoji: "\u{1F38A}", name: "confetti ball", shortcode: "confetti_ball", codepoint: "U+1F38A", category: "Activities", keywords: ["celebrate"] },
4809
+ { emoji: "\u{1F381}", name: "wrapped gift", shortcode: "gift", codepoint: "U+1F381", category: "Activities", keywords: ["present", "birthday"] },
4810
+ { emoji: "\u{1F388}", name: "balloon", shortcode: "balloon", codepoint: "U+1F388", category: "Activities", keywords: ["party", "birthday"] },
4811
+ { emoji: "\u{1F3C6}", name: "trophy", shortcode: "trophy", codepoint: "U+1F3C6", category: "Activities", keywords: ["winner", "award"] },
4812
+ { emoji: "\u{1F947}", name: "1st place medal", shortcode: "first_place_medal", codepoint: "U+1F947", category: "Activities", keywords: ["gold", "winner"] },
4813
+ { emoji: "\u26BD", name: "soccer ball", shortcode: "soccer", codepoint: "U+26BD", category: "Activities", keywords: ["football"] },
4814
+ { emoji: "\u{1F3C0}", name: "basketball", shortcode: "basketball", codepoint: "U+1F3C0", category: "Activities", keywords: ["sport"] },
4815
+ { emoji: "\u{1F3C8}", name: "american football", shortcode: "football", codepoint: "U+1F3C8", category: "Activities", keywords: ["sport", "nfl"] },
4816
+ { emoji: "\u26BE", name: "baseball", shortcode: "baseball", codepoint: "U+26BE", category: "Activities", keywords: ["sport"] },
4817
+ { emoji: "\u{1F3BE}", name: "tennis", shortcode: "tennis", codepoint: "U+1F3BE", category: "Activities", keywords: ["sport"] },
4818
+ { emoji: "\u{1F3AE}", name: "video game", shortcode: "video_game", codepoint: "U+1F3AE", category: "Activities", keywords: ["gaming", "controller"] },
4819
+ { emoji: "\u{1F3B2}", name: "game die", shortcode: "game_die", codepoint: "U+1F3B2", category: "Activities", keywords: ["dice", "random"] },
4820
+ { emoji: "\u{1F3A7}", name: "headphone", shortcode: "headphones", codepoint: "U+1F3A7", category: "Objects", keywords: ["music", "audio"] },
4821
+ { emoji: "\u{1F3B5}", name: "musical note", shortcode: "musical_note", codepoint: "U+1F3B5", category: "Objects", keywords: ["music"] },
4822
+ { emoji: "\u{1F3B6}", name: "musical notes", shortcode: "notes", codepoint: "U+1F3B6", category: "Objects", keywords: ["music"] },
4823
+ { emoji: "\u{1F436}", name: "dog face", shortcode: "dog", codepoint: "U+1F436", category: "Animals & Nature", keywords: ["puppy", "pet"] },
4824
+ { emoji: "\u{1F431}", name: "cat face", shortcode: "cat", codepoint: "U+1F431", category: "Animals & Nature", keywords: ["kitten", "pet"] },
4825
+ { emoji: "\u{1F42D}", name: "mouse face", shortcode: "mouse", codepoint: "U+1F42D", category: "Animals & Nature", keywords: ["rodent"] },
4826
+ { emoji: "\u{1F439}", name: "hamster face", shortcode: "hamster", codepoint: "U+1F439", category: "Animals & Nature", keywords: ["pet"] },
4827
+ { emoji: "\u{1F430}", name: "rabbit face", shortcode: "rabbit", codepoint: "U+1F430", category: "Animals & Nature", keywords: ["bunny"] },
4828
+ { emoji: "\u{1F98A}", name: "fox", shortcode: "fox_face", codepoint: "U+1F98A", category: "Animals & Nature", keywords: ["animal"] },
4829
+ { emoji: "\u{1F43B}", name: "bear", shortcode: "bear", codepoint: "U+1F43B", category: "Animals & Nature", keywords: ["animal"] },
4830
+ { emoji: "\u{1F43C}", name: "panda", shortcode: "panda_face", codepoint: "U+1F43C", category: "Animals & Nature", keywords: ["animal"] },
4831
+ { emoji: "\u{1F428}", name: "koala", shortcode: "koala", codepoint: "U+1F428", category: "Animals & Nature", keywords: ["animal"] },
4832
+ { emoji: "\u{1F42F}", name: "tiger face", shortcode: "tiger", codepoint: "U+1F42F", category: "Animals & Nature", keywords: ["animal"] },
4833
+ { emoji: "\u{1F981}", name: "lion", shortcode: "lion", codepoint: "U+1F981", category: "Animals & Nature", keywords: ["animal"] },
4834
+ { emoji: "\u{1F42E}", name: "cow face", shortcode: "cow", codepoint: "U+1F42E", category: "Animals & Nature", keywords: ["animal"] },
4835
+ { emoji: "\u{1F437}", name: "pig face", shortcode: "pig", codepoint: "U+1F437", category: "Animals & Nature", keywords: ["animal"] },
4836
+ { emoji: "\u{1F438}", name: "frog", shortcode: "frog", codepoint: "U+1F438", category: "Animals & Nature", keywords: ["animal"] },
4837
+ { emoji: "\u{1F435}", name: "monkey face", shortcode: "monkey_face", codepoint: "U+1F435", category: "Animals & Nature", keywords: ["animal"] },
4838
+ { emoji: "\u{1F414}", name: "chicken", shortcode: "chicken", codepoint: "U+1F414", category: "Animals & Nature", keywords: ["animal", "bird"] },
4839
+ { emoji: "\u{1F427}", name: "penguin", shortcode: "penguin", codepoint: "U+1F427", category: "Animals & Nature", keywords: ["animal", "bird"] },
4840
+ { emoji: "\u{1F426}", name: "bird", shortcode: "bird", codepoint: "U+1F426", category: "Animals & Nature", keywords: ["animal"] },
4841
+ { emoji: "\u{1F984}", name: "unicorn", shortcode: "unicorn", codepoint: "U+1F984", category: "Animals & Nature", keywords: ["fantasy"] },
4842
+ { emoji: "\u{1F41D}", name: "honeybee", shortcode: "bee", codepoint: "U+1F41D", category: "Animals & Nature", keywords: ["insect"] },
4843
+ { emoji: "\u{1F98B}", name: "butterfly", shortcode: "butterfly", codepoint: "U+1F98B", category: "Animals & Nature", keywords: ["insect"] },
4844
+ { emoji: "\u{1F422}", name: "turtle", shortcode: "turtle", codepoint: "U+1F422", category: "Animals & Nature", keywords: ["animal", "slow"] },
4845
+ { emoji: "\u{1F40D}", name: "snake", shortcode: "snake", codepoint: "U+1F40D", category: "Animals & Nature", keywords: ["animal"] },
4846
+ { emoji: "\u{1F433}", name: "spouting whale", shortcode: "whale", codepoint: "U+1F433", category: "Animals & Nature", keywords: ["ocean"] },
4847
+ { emoji: "\u{1F42C}", name: "dolphin", shortcode: "dolphin", codepoint: "U+1F42C", category: "Animals & Nature", keywords: ["ocean"] },
4848
+ { emoji: "\u{1F41F}", name: "fish", shortcode: "fish", codepoint: "U+1F41F", category: "Animals & Nature", keywords: ["ocean"] },
4849
+ { emoji: "\u{1F338}", name: "cherry blossom", shortcode: "cherry_blossom", codepoint: "U+1F338", category: "Animals & Nature", keywords: ["flower", "spring"] },
4850
+ { emoji: "\u{1F339}", name: "rose", shortcode: "rose", codepoint: "U+1F339", category: "Animals & Nature", keywords: ["flower"] },
4851
+ { emoji: "\u{1F33B}", name: "sunflower", shortcode: "sunflower", codepoint: "U+1F33B", category: "Animals & Nature", keywords: ["flower"] },
4852
+ { emoji: "\u{1F308}", name: "rainbow", shortcode: "rainbow", codepoint: "U+1F308", category: "Travel & Places", keywords: ["colorful", "pride"] },
4853
+ { emoji: "\u2600\uFE0F", name: "sun", shortcode: "sunny", codepoint: "U+2600 U+FE0F", category: "Travel & Places", keywords: ["sunshine", "weather"] },
4854
+ { emoji: "\u26C5", name: "sun behind cloud", shortcode: "partly_sunny", codepoint: "U+26C5", category: "Travel & Places", keywords: ["weather"] },
4855
+ { emoji: "\u2601\uFE0F", name: "cloud", shortcode: "cloud", codepoint: "U+2601 U+FE0F", category: "Travel & Places", keywords: ["weather"] },
4856
+ { emoji: "\u{1F327}\uFE0F", name: "cloud with rain", shortcode: "cloud_with_rain", codepoint: "U+1F327 U+FE0F", category: "Travel & Places", keywords: ["weather", "rain"] },
4857
+ { emoji: "\u26C8\uFE0F", name: "cloud with lightning and rain", shortcode: "thunder_cloud_and_rain", codepoint: "U+26C8 U+FE0F", category: "Travel & Places", keywords: ["storm"] },
4858
+ { emoji: "\u2744\uFE0F", name: "snowflake", shortcode: "snowflake", codepoint: "U+2744 U+FE0F", category: "Travel & Places", keywords: ["cold", "winter"] },
4859
+ { emoji: "\u26C4", name: "snowman without snow", shortcode: "snowman_without_snow", codepoint: "U+26C4", category: "Travel & Places", keywords: ["winter"] },
4860
+ { emoji: "\u{1F30A}", name: "water wave", shortcode: "ocean", codepoint: "U+1F30A", category: "Travel & Places", keywords: ["sea", "surf"] },
4861
+ { emoji: "\u{1F34E}", name: "red apple", shortcode: "apple", codepoint: "U+1F34E", category: "Food & Drink", keywords: ["fruit"] },
4862
+ { emoji: "\u{1F34C}", name: "banana", shortcode: "banana", codepoint: "U+1F34C", category: "Food & Drink", keywords: ["fruit"] },
4863
+ { emoji: "\u{1F355}", name: "pizza", shortcode: "pizza", codepoint: "U+1F355", category: "Food & Drink", keywords: ["food"] },
4864
+ { emoji: "\u{1F354}", name: "hamburger", shortcode: "hamburger", codepoint: "U+1F354", category: "Food & Drink", keywords: ["burger", "food"] },
4865
+ { emoji: "\u{1F35F}", name: "french fries", shortcode: "fries", codepoint: "U+1F35F", category: "Food & Drink", keywords: ["food"] },
4866
+ { emoji: "\u{1F32E}", name: "taco", shortcode: "taco", codepoint: "U+1F32E", category: "Food & Drink", keywords: ["food"] },
4867
+ { emoji: "\u{1F363}", name: "sushi", shortcode: "sushi", codepoint: "U+1F363", category: "Food & Drink", keywords: ["food"] },
4868
+ { emoji: "\u{1F369}", name: "doughnut", shortcode: "doughnut", codepoint: "U+1F369", category: "Food & Drink", keywords: ["donut", "food"] },
4869
+ { emoji: "\u{1F36A}", name: "cookie", shortcode: "cookie", codepoint: "U+1F36A", category: "Food & Drink", keywords: ["food"] },
4870
+ { emoji: "\u{1F382}", name: "birthday cake", shortcode: "birthday", codepoint: "U+1F382", category: "Food & Drink", keywords: ["cake", "party"] },
4871
+ { emoji: "\u{1F370}", name: "shortcake", shortcode: "cake", codepoint: "U+1F370", category: "Food & Drink", keywords: ["dessert"] },
4872
+ { emoji: "\u{1F36B}", name: "chocolate bar", shortcode: "chocolate_bar", codepoint: "U+1F36B", category: "Food & Drink", keywords: ["candy", "sweet"] },
4873
+ { emoji: "\u{1F37F}", name: "popcorn", shortcode: "popcorn", codepoint: "U+1F37F", category: "Food & Drink", keywords: ["movie", "snack"] },
4874
+ { emoji: "\u2615", name: "hot beverage", shortcode: "coffee", codepoint: "U+2615", category: "Food & Drink", keywords: ["tea", "drink"] },
4875
+ { emoji: "\u{1F37A}", name: "beer mug", shortcode: "beer", codepoint: "U+1F37A", category: "Food & Drink", keywords: ["drink", "alcohol"] },
4876
+ { emoji: "\u{1F377}", name: "wine glass", shortcode: "wine_glass", codepoint: "U+1F377", category: "Food & Drink", keywords: ["drink", "alcohol"] },
4877
+ { emoji: "\u{1F37E}", name: "bottle with popping cork", shortcode: "champagne", codepoint: "U+1F37E", category: "Food & Drink", keywords: ["celebrate", "drink"] },
4878
+ { emoji: "\u{1F680}", name: "rocket", shortcode: "rocket", codepoint: "U+1F680", category: "Travel & Places", keywords: ["launch", "space", "ship"] },
4879
+ { emoji: "\u2708\uFE0F", name: "airplane", shortcode: "airplane", codepoint: "U+2708 U+FE0F", category: "Travel & Places", keywords: ["flight", "travel"] },
4880
+ { emoji: "\u{1F697}", name: "automobile", shortcode: "car", codepoint: "U+1F697", category: "Travel & Places", keywords: ["vehicle"] },
4881
+ { emoji: "\u{1F6B2}", name: "bicycle", shortcode: "bike", codepoint: "U+1F6B2", category: "Travel & Places", keywords: ["cycling"] },
4882
+ { emoji: "\u{1F6A2}", name: "ship", shortcode: "ship", codepoint: "U+1F6A2", category: "Travel & Places", keywords: ["boat"] },
4883
+ { emoji: "\u{1F3E0}", name: "house", shortcode: "house", codepoint: "U+1F3E0", category: "Travel & Places", keywords: ["home"] },
4884
+ { emoji: "\u{1F3E2}", name: "office building", shortcode: "office", codepoint: "U+1F3E2", category: "Travel & Places", keywords: ["work"] },
4885
+ { emoji: "\u{1F30D}", name: "globe showing Europe-Africa", shortcode: "earth_africa", codepoint: "U+1F30D", category: "Travel & Places", keywords: ["world", "global"] },
4886
+ { emoji: "\u{1F5FA}\uFE0F", name: "world map", shortcode: "world_map", codepoint: "U+1F5FA U+FE0F", category: "Travel & Places", keywords: ["travel"] },
4887
+ { emoji: "\u{1F319}", name: "crescent moon", shortcode: "crescent_moon", codepoint: "U+1F319", category: "Travel & Places", keywords: ["night"] },
4888
+ { emoji: "\u{1F4BB}", name: "laptop", shortcode: "computer", codepoint: "U+1F4BB", category: "Objects", keywords: ["dev", "code"] },
4889
+ { emoji: "\u{1F5A5}\uFE0F", name: "desktop computer", shortcode: "desktop_computer", codepoint: "U+1F5A5 U+FE0F", category: "Objects", keywords: ["dev"] },
4890
+ { emoji: "\u2328\uFE0F", name: "keyboard", shortcode: "keyboard", codepoint: "U+2328 U+FE0F", category: "Objects", keywords: ["type", "dev"] },
4891
+ { emoji: "\u{1F5B1}\uFE0F", name: "computer mouse", shortcode: "computer_mouse", codepoint: "U+1F5B1 U+FE0F", category: "Objects", keywords: ["dev"] },
4892
+ { emoji: "\u{1F4F1}", name: "mobile phone", shortcode: "iphone", codepoint: "U+1F4F1", category: "Objects", keywords: ["phone"] },
4893
+ { emoji: "\u260E\uFE0F", name: "telephone", shortcode: "telephone", codepoint: "U+260E U+FE0F", category: "Objects", keywords: ["phone"] },
4894
+ { emoji: "\u{1F4A1}", name: "light bulb", shortcode: "bulb", codepoint: "U+1F4A1", category: "Objects", keywords: ["idea"] },
4895
+ { emoji: "\u{1F50B}", name: "battery", shortcode: "battery", codepoint: "U+1F50B", category: "Objects", keywords: ["power"] },
4896
+ { emoji: "\u{1F50C}", name: "electric plug", shortcode: "electric_plug", codepoint: "U+1F50C", category: "Objects", keywords: ["power"] },
4897
+ { emoji: "\u{1F4F7}", name: "camera", shortcode: "camera", codepoint: "U+1F4F7", category: "Objects", keywords: ["photo"] },
4898
+ { emoji: "\u{1F4DA}", name: "books", shortcode: "books", codepoint: "U+1F4DA", category: "Objects", keywords: ["read", "study"] },
4899
+ { emoji: "\u{1F4D6}", name: "open book", shortcode: "book", codepoint: "U+1F4D6", category: "Objects", keywords: ["read"] },
4900
+ { emoji: "\u{1F4DD}", name: "memo", shortcode: "memo", codepoint: "U+1F4DD", category: "Objects", keywords: ["note", "write"] },
4901
+ { emoji: "\u270F\uFE0F", name: "pencil", shortcode: "pencil2", codepoint: "U+270F U+FE0F", category: "Objects", keywords: ["write"] },
4902
+ { emoji: "\u{1F58A}\uFE0F", name: "pen", shortcode: "pen", codepoint: "U+1F58A U+FE0F", category: "Objects", keywords: ["write"] },
4903
+ { emoji: "\u{1F4CC}", name: "pushpin", shortcode: "pushpin", codepoint: "U+1F4CC", category: "Objects", keywords: ["pin"] },
4904
+ { emoji: "\u{1F4CE}", name: "paperclip", shortcode: "paperclip", codepoint: "U+1F4CE", category: "Objects", keywords: ["attach"] },
4905
+ { emoji: "\u{1F517}", name: "link", shortcode: "link", codepoint: "U+1F517", category: "Objects", keywords: ["url", "chain"] },
4906
+ { emoji: "\u{1F512}", name: "locked", shortcode: "lock", codepoint: "U+1F512", category: "Objects", keywords: ["secure", "private"] },
4907
+ { emoji: "\u{1F513}", name: "unlocked", shortcode: "unlock", codepoint: "U+1F513", category: "Objects", keywords: ["open"] },
4908
+ { emoji: "\u{1F511}", name: "key", shortcode: "key", codepoint: "U+1F511", category: "Objects", keywords: ["password"] },
4909
+ { emoji: "\u{1F50D}", name: "magnifying glass tilted left", shortcode: "mag", codepoint: "U+1F50D", category: "Objects", keywords: ["search", "find"] },
4910
+ { emoji: "\u2699\uFE0F", name: "gear", shortcode: "gear", codepoint: "U+2699 U+FE0F", category: "Objects", keywords: ["settings", "config"] },
4911
+ { emoji: "\u{1F6E0}\uFE0F", name: "hammer and wrench", shortcode: "hammer_and_wrench", codepoint: "U+1F6E0 U+FE0F", category: "Objects", keywords: ["tools", "build"] },
4912
+ { emoji: "\u{1F41B}", name: "bug", shortcode: "bug", codepoint: "U+1F41B", category: "Animals & Nature", keywords: ["insect", "error", "debug"] },
4913
+ { emoji: "\u{1F4B0}", name: "money bag", shortcode: "moneybag", codepoint: "U+1F4B0", category: "Objects", keywords: ["cash", "rich"] },
4914
+ { emoji: "\u{1F4B5}", name: "dollar banknote", shortcode: "dollar", codepoint: "U+1F4B5", category: "Objects", keywords: ["money", "cash"] },
4915
+ { emoji: "\u{1F4B3}", name: "credit card", shortcode: "credit_card", codepoint: "U+1F4B3", category: "Objects", keywords: ["payment"] },
4916
+ { emoji: "\u{1F4C8}", name: "chart increasing", shortcode: "chart_with_upwards_trend", codepoint: "U+1F4C8", category: "Objects", keywords: ["growth", "stocks"] },
4917
+ { emoji: "\u{1F4C9}", name: "chart decreasing", shortcode: "chart_with_downwards_trend", codepoint: "U+1F4C9", category: "Objects", keywords: ["decline", "stocks"] },
4918
+ { emoji: "\u{1F4CA}", name: "bar chart", shortcode: "bar_chart", codepoint: "U+1F4CA", category: "Objects", keywords: ["data", "stats"] },
4919
+ { emoji: "\u{1F4C5}", name: "calendar", shortcode: "date", codepoint: "U+1F4C5", category: "Objects", keywords: ["schedule"] },
4920
+ { emoji: "\u23F0", name: "alarm clock", shortcode: "alarm_clock", codepoint: "U+23F0", category: "Objects", keywords: ["time", "wake"] },
4921
+ { emoji: "\u23F3", name: "hourglass not done", shortcode: "hourglass_flowing_sand", codepoint: "U+23F3", category: "Objects", keywords: ["waiting", "time"] },
4922
+ { emoji: "\u2705", name: "check mark button", shortcode: "white_check_mark", codepoint: "U+2705", category: "Symbols", keywords: ["done", "correct", "yes"] },
4923
+ { emoji: "\u2714\uFE0F", name: "check mark", shortcode: "heavy_check_mark", codepoint: "U+2714 U+FE0F", category: "Symbols", keywords: ["done", "correct"] },
4924
+ { emoji: "\u274C", name: "cross mark", shortcode: "x", codepoint: "U+274C", category: "Symbols", keywords: ["wrong", "no", "error"] },
4925
+ { emoji: "\u2757", name: "exclamation mark", shortcode: "exclamation", codepoint: "U+2757", category: "Symbols", keywords: ["warning", "important"] },
4926
+ { emoji: "\u2753", name: "question mark", shortcode: "question", codepoint: "U+2753", category: "Symbols", keywords: ["ask"] },
4927
+ { emoji: "\u26A0\uFE0F", name: "warning", shortcode: "warning", codepoint: "U+26A0 U+FE0F", category: "Symbols", keywords: ["caution", "alert"] },
4928
+ { emoji: "\u{1F6AB}", name: "prohibited", shortcode: "no_entry_sign", codepoint: "U+1F6AB", category: "Symbols", keywords: ["forbidden", "banned"] },
4929
+ { emoji: "\u{1F534}", name: "red circle", shortcode: "red_circle", codepoint: "U+1F534", category: "Symbols", keywords: ["status", "stop"] },
4930
+ { emoji: "\u{1F7E2}", name: "green circle", shortcode: "green_circle", codepoint: "U+1F7E2", category: "Symbols", keywords: ["status", "go"] },
4931
+ { emoji: "\u{1F7E1}", name: "yellow circle", shortcode: "yellow_circle", codepoint: "U+1F7E1", category: "Symbols", keywords: ["status", "warning"] },
4932
+ { emoji: "\u{1F535}", name: "blue circle", shortcode: "blue_circle", codepoint: "U+1F535", category: "Symbols", keywords: ["status"] },
4933
+ { emoji: "\u2B06\uFE0F", name: "up arrow", shortcode: "arrow_up", codepoint: "U+2B06 U+FE0F", category: "Symbols", keywords: ["direction"] },
4934
+ { emoji: "\u2B07\uFE0F", name: "down arrow", shortcode: "arrow_down", codepoint: "U+2B07 U+FE0F", category: "Symbols", keywords: ["direction"] },
4935
+ { emoji: "\u27A1\uFE0F", name: "right arrow", shortcode: "arrow_right", codepoint: "U+27A1 U+FE0F", category: "Symbols", keywords: ["direction"] },
4936
+ { emoji: "\u2B05\uFE0F", name: "left arrow", shortcode: "arrow_left", codepoint: "U+2B05 U+FE0F", category: "Symbols", keywords: ["direction"] },
4937
+ { emoji: "\u{1F504}", name: "counterclockwise arrows button", shortcode: "arrows_counterclockwise", codepoint: "U+1F504", category: "Symbols", keywords: ["refresh", "reload", "sync"] },
4938
+ { emoji: "\u267B\uFE0F", name: "recycling symbol", shortcode: "recycle", codepoint: "U+267B U+FE0F", category: "Symbols", keywords: ["reuse", "green"] },
4939
+ { emoji: "\u{1F195}", name: "NEW button", shortcode: "new", codepoint: "U+1F195", category: "Symbols", keywords: ["fresh"] },
4940
+ { emoji: "\u{1F193}", name: "FREE button", shortcode: "free", codepoint: "U+1F193", category: "Symbols", keywords: ["gratis"] },
4941
+ { emoji: "\u{1F4A4}", name: "zzz", shortcode: "zzz", codepoint: "U+1F4A4", category: "Symbols", keywords: ["sleep", "tired"] },
4942
+ { emoji: "\u{1F4AC}", name: "speech balloon", shortcode: "speech_balloon", codepoint: "U+1F4AC", category: "Objects", keywords: ["chat", "talk"] },
4943
+ { emoji: "\u{1F4AD}", name: "thought balloon", shortcode: "thought_balloon", codepoint: "U+1F4AD", category: "Objects", keywords: ["think"] },
4944
+ { emoji: "\u{1F5E3}\uFE0F", name: "speaking head", shortcode: "speaking_head", codepoint: "U+1F5E3 U+FE0F", category: "People & Body", keywords: ["talk"] },
4945
+ { emoji: "\u{1F3AF}", name: "direct hit", shortcode: "dart", codepoint: "U+1F3AF", category: "Activities", keywords: ["target", "goal"] },
4946
+ { emoji: "\u{1F6A9}", name: "triangular flag", shortcode: "triangular_flag_on_post", codepoint: "U+1F6A9", category: "Flags", keywords: ["flag", "report"] },
4947
+ { emoji: "\u{1F3C1}", name: "chequered flag", shortcode: "checkered_flag", codepoint: "U+1F3C1", category: "Flags", keywords: ["finish", "race"] },
4948
+ { emoji: "\u{1F1FA}\u{1F1F8}", name: "flag: United States", shortcode: "us", codepoint: "U+1F1FA U+1F1F8", category: "Flags", keywords: ["usa", "america"] },
4949
+ { emoji: "\u{1F1EC}\u{1F1E7}", name: "flag: United Kingdom", shortcode: "gb", codepoint: "U+1F1EC U+1F1E7", category: "Flags", keywords: ["uk", "britain"] },
4950
+ { emoji: "\u{1F1EE}\u{1F1F3}", name: "flag: India", shortcode: "in", codepoint: "U+1F1EE U+1F1F3", category: "Flags", keywords: ["india"] },
4951
+ { emoji: "\u{1F1EF}\u{1F1F5}", name: "flag: Japan", shortcode: "jp", codepoint: "U+1F1EF U+1F1F5", category: "Flags", keywords: ["japan"] },
4952
+ { emoji: "\u{1F1E9}\u{1F1EA}", name: "flag: Germany", shortcode: "de", codepoint: "U+1F1E9 U+1F1EA", category: "Flags", keywords: ["germany"] },
4953
+ { emoji: "\u{1F1EB}\u{1F1F7}", name: "flag: France", shortcode: "fr", codepoint: "U+1F1EB U+1F1F7", category: "Flags", keywords: ["france"] },
4954
+ { emoji: "\u{1F1E8}\u{1F1E6}", name: "flag: Canada", shortcode: "ca", codepoint: "U+1F1E8 U+1F1E6", category: "Flags", keywords: ["canada"] },
4955
+ { emoji: "\u{1F1E6}\u{1F1FA}", name: "flag: Australia", shortcode: "au", codepoint: "U+1F1E6 U+1F1FA", category: "Flags", keywords: ["australia"] },
4956
+ { emoji: "\u{1F1E7}\u{1F1F7}", name: "flag: Brazil", shortcode: "br", codepoint: "U+1F1E7 U+1F1F7", category: "Flags", keywords: ["brazil"] },
4957
+ { emoji: "\u{1F1E8}\u{1F1F3}", name: "flag: China", shortcode: "cn", codepoint: "U+1F1E8 U+1F1F3", category: "Flags", keywords: ["china"] }
4958
+ ];
4959
+ function searchEmoji(query) {
4960
+ const q = query.trim().toLowerCase().replace(/^:|:$/g, "");
4961
+ if (!q) return [];
4962
+ return EMOJI_TABLE.filter(
4963
+ (e) => e.name.toLowerCase().includes(q) || e.shortcode.toLowerCase().includes(q) || e.keywords.some((k) => k.toLowerCase().includes(q))
4964
+ );
4965
+ }
4966
+ function getEmojiByShortcode(shortcode) {
4967
+ const s = shortcode.trim().toLowerCase().replace(/^:|:$/g, "");
4968
+ return EMOJI_TABLE.find((e) => e.shortcode.toLowerCase() === s);
4969
+ }
4970
+ function getEmojiByChar(char) {
4971
+ return EMOJI_TABLE.find((e) => e.emoji === char);
4972
+ }
4973
+ function getEmojiByCategory(category) {
4974
+ return EMOJI_TABLE.filter((e) => e.category.toLowerCase() === category.trim().toLowerCase());
4975
+ }
4976
+ function getEmojiCategories() {
4977
+ return Array.from(new Set(EMOJI_TABLE.map((e) => e.category)));
4978
+ }
4674
4979
 
4675
4980
  // src/tools/data.ts
4676
4981
  var data_exports = {};
@@ -4686,6 +4991,7 @@ __export(data_exports, {
4686
4991
  formatSubtitleTimestamp: () => formatSubtitleTimestamp,
4687
4992
  formatToml: () => formatToml,
4688
4993
  formatXml: () => formatXml,
4994
+ generateMarkdownToc: () => generateMarkdownToc,
4689
4995
  getSection: () => getSection,
4690
4996
  getSectionNames: () => getSectionNames,
4691
4997
  getTomlStats: () => getTomlStats,
@@ -6069,6 +6375,67 @@ function parseFrontMatter(input) {
6069
6375
  }
6070
6376
  return { frontMatter, body: afterClose, hasFrontMatter: true, raw };
6071
6377
  }
6378
+ function stripInlineMarkdown(text) {
6379
+ return text.replace(/(\*\*\*|___)(.+?)\1/g, "$2").replace(/(\*\*|__)(.+?)\1/g, "$2").replace(/(\*|_)(.+?)\1/g, "$2").replace(/`([^`]+)`/g, "$1").replace(/!\[([^\]]*)\]\([^)]*\)/g, "$1").replace(/\[([^\]]+)\]\([^)]*\)/g, "$1").trim();
6380
+ }
6381
+ function slugifyHeading(text, seen) {
6382
+ let slug = text.toLowerCase().trim().replace(/[^\p{L}\p{N}\s_-]/gu, "").replace(/\s/g, "-");
6383
+ const count = seen.get(slug) ?? 0;
6384
+ seen.set(slug, count + 1);
6385
+ if (count > 0) slug = `${slug}-${count}`;
6386
+ return slug;
6387
+ }
6388
+ function generateMarkdownToc(markdown, options = {}) {
6389
+ if (typeof markdown !== "string" || markdown.trim() === "") {
6390
+ return { error: "markdown is required" };
6391
+ }
6392
+ const minLevel = options.minLevel ?? 1;
6393
+ const maxLevel = options.maxLevel ?? 6;
6394
+ if (!Number.isInteger(minLevel) || !Number.isInteger(maxLevel) || minLevel < 1 || minLevel > 6 || maxLevel < 1 || maxLevel > 6 || minLevel > maxLevel) {
6395
+ return { error: "minLevel and maxLevel must be integers between 1 and 6, with minLevel <= maxLevel" };
6396
+ }
6397
+ const lines = markdown.replace(/\r\n/g, "\n").split("\n");
6398
+ const entries = [];
6399
+ const seen = /* @__PURE__ */ new Map();
6400
+ let inFence = false;
6401
+ let fenceMarker = "";
6402
+ for (const line of lines) {
6403
+ const fenceMatch = line.match(/^\s*(```+|~~~+)/);
6404
+ if (fenceMatch) {
6405
+ if (!inFence) {
6406
+ inFence = true;
6407
+ fenceMarker = fenceMatch[1][0];
6408
+ } else if (fenceMatch[1][0] === fenceMarker) {
6409
+ inFence = false;
6410
+ }
6411
+ continue;
6412
+ }
6413
+ if (inFence) continue;
6414
+ const headingMatch = line.match(/^(#{1,6})\s+(.+?)\s*#*\s*$/);
6415
+ if (!headingMatch) continue;
6416
+ const level = headingMatch[1].length;
6417
+ const text = stripInlineMarkdown(headingMatch[2]);
6418
+ if (text === "") continue;
6419
+ const slug = slugifyHeading(text, seen);
6420
+ if (level < minLevel || level > maxLevel) continue;
6421
+ entries.push({ level, text, slug });
6422
+ }
6423
+ if (entries.length === 0) {
6424
+ return { error: "No headings found in the given level range" };
6425
+ }
6426
+ const baseLevel = Math.min(...entries.map((e) => e.level));
6427
+ const counters = [0, 0, 0, 0, 0, 0, 0];
6428
+ const tocLines = entries.map((e) => {
6429
+ const indent = " ".repeat(e.level - baseLevel);
6430
+ if (options.ordered) {
6431
+ counters[e.level] = (counters[e.level] ?? 0) + 1;
6432
+ for (let l = e.level + 1; l < counters.length; l++) counters[l] = 0;
6433
+ return `${indent}${counters[e.level]}. [${e.text}](#${e.slug})`;
6434
+ }
6435
+ return `${indent}- [${e.text}](#${e.slug})`;
6436
+ });
6437
+ return { toc: tocLines.join("\n"), entries };
6438
+ }
6072
6439
 
6073
6440
  // src/tools/generators.ts
6074
6441
  var generators_exports = {};
@@ -7492,6 +7859,7 @@ __export(units_exports, {
7492
7859
  calculateLoan: () => calculateLoan,
7493
7860
  calculateMarginMarkup: () => calculateMarginMarkup,
7494
7861
  calculatePercentageChange: () => calculatePercentageChange,
7862
+ calculateRoi: () => calculateRoi,
7495
7863
  calculateRuleOf72: () => calculateRuleOf72,
7496
7864
  calculateSavingsGoal: () => calculateSavingsGoal,
7497
7865
  calculateSimpleInterest: () => calculateSimpleInterest,
@@ -9275,17 +9643,46 @@ function calculateSavingsGoal(input) {
9275
9643
  finalBalance: round4(goalAmount)
9276
9644
  };
9277
9645
  }
9646
+ function calculateRoi(input) {
9647
+ const { initialValue, finalValue, years } = input;
9648
+ if (!Number.isFinite(initialValue) || initialValue <= 0) {
9649
+ return { error: "initialValue must be a finite number greater than zero" };
9650
+ }
9651
+ if (!Number.isFinite(finalValue) || finalValue < 0) {
9652
+ return { error: "finalValue must be a finite, non-negative number" };
9653
+ }
9654
+ const round4 = (n) => Math.round(n * 1e4) / 1e4;
9655
+ const profit = finalValue - initialValue;
9656
+ const roiPercent = profit / initialValue * 100;
9657
+ const result = {
9658
+ initialValue: round4(initialValue),
9659
+ finalValue: round4(finalValue),
9660
+ profit: round4(profit),
9661
+ roiPercent: round4(roiPercent)
9662
+ };
9663
+ if (years !== void 0) {
9664
+ if (!Number.isFinite(years) || years <= 0) {
9665
+ return { error: "years must be a finite number greater than zero when provided" };
9666
+ }
9667
+ const annualizedReturnPercent = (Math.pow(finalValue / initialValue, 1 / years) - 1) * 100;
9668
+ result.years = round4(years);
9669
+ result.annualizedReturnPercent = round4(annualizedReturnPercent);
9670
+ }
9671
+ return result;
9672
+ }
9278
9673
 
9279
9674
  // src/tools/network.ts
9280
9675
  var network_exports = {};
9281
9676
  __export(network_exports, {
9282
9677
  DNS_RECORD_TYPES: () => DNS_RECORD_TYPES,
9283
9678
  HTTP_HEADERS: () => HTTP_HEADERS,
9679
+ REFERRER_POLICY_VALUES: () => REFERRER_POLICY_VALUES,
9284
9680
  STATUS_CODES: () => STATUS_CODES,
9285
9681
  buildCacheControl: () => buildCacheControl,
9286
9682
  buildDnsQueryUrl: () => buildDnsQueryUrl,
9287
9683
  buildGeoUrl: () => buildGeoUrl,
9288
9684
  buildMapUrl: () => buildMapUrl,
9685
+ buildReferrerPolicy: () => buildReferrerPolicy,
9289
9686
  countryCodeToFlag: () => countryCodeToFlag,
9290
9687
  formatCoordinates: () => formatCoordinates,
9291
9688
  formatTtl: () => formatTtl,
@@ -11091,6 +11488,84 @@ function buildCacheControl(options = {}) {
11091
11488
  const snippet = `Cache-Control: ${header}`;
11092
11489
  return { header, headerName: "Cache-Control", snippet, directives, warnings };
11093
11490
  }
11491
+ var REFERRER_POLICY_VALUES = [
11492
+ "no-referrer",
11493
+ "no-referrer-when-downgrade",
11494
+ "origin",
11495
+ "origin-when-cross-origin",
11496
+ "same-origin",
11497
+ "strict-origin",
11498
+ "strict-origin-when-cross-origin",
11499
+ "unsafe-url"
11500
+ ];
11501
+ var _REFERRER_POLICY_INFO = {
11502
+ "no-referrer": {
11503
+ explanation: "Never sends the Referer header, on any request. The strictest option; the destination learns nothing about where the request came from.",
11504
+ leaksPathAndQuery: false,
11505
+ sentOnDowngrade: false
11506
+ },
11507
+ "no-referrer-when-downgrade": {
11508
+ explanation: "Sends the full URL (origin, path, and query string) for same-security-level or upgrading requests, but omits the header entirely when navigating from HTTPS to HTTP. This was the legacy browser default before strict-origin-when-cross-origin.",
11509
+ leaksPathAndQuery: true,
11510
+ sentOnDowngrade: false
11511
+ },
11512
+ origin: {
11513
+ explanation: "Sends only the origin (scheme, host, and port) on every request, same-origin or cross-origin, including on a downgrade. The path and query string are always stripped.",
11514
+ leaksPathAndQuery: false,
11515
+ sentOnDowngrade: true
11516
+ },
11517
+ "origin-when-cross-origin": {
11518
+ explanation: "Sends the full URL for same-origin requests, but only the origin for cross-origin requests. Still sends the origin on a downgrade.",
11519
+ leaksPathAndQuery: true,
11520
+ sentOnDowngrade: true
11521
+ },
11522
+ "same-origin": {
11523
+ explanation: "Sends the full URL for same-origin requests, and no Referer header at all for cross-origin requests.",
11524
+ leaksPathAndQuery: true,
11525
+ sentOnDowngrade: false
11526
+ },
11527
+ "strict-origin": {
11528
+ explanation: "Sends only the origin, and only when the security level stays the same or improves (HTTPS to HTTPS, or HTTP to anything). Nothing is sent on a downgrade from HTTPS to HTTP.",
11529
+ leaksPathAndQuery: false,
11530
+ sentOnDowngrade: false
11531
+ },
11532
+ "strict-origin-when-cross-origin": {
11533
+ explanation: "Sends the full URL for same-origin requests, only the origin for cross-origin requests at the same or better security level, and nothing at all on a downgrade. This is the current browser default when no policy is set.",
11534
+ leaksPathAndQuery: true,
11535
+ sentOnDowngrade: false
11536
+ },
11537
+ "unsafe-url": {
11538
+ explanation: "Always sends the full URL, including path and query string, on every request, even on a downgrade from HTTPS to HTTP. Generally discouraged: query strings can carry session tokens or other sensitive data that then leaks to third-party destinations and to the network on an insecure connection.",
11539
+ leaksPathAndQuery: true,
11540
+ sentOnDowngrade: true
11541
+ }
11542
+ };
11543
+ function buildReferrerPolicy(policies) {
11544
+ const list = Array.isArray(policies) ? policies : [policies];
11545
+ const trimmed = list.map((p) => typeof p === "string" ? p.trim() : "").filter((p) => p !== "");
11546
+ if (trimmed.length === 0) {
11547
+ return { error: "At least one policy value is required" };
11548
+ }
11549
+ const entries = [];
11550
+ for (const value of trimmed) {
11551
+ if (!REFERRER_POLICY_VALUES.includes(value)) {
11552
+ return { error: `'${value}' is not a valid Referrer-Policy value. Valid values: ${REFERRER_POLICY_VALUES.join(", ")}` };
11553
+ }
11554
+ entries.push({ value, ..._REFERRER_POLICY_INFO[value] });
11555
+ }
11556
+ const warnings = [];
11557
+ const last = entries[entries.length - 1];
11558
+ if (last.value === "unsafe-url") {
11559
+ warnings.push("unsafe-url sends the full URL, including query strings, on every request, even over an insecure downgrade. Prefer strict-origin-when-cross-origin unless you have a specific reason to leak full URLs.");
11560
+ }
11561
+ if (entries.length > 1 && entries.some((e, i) => i !== entries.length - 1 && e.value === last.value)) {
11562
+ warnings.push("The same policy value appears more than once in the fallback chain, which has no effect beyond the first occurrence.");
11563
+ }
11564
+ const header = entries.map((e) => e.value).join(", ");
11565
+ const snippet = `Referrer-Policy: ${header}`;
11566
+ const metaTag = `<meta name="referrer" content="${last.value}">`;
11567
+ return { header, headerName: "Referrer-Policy", snippet, metaTag, policies: entries, warnings };
11568
+ }
11094
11569
  function isValidIpv6HexGroup(g) {
11095
11570
  return /^[0-9a-fA-F]{1,4}$/.test(g);
11096
11571
  }
package/dist/index.d.cts CHANGED
@@ -1,12 +1,12 @@
1
1
  export { j as json } from './json-Ta9JykSB.cjs';
2
2
  export { e as encoding } from './encoding-Dk3wpmb3.cjs';
3
3
  export { h as hashing } from './hashing-CnetQFD_.cjs';
4
- export { t as text } from './text-CA-zuD0C.cjs';
5
- export { d as data } from './data-C4lCByXw.cjs';
4
+ export { t as text } from './text-kHkT9VtT.cjs';
5
+ export { d as data } from './data-CFeS9kes.cjs';
6
6
  export { g as generators } from './generators-Du8cBesn.cjs';
7
7
  export { t as time } from './time-KqJjdqII.cjs';
8
- export { u as units } from './units-BhoxdHhs.cjs';
9
- export { n as network } from './network-D7Epuerc.cjs';
8
+ export { u as units } from './units-c90DW-OZ.cjs';
9
+ export { n as network } from './network-DfY5Ikvr.cjs';
10
10
  export { a as api } from './api-DmTNE4c1.cjs';
11
11
  export { c as code } from './code-BK-x8hVx.cjs';
12
12
  export { c as color } from './color-tPwZCr9H.cjs';