@underverse-ui/underverse 1.0.5 → 1.0.7

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.
package/dist/index.js CHANGED
@@ -19445,7 +19445,7 @@ function useSmartLocale() {
19445
19445
  }
19446
19446
 
19447
19447
  // ../../components/ui/UEditor/UEditor.tsx
19448
- import { useEffect as useEffect32, useMemo as useMemo25 } from "react";
19448
+ import { useEffect as useEffect34, useMemo as useMemo26 } from "react";
19449
19449
  import { useTranslations as useTranslations7 } from "next-intl";
19450
19450
  import { useEditor, EditorContent } from "@tiptap/react";
19451
19451
 
@@ -19818,12 +19818,924 @@ var ClipboardImages = Extension2.create({
19818
19818
  }
19819
19819
  });
19820
19820
 
19821
+ // ../../components/ui/UEditor/emoji-suggestion.tsx
19822
+ import { Extension as Extension3 } from "@tiptap/core";
19823
+ import Suggestion2 from "@tiptap/suggestion";
19824
+ import { ReactRenderer as ReactRenderer2 } from "@tiptap/react";
19825
+ import { PluginKey } from "@tiptap/pm/state";
19826
+ import { forwardRef as forwardRef14, useEffect as useEffect29, useImperativeHandle as useImperativeHandle2, useState as useState48 } from "react";
19827
+ import { Smile } from "lucide-react";
19828
+ import tippy2 from "tippy.js";
19829
+
19830
+ // ../../components/ui/UEditor/emojis.ts
19831
+ var EMOJI_LIST = [
19832
+ {
19833
+ id: "smileys_people",
19834
+ name: "Smileys & People",
19835
+ emojis: [
19836
+ { emoji: "\u{1F600}", name: "grinning_face" },
19837
+ { emoji: "\u{1F603}", name: "big_eyes_grin" },
19838
+ { emoji: "\u{1F604}", name: "smiling_eyes_grin" },
19839
+ { emoji: "\u{1F601}", name: "beaming_smile" },
19840
+ { emoji: "\u{1F606}", name: "squinting_laugh" },
19841
+ { emoji: "\u{1F605}", name: "sweat_grin" },
19842
+ { emoji: "\u{1F602}", name: "joy_tears" },
19843
+ { emoji: "\u{1F923}", name: "rofl_laugh" },
19844
+ { emoji: "\u{1F972}", name: "tear_smile" },
19845
+ { emoji: "\u263A\uFE0F", name: "warm_smile" },
19846
+ { emoji: "\u{1F60A}", name: "blush_smile" },
19847
+ { emoji: "\u{1F607}", name: "halo_smile" },
19848
+ { emoji: "\u{1F642}", name: "slight_smile" },
19849
+ { emoji: "\u{1F643}", name: "upside_down" },
19850
+ { emoji: "\u{1F609}", name: "wink_face" },
19851
+ { emoji: "\u{1F60C}", name: "relieved_face" },
19852
+ { emoji: "\u{1F60D}", name: "heart_eyes" },
19853
+ { emoji: "\u{1F970}", name: "hearts_face" },
19854
+ { emoji: "\u{1F618}", name: "blow_kiss" },
19855
+ { emoji: "\u{1F617}", name: "kissing_face" },
19856
+ { emoji: "\u{1F619}", name: "smiling_kiss" },
19857
+ { emoji: "\u{1F61A}", name: "closed_eyes_kiss" },
19858
+ { emoji: "\u{1F60B}", name: "yummy_face" },
19859
+ { emoji: "\u{1F61B}", name: "tongue_out" },
19860
+ { emoji: "\u{1F61D}", name: "squinting_tongue" },
19861
+ { emoji: "\u{1F61C}", name: "wink_tongue" },
19862
+ { emoji: "\u{1F92A}", name: "zany_face" },
19863
+ { emoji: "\u{1F928}", name: "raised_eyebrow" },
19864
+ { emoji: "\u{1F9D0}", name: "monocle_face" },
19865
+ { emoji: "\u{1F913}", name: "nerd_face" },
19866
+ { emoji: "\u{1F60E}", name: "sunglasses_face" },
19867
+ { emoji: "\u{1F978}", name: "disguised_face" },
19868
+ { emoji: "\u{1F929}", name: "star_struck" },
19869
+ { emoji: "\u{1F973}", name: "partying_face" },
19870
+ { emoji: "\u{1F60F}", name: "smirking_face" },
19871
+ { emoji: "\u{1F612}", name: "unamused_face" },
19872
+ { emoji: "\u{1F61E}", name: "disappointed_face" },
19873
+ { emoji: "\u{1F614}", name: "pensive_face" },
19874
+ { emoji: "\u{1F61F}", name: "worried_face" },
19875
+ { emoji: "\u{1F615}", name: "confused_face" },
19876
+ { emoji: "\u{1F641}", name: "slight_frown" },
19877
+ { emoji: "\u2639\uFE0F", name: "frowning_face" },
19878
+ { emoji: "\u{1F623}", name: "persevering_face" },
19879
+ { emoji: "\u{1F616}", name: "confounded_face" },
19880
+ { emoji: "\u{1F62B}", name: "tired_face" },
19881
+ { emoji: "\u{1F629}", name: "weary_face" },
19882
+ { emoji: "\u{1F97A}", name: "pleading_face" },
19883
+ { emoji: "\u{1F622}", name: "crying_face" },
19884
+ { emoji: "\u{1F62D}", name: "loudly_crying" },
19885
+ { emoji: "\u{1F624}", name: "steam_nose" },
19886
+ { emoji: "\u{1F621}", name: "pouting_face" },
19887
+ { emoji: "\u{1F92C}", name: "cursing_face" },
19888
+ { emoji: "\u{1F92F}", name: "exploding_head" },
19889
+ { emoji: "\u{1F633}", name: "flushed_face" },
19890
+ { emoji: "\u{1F975}", name: "hot_face" },
19891
+ { emoji: "\u{1F976}", name: "cold_face" },
19892
+ { emoji: "\u{1F631}", name: "screaming_fear" },
19893
+ { emoji: "\u{1F628}", name: "fearful_face" },
19894
+ { emoji: "\u{1F630}", name: "anxious_sweat" },
19895
+ { emoji: "\u{1F625}", name: "relieved_sad" },
19896
+ { emoji: "\u{1F613}", name: "downcast_sweat" },
19897
+ { emoji: "\u{1F917}", name: "hugging_face" },
19898
+ { emoji: "\u{1F914}", name: "thinking_face" },
19899
+ { emoji: "\u{1F92D}", name: "hand_over_mouth" },
19900
+ { emoji: "\u{1F92B}", name: "shushing_face" },
19901
+ { emoji: "\u{1F925}", name: "lying_face" },
19902
+ { emoji: "\u{1F636}", name: "no_mouth" },
19903
+ { emoji: "\u{1F610}", name: "neutral_face" },
19904
+ { emoji: "\u{1F611}", name: "expressionless_face" },
19905
+ { emoji: "\u{1F62C}", name: "grimacing_face" },
19906
+ { emoji: "\u{1F644}", name: "rolling_eyes" },
19907
+ { emoji: "\u{1F62F}", name: "hushed_face" },
19908
+ { emoji: "\u{1F626}", name: "frowning_open" },
19909
+ { emoji: "\u{1F627}", name: "anguished_face" },
19910
+ { emoji: "\u{1F62E}", name: "open_mouth" },
19911
+ { emoji: "\u{1F632}", name: "astonished_face" },
19912
+ { emoji: "\u{1F971}", name: "yawning_face" },
19913
+ { emoji: "\u{1F634}", name: "sleeping_face" },
19914
+ { emoji: "\u{1F924}", name: "drooling_face" },
19915
+ { emoji: "\u{1F62A}", name: "sleepy_face" },
19916
+ { emoji: "\u{1F635}", name: "dizzy_face" },
19917
+ { emoji: "\u{1F910}", name: "zipper_mouth" },
19918
+ { emoji: "\u{1F974}", name: "woozy_face" },
19919
+ { emoji: "\u{1F922}", name: "nauseated_face" },
19920
+ { emoji: "\u{1F92E}", name: "face_vomiting" },
19921
+ { emoji: "\u{1F927}", name: "sneezing_face" },
19922
+ { emoji: "\u{1F637}", name: "medical_mask" },
19923
+ { emoji: "\u{1F912}", name: "thermometer_face" },
19924
+ { emoji: "\u{1F915}", name: "bandage_head" },
19925
+ { emoji: "\u{1F911}", name: "money_mouth" },
19926
+ { emoji: "\u{1F920}", name: "cowboy_hat" },
19927
+ { emoji: "\u{1F608}", name: "devil_smile" },
19928
+ { emoji: "\u{1F47F}", name: "devil_angry" },
19929
+ { emoji: "\u{1F479}", name: "ogre_mask" },
19930
+ { emoji: "\u{1F47A}", name: "goblin_mask" },
19931
+ { emoji: "\u{1F921}", name: "clown_face" },
19932
+ { emoji: "\u{1F4A9}", name: "poop_pile" },
19933
+ { emoji: "\u{1F47B}", name: "ghost_spooky" },
19934
+ { emoji: "\u{1F480}", name: "skull_head" },
19935
+ { emoji: "\u2620\uFE0F", name: "skull_crossbones" },
19936
+ { emoji: "\u{1F47D}", name: "alien_face" },
19937
+ { emoji: "\u{1F47E}", name: "alien_monster" },
19938
+ { emoji: "\u{1F916}", name: "robot_face" },
19939
+ { emoji: "\u{1F383}", name: "pumpkin_jack" },
19940
+ { emoji: "\u{1F63A}", name: "cat_grin" },
19941
+ { emoji: "\u{1F638}", name: "cat_smile" },
19942
+ { emoji: "\u{1F639}", name: "cat_joy" },
19943
+ { emoji: "\u{1F63B}", name: "cat_heart_eyes" },
19944
+ { emoji: "\u{1F63C}", name: "cat_smirk" },
19945
+ { emoji: "\u{1F63D}", name: "cat_kiss" },
19946
+ { emoji: "\u{1F640}", name: "cat_weary" },
19947
+ { emoji: "\u{1F63F}", name: "cat_crying" },
19948
+ { emoji: "\u{1F63E}", name: "cat_pouting" },
19949
+ { emoji: "\u{1F44B}", name: "waving_hand" },
19950
+ { emoji: "\u{1F91A}", name: "raised_back_hand" },
19951
+ { emoji: "\u{1F590}\uFE0F", name: "splayed_fingers" },
19952
+ { emoji: "\u270B", name: "raised_hand" },
19953
+ { emoji: "\u{1F596}", name: "vulcan_salute" },
19954
+ { emoji: "\u{1F44C}", name: "ok_hand" },
19955
+ { emoji: "\u{1F90C}", name: "pinched_fingers" },
19956
+ { emoji: "\u{1F90F}", name: "pinching_hand" },
19957
+ { emoji: "\u270C\uFE0F", name: "victory_hand" },
19958
+ { emoji: "\u{1F91E}", name: "crossed_fingers" },
19959
+ { emoji: "\u{1F91F}", name: "love_you" },
19960
+ { emoji: "\u{1F918}", name: "rock_on" },
19961
+ { emoji: "\u{1F919}", name: "call_me" },
19962
+ { emoji: "\u{1F448}", name: "point_left" },
19963
+ { emoji: "\u{1F449}", name: "point_right" },
19964
+ { emoji: "\u{1F446}", name: "point_up" },
19965
+ { emoji: "\u{1F595}", name: "middle_finger" },
19966
+ { emoji: "\u{1F447}", name: "point_down" },
19967
+ { emoji: "\u261D\uFE0F", name: "index_up" },
19968
+ { emoji: "\u{1F44D}", name: "thumbs_up" },
19969
+ { emoji: "\u{1F44E}", name: "thumbs_down" },
19970
+ { emoji: "\u270A", name: "raised_fist" },
19971
+ { emoji: "\u{1F44A}", name: "oncoming_fist" },
19972
+ { emoji: "\u{1F91B}", name: "left_fist" },
19973
+ { emoji: "\u{1F91C}", name: "right_fist" },
19974
+ { emoji: "\u{1F44F}", name: "clapping_hands" },
19975
+ { emoji: "\u{1F64C}", name: "raising_hands" },
19976
+ { emoji: "\u{1F450}", name: "open_hands" },
19977
+ { emoji: "\u{1F932}", name: "palms_up" },
19978
+ { emoji: "\u{1F91D}", name: "handshake" },
19979
+ { emoji: "\u{1F64F}", name: "folded_hands" },
19980
+ { emoji: "\u270D\uFE0F", name: "writing_hand" },
19981
+ { emoji: "\u{1F485}", name: "nail_polish" },
19982
+ { emoji: "\u{1F933}", name: "selfie_hand" },
19983
+ { emoji: "\u{1F4AA}", name: "flex_biceps" },
19984
+ { emoji: "\u{1F9BE}", name: "robot_arm" },
19985
+ { emoji: "\u{1F9BF}", name: "robot_leg" },
19986
+ { emoji: "\u{1F9B5}", name: "leg_foot" },
19987
+ { emoji: "\u{1F9B6}", name: "foot_leg" },
19988
+ { emoji: "\u{1F442}", name: "ear_listen" },
19989
+ { emoji: "\u{1F9BB}", name: "ear_hearing_aid" },
19990
+ { emoji: "\u{1F443}", name: "nose_smell" },
19991
+ { emoji: "\u{1F9E0}", name: "brain_mind" },
19992
+ { emoji: "\u{1FAC0}", name: "anatomical_heart" },
19993
+ { emoji: "\u{1FAC1}", name: "lungs_organ" },
19994
+ { emoji: "\u{1F9B7}", name: "tooth_dentist" },
19995
+ { emoji: "\u{1F9B4}", name: "bone_skeleton" },
19996
+ { emoji: "\u{1F440}", name: "eyes_look" },
19997
+ { emoji: "\u{1F441}\uFE0F", name: "eye_look" },
19998
+ { emoji: "\u{1F445}", name: "tongue_lick" },
19999
+ { emoji: "\u{1F444}", name: "mouth_lips" },
20000
+ { emoji: "\u{1F48B}", name: "kiss_mark" },
20001
+ { emoji: "\u{1FA78}", name: "blood_drop" },
20002
+ { emoji: "\u{1F476}", name: "baby_face" },
20003
+ { emoji: "\u{1F9D2}", name: "child_face" },
20004
+ { emoji: "\u{1F466}", name: "boy_face" },
20005
+ { emoji: "\u{1F467}", name: "girl_face" },
20006
+ { emoji: "\u{1F9D1}", name: "person_face" },
20007
+ { emoji: "\u{1F471}", name: "blond_person" },
20008
+ { emoji: "\u{1F468}", name: "man_face" },
20009
+ { emoji: "\u{1F9D4}", name: "beard_person" },
20010
+ { emoji: "\u{1F469}", name: "woman_face" },
20011
+ { emoji: "\u{1F9D3}", name: "older_person" },
20012
+ { emoji: "\u{1F474}", name: "old_man" },
20013
+ { emoji: "\u{1F475}", name: "old_woman" },
20014
+ { emoji: "\u{1F472}", name: "skullcap_person" },
20015
+ { emoji: "\u{1F473}", name: "turban_person" },
20016
+ { emoji: "\u{1F9D5}", name: "headscarf_woman" },
20017
+ { emoji: "\u{1F46E}", name: "police_officer" },
20018
+ { emoji: "\u{1F477}", name: "construction_worker" },
20019
+ { emoji: "\u{1F482}", name: "guard_person" },
20020
+ { emoji: "\u{1F575}\uFE0F", name: "detective_spy" },
20021
+ { emoji: "\u{1F469}\u200D\u2695\uFE0F", name: "woman_doctor" },
20022
+ { emoji: "\u{1F468}\u200D\u2695\uFE0F", name: "man_doctor" },
20023
+ { emoji: "\u{1F469}\u200D\u{1F33E}", name: "woman_farmer" },
20024
+ { emoji: "\u{1F468}\u200D\u{1F33E}", name: "man_farmer" },
20025
+ { emoji: "\u{1F469}\u200D\u{1F373}", name: "woman_cook" },
20026
+ { emoji: "\u{1F468}\u200D\u{1F373}", name: "man_cook" },
20027
+ { emoji: "\u{1F469}\u200D\u{1F393}", name: "woman_student" },
20028
+ { emoji: "\u{1F468}\u200D\u{1F393}", name: "man_student" },
20029
+ { emoji: "\u{1F469}\u200D\u{1F3A4}", name: "woman_singer" },
20030
+ { emoji: "\u{1F468}\u200D\u{1F3A4}", name: "man_singer" },
20031
+ { emoji: "\u{1F469}\u200D\u{1F3EB}", name: "woman_teacher" },
20032
+ { emoji: "\u{1F468}\u200D\u{1F3EB}", name: "man_teacher" },
20033
+ { emoji: "\u{1F469}\u200D", name: "woman_factory" },
20034
+ { emoji: "\u{1F468}\u200D", name: "man_factory" },
20035
+ { emoji: "\u{1F469}\u200D\u{1F4BB}", name: "woman_tech" },
20036
+ { emoji: "\u{1F468}\u200D\u{1F4BB}", name: "man_tech" },
20037
+ { emoji: "\u{1F469}\u200D\u{1F4BC}", name: "woman_office" },
20038
+ { emoji: "\u{1F468}\u200D\u{1F4BC}", name: "man_office" },
20039
+ { emoji: "\u{1F469}\u200D\u{1F527}", name: "woman_mechanic" },
20040
+ { emoji: "\u{1F468}\u200D\u{1F527}", name: "man_mechanic" },
20041
+ { emoji: "\u{1F469}\u200D\u{1F52C}", name: "woman_scientist" },
20042
+ { emoji: "\u{1F468}\u200D\u{1F52C}", name: "man_scientist" },
20043
+ { emoji: "\u{1F469}\u200D\u{1F3A8}", name: "woman_artist" },
20044
+ { emoji: "\u{1F468}\u200D\u{1F3A8}", name: "man_artist" },
20045
+ { emoji: "\u{1F469}\u200D\u{1F692}", name: "woman_firefighter" },
20046
+ { emoji: "\u{1F468}\u200D\u{1F692}", name: "man_firefighter" },
20047
+ { emoji: "\u{1F469}\u200D\u2708\uFE0F", name: "woman_pilot" },
20048
+ { emoji: "\u{1F468}\u200D\u2708\uFE0F", name: "man_pilot" },
20049
+ { emoji: "\u{1F469}\u200D\u{1F680}", name: "woman_astronaut" },
20050
+ { emoji: "\u{1F468}\u200D\u{1F680}", name: "man_astronaut" },
20051
+ { emoji: "\u{1F469}\u200D\u2696\uFE0F", name: "woman_judge" },
20052
+ { emoji: "\u{1F468}\u200D\u2696\uFE0F", name: "man_judge" },
20053
+ { emoji: "\u{1F470}", name: "bride_wedding" },
20054
+ { emoji: "\u{1F935}", name: "groom_tuxedo" },
20055
+ { emoji: "\u{1F478}", name: "princess_crown" },
20056
+ { emoji: "\u{1F934}", name: "prince_crown" },
20057
+ { emoji: "\u{1F9B8}", name: "superhero_person" },
20058
+ { emoji: "\u{1F9B9}", name: "supervillain_person" },
20059
+ { emoji: "\u{1F936}", name: "mrs_claus" },
20060
+ { emoji: "\u{1F385}", name: "santa_claus" },
20061
+ { emoji: "\u{1F9D9}", name: "mage_wizard" },
20062
+ { emoji: "\u{1F9DD}", name: "elf_fantasy" },
20063
+ { emoji: "\u{1F9DB}", name: "vampire_dracula" },
20064
+ { emoji: "\u{1F9DF}", name: "zombie_undead" },
20065
+ { emoji: "\u{1F9DE}", name: "genie_magic" },
20066
+ { emoji: "\u{1F9DC}", name: "mermaid_person" },
20067
+ { emoji: "\u{1F9DA}", name: "fairy_magic" },
20068
+ { emoji: "\u{1F47C}", name: "angel_baby" },
20069
+ { emoji: "\u{1F930}", name: "pregnant_woman" },
20070
+ { emoji: "\u{1F931}", name: "breast_feeding" },
20071
+ { emoji: "\u{1F647}", name: "bowing_person" },
20072
+ { emoji: "\u{1F481}", name: "tipping_hand" },
20073
+ { emoji: "\u{1F645}", name: "gesturing_no" },
20074
+ { emoji: "\u{1F646}", name: "gesturing_ok" },
20075
+ { emoji: "\u{1F64B}", name: "raising_hand" },
20076
+ { emoji: "\u{1F9CF}", name: "deaf_person" },
20077
+ { emoji: "\u{1F926}", name: "face_palm" },
20078
+ { emoji: "\u{1F937}", name: "shrugging_person" },
20079
+ { emoji: "\u{1F64E}", name: "pouting_person" },
20080
+ { emoji: "\u{1F64D}", name: "frowning_person" },
20081
+ { emoji: "\u{1F487}", name: "haircut_person" },
20082
+ { emoji: "\u{1F486}", name: "massage_person" },
20083
+ { emoji: "\u{1F9D6}", name: "sauna_person" },
20084
+ { emoji: "\u{1F483}", name: "woman_dancing" },
20085
+ { emoji: "\u{1F57A}", name: "man_dancing" },
20086
+ { emoji: "\u{1F46F}", name: "bunny_friends" },
20087
+ { emoji: "\u{1F574}\uFE0F", name: "levitating_suit" },
20088
+ { emoji: "\u{1F6B6}", name: "walking_person" },
20089
+ { emoji: "\u{1F3C3}", name: "running_person" },
20090
+ { emoji: "\u{1F9CD}", name: "standing_person" },
20091
+ { emoji: "\u{1F9CE}", name: "kneeling_person" },
20092
+ { emoji: "\u{1F468}\u200D\u{1F9AF}", name: "blind_cane" },
20093
+ { emoji: "\u{1F468}\u200D\u{1F9BC}", name: "motor_wheelchair" },
20094
+ { emoji: "\u{1F468}\u200D\u{1F9BD}", name: "manual_wheelchair" },
20095
+ { emoji: "\u{1F9D7}", name: "climbing_person" },
20096
+ { emoji: "\u{1F93A}", name: "fencing_person" },
20097
+ { emoji: "\u{1F3C7}", name: "horse_racing" },
20098
+ { emoji: "\u26F7\uFE0F", name: "skier_snow" },
20099
+ { emoji: "\u{1F3C2}", name: "snowboarder_snow" },
20100
+ { emoji: "\u{1F3CC}\uFE0F", name: "golfing_person" },
20101
+ { emoji: "\u{1F3C4}", name: "surfing_person" },
20102
+ { emoji: "\u{1F6A3}", name: "rowing_person" },
20103
+ { emoji: "\u{1F3CA}", name: "swimming_person" },
20104
+ { emoji: "\u26F9\uFE0F", name: "basketball_person" },
20105
+ { emoji: "\u{1F3CB}\uFE0F", name: "lifting_weights" },
20106
+ { emoji: "\u{1F6B4}", name: "biking_person" },
20107
+ { emoji: "\u{1F6B5}", name: "mountain_biking" },
20108
+ { emoji: "\u{1F938}", name: "cartwheel_person" },
20109
+ { emoji: "\u{1F93C}", name: "wrestling_people" },
20110
+ { emoji: "\u{1F93D}", name: "water_polo" },
20111
+ { emoji: "\u{1F93E}", name: "handball_person" },
20112
+ { emoji: "\u{1F939}", name: "juggling_person" },
20113
+ { emoji: "\u{1F9D8}", name: "yoga_lotus" },
20114
+ { emoji: "\u{1F6C0}", name: "bath_person" },
20115
+ { emoji: "\u{1F6CC}", name: "bed_person" }
20116
+ ]
20117
+ },
20118
+ {
20119
+ id: "animals_nature",
20120
+ name: "Animals & Nature",
20121
+ emojis: [
20122
+ { emoji: "\u{1F435}", name: "monkey_face" },
20123
+ { emoji: "\u{1F436}", name: "dog_face" },
20124
+ { emoji: "\u{1F43A}", name: "wolf_face" },
20125
+ { emoji: "\u{1F431}", name: "cat_face" },
20126
+ { emoji: "\u{1F981}", name: "lion_face" },
20127
+ { emoji: "\u{1F42F}", name: "tiger_face" },
20128
+ { emoji: "\u{1F434}", name: "horse_face" },
20129
+ { emoji: "\u{1F984}", name: "unicorn_face" },
20130
+ { emoji: "\u{1F42E}", name: "cow_face" },
20131
+ { emoji: "\u{1F437}", name: "pig_face" },
20132
+ { emoji: "\u{1F42D}", name: "mouse_face" },
20133
+ { emoji: "\u{1F430}", name: "rabbit_face" },
20134
+ { emoji: "\u{1F43B}", name: "bear_face" },
20135
+ { emoji: "\u{1F428}", name: "koala_bear" },
20136
+ { emoji: "\u{1F43C}", name: "panda_face" },
20137
+ { emoji: "\u{1F414}", name: "chicken_bird" },
20138
+ { emoji: "\u{1F427}", name: "penguin_bird" },
20139
+ { emoji: "\u{1F426}", name: "bird_fly" },
20140
+ { emoji: "\u{1F986}", name: "duck_bird" },
20141
+ { emoji: "\u{1F985}", name: "eagle_bird" },
20142
+ { emoji: "\u{1F989}", name: "owl_bird" },
20143
+ { emoji: "\u{1F438}", name: "frog_face" },
20144
+ { emoji: "\u{1F422}", name: "turtle_slow" },
20145
+ { emoji: "\u{1F40D}", name: "snake_hiss" },
20146
+ { emoji: "\u{1F433}", name: "whale_sprout" },
20147
+ { emoji: "\u{1F42C}", name: "dolphin_jump" },
20148
+ { emoji: "\u{1F41F}", name: "fish_swim" },
20149
+ { emoji: "\u{1F419}", name: "octopus_legs" },
20150
+ { emoji: "\u{1F98B}", name: "butterfly_fly" },
20151
+ { emoji: "\u{1F490}", name: "flower_bouquet" },
20152
+ { emoji: "\u{1F338}", name: "cherry_blossom" },
20153
+ { emoji: "\u{1F339}", name: "rose_flower" },
20154
+ { emoji: "\u{1F33B}", name: "sunflower_yellow" },
20155
+ { emoji: "\u{1F332}", name: "evergreen_tree" },
20156
+ { emoji: "\u{1F333}", name: "deciduous_tree" },
20157
+ { emoji: "\u{1F334}", name: "palm_tree" },
20158
+ { emoji: "\u{1F335}", name: "cactus_plant" },
20159
+ { emoji: "\u{1F525}", name: "fire_flame" },
20160
+ { emoji: "\u{1F4A7}", name: "water_drop" },
20161
+ { emoji: "\u2B50", name: "star_shine" }
20162
+ ]
20163
+ },
20164
+ {
20165
+ id: "food_drink",
20166
+ name: "Food & Drink",
20167
+ emojis: [
20168
+ { emoji: "\u{1F347}", name: "grapes_fruit" },
20169
+ { emoji: "\u{1F348}", name: "melon_fruit" },
20170
+ { emoji: "\u{1F349}", name: "watermelon_slice" },
20171
+ { emoji: "\u{1F34A}", name: "tangerine_orange" },
20172
+ { emoji: "\u{1F34B}", name: "lemon_sour" },
20173
+ { emoji: "\u{1F34C}", name: "banana_fruit" },
20174
+ { emoji: "\u{1F34D}", name: "pineapple_fruit" },
20175
+ { emoji: "\u{1F34E}", name: "red_apple" },
20176
+ { emoji: "\u{1F34F}", name: "green_apple" },
20177
+ { emoji: "\u{1F350}", name: "pear_fruit" },
20178
+ { emoji: "\u{1F351}", name: "peach_fruit" },
20179
+ { emoji: "\u{1F352}", name: "cherries_red" },
20180
+ { emoji: "\u{1F353}", name: "strawberry_red" },
20181
+ { emoji: "\u{1F95D}", name: "kiwi_fruit" },
20182
+ { emoji: "\u{1F345}", name: "tomato_red" },
20183
+ { emoji: "\u{1F951}", name: "avocado_green" },
20184
+ { emoji: "\u{1F346}", name: "eggplant_purple" },
20185
+ { emoji: "\u{1F954}", name: "potato_spud" },
20186
+ { emoji: "\u{1F955}", name: "carrot_veg" },
20187
+ { emoji: "\u{1F33D}", name: "corn_cob" },
20188
+ { emoji: "\u{1F35E}", name: "bread_loaf" },
20189
+ { emoji: "\u{1F9C0}", name: "cheese_wedge" },
20190
+ { emoji: "\u{1F356}", name: "meat_bone" },
20191
+ { emoji: "\u{1F357}", name: "poultry_leg" },
20192
+ { emoji: "\u{1F969}", name: "meat_cut" },
20193
+ { emoji: "\u{1F953}", name: "bacon_strips" },
20194
+ { emoji: "\u{1F354}", name: "hamburger_fast" },
20195
+ { emoji: "\u{1F35F}", name: "french_fries" },
20196
+ { emoji: "\u{1F355}", name: "pizza_slice" },
20197
+ { emoji: "\u{1F32D}", name: "hot_dog" },
20198
+ { emoji: "\u{1F96A}", name: "sandwich_lunch" },
20199
+ { emoji: "\u{1F32E}", name: "taco_mexican" },
20200
+ { emoji: "\u{1F32F}", name: "burrito_wrap" },
20201
+ { emoji: "\u{1F95A}", name: "egg_white" },
20202
+ { emoji: "\u{1F373}", name: "cooking_egg" },
20203
+ { emoji: "\u{1F37F}", name: "popcorn_box" },
20204
+ { emoji: "\u{1F35A}", name: "rice_bowl" },
20205
+ { emoji: "\u{1F35D}", name: "spaghetti_pasta" },
20206
+ { emoji: "\u{1F363}", name: "sushi_roll" },
20207
+ { emoji: "\u{1F364}", name: "fried_shrimp" },
20208
+ { emoji: "\u{1F366}", name: "ice_cream" },
20209
+ { emoji: "\u{1F369}", name: "doughnut_sweet" },
20210
+ { emoji: "\u{1F36A}", name: "cookie_sweet" },
20211
+ { emoji: "\u{1F382}", name: "birthday_cake" },
20212
+ { emoji: "\u{1F370}", name: "shortcake_slice" },
20213
+ { emoji: "\u{1F36B}", name: "chocolate_bar" },
20214
+ { emoji: "\u{1F36C}", name: "candy_sweet" },
20215
+ { emoji: "\u{1F36D}", name: "lollipop_candy" },
20216
+ { emoji: "\u2615", name: "coffee_hot" },
20217
+ { emoji: "\u{1F37A}", name: "beer_mug" },
20218
+ { emoji: "\u{1F37B}", name: "beer_cheers" },
20219
+ { emoji: "\u{1F942}", name: "champagne_cheers" },
20220
+ { emoji: "\u{1F377}", name: "wine_glass" },
20221
+ { emoji: "\u{1F943}", name: "whiskey_glass" },
20222
+ { emoji: "\u{1F379}", name: "tropical_drink" }
20223
+ ]
20224
+ },
20225
+ {
20226
+ id: "activity",
20227
+ name: "Activity",
20228
+ emojis: [
20229
+ { emoji: "\u26BD", name: "soccer_ball" },
20230
+ { emoji: "\u{1F3C0}", name: "basketball_hoop" },
20231
+ { emoji: "\u{1F3C8}", name: "football_american" },
20232
+ { emoji: "\u26BE", name: "baseball_game" },
20233
+ { emoji: "\u{1F3BE}", name: "tennis_ball" },
20234
+ { emoji: "\u{1F3D0}", name: "volleyball_game" },
20235
+ { emoji: "\u{1F3B1}", name: "pool_8ball" },
20236
+ { emoji: "\u{1F3D3}", name: "ping_pong" },
20237
+ { emoji: "\u{1F3F8}", name: "badminton_game" },
20238
+ { emoji: "\u{1F94A}", name: "boxing_glove" },
20239
+ { emoji: "\u{1F945}", name: "goal_net" },
20240
+ { emoji: "\u{1F3A3}", name: "fishing_pole" },
20241
+ { emoji: "\u{1F3AE}", name: "video_game" },
20242
+ { emoji: "\u{1F3B2}", name: "game_die" },
20243
+ { emoji: "\u{1F3AD}", name: "theater_masks" },
20244
+ { emoji: "\u{1F3A8}", name: "artist_palette" },
20245
+ { emoji: "\u{1F3AC}", name: "clapper_board" },
20246
+ { emoji: "\u{1F3A4}", name: "microphone_sing" },
20247
+ { emoji: "\u{1F3A7}", name: "headphone_music" },
20248
+ { emoji: "\u{1F3B7}", name: "saxophone_jazz" },
20249
+ { emoji: "\u{1F3B8}", name: "guitar_rock" },
20250
+ { emoji: "\u{1F3B9}", name: "piano_keys" },
20251
+ { emoji: "\u{1F3BA}", name: "trumpet_horn" },
20252
+ { emoji: "\u{1F3BB}", name: "violin_music" },
20253
+ { emoji: "\u{1F941}", name: "drum_beat" }
20254
+ ]
20255
+ },
20256
+ {
20257
+ id: "objects",
20258
+ name: "Objects",
20259
+ emojis: [
20260
+ { emoji: "\u{1F4F1}", name: "mobile_phone" },
20261
+ { emoji: "\u{1F4BB}", name: "laptop_computer" },
20262
+ { emoji: "\u{1F5A5}\uFE0F", name: "desktop_computer" },
20263
+ { emoji: "\u231A", name: "watch_wrist" },
20264
+ { emoji: "\u{1F4F7}", name: "camera_photo" },
20265
+ { emoji: "\u{1F4A1}", name: "light_bulb" },
20266
+ { emoji: "\u{1F4DA}", name: "books_pile" },
20267
+ { emoji: "\u{1F4B0}", name: "money_bag" },
20268
+ { emoji: "\u{1F381}", name: "gift_box" },
20269
+ { emoji: "\u{1F388}", name: "balloon_red" },
20270
+ { emoji: "\u{1F389}", name: "party_popper" },
20271
+ { emoji: "\u{1F38A}", name: "confetti_ball" },
20272
+ { emoji: "\u2709\uFE0F", name: "envelope_mail" },
20273
+ { emoji: "\u{1F4E6}", name: "package_box" },
20274
+ { emoji: "\u270F\uFE0F", name: "pencil_write" },
20275
+ { emoji: "\u{1F512}", name: "lock_closed" },
20276
+ { emoji: "\u{1F511}", name: "key_gold" },
20277
+ { emoji: "\u{1F528}", name: "hammer_tool" },
20278
+ { emoji: "\u{1F4A3}", name: "bomb_explode" },
20279
+ { emoji: "\u{1F52B}", name: "pistol_toy" },
20280
+ { emoji: "\u{1F48A}", name: "pill_capsule" },
20281
+ { emoji: "\u{1F6D2}", name: "shopping_cart" }
20282
+ ]
20283
+ },
20284
+ {
20285
+ id: "symbols",
20286
+ name: "Symbols",
20287
+ emojis: [
20288
+ { emoji: "\u2764\uFE0F", name: "red_heart" },
20289
+ { emoji: "\u{1F9E1}", name: "orange_heart" },
20290
+ { emoji: "\u{1F49B}", name: "yellow_heart" },
20291
+ { emoji: "\u{1F49A}", name: "green_heart" },
20292
+ { emoji: "\u{1F499}", name: "blue_heart" },
20293
+ { emoji: "\u{1F49C}", name: "purple_heart" },
20294
+ { emoji: "\u{1F5A4}", name: "black_heart" },
20295
+ { emoji: "\u{1F90D}", name: "white_heart" },
20296
+ { emoji: "\u{1F90E}", name: "brown_heart" },
20297
+ { emoji: "\u{1F494}", name: "broken_heart" },
20298
+ { emoji: "\u2763\uFE0F", name: "heart_exclamation" },
20299
+ { emoji: "\u{1F495}", name: "two_hearts" },
20300
+ { emoji: "\u{1F49E}", name: "revolving_hearts" },
20301
+ { emoji: "\u{1F493}", name: "beating_heart" },
20302
+ { emoji: "\u{1F497}", name: "growing_heart" },
20303
+ { emoji: "\u{1F496}", name: "sparkling_heart" },
20304
+ { emoji: "\u{1F498}", name: "cupid_heart" },
20305
+ { emoji: "\u{1F49D}", name: "gift_heart" },
20306
+ { emoji: "\u{1F4AF}", name: "hundred_points" },
20307
+ { emoji: "\u{1F4A2}", name: "anger_symbol" },
20308
+ { emoji: "\u{1F4A5}", name: "collision_boom" },
20309
+ { emoji: "\u{1F4AB}", name: "dizzy_star" },
20310
+ { emoji: "\u{1F4A6}", name: "sweat_drops" },
20311
+ { emoji: "\u{1F4A8}", name: "dash_away" },
20312
+ { emoji: "\u{1F4A4}", name: "sleeping_zzz" },
20313
+ { emoji: "\u2705", name: "check_mark" },
20314
+ { emoji: "\u274C", name: "cross_mark" },
20315
+ { emoji: "\u26A0\uFE0F", name: "warning_sign" },
20316
+ { emoji: "\u26D4", name: "no_entry" },
20317
+ { emoji: "\u{1F6AB}", name: "prohibited_sign" },
20318
+ { emoji: "\u2B06\uFE0F", name: "arrow_up" },
20319
+ { emoji: "\u2B07\uFE0F", name: "arrow_down" },
20320
+ { emoji: "\u2B05\uFE0F", name: "arrow_left" },
20321
+ { emoji: "\u27A1\uFE0F", name: "arrow_right" },
20322
+ { emoji: "\u267B\uFE0F", name: "recycling_symbol" }
20323
+ ]
20324
+ },
20325
+ {
20326
+ id: "flags",
20327
+ name: "Flags",
20328
+ emojis: [
20329
+ { emoji: "\u{1F3C1}", name: "checkered_flag" },
20330
+ { emoji: "\u{1F3F3}\uFE0F", name: "white_flag" },
20331
+ { emoji: "\u{1F3F3}\uFE0F\u200D\u{1F308}", name: "rainbow_flag" },
20332
+ { emoji: "\u{1F3F3}\uFE0F\u200D\u26A7\uFE0F", name: "transgender_flag" },
20333
+ { emoji: "\u{1F3F4}\u200D\u2620\uFE0F", name: "pirate_flag" },
20334
+ { emoji: "\u{1F1E6}\u{1F1E8}", name: "flag_ascension" },
20335
+ { emoji: "\u{1F1E6}\u{1F1E9}", name: "flag_andorra" },
20336
+ { emoji: "\u{1F1E6}\u{1F1EA}", name: "flag_uae" },
20337
+ { emoji: "\u{1F1E6}\u{1F1EB}", name: "flag_afghanistan" },
20338
+ { emoji: "\u{1F1E6}\u{1F1EC}", name: "flag_antigua" },
20339
+ { emoji: "\u{1F1E6}\u{1F1EE}", name: "flag_anguilla" },
20340
+ { emoji: "\u{1F1E6}\u{1F1F1}", name: "flag_albania" },
20341
+ { emoji: "\u{1F1E6}\u{1F1F2}", name: "flag_armenia" },
20342
+ { emoji: "\u{1F1E6}\u{1F1F4}", name: "flag_angola" },
20343
+ { emoji: "\u{1F1E6}\u{1F1F6}", name: "flag_antarctica" },
20344
+ { emoji: "\u{1F1E6}\u{1F1F7}", name: "flag_argentina" },
20345
+ { emoji: "\u{1F1E6}\u{1F1F8}", name: "flag_american_samoa" },
20346
+ { emoji: "\u{1F1E6}\u{1F1F9}", name: "flag_austria" },
20347
+ { emoji: "\u{1F1E6}\u{1F1FA}", name: "flag_australia" },
20348
+ { emoji: "\u{1F1E6}\u{1F1FC}", name: "flag_aruba" },
20349
+ { emoji: "\u{1F1E6}\u{1F1FD}", name: "flag_aland" },
20350
+ { emoji: "\u{1F1E6}\u{1F1FF}", name: "flag_azerbaijan" },
20351
+ { emoji: "\u{1F1E7}\u{1F1E6}", name: "flag_bosnia" },
20352
+ { emoji: "\u{1F1E7}\u{1F1E7}", name: "flag_barbados" },
20353
+ { emoji: "\u{1F1E7}\u{1F1E9}", name: "flag_bangladesh" },
20354
+ { emoji: "\u{1F1E7}\u{1F1EA}", name: "flag_belgium" },
20355
+ { emoji: "\u{1F1E7}\u{1F1EB}", name: "flag_burkina" },
20356
+ { emoji: "\u{1F1E7}\u{1F1EC}", name: "flag_bulgaria" },
20357
+ { emoji: "\u{1F1E7}\u{1F1ED}", name: "flag_bahrain" },
20358
+ { emoji: "\u{1F1E7}\u{1F1EE}", name: "flag_burundi" },
20359
+ { emoji: "\u{1F1E7}\u{1F1EF}", name: "flag_benin" },
20360
+ { emoji: "\u{1F1E7}\u{1F1F1}", name: "flag_st_barthelemy" },
20361
+ { emoji: "\u{1F1E7}\u{1F1F2}", name: "flag_bermuda" },
20362
+ { emoji: "\u{1F1E7}\u{1F1F3}", name: "flag_brunei" },
20363
+ { emoji: "\u{1F1E7}\u{1F1F4}", name: "flag_bolivia" },
20364
+ { emoji: "\u{1F1E7}\u{1F1F6}", name: "flag_bonaire" },
20365
+ { emoji: "\u{1F1E7}\u{1F1F7}", name: "flag_brazil" },
20366
+ { emoji: "\u{1F1E7}\u{1F1F8}", name: "flag_bahamas" },
20367
+ { emoji: "\u{1F1E7}\u{1F1F9}", name: "flag_bhutan" },
20368
+ { emoji: "\u{1F1E7}\u{1F1FB}", name: "flag_bouvet" },
20369
+ { emoji: "\u{1F1E7}\u{1F1FC}", name: "flag_botswana" },
20370
+ { emoji: "\u{1F1E7}\u{1F1FE}", name: "flag_belarus" },
20371
+ { emoji: "\u{1F1E7}\u{1F1FF}", name: "flag_belize" },
20372
+ { emoji: "\u{1F1E8}\u{1F1E6}", name: "flag_canada" },
20373
+ { emoji: "\u{1F1E8}\u{1F1E8}", name: "flag_cocos" },
20374
+ { emoji: "\u{1F1E8}\u{1F1E9}", name: "flag_congo_dr" },
20375
+ { emoji: "\u{1F1E8}\u{1F1EB}", name: "flag_central_africa" },
20376
+ { emoji: "\u{1F1E8}\u{1F1EC}", name: "flag_congo" },
20377
+ { emoji: "\u{1F1E8}\u{1F1ED}", name: "flag_switzerland" },
20378
+ { emoji: "\u{1F1E8}\u{1F1EE}", name: "flag_cote_divoire" },
20379
+ { emoji: "\u{1F1E8}\u{1F1F0}", name: "flag_cook_islands" },
20380
+ { emoji: "\u{1F1E8}\u{1F1F1}", name: "flag_chile" },
20381
+ { emoji: "\u{1F1E8}\u{1F1F2}", name: "flag_cameroon" },
20382
+ { emoji: "\u{1F1E8}\u{1F1F3}", name: "flag_china" },
20383
+ { emoji: "\u{1F1E8}\u{1F1F4}", name: "flag_colombia" },
20384
+ { emoji: "\u{1F1E8}\u{1F1F5}", name: "flag_clipperton" },
20385
+ { emoji: "\u{1F1E8}\u{1F1F7}", name: "flag_costa_rica" },
20386
+ { emoji: "\u{1F1E8}\u{1F1FA}", name: "flag_cuba" },
20387
+ { emoji: "\u{1F1E8}\u{1F1FB}", name: "flag_cape_verde" },
20388
+ { emoji: "\u{1F1E8}\u{1F1FC}", name: "flag_curacao" },
20389
+ { emoji: "\u{1F1E8}\u{1F1FD}", name: "flag_christmas_island" },
20390
+ { emoji: "\u{1F1E8}\u{1F1FE}", name: "flag_cyprus" },
20391
+ { emoji: "\u{1F1E8}\u{1F1FF}", name: "flag_czechia" },
20392
+ { emoji: "\u{1F1E9}\u{1F1EA}", name: "flag_germany" },
20393
+ { emoji: "\u{1F1E9}\u{1F1EC}", name: "flag_diego_garcia" },
20394
+ { emoji: "\u{1F1E9}\u{1F1EF}", name: "flag_djibouti" },
20395
+ { emoji: "\u{1F1E9}\u{1F1F0}", name: "flag_denmark" },
20396
+ { emoji: "\u{1F1E9}\u{1F1F2}", name: "flag_dominica" },
20397
+ { emoji: "\u{1F1E9}\u{1F1F4}", name: "flag_dominican_rep" },
20398
+ { emoji: "\u{1F1E9}\u{1F1FF}", name: "flag_algeria" },
20399
+ { emoji: "\u{1F1EA}\u{1F1E8}", name: "flag_ecuador" },
20400
+ { emoji: "\u{1F1EA}\u{1F1EA}", name: "flag_estonia" },
20401
+ { emoji: "\u{1F1EA}\u{1F1EC}", name: "flag_egypt" },
20402
+ { emoji: "\u{1F1EA}\u{1F1ED}", name: "flag_western_sahara" },
20403
+ { emoji: "\u{1F1EA}\u{1F1F7}", name: "flag_eritrea" },
20404
+ { emoji: "\u{1F1EA}\u{1F1F8}", name: "flag_spain" },
20405
+ { emoji: "\u{1F1EA}\u{1F1F9}", name: "flag_ethiopia" },
20406
+ { emoji: "\u{1F1EA}\u{1F1FA}", name: "flag_eu" },
20407
+ { emoji: "\u{1F1EB}\u{1F1EE}", name: "flag_finland" },
20408
+ { emoji: "\u{1F1EB}\u{1F1EF}", name: "flag_fiji" },
20409
+ { emoji: "\u{1F1EB}\u{1F1F0}", name: "flag_falkland" },
20410
+ { emoji: "\u{1F1EB}\u{1F1F2}", name: "flag_micronesia" },
20411
+ { emoji: "\u{1F1EB}\u{1F1F4}", name: "flag_faroe" },
20412
+ { emoji: "\u{1F1EB}\u{1F1F7}", name: "flag_france" },
20413
+ { emoji: "\u{1F1EC}\u{1F1E6}", name: "flag_gabon" },
20414
+ { emoji: "\u{1F1EC}\u{1F1E7}", name: "flag_uk" },
20415
+ { emoji: "\u{1F1EC}\u{1F1E9}", name: "flag_grenada" },
20416
+ { emoji: "\u{1F1EC}\u{1F1EA}", name: "flag_georgia" },
20417
+ { emoji: "\u{1F1EC}\u{1F1EB}", name: "flag_french_guiana" },
20418
+ { emoji: "\u{1F1EC}\u{1F1EC}", name: "flag_guernsey" },
20419
+ { emoji: "\u{1F1EC}\u{1F1ED}", name: "flag_ghana" },
20420
+ { emoji: "\u{1F1EC}\u{1F1EE}", name: "flag_gibraltar" },
20421
+ { emoji: "\u{1F1EC}\u{1F1F1}", name: "flag_greenland" },
20422
+ { emoji: "\u{1F1EC}\u{1F1F2}", name: "flag_gambia" },
20423
+ { emoji: "\u{1F1EC}\u{1F1F3}", name: "flag_guinea" },
20424
+ { emoji: "\u{1F1EC}\u{1F1F5}", name: "flag_guadeloupe" },
20425
+ { emoji: "\u{1F1EC}\u{1F1F6}", name: "flag_equatorial_guinea" },
20426
+ { emoji: "\u{1F1EC}\u{1F1F7}", name: "flag_greece" },
20427
+ { emoji: "\u{1F1EC}\u{1F1F8}", name: "flag_south_georgia" },
20428
+ { emoji: "\u{1F1EC}\u{1F1F9}", name: "flag_guatemala" },
20429
+ { emoji: "\u{1F1EC}\u{1F1FA}", name: "flag_guam" },
20430
+ { emoji: "\u{1F1EC}\u{1F1FC}", name: "flag_guinea_bissau" },
20431
+ { emoji: "\u{1F1EC}\u{1F1FE}", name: "flag_guyana" },
20432
+ { emoji: "\u{1F1ED}\u{1F1F0}", name: "flag_hong_kong" },
20433
+ { emoji: "\u{1F1ED}\u{1F1F2}", name: "flag_heard_island" },
20434
+ { emoji: "\u{1F1ED}\u{1F1F3}", name: "flag_honduras" },
20435
+ { emoji: "\u{1F1ED}\u{1F1F7}", name: "flag_croatia" },
20436
+ { emoji: "\u{1F1ED}\u{1F1F9}", name: "flag_haiti" },
20437
+ { emoji: "\u{1F1ED}\u{1F1FA}", name: "flag_hungary" },
20438
+ { emoji: "\u{1F1EE}\u{1F1E8}", name: "flag_canary_islands" },
20439
+ { emoji: "\u{1F1EE}\u{1F1E9}", name: "flag_indonesia" },
20440
+ { emoji: "\u{1F1EE}\u{1F1EA}", name: "flag_ireland" },
20441
+ { emoji: "\u{1F1EE}\u{1F1F1}", name: "flag_israel" },
20442
+ { emoji: "\u{1F1EE}\u{1F1F2}", name: "flag_isle_of_man" },
20443
+ { emoji: "\u{1F1EE}\u{1F1F3}", name: "flag_india" },
20444
+ { emoji: "\u{1F1EE}\u{1F1F4}", name: "flag_british_indian_ocean" },
20445
+ { emoji: "\u{1F1EE}\u{1F1F6}", name: "flag_iraq" },
20446
+ { emoji: "\u{1F1EE}\u{1F1F7}", name: "flag_iran" },
20447
+ { emoji: "\u{1F1EE}\u{1F1F8}", name: "flag_iceland" },
20448
+ { emoji: "\u{1F1EE}\u{1F1F9}", name: "flag_italy" },
20449
+ { emoji: "\u{1F1EF}\u{1F1EA}", name: "flag_jersey" },
20450
+ { emoji: "\u{1F1EF}\u{1F1F2}", name: "flag_jamaica" },
20451
+ { emoji: "\u{1F1EF}\u{1F1F4}", name: "flag_jordan" },
20452
+ { emoji: "\u{1F1EF}\u{1F1F5}", name: "flag_japan" },
20453
+ { emoji: "\u{1F1F0}\u{1F1EA}", name: "flag_kenya" },
20454
+ { emoji: "\u{1F1F0}\u{1F1EC}", name: "flag_kyrgyzstan" },
20455
+ { emoji: "\u{1F1F0}\u{1F1ED}", name: "flag_cambodia" },
20456
+ { emoji: "\u{1F1F0}\u{1F1EE}", name: "flag_kiribati" },
20457
+ { emoji: "\u{1F1F0}\u{1F1F2}", name: "flag_comoros" },
20458
+ { emoji: "\u{1F1F0}\u{1F1F3}", name: "flag_st_kitts" },
20459
+ { emoji: "\u{1F1F0}\u{1F1F5}", name: "flag_north_korea" },
20460
+ { emoji: "\u{1F1F0}\u{1F1F7}", name: "flag_south_korea" },
20461
+ { emoji: "\u{1F1F0}\u{1F1FC}", name: "flag_kuwait" },
20462
+ { emoji: "\u{1F1F0}\u{1F1FE}", name: "flag_cayman" },
20463
+ { emoji: "\u{1F1F0}\u{1F1FF}", name: "flag_kazakhstan" },
20464
+ { emoji: "\u{1F1F1}\u{1F1E6}", name: "flag_laos" },
20465
+ { emoji: "\u{1F1F1}\u{1F1E7}", name: "flag_lebanon" },
20466
+ { emoji: "\u{1F1F1}\u{1F1E8}", name: "flag_st_lucia" },
20467
+ { emoji: "\u{1F1F1}\u{1F1EE}", name: "flag_liechtenstein" },
20468
+ { emoji: "\u{1F1F1}\u{1F1F0}", name: "flag_sri_lanka" },
20469
+ { emoji: "\u{1F1F1}\u{1F1F7}", name: "flag_liberia" },
20470
+ { emoji: "\u{1F1F1}\u{1F1F8}", name: "flag_lesotho" },
20471
+ { emoji: "\u{1F1F1}\u{1F1F9}", name: "flag_lithuania" },
20472
+ { emoji: "\u{1F1F1}\u{1F1FA}", name: "flag_luxembourg" },
20473
+ { emoji: "\u{1F1F1}\u{1F1FB}", name: "flag_latvia" },
20474
+ { emoji: "\u{1F1F1}\u{1F1FE}", name: "flag_libya" },
20475
+ { emoji: "\u{1F1F2}\u{1F1E6}", name: "flag_morocco" },
20476
+ { emoji: "\u{1F1F2}\u{1F1E8}", name: "flag_monaco" },
20477
+ { emoji: "\u{1F1F2}\u{1F1E9}", name: "flag_moldova" },
20478
+ { emoji: "\u{1F1F2}\u{1F1EA}", name: "flag_montenegro" },
20479
+ { emoji: "\u{1F1F2}\u{1F1EB}", name: "flag_st_martin" },
20480
+ { emoji: "\u{1F1F2}\u{1F1EC}", name: "flag_madagascar" },
20481
+ { emoji: "\u{1F1F2}\u{1F1ED}", name: "flag_marshall_islands" },
20482
+ { emoji: "\u{1F1F2}\u{1F1F0}", name: "flag_north_macedonia" },
20483
+ { emoji: "\u{1F1F2}\u{1F1F1}", name: "flag_mali" },
20484
+ { emoji: "\u{1F1F2}\u{1F1F2}", name: "flag_myanmar" },
20485
+ { emoji: "\u{1F1F2}\u{1F1F3}", name: "flag_mongolia" },
20486
+ { emoji: "\u{1F1F2}\u{1F1F4}", name: "flag_macau" },
20487
+ { emoji: "\u{1F1F2}\u{1F1F5}", name: "flag_northern_mariana" },
20488
+ { emoji: "\u{1F1F2}\u{1F1F6}", name: "flag_martinique" },
20489
+ { emoji: "\u{1F1F2}\u{1F1F7}", name: "flag_mauritania" },
20490
+ { emoji: "\u{1F1F2}\u{1F1F8}", name: "flag_montserrat" },
20491
+ { emoji: "\u{1F1F2}\u{1F1F9}", name: "flag_malta" },
20492
+ { emoji: "\u{1F1F2}\u{1F1FA}", name: "flag_mauritius" },
20493
+ { emoji: "\u{1F1F2}\u{1F1FB}", name: "flag_maldives" },
20494
+ { emoji: "\u{1F1F2}\u{1F1FC}", name: "flag_malawi" },
20495
+ { emoji: "\u{1F1F2}\u{1F1FD}", name: "flag_mexico" },
20496
+ { emoji: "\u{1F1F2}\u{1F1FE}", name: "flag_malaysia" },
20497
+ { emoji: "\u{1F1F2}\u{1F1FF}", name: "flag_mozambique" },
20498
+ { emoji: "\u{1F1F3}\u{1F1E6}", name: "flag_namibia" },
20499
+ { emoji: "\u{1F1F3}\u{1F1E8}", name: "flag_new_caledonia" },
20500
+ { emoji: "\u{1F1F3}\u{1F1EA}", name: "flag_niger" },
20501
+ { emoji: "\u{1F1F3}\u{1F1EB}", name: "flag_norfolk" },
20502
+ { emoji: "\u{1F1F3}\u{1F1EC}", name: "flag_nigeria" },
20503
+ { emoji: "\u{1F1F3}\u{1F1EE}", name: "flag_nicaragua" },
20504
+ { emoji: "\u{1F1F3}\u{1F1F1}", name: "flag_netherlands" },
20505
+ { emoji: "\u{1F1F3}\u{1F1F4}", name: "flag_norway" },
20506
+ { emoji: "\u{1F1F3}\u{1F1F5}", name: "flag_nepal" },
20507
+ { emoji: "\u{1F1F3}\u{1F1F7}", name: "flag_nauru" },
20508
+ { emoji: "\u{1F1F3}\u{1F1FA}", name: "flag_niue" },
20509
+ { emoji: "\u{1F1F3}\u{1F1FF}", name: "flag_new_zealand" },
20510
+ { emoji: "\u{1F1F4}\u{1F1F2}", name: "flag_oman" },
20511
+ { emoji: "\u{1F1F5}\u{1F1E6}", name: "flag_panama" },
20512
+ { emoji: "\u{1F1F5}\u{1F1EA}", name: "flag_peru" },
20513
+ { emoji: "\u{1F1F5}\u{1F1EB}", name: "flag_french_polynesia" },
20514
+ { emoji: "\u{1F1F5}\u{1F1EC}", name: "flag_papua_new_guinea" },
20515
+ { emoji: "\u{1F1F5}\u{1F1ED}", name: "flag_philippines" },
20516
+ { emoji: "\u{1F1F5}\u{1F1F0}", name: "flag_pakistan" },
20517
+ { emoji: "\u{1F1F5}\u{1F1F1}", name: "flag_poland" },
20518
+ { emoji: "\u{1F1F5}\u{1F1F2}", name: "flag_st_pierre" },
20519
+ { emoji: "\u{1F1F5}\u{1F1F3}", name: "flag_pitcairn" },
20520
+ { emoji: "\u{1F1F5}\u{1F1F7}", name: "flag_puerto_rico" },
20521
+ { emoji: "\u{1F1F5}\u{1F1F8}", name: "flag_palestine" },
20522
+ { emoji: "\u{1F1F5}\u{1F1F9}", name: "flag_portugal" },
20523
+ { emoji: "\u{1F1F5}\u{1F1FC}", name: "flag_palau" },
20524
+ { emoji: "\u{1F1F5}\u{1F1FE}", name: "flag_paraguay" },
20525
+ { emoji: "\u{1F1F6}\u{1F1E6}", name: "flag_qatar" },
20526
+ { emoji: "\u{1F1F7}\u{1F1EA}", name: "flag_reunion" },
20527
+ { emoji: "\u{1F1F7}\u{1F1F4}", name: "flag_romania" },
20528
+ { emoji: "\u{1F1F7}\u{1F1F8}", name: "flag_serbia" },
20529
+ { emoji: "\u{1F1F7}\u{1F1FA}", name: "flag_russia" },
20530
+ { emoji: "\u{1F1F7}\u{1F1FC}", name: "flag_rwanda" },
20531
+ { emoji: "\u{1F1F8}\u{1F1E6}", name: "flag_saudi_arabia" },
20532
+ { emoji: "\u{1F1F8}\u{1F1E7}", name: "flag_solomon_islands" },
20533
+ { emoji: "\u{1F1F8}\u{1F1E8}", name: "flag_seychelles" },
20534
+ { emoji: "\u{1F1F8}\u{1F1E9}", name: "flag_sudan" },
20535
+ { emoji: "\u{1F1F8}\u{1F1EA}", name: "flag_sweden" },
20536
+ { emoji: "\u{1F1F8}\u{1F1EC}", name: "flag_singapore" },
20537
+ { emoji: "\u{1F1F8}\u{1F1ED}", name: "flag_st_helena" },
20538
+ { emoji: "\u{1F1F8}\u{1F1EE}", name: "flag_slovenia" },
20539
+ { emoji: "\u{1F1F8}\u{1F1EF}", name: "flag_svalbard" },
20540
+ { emoji: "\u{1F1F8}\u{1F1F0}", name: "flag_slovakia" },
20541
+ { emoji: "\u{1F1F8}\u{1F1F1}", name: "flag_sierra_leone" },
20542
+ { emoji: "\u{1F1F8}\u{1F1F2}", name: "flag_san_marino" },
20543
+ { emoji: "\u{1F1F8}\u{1F1F3}", name: "flag_senegal" },
20544
+ { emoji: "\u{1F1F8}\u{1F1F4}", name: "flag_somalia" },
20545
+ { emoji: "\u{1F1F8}\u{1F1F7}", name: "flag_suriname" },
20546
+ { emoji: "\u{1F1F8}\u{1F1F8}", name: "flag_south_sudan" },
20547
+ { emoji: "\u{1F1F8}\u{1F1F9}", name: "flag_sao_tome" },
20548
+ { emoji: "\u{1F1F8}\u{1F1FB}", name: "flag_el_salvador" },
20549
+ { emoji: "\u{1F1F8}\u{1F1FD}", name: "flag_sint_maarten" },
20550
+ { emoji: "\u{1F1F8}\u{1F1FE}", name: "flag_syria" },
20551
+ { emoji: "\u{1F1F8}\u{1F1FF}", name: "flag_eswatini" },
20552
+ { emoji: "\u{1F1F9}\u{1F1E6}", name: "flag_tristan" },
20553
+ { emoji: "\u{1F1F9}\u{1F1E8}", name: "flag_turks_caicos" },
20554
+ { emoji: "\u{1F1F9}\u{1F1E9}", name: "flag_chad" },
20555
+ { emoji: "\u{1F1F9}\u{1F1EB}", name: "flag_french_southern" },
20556
+ { emoji: "\u{1F1F9}\u{1F1EC}", name: "flag_togo" },
20557
+ { emoji: "\u{1F1F9}\u{1F1ED}", name: "flag_thailand" },
20558
+ { emoji: "\u{1F1F9}\u{1F1EF}", name: "flag_tajikistan" },
20559
+ { emoji: "\u{1F1F9}\u{1F1F0}", name: "flag_tokelau" },
20560
+ { emoji: "\u{1F1F9}\u{1F1F1}", name: "flag_timor_leste" },
20561
+ { emoji: "\u{1F1F9}\u{1F1F2}", name: "flag_turkmenistan" },
20562
+ { emoji: "\u{1F1F9}\u{1F1F3}", name: "flag_tunisia" },
20563
+ { emoji: "\u{1F1F9}\u{1F1F4}", name: "flag_tonga" },
20564
+ { emoji: "\u{1F1F9}\u{1F1F7}", name: "flag_turkey" },
20565
+ { emoji: "\u{1F1F9}\u{1F1F9}", name: "flag_trinidad" },
20566
+ { emoji: "\u{1F1F9}\u{1F1FB}", name: "flag_tuvalu" },
20567
+ { emoji: "\u{1F1F9}\u{1F1FC}", name: "flag_taiwan" },
20568
+ { emoji: "\u{1F1F9}\u{1F1FF}", name: "flag_tanzania" },
20569
+ { emoji: "\u{1F1FA}\u{1F1E6}", name: "flag_ukraine" },
20570
+ { emoji: "\u{1F1FA}\u{1F1EC}", name: "flag_uganda" },
20571
+ { emoji: "\u{1F1FA}\u{1F1F2}", name: "flag_us_outlying" },
20572
+ { emoji: "\u{1F1FA}\u{1F1F3}", name: "flag_un" },
20573
+ { emoji: "\u{1F1FA}\u{1F1F8}", name: "flag_usa" },
20574
+ { emoji: "\u{1F1FA}\u{1F1FE}", name: "flag_uruguay" },
20575
+ { emoji: "\u{1F1FA}\u{1F1FF}", name: "flag_uzbekistan" },
20576
+ { emoji: "\u{1F1FB}\u{1F1E6}", name: "flag_vatican" },
20577
+ { emoji: "\u{1F1FB}\u{1F1E8}", name: "flag_st_vincent" },
20578
+ { emoji: "\u{1F1FB}\u{1F1EA}", name: "flag_venezuela" },
20579
+ { emoji: "\u{1F1FB}\u{1F1EC}", name: "flag_bvi" },
20580
+ { emoji: "\u{1F1FB}\u{1F1EE}", name: "flag_usvi" },
20581
+ { emoji: "\u{1F1FB}\u{1F1F3}", name: "flag_vietnam" },
20582
+ { emoji: "\u{1F1FB}\u{1F1FA}", name: "flag_vanuatu" },
20583
+ { emoji: "\u{1F1FC}\u{1F1EB}", name: "flag_wallis" },
20584
+ { emoji: "\u{1F1FC}\u{1F1F8}", name: "flag_samoa" },
20585
+ { emoji: "\u{1F1FD}\u{1F1F0}", name: "flag_kosovo" },
20586
+ { emoji: "\u{1F1FE}\u{1F1EA}", name: "flag_yemen" },
20587
+ { emoji: "\u{1F1FE}\u{1F1F9}", name: "flag_mayotte" },
20588
+ { emoji: "\u{1F1FF}\u{1F1E6}", name: "flag_south_africa" },
20589
+ { emoji: "\u{1F1FF}\u{1F1F2}", name: "flag_zambia" },
20590
+ { emoji: "\u{1F1FF}\u{1F1FC}", name: "flag_zimbabwe" }
20591
+ ]
20592
+ }
20593
+ ];
20594
+
20595
+ // ../../components/ui/UEditor/emoji-suggestion.tsx
20596
+ import { jsx as jsx76, jsxs as jsxs68 } from "react/jsx-runtime";
20597
+ var EmojiList = forwardRef14((props, ref) => {
20598
+ const [selectedIndex, setSelectedIndex] = useState48(0);
20599
+ useEffect29(() => {
20600
+ setSelectedIndex(0);
20601
+ }, [props.items]);
20602
+ useImperativeHandle2(ref, () => ({
20603
+ onKeyDown: ({ event }) => {
20604
+ if (event.key === "ArrowUp") {
20605
+ setSelectedIndex((prev) => (prev + props.items.length - 1) % props.items.length);
20606
+ return true;
20607
+ }
20608
+ if (event.key === "ArrowDown") {
20609
+ setSelectedIndex((prev) => (prev + 1) % props.items.length);
20610
+ return true;
20611
+ }
20612
+ if (event.key === "ArrowLeft") {
20613
+ setSelectedIndex((prev) => Math.max(0, prev - 8));
20614
+ return true;
20615
+ }
20616
+ if (event.key === "ArrowRight") {
20617
+ setSelectedIndex((prev) => Math.min(props.items.length - 1, prev + 8));
20618
+ return true;
20619
+ }
20620
+ if (event.key === "Enter") {
20621
+ const item = props.items[selectedIndex];
20622
+ if (item) {
20623
+ props.command(item);
20624
+ }
20625
+ return true;
20626
+ }
20627
+ return false;
20628
+ }
20629
+ }));
20630
+ if (props.items.length === 0) {
20631
+ return /* @__PURE__ */ jsx76("div", { className: "w-80 p-4 text-center text-sm text-muted-foreground bg-card border border-border rounded-2xl shadow-lg", children: "No emoji found" });
20632
+ }
20633
+ return /* @__PURE__ */ jsxs68("div", { className: "w-80 max-h-80 overflow-y-auto bg-card border border-border rounded-2xl shadow-lg", children: [
20634
+ /* @__PURE__ */ jsx76("div", { className: "px-3 py-2 border-b bg-muted/30", children: /* @__PURE__ */ jsxs68("div", { className: "flex items-center gap-2", children: [
20635
+ /* @__PURE__ */ jsx76(Smile, { className: "w-4 h-4 text-primary" }),
20636
+ /* @__PURE__ */ jsx76("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: "Emoji" })
20637
+ ] }) }),
20638
+ /* @__PURE__ */ jsxs68("div", { className: "p-3", children: [
20639
+ /* @__PURE__ */ jsx76("div", { className: "grid grid-cols-8 gap-1", children: props.items.slice(0, 64).map((item, index) => /* @__PURE__ */ jsx76(
20640
+ "button",
20641
+ {
20642
+ type: "button",
20643
+ onClick: () => props.command(item),
20644
+ className: cn(
20645
+ "w-9 h-9 flex items-center justify-center rounded-lg text-xl transition-colors",
20646
+ selectedIndex === index ? "bg-primary/10 ring-2 ring-primary/30" : "hover:bg-accent"
20647
+ ),
20648
+ title: item.name.replace(/_/g, " "),
20649
+ children: item.emoji
20650
+ },
20651
+ item.name
20652
+ )) }),
20653
+ props.items.length > 64 && /* @__PURE__ */ jsxs68("div", { className: "mt-2 text-xs text-center text-muted-foreground", children: [
20654
+ "Showing first 64 of ",
20655
+ props.items.length,
20656
+ " emojis"
20657
+ ] })
20658
+ ] })
20659
+ ] });
20660
+ });
20661
+ EmojiList.displayName = "EmojiList";
20662
+ var getEmojiSuggestionItems = ({ query }) => {
20663
+ const allEmojis = EMOJI_LIST.flatMap((category) => category.emojis);
20664
+ if (!query.trim()) {
20665
+ return allEmojis.slice(0, 64);
20666
+ }
20667
+ const searchQuery = query.toLowerCase();
20668
+ return allEmojis.filter(
20669
+ (emoji) => emoji.name.toLowerCase().includes(searchQuery) || emoji.emoji.includes(query)
20670
+ );
20671
+ };
20672
+ var EmojiSuggestion = Extension3.create({
20673
+ name: "emojiSuggestion",
20674
+ addProseMirrorPlugins() {
20675
+ return [
20676
+ Suggestion2({
20677
+ editor: this.editor,
20678
+ char: ":",
20679
+ pluginKey: new PluginKey("emojiSuggestion"),
20680
+ command: ({ editor, range, props }) => {
20681
+ editor.chain().focus().deleteRange(range).insertContent(props.emoji).run();
20682
+ },
20683
+ items: getEmojiSuggestionItems,
20684
+ render: () => {
20685
+ let component;
20686
+ let popup;
20687
+ return {
20688
+ onStart: (props) => {
20689
+ component = new ReactRenderer2(EmojiList, {
20690
+ props,
20691
+ editor: props.editor
20692
+ });
20693
+ if (!props.clientRect) {
20694
+ return;
20695
+ }
20696
+ popup = tippy2("body", {
20697
+ getReferenceClientRect: props.clientRect,
20698
+ appendTo: () => document.body,
20699
+ content: component.element,
20700
+ showOnCreate: true,
20701
+ interactive: true,
20702
+ trigger: "manual",
20703
+ placement: "bottom-start"
20704
+ });
20705
+ },
20706
+ onUpdate(props) {
20707
+ component?.updateProps(props);
20708
+ if (!props.clientRect) {
20709
+ return;
20710
+ }
20711
+ popup?.[0]?.setProps({
20712
+ getReferenceClientRect: props.clientRect
20713
+ });
20714
+ },
20715
+ onKeyDown(props) {
20716
+ if (props.event.key === "Escape") {
20717
+ popup?.[0]?.hide();
20718
+ return true;
20719
+ }
20720
+ return component?.ref?.onKeyDown(props) ?? false;
20721
+ },
20722
+ onExit() {
20723
+ popup?.[0]?.destroy();
20724
+ component?.destroy();
20725
+ }
20726
+ };
20727
+ }
20728
+ })
20729
+ ];
20730
+ }
20731
+ });
20732
+
19821
20733
  // ../../components/ui/UEditor/resizable-image.tsx
19822
- import { useEffect as useEffect29, useRef as useRef25, useState as useState48 } from "react";
20734
+ import { useEffect as useEffect30, useRef as useRef25, useState as useState49 } from "react";
19823
20735
  import Image3 from "@tiptap/extension-image";
19824
20736
  import { mergeAttributes } from "@tiptap/core";
19825
20737
  import { NodeViewWrapper, ReactNodeViewRenderer } from "@tiptap/react";
19826
- import { jsx as jsx76, jsxs as jsxs68 } from "react/jsx-runtime";
20738
+ import { jsx as jsx77, jsxs as jsxs69 } from "react/jsx-runtime";
19827
20739
  var MIN_IMAGE_SIZE_PX = 40;
19828
20740
  var AXIS_LOCK_THRESHOLD_PX = 4;
19829
20741
  function toNullableNumber(value) {
@@ -19841,13 +20753,13 @@ function ResizableImageNodeView(props) {
19841
20753
  const { node, selected, updateAttributes, editor, getPos } = props;
19842
20754
  const wrapperRef = useRef25(null);
19843
20755
  const imgRef = useRef25(null);
19844
- const [isHovered, setIsHovered] = useState48(false);
19845
- const [isResizing, setIsResizing] = useState48(false);
20756
+ const [isHovered, setIsHovered] = useState49(false);
20757
+ const [isResizing, setIsResizing] = useState49(false);
19846
20758
  const widthAttr = toNullableNumber(node.attrs["width"]);
19847
20759
  const heightAttr = toNullableNumber(node.attrs["height"]);
19848
20760
  const textAlign = String(node.attrs["textAlign"] ?? "");
19849
20761
  const dragStateRef = useRef25(null);
19850
- useEffect29(() => {
20762
+ useEffect30(() => {
19851
20763
  const img = imgRef.current;
19852
20764
  if (!img) return;
19853
20765
  img.style.width = widthAttr ? `${widthAttr}px` : "";
@@ -19941,7 +20853,7 @@ function ResizableImageNodeView(props) {
19941
20853
  const showHandle = selected || isHovered || isResizing;
19942
20854
  const wrapperAlignClass = textAlign === "center" ? "mx-auto" : textAlign === "right" ? "ml-auto" : textAlign === "justify" ? "mx-auto" : "";
19943
20855
  const wrapperWidthClass = "w-fit";
19944
- return /* @__PURE__ */ jsxs68(
20856
+ return /* @__PURE__ */ jsxs69(
19945
20857
  NodeViewWrapper,
19946
20858
  {
19947
20859
  as: "div",
@@ -19955,7 +20867,7 @@ function ResizableImageNodeView(props) {
19955
20867
  },
19956
20868
  contentEditable: false,
19957
20869
  children: [
19958
- /* @__PURE__ */ jsx76(
20870
+ /* @__PURE__ */ jsx77(
19959
20871
  "img",
19960
20872
  {
19961
20873
  ref: imgRef,
@@ -19974,7 +20886,7 @@ function ResizableImageNodeView(props) {
19974
20886
  }
19975
20887
  }
19976
20888
  ),
19977
- showHandle && /* @__PURE__ */ jsx76(
20889
+ showHandle && /* @__PURE__ */ jsx77(
19978
20890
  "div",
19979
20891
  {
19980
20892
  "aria-hidden": "true",
@@ -20134,12 +21046,13 @@ function buildUEditorExtensions({
20134
21046
  emptyEditorClass: "is-editor-empty",
20135
21047
  emptyNodeClass: "is-empty"
20136
21048
  }),
20137
- SlashCommand
21049
+ SlashCommand,
21050
+ EmojiSuggestion
20138
21051
  ];
20139
21052
  }
20140
21053
 
20141
21054
  // ../../components/ui/UEditor/toolbar.tsx
20142
- import React66, { useRef as useRef27, useState as useState50 } from "react";
21055
+ import React68, { useRef as useRef28, useState as useState52 } from "react";
20143
21056
  import { useTranslations as useTranslations4 } from "next-intl";
20144
21057
  import {
20145
21058
  AlignCenter,
@@ -20165,6 +21078,7 @@ import {
20165
21078
  Palette as Palette2,
20166
21079
  Quote as QuoteIcon,
20167
21080
  Redo as RedoIcon,
21081
+ Smile as Smile3,
20168
21082
  Strikethrough as StrikethroughIcon,
20169
21083
  Subscript as SubscriptIcon,
20170
21084
  Superscript as SuperscriptIcon,
@@ -20180,7 +21094,7 @@ import {
20180
21094
  import { useMemo as useMemo23 } from "react";
20181
21095
  import { useTranslations as useTranslations2 } from "next-intl";
20182
21096
  import { X as X15 } from "lucide-react";
20183
- import { jsx as jsx77, jsxs as jsxs69 } from "react/jsx-runtime";
21097
+ import { jsx as jsx78, jsxs as jsxs70 } from "react/jsx-runtime";
20184
21098
  var useEditorColors = () => {
20185
21099
  const t = useTranslations2("UEditor");
20186
21100
  const textColors = useMemo23(
@@ -20217,9 +21131,9 @@ var EditorColorPalette = ({
20217
21131
  currentColor,
20218
21132
  onSelect,
20219
21133
  label
20220
- }) => /* @__PURE__ */ jsxs69("div", { className: "p-2", children: [
20221
- /* @__PURE__ */ jsx77("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider px-2", children: label }),
20222
- /* @__PURE__ */ jsx77("div", { className: "grid grid-cols-4 gap-1.5 mt-2", children: colors.map((c) => /* @__PURE__ */ jsxs69(
21134
+ }) => /* @__PURE__ */ jsxs70("div", { className: "p-2", children: [
21135
+ /* @__PURE__ */ jsx78("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider px-2", children: label }),
21136
+ /* @__PURE__ */ jsx78("div", { className: "grid grid-cols-4 gap-1.5 mt-2", children: colors.map((c) => /* @__PURE__ */ jsxs70(
20223
21137
  "button",
20224
21138
  {
20225
21139
  type: "button",
@@ -20232,8 +21146,8 @@ var EditorColorPalette = ({
20232
21146
  style: { backgroundColor: c.color || "transparent" },
20233
21147
  title: c.name,
20234
21148
  children: [
20235
- c.color === "" && /* @__PURE__ */ jsx77(X15, { className: "w-4 h-4 text-muted-foreground" }),
20236
- c.color === "inherit" && /* @__PURE__ */ jsx77("span", { className: "text-xs font-medium", children: "A" })
21149
+ c.color === "" && /* @__PURE__ */ jsx78(X15, { className: "w-4 h-4 text-muted-foreground" }),
21150
+ c.color === "inherit" && /* @__PURE__ */ jsx78("span", { className: "text-xs font-medium", children: "A" })
20237
21151
  ]
20238
21152
  },
20239
21153
  c.name
@@ -20241,10 +21155,10 @@ var EditorColorPalette = ({
20241
21155
  ] });
20242
21156
 
20243
21157
  // ../../components/ui/UEditor/inputs.tsx
20244
- import { useEffect as useEffect30, useRef as useRef26, useState as useState49 } from "react";
21158
+ import { useEffect as useEffect31, useRef as useRef26, useState as useState50 } from "react";
20245
21159
  import { useTranslations as useTranslations3 } from "next-intl";
20246
21160
  import { Check as Check10, X as X16 } from "lucide-react";
20247
- import { jsx as jsx78, jsxs as jsxs70 } from "react/jsx-runtime";
21161
+ import { jsx as jsx79, jsxs as jsxs71 } from "react/jsx-runtime";
20248
21162
  function normalizeUrl(raw) {
20249
21163
  const url = raw.trim();
20250
21164
  if (!url) return "";
@@ -20258,9 +21172,9 @@ var LinkInput = ({
20258
21172
  initialUrl = ""
20259
21173
  }) => {
20260
21174
  const t = useTranslations3("UEditor");
20261
- const [url, setUrl] = useState49(initialUrl);
21175
+ const [url, setUrl] = useState50(initialUrl);
20262
21176
  const inputRef = useRef26(null);
20263
- useEffect30(() => {
21177
+ useEffect31(() => {
20264
21178
  inputRef.current?.focus();
20265
21179
  inputRef.current?.select();
20266
21180
  }, []);
@@ -20269,8 +21183,8 @@ var LinkInput = ({
20269
21183
  const normalized = normalizeUrl(url);
20270
21184
  if (normalized) onSubmit(normalized);
20271
21185
  };
20272
- return /* @__PURE__ */ jsxs70("form", { onSubmit: handleSubmit, className: "flex items-center gap-2 p-2", children: [
20273
- /* @__PURE__ */ jsx78(
21186
+ return /* @__PURE__ */ jsxs71("form", { onSubmit: handleSubmit, className: "flex items-center gap-2 p-2", children: [
21187
+ /* @__PURE__ */ jsx79(
20274
21188
  "input",
20275
21189
  {
20276
21190
  ref: inputRef,
@@ -20281,16 +21195,16 @@ var LinkInput = ({
20281
21195
  className: "flex-1 px-3 py-2 text-sm bg-muted/50 border-0 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary/20"
20282
21196
  }
20283
21197
  ),
20284
- /* @__PURE__ */ jsx78("button", { type: "submit", className: "p-2 rounded-lg bg-primary text-primary-foreground hover:bg-primary/90 transition-colors", children: /* @__PURE__ */ jsx78(Check10, { className: "w-4 h-4" }) }),
20285
- /* @__PURE__ */ jsx78("button", { type: "button", onClick: onCancel, className: "p-2 rounded-lg hover:bg-muted transition-colors text-muted-foreground", children: /* @__PURE__ */ jsx78(X16, { className: "w-4 h-4" }) })
21198
+ /* @__PURE__ */ jsx79("button", { type: "submit", className: "p-2 rounded-lg bg-primary text-primary-foreground hover:bg-primary/90 transition-colors", children: /* @__PURE__ */ jsx79(Check10, { className: "w-4 h-4" }) }),
21199
+ /* @__PURE__ */ jsx79("button", { type: "button", onClick: onCancel, className: "p-2 rounded-lg hover:bg-muted transition-colors text-muted-foreground", children: /* @__PURE__ */ jsx79(X16, { className: "w-4 h-4" }) })
20286
21200
  ] });
20287
21201
  };
20288
21202
  var ImageInput = ({ onSubmit, onCancel }) => {
20289
21203
  const t = useTranslations3("UEditor");
20290
- const [url, setUrl] = useState49("");
20291
- const [alt, setAlt] = useState49("");
21204
+ const [url, setUrl] = useState50("");
21205
+ const [alt, setAlt] = useState50("");
20292
21206
  const inputRef = useRef26(null);
20293
- useEffect30(() => {
21207
+ useEffect31(() => {
20294
21208
  inputRef.current?.focus();
20295
21209
  }, []);
20296
21210
  const handleSubmit = (e) => {
@@ -20299,10 +21213,10 @@ var ImageInput = ({ onSubmit, onCancel }) => {
20299
21213
  onSubmit(url, alt);
20300
21214
  }
20301
21215
  };
20302
- return /* @__PURE__ */ jsxs70("form", { onSubmit: handleSubmit, className: "p-3 space-y-3", children: [
20303
- /* @__PURE__ */ jsxs70("div", { children: [
20304
- /* @__PURE__ */ jsx78("label", { className: "text-xs font-medium text-muted-foreground", children: t("imageInput.urlLabel") }),
20305
- /* @__PURE__ */ jsx78(
21216
+ return /* @__PURE__ */ jsxs71("form", { onSubmit: handleSubmit, className: "p-3 space-y-3", children: [
21217
+ /* @__PURE__ */ jsxs71("div", { children: [
21218
+ /* @__PURE__ */ jsx79("label", { className: "text-xs font-medium text-muted-foreground", children: t("imageInput.urlLabel") }),
21219
+ /* @__PURE__ */ jsx79(
20306
21220
  "input",
20307
21221
  {
20308
21222
  ref: inputRef,
@@ -20314,9 +21228,9 @@ var ImageInput = ({ onSubmit, onCancel }) => {
20314
21228
  }
20315
21229
  )
20316
21230
  ] }),
20317
- /* @__PURE__ */ jsxs70("div", { children: [
20318
- /* @__PURE__ */ jsx78("label", { className: "text-xs font-medium text-muted-foreground", children: t("imageInput.altLabel") }),
20319
- /* @__PURE__ */ jsx78(
21231
+ /* @__PURE__ */ jsxs71("div", { children: [
21232
+ /* @__PURE__ */ jsx79("label", { className: "text-xs font-medium text-muted-foreground", children: t("imageInput.altLabel") }),
21233
+ /* @__PURE__ */ jsx79(
20320
21234
  "input",
20321
21235
  {
20322
21236
  type: "text",
@@ -20327,8 +21241,8 @@ var ImageInput = ({ onSubmit, onCancel }) => {
20327
21241
  }
20328
21242
  )
20329
21243
  ] }),
20330
- /* @__PURE__ */ jsxs70("div", { className: "flex gap-2", children: [
20331
- /* @__PURE__ */ jsx78(
21244
+ /* @__PURE__ */ jsxs71("div", { className: "flex gap-2", children: [
21245
+ /* @__PURE__ */ jsx79(
20332
21246
  "button",
20333
21247
  {
20334
21248
  type: "submit",
@@ -20337,13 +21251,195 @@ var ImageInput = ({ onSubmit, onCancel }) => {
20337
21251
  children: t("imageInput.addBtn")
20338
21252
  }
20339
21253
  ),
20340
- /* @__PURE__ */ jsx78("button", { type: "button", onClick: onCancel, className: "px-4 py-2 rounded-lg hover:bg-muted transition-colors text-muted-foreground", children: t("imageInput.cancelBtn") })
21254
+ /* @__PURE__ */ jsx79("button", { type: "button", onClick: onCancel, className: "px-4 py-2 rounded-lg hover:bg-muted transition-colors text-muted-foreground", children: t("imageInput.cancelBtn") })
20341
21255
  ] })
20342
21256
  ] });
20343
21257
  };
20344
21258
 
21259
+ // ../../components/ui/UEditor/emoji-picker.tsx
21260
+ import { useState as useState51, useMemo as useMemo24, useRef as useRef27, useEffect as useEffect32 } from "react";
21261
+ import { Search as Search5, X as X17, Smile as Smile2, Leaf, Utensils, Dumbbell, Lightbulb, Hash, Flag } from "lucide-react";
21262
+ import { jsx as jsx80, jsxs as jsxs72 } from "react/jsx-runtime";
21263
+ var CATEGORY_ICONS = {
21264
+ "smileys_people": Smile2,
21265
+ "animals_nature": Leaf,
21266
+ "food_drink": Utensils,
21267
+ "activity": Dumbbell,
21268
+ "objects": Lightbulb,
21269
+ "symbols": Hash,
21270
+ "flags": Flag
21271
+ };
21272
+ var EmojiPicker = ({ onSelect, onClose }) => {
21273
+ const [search, setSearch] = useState51("");
21274
+ const [activeCategory, setActiveCategory] = useState51(EMOJI_LIST[0]?.id || "");
21275
+ const scrollContainerRef = useRef27(null);
21276
+ const categoryRefs = useRef27({});
21277
+ const isUserScrolling = useRef27(false);
21278
+ const filteredCategories = useMemo24(() => {
21279
+ if (!search.trim()) return EMOJI_LIST;
21280
+ const query = search.toLowerCase();
21281
+ return EMOJI_LIST.map((category) => ({
21282
+ ...category,
21283
+ emojis: category.emojis.filter(
21284
+ (emoji) => emoji.name.toLowerCase().includes(query) || emoji.emoji.includes(search)
21285
+ )
21286
+ })).filter((category) => category.emojis.length > 0);
21287
+ }, [search]);
21288
+ const handleEmojiClick = (emoji) => {
21289
+ onSelect(emoji);
21290
+ setSearch("");
21291
+ };
21292
+ useEffect32(() => {
21293
+ if (search) return;
21294
+ const container = scrollContainerRef.current;
21295
+ if (!container) return;
21296
+ const handleScroll = () => {
21297
+ if (!isUserScrolling.current) return;
21298
+ const scrollTop = container.scrollTop;
21299
+ const containerHeight = container.clientHeight;
21300
+ let maxVisibility = 0;
21301
+ let mostVisibleCategory = EMOJI_LIST[0]?.id || "";
21302
+ EMOJI_LIST.forEach((category) => {
21303
+ const element = categoryRefs.current[category.id];
21304
+ if (!element) return;
21305
+ const rect = element.getBoundingClientRect();
21306
+ const containerRect = container.getBoundingClientRect();
21307
+ const visibleTop = Math.max(rect.top, containerRect.top);
21308
+ const visibleBottom = Math.min(rect.bottom, containerRect.bottom);
21309
+ const visibleHeight = Math.max(0, visibleBottom - visibleTop);
21310
+ if (visibleHeight > maxVisibility) {
21311
+ maxVisibility = visibleHeight;
21312
+ mostVisibleCategory = category.id;
21313
+ }
21314
+ });
21315
+ if (mostVisibleCategory !== activeCategory) {
21316
+ setActiveCategory(mostVisibleCategory);
21317
+ }
21318
+ };
21319
+ container.addEventListener("scroll", handleScroll);
21320
+ return () => container.removeEventListener("scroll", handleScroll);
21321
+ }, [search, activeCategory]);
21322
+ const handleCategoryClick = (categoryId) => {
21323
+ const element = categoryRefs.current[categoryId];
21324
+ if (!element || !scrollContainerRef.current) return;
21325
+ isUserScrolling.current = false;
21326
+ setActiveCategory(categoryId);
21327
+ element.scrollIntoView({ behavior: "smooth", block: "start" });
21328
+ setTimeout(() => {
21329
+ isUserScrolling.current = true;
21330
+ }, 500);
21331
+ };
21332
+ useEffect32(() => {
21333
+ isUserScrolling.current = true;
21334
+ }, []);
21335
+ return /* @__PURE__ */ jsxs72("div", { className: "w-96 bg-card border border-border rounded-2xl shadow-xl overflow-hidden flex flex-col max-h-128", children: [
21336
+ /* @__PURE__ */ jsx80("div", { className: "p-3 border-b bg-muted/30 shrink-0", children: /* @__PURE__ */ jsxs72("div", { className: "relative", children: [
21337
+ /* @__PURE__ */ jsx80(Search5, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground" }),
21338
+ /* @__PURE__ */ jsx80(
21339
+ "input",
21340
+ {
21341
+ type: "text",
21342
+ placeholder: "T\xECm ki\u1EBFm bi\u1EC3u t\u01B0\u1EE3ng c\u1EA3m x\xFAc",
21343
+ value: search,
21344
+ onChange: (e) => setSearch(e.target.value),
21345
+ className: cn(
21346
+ "w-full pl-9 pr-9 py-2 rounded-lg",
21347
+ "bg-background border border-border",
21348
+ "text-sm placeholder:text-muted-foreground",
21349
+ "focus:outline-none focus:ring-2 focus:ring-primary/20"
21350
+ )
21351
+ }
21352
+ ),
21353
+ search && /* @__PURE__ */ jsx80(
21354
+ "button",
21355
+ {
21356
+ onClick: () => setSearch(""),
21357
+ className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",
21358
+ children: /* @__PURE__ */ jsx80(X17, { className: "w-4 h-4" })
21359
+ }
21360
+ )
21361
+ ] }) }),
21362
+ /* @__PURE__ */ jsx80(
21363
+ "div",
21364
+ {
21365
+ ref: scrollContainerRef,
21366
+ className: "overflow-y-auto px-3 py-2 shrink",
21367
+ style: { height: "20rem" },
21368
+ children: search ? (
21369
+ // Search Results
21370
+ filteredCategories.length > 0 ? filteredCategories.map((category) => /* @__PURE__ */ jsxs72("div", { className: "mb-4", children: [
21371
+ /* @__PURE__ */ jsx80("div", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-2 sticky top-0 bg-card py-1", children: category.name }),
21372
+ /* @__PURE__ */ jsx80("div", { className: "grid grid-cols-9 gap-1", children: category.emojis.map((emoji) => /* @__PURE__ */ jsx80(
21373
+ "button",
21374
+ {
21375
+ onClick: () => handleEmojiClick(emoji.emoji),
21376
+ className: cn(
21377
+ "w-9 h-9 flex items-center justify-center rounded-lg",
21378
+ "text-2xl hover:bg-accent transition-colors",
21379
+ "focus:outline-none focus:ring-2 focus:ring-primary/20"
21380
+ ),
21381
+ title: emoji.name.replace(/_/g, " "),
21382
+ children: emoji.emoji
21383
+ },
21384
+ emoji.name
21385
+ )) })
21386
+ ] }, category.id)) : /* @__PURE__ */ jsxs72("div", { className: "flex flex-col items-center justify-center h-full text-center", children: [
21387
+ /* @__PURE__ */ jsx80("div", { className: "text-4xl mb-2", children: "\u{1F50D}" }),
21388
+ /* @__PURE__ */ jsx80("div", { className: "text-sm font-medium text-muted-foreground", children: "Kh\xF4ng t\xECm th\u1EA5y emoji" }),
21389
+ /* @__PURE__ */ jsx80("div", { className: "text-xs text-muted-foreground mt-1", children: "Th\u1EED t\u1EEB kh\xF3a kh\xE1c" })
21390
+ ] })
21391
+ ) : (
21392
+ // All Categories - Messenger Style
21393
+ /* @__PURE__ */ jsx80("div", { className: "space-y-4", children: EMOJI_LIST.map((category) => /* @__PURE__ */ jsxs72(
21394
+ "div",
21395
+ {
21396
+ ref: (el) => {
21397
+ categoryRefs.current[category.id] = el;
21398
+ },
21399
+ children: [
21400
+ /* @__PURE__ */ jsx80("div", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-2 sticky top-0 bg-card py-1 z-10", children: category.name }),
21401
+ /* @__PURE__ */ jsx80("div", { className: "grid grid-cols-9 gap-1", children: category.emojis.map((emoji) => /* @__PURE__ */ jsx80(
21402
+ "button",
21403
+ {
21404
+ onClick: () => handleEmojiClick(emoji.emoji),
21405
+ className: cn(
21406
+ "w-9 h-9 flex items-center justify-center rounded-lg",
21407
+ "text-2xl hover:bg-accent transition-colors",
21408
+ "focus:outline-none focus:ring-2 focus:ring-primary/20"
21409
+ ),
21410
+ title: emoji.name.replace(/_/g, " "),
21411
+ children: emoji.emoji
21412
+ },
21413
+ emoji.name
21414
+ )) })
21415
+ ]
21416
+ },
21417
+ category.id
21418
+ )) })
21419
+ )
21420
+ }
21421
+ ),
21422
+ !search && /* @__PURE__ */ jsx80("div", { className: "flex items-center justify-around px-2 py-2 border-t bg-muted/30 shrink-0", children: EMOJI_LIST.map((category) => {
21423
+ const IconComponent = CATEGORY_ICONS[category.id] || Smile2;
21424
+ return /* @__PURE__ */ jsx80(
21425
+ "button",
21426
+ {
21427
+ onClick: () => handleCategoryClick(category.id),
21428
+ className: cn(
21429
+ "p-2 rounded-lg transition-colors",
21430
+ activeCategory === category.id ? "text-primary bg-primary/10" : "text-muted-foreground hover:text-foreground hover:bg-accent"
21431
+ ),
21432
+ title: category.name,
21433
+ children: /* @__PURE__ */ jsx80(IconComponent, { className: "w-5 h-5" })
21434
+ },
21435
+ category.id
21436
+ );
21437
+ }) })
21438
+ ] });
21439
+ };
21440
+
20345
21441
  // ../../components/ui/UEditor/toolbar.tsx
20346
- import { Fragment as Fragment29, jsx as jsx79, jsxs as jsxs71 } from "react/jsx-runtime";
21442
+ import { Fragment as Fragment29, jsx as jsx81, jsxs as jsxs73 } from "react/jsx-runtime";
20347
21443
  function fileToDataUrl2(file) {
20348
21444
  return new Promise((resolve, reject) => {
20349
21445
  const reader = new FileReader();
@@ -20352,8 +21448,8 @@ function fileToDataUrl2(file) {
20352
21448
  reader.readAsDataURL(file);
20353
21449
  });
20354
21450
  }
20355
- var ToolbarButton = React66.forwardRef(({ onClick, onMouseDown, active, disabled, children, title, className }, ref) => {
20356
- const button = /* @__PURE__ */ jsx79(
21451
+ var ToolbarButton = React68.forwardRef(({ onClick, onMouseDown, active, disabled, children, title, className }, ref) => {
21452
+ const button = /* @__PURE__ */ jsx81(
20357
21453
  "button",
20358
21454
  {
20359
21455
  ref,
@@ -20376,12 +21472,12 @@ var ToolbarButton = React66.forwardRef(({ onClick, onMouseDown, active, disabled
20376
21472
  }
20377
21473
  );
20378
21474
  if (title) {
20379
- return /* @__PURE__ */ jsx79(Tooltip, { content: title, placement: "top", delay: { open: 200, close: 0 }, children: button });
21475
+ return /* @__PURE__ */ jsx81(Tooltip, { content: title, placement: "top", delay: { open: 200, close: 0 }, children: button });
20380
21476
  }
20381
21477
  return button;
20382
21478
  });
20383
21479
  ToolbarButton.displayName = "ToolbarButton";
20384
- var ToolbarDivider = () => /* @__PURE__ */ jsx79("div", { className: "w-px h-6 bg-border/50 mx-1" });
21480
+ var ToolbarDivider = () => /* @__PURE__ */ jsx81("div", { className: "w-px h-6 bg-border/50 mx-1" });
20385
21481
  var EditorToolbar = ({
20386
21482
  editor,
20387
21483
  variant,
@@ -20390,10 +21486,10 @@ var EditorToolbar = ({
20390
21486
  }) => {
20391
21487
  const t = useTranslations4("UEditor");
20392
21488
  const { textColors, highlightColors } = useEditorColors();
20393
- const [showImageInput, setShowImageInput] = useState50(false);
20394
- const fileInputRef = useRef27(null);
20395
- const [isUploadingImage, setIsUploadingImage] = useState50(false);
20396
- const [imageUploadError, setImageUploadError] = useState50(null);
21489
+ const [showImageInput, setShowImageInput] = useState52(false);
21490
+ const fileInputRef = useRef28(null);
21491
+ const [isUploadingImage, setIsUploadingImage] = useState52(false);
21492
+ const [imageUploadError, setImageUploadError] = useState52(null);
20397
21493
  const insertImageFiles = async (files) => {
20398
21494
  if (files.length === 0) return;
20399
21495
  setIsUploadingImage(true);
@@ -20412,31 +21508,31 @@ var EditorToolbar = ({
20412
21508
  setIsUploadingImage(false);
20413
21509
  };
20414
21510
  if (variant === "minimal") {
20415
- return /* @__PURE__ */ jsxs71("div", { className: "flex items-center gap-1 p-2 border-b bg-muted/30", children: [
20416
- /* @__PURE__ */ jsx79(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ jsx79(BoldIcon, { className: "w-4 h-4" }) }),
20417
- /* @__PURE__ */ jsx79(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ jsx79(ItalicIcon, { className: "w-4 h-4" }) }),
20418
- /* @__PURE__ */ jsx79(
21511
+ return /* @__PURE__ */ jsxs73("div", { className: "flex items-center gap-1 p-2 border-b bg-muted/30", children: [
21512
+ /* @__PURE__ */ jsx81(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ jsx81(BoldIcon, { className: "w-4 h-4" }) }),
21513
+ /* @__PURE__ */ jsx81(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ jsx81(ItalicIcon, { className: "w-4 h-4" }) }),
21514
+ /* @__PURE__ */ jsx81(
20419
21515
  ToolbarButton,
20420
21516
  {
20421
21517
  onClick: () => editor.chain().focus().toggleBulletList().run(),
20422
21518
  active: editor.isActive("bulletList"),
20423
21519
  title: t("toolbar.bulletList"),
20424
- children: /* @__PURE__ */ jsx79(ListIcon, { className: "w-4 h-4" })
21520
+ children: /* @__PURE__ */ jsx81(ListIcon, { className: "w-4 h-4" })
20425
21521
  }
20426
21522
  )
20427
21523
  ] });
20428
21524
  }
20429
- return /* @__PURE__ */ jsxs71("div", { className: "flex flex-wrap items-center gap-1 p-2 border-b bg-linear-to-r from-muted/30 to-transparent", children: [
20430
- /* @__PURE__ */ jsxs71(
21525
+ return /* @__PURE__ */ jsxs73("div", { className: "flex flex-wrap items-center gap-1 p-2 border-b bg-linear-to-r from-muted/30 to-transparent", children: [
21526
+ /* @__PURE__ */ jsxs73(
20431
21527
  DropdownMenu,
20432
21528
  {
20433
- trigger: /* @__PURE__ */ jsxs71(ToolbarButton, { onClick: () => {
21529
+ trigger: /* @__PURE__ */ jsxs73(ToolbarButton, { onClick: () => {
20434
21530
  }, title: t("toolbar.textStyle"), className: "px-2 w-auto gap-1", children: [
20435
- /* @__PURE__ */ jsx79(Type2, { className: "w-4 h-4" }),
20436
- /* @__PURE__ */ jsx79(ChevronDown6, { className: "w-3 h-3" })
21531
+ /* @__PURE__ */ jsx81(Type2, { className: "w-4 h-4" }),
21532
+ /* @__PURE__ */ jsx81(ChevronDown6, { className: "w-3 h-3" })
20437
21533
  ] }),
20438
21534
  children: [
20439
- /* @__PURE__ */ jsx79(
21535
+ /* @__PURE__ */ jsx81(
20440
21536
  DropdownMenuItem,
20441
21537
  {
20442
21538
  icon: Type2,
@@ -20445,7 +21541,7 @@ var EditorToolbar = ({
20445
21541
  active: editor.isActive("paragraph")
20446
21542
  }
20447
21543
  ),
20448
- /* @__PURE__ */ jsx79(
21544
+ /* @__PURE__ */ jsx81(
20449
21545
  DropdownMenuItem,
20450
21546
  {
20451
21547
  icon: Heading1Icon,
@@ -20455,7 +21551,7 @@ var EditorToolbar = ({
20455
21551
  shortcut: "Ctrl+Alt+1"
20456
21552
  }
20457
21553
  ),
20458
- /* @__PURE__ */ jsx79(
21554
+ /* @__PURE__ */ jsx81(
20459
21555
  DropdownMenuItem,
20460
21556
  {
20461
21557
  icon: Heading2Icon,
@@ -20465,7 +21561,7 @@ var EditorToolbar = ({
20465
21561
  shortcut: "Ctrl+Alt+2"
20466
21562
  }
20467
21563
  ),
20468
- /* @__PURE__ */ jsx79(
21564
+ /* @__PURE__ */ jsx81(
20469
21565
  DropdownMenuItem,
20470
21566
  {
20471
21567
  icon: Heading3Icon,
@@ -20478,30 +21574,30 @@ var EditorToolbar = ({
20478
21574
  ]
20479
21575
  }
20480
21576
  ),
20481
- /* @__PURE__ */ jsx79(ToolbarDivider, {}),
20482
- /* @__PURE__ */ jsx79(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ jsx79(BoldIcon, { className: "w-4 h-4" }) }),
20483
- /* @__PURE__ */ jsx79(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ jsx79(ItalicIcon, { className: "w-4 h-4" }) }),
20484
- /* @__PURE__ */ jsx79(
21577
+ /* @__PURE__ */ jsx81(ToolbarDivider, {}),
21578
+ /* @__PURE__ */ jsx81(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ jsx81(BoldIcon, { className: "w-4 h-4" }) }),
21579
+ /* @__PURE__ */ jsx81(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ jsx81(ItalicIcon, { className: "w-4 h-4" }) }),
21580
+ /* @__PURE__ */ jsx81(
20485
21581
  ToolbarButton,
20486
21582
  {
20487
21583
  onClick: () => editor.chain().focus().toggleUnderline().run(),
20488
21584
  active: editor.isActive("underline"),
20489
21585
  title: t("toolbar.underline"),
20490
- children: /* @__PURE__ */ jsx79(UnderlineIcon, { className: "w-4 h-4" })
21586
+ children: /* @__PURE__ */ jsx81(UnderlineIcon, { className: "w-4 h-4" })
20491
21587
  }
20492
21588
  ),
20493
- /* @__PURE__ */ jsx79(ToolbarButton, { onClick: () => editor.chain().focus().toggleStrike().run(), active: editor.isActive("strike"), title: t("toolbar.strike"), children: /* @__PURE__ */ jsx79(StrikethroughIcon, { className: "w-4 h-4" }) }),
20494
- /* @__PURE__ */ jsx79(ToolbarButton, { onClick: () => editor.chain().focus().toggleCode().run(), active: editor.isActive("code"), title: t("toolbar.code"), children: /* @__PURE__ */ jsx79(CodeIcon, { className: "w-4 h-4" }) }),
20495
- /* @__PURE__ */ jsx79(ToolbarDivider, {}),
20496
- /* @__PURE__ */ jsx79(
21589
+ /* @__PURE__ */ jsx81(ToolbarButton, { onClick: () => editor.chain().focus().toggleStrike().run(), active: editor.isActive("strike"), title: t("toolbar.strike"), children: /* @__PURE__ */ jsx81(StrikethroughIcon, { className: "w-4 h-4" }) }),
21590
+ /* @__PURE__ */ jsx81(ToolbarButton, { onClick: () => editor.chain().focus().toggleCode().run(), active: editor.isActive("code"), title: t("toolbar.code"), children: /* @__PURE__ */ jsx81(CodeIcon, { className: "w-4 h-4" }) }),
21591
+ /* @__PURE__ */ jsx81(ToolbarDivider, {}),
21592
+ /* @__PURE__ */ jsx81(
20497
21593
  DropdownMenu,
20498
21594
  {
20499
- trigger: /* @__PURE__ */ jsxs71(ToolbarButton, { onClick: () => {
21595
+ trigger: /* @__PURE__ */ jsxs73(ToolbarButton, { onClick: () => {
20500
21596
  }, title: t("colors.textColor"), children: [
20501
- /* @__PURE__ */ jsx79(Palette2, { className: "w-4 h-4" }),
20502
- /* @__PURE__ */ jsx79(ChevronDown6, { className: "w-3 h-3" })
21597
+ /* @__PURE__ */ jsx81(Palette2, { className: "w-4 h-4" }),
21598
+ /* @__PURE__ */ jsx81(ChevronDown6, { className: "w-3 h-3" })
20503
21599
  ] }),
20504
- children: /* @__PURE__ */ jsx79(
21600
+ children: /* @__PURE__ */ jsx81(
20505
21601
  EditorColorPalette,
20506
21602
  {
20507
21603
  colors: textColors,
@@ -20518,15 +21614,15 @@ var EditorToolbar = ({
20518
21614
  )
20519
21615
  }
20520
21616
  ),
20521
- /* @__PURE__ */ jsx79(
21617
+ /* @__PURE__ */ jsx81(
20522
21618
  DropdownMenu,
20523
21619
  {
20524
- trigger: /* @__PURE__ */ jsxs71(ToolbarButton, { onClick: () => {
21620
+ trigger: /* @__PURE__ */ jsxs73(ToolbarButton, { onClick: () => {
20525
21621
  }, active: editor.isActive("highlight"), title: t("colors.highlight"), children: [
20526
- /* @__PURE__ */ jsx79(Highlighter, { className: "w-4 h-4" }),
20527
- /* @__PURE__ */ jsx79(ChevronDown6, { className: "w-3 h-3" })
21622
+ /* @__PURE__ */ jsx81(Highlighter, { className: "w-4 h-4" }),
21623
+ /* @__PURE__ */ jsx81(ChevronDown6, { className: "w-3 h-3" })
20528
21624
  ] }),
20529
- children: /* @__PURE__ */ jsx79(
21625
+ children: /* @__PURE__ */ jsx81(
20530
21626
  EditorColorPalette,
20531
21627
  {
20532
21628
  colors: highlightColors,
@@ -20543,17 +21639,33 @@ var EditorToolbar = ({
20543
21639
  )
20544
21640
  }
20545
21641
  ),
20546
- /* @__PURE__ */ jsx79(ToolbarDivider, {}),
20547
- /* @__PURE__ */ jsxs71(
21642
+ /* @__PURE__ */ jsx81(ToolbarDivider, {}),
21643
+ /* @__PURE__ */ jsx81(
21644
+ DropdownMenu,
21645
+ {
21646
+ trigger: /* @__PURE__ */ jsx81(ToolbarButton, { onClick: () => {
21647
+ }, title: t("toolbar.emoji"), children: /* @__PURE__ */ jsx81(Smile3, { className: "w-4 h-4" }) }),
21648
+ children: /* @__PURE__ */ jsx81(
21649
+ EmojiPicker,
21650
+ {
21651
+ onSelect: (emoji) => {
21652
+ editor.chain().focus().insertContent(emoji).run();
21653
+ }
21654
+ }
21655
+ )
21656
+ }
21657
+ ),
21658
+ /* @__PURE__ */ jsx81(ToolbarDivider, {}),
21659
+ /* @__PURE__ */ jsxs73(
20548
21660
  DropdownMenu,
20549
21661
  {
20550
- trigger: /* @__PURE__ */ jsxs71(ToolbarButton, { onClick: () => {
21662
+ trigger: /* @__PURE__ */ jsxs73(ToolbarButton, { onClick: () => {
20551
21663
  }, title: t("toolbar.alignment"), children: [
20552
- /* @__PURE__ */ jsx79(AlignLeft, { className: "w-4 h-4" }),
20553
- /* @__PURE__ */ jsx79(ChevronDown6, { className: "w-3 h-3" })
21664
+ /* @__PURE__ */ jsx81(AlignLeft, { className: "w-4 h-4" }),
21665
+ /* @__PURE__ */ jsx81(ChevronDown6, { className: "w-3 h-3" })
20554
21666
  ] }),
20555
21667
  children: [
20556
- /* @__PURE__ */ jsx79(
21668
+ /* @__PURE__ */ jsx81(
20557
21669
  DropdownMenuItem,
20558
21670
  {
20559
21671
  icon: AlignLeft,
@@ -20562,7 +21674,7 @@ var EditorToolbar = ({
20562
21674
  active: editor.isActive({ textAlign: "left" })
20563
21675
  }
20564
21676
  ),
20565
- /* @__PURE__ */ jsx79(
21677
+ /* @__PURE__ */ jsx81(
20566
21678
  DropdownMenuItem,
20567
21679
  {
20568
21680
  icon: AlignCenter,
@@ -20571,7 +21683,7 @@ var EditorToolbar = ({
20571
21683
  active: editor.isActive({ textAlign: "center" })
20572
21684
  }
20573
21685
  ),
20574
- /* @__PURE__ */ jsx79(
21686
+ /* @__PURE__ */ jsx81(
20575
21687
  DropdownMenuItem,
20576
21688
  {
20577
21689
  icon: AlignRight,
@@ -20580,7 +21692,7 @@ var EditorToolbar = ({
20580
21692
  active: editor.isActive({ textAlign: "right" })
20581
21693
  }
20582
21694
  ),
20583
- /* @__PURE__ */ jsx79(
21695
+ /* @__PURE__ */ jsx81(
20584
21696
  DropdownMenuItem,
20585
21697
  {
20586
21698
  icon: AlignJustify,
@@ -20592,17 +21704,17 @@ var EditorToolbar = ({
20592
21704
  ]
20593
21705
  }
20594
21706
  ),
20595
- /* @__PURE__ */ jsx79(ToolbarDivider, {}),
20596
- /* @__PURE__ */ jsxs71(
21707
+ /* @__PURE__ */ jsx81(ToolbarDivider, {}),
21708
+ /* @__PURE__ */ jsxs73(
20597
21709
  DropdownMenu,
20598
21710
  {
20599
- trigger: /* @__PURE__ */ jsxs71(ToolbarButton, { onClick: () => {
21711
+ trigger: /* @__PURE__ */ jsxs73(ToolbarButton, { onClick: () => {
20600
21712
  }, title: t("toolbar.bulletList"), children: [
20601
- /* @__PURE__ */ jsx79(ListIcon, { className: "w-4 h-4" }),
20602
- /* @__PURE__ */ jsx79(ChevronDown6, { className: "w-3 h-3" })
21713
+ /* @__PURE__ */ jsx81(ListIcon, { className: "w-4 h-4" }),
21714
+ /* @__PURE__ */ jsx81(ChevronDown6, { className: "w-3 h-3" })
20603
21715
  ] }),
20604
21716
  children: [
20605
- /* @__PURE__ */ jsx79(
21717
+ /* @__PURE__ */ jsx81(
20606
21718
  DropdownMenuItem,
20607
21719
  {
20608
21720
  icon: ListIcon,
@@ -20612,7 +21724,7 @@ var EditorToolbar = ({
20612
21724
  shortcut: "Ctrl+Shift+8"
20613
21725
  }
20614
21726
  ),
20615
- /* @__PURE__ */ jsx79(
21727
+ /* @__PURE__ */ jsx81(
20616
21728
  DropdownMenuItem,
20617
21729
  {
20618
21730
  icon: ListOrderedIcon,
@@ -20622,7 +21734,7 @@ var EditorToolbar = ({
20622
21734
  shortcut: "Ctrl+Shift+7"
20623
21735
  }
20624
21736
  ),
20625
- /* @__PURE__ */ jsx79(
21737
+ /* @__PURE__ */ jsx81(
20626
21738
  DropdownMenuItem,
20627
21739
  {
20628
21740
  icon: ListTodo2,
@@ -20635,16 +21747,16 @@ var EditorToolbar = ({
20635
21747
  ]
20636
21748
  }
20637
21749
  ),
20638
- /* @__PURE__ */ jsxs71(
21750
+ /* @__PURE__ */ jsxs73(
20639
21751
  DropdownMenu,
20640
21752
  {
20641
- trigger: /* @__PURE__ */ jsxs71(ToolbarButton, { onClick: () => {
21753
+ trigger: /* @__PURE__ */ jsxs73(ToolbarButton, { onClick: () => {
20642
21754
  }, title: t("toolbar.quote"), children: [
20643
- /* @__PURE__ */ jsx79(QuoteIcon, { className: "w-4 h-4" }),
20644
- /* @__PURE__ */ jsx79(ChevronDown6, { className: "w-3 h-3" })
21755
+ /* @__PURE__ */ jsx81(QuoteIcon, { className: "w-4 h-4" }),
21756
+ /* @__PURE__ */ jsx81(ChevronDown6, { className: "w-3 h-3" })
20645
21757
  ] }),
20646
21758
  children: [
20647
- /* @__PURE__ */ jsx79(
21759
+ /* @__PURE__ */ jsx81(
20648
21760
  DropdownMenuItem,
20649
21761
  {
20650
21762
  icon: QuoteIcon,
@@ -20654,7 +21766,7 @@ var EditorToolbar = ({
20654
21766
  shortcut: "Ctrl+Shift+B"
20655
21767
  }
20656
21768
  ),
20657
- /* @__PURE__ */ jsx79(
21769
+ /* @__PURE__ */ jsx81(
20658
21770
  DropdownMenuItem,
20659
21771
  {
20660
21772
  icon: FileCode3,
@@ -20667,15 +21779,15 @@ var EditorToolbar = ({
20667
21779
  ]
20668
21780
  }
20669
21781
  ),
20670
- /* @__PURE__ */ jsx79(
21782
+ /* @__PURE__ */ jsx81(
20671
21783
  DropdownMenu,
20672
21784
  {
20673
- trigger: /* @__PURE__ */ jsxs71(ToolbarButton, { onClick: () => {
21785
+ trigger: /* @__PURE__ */ jsxs73(ToolbarButton, { onClick: () => {
20674
21786
  }, title: t("toolbar.image"), children: [
20675
- /* @__PURE__ */ jsx79(ImageIcon2, { className: "w-4 h-4" }),
20676
- /* @__PURE__ */ jsx79(ChevronDown6, { className: "w-3 h-3" })
21787
+ /* @__PURE__ */ jsx81(ImageIcon2, { className: "w-4 h-4" }),
21788
+ /* @__PURE__ */ jsx81(ChevronDown6, { className: "w-3 h-3" })
20677
21789
  ] }),
20678
- children: showImageInput ? /* @__PURE__ */ jsx79(
21790
+ children: showImageInput ? /* @__PURE__ */ jsx81(
20679
21791
  ImageInput,
20680
21792
  {
20681
21793
  onSubmit: (url, alt) => {
@@ -20684,9 +21796,9 @@ var EditorToolbar = ({
20684
21796
  },
20685
21797
  onCancel: () => setShowImageInput(false)
20686
21798
  }
20687
- ) : /* @__PURE__ */ jsxs71(Fragment29, { children: [
20688
- /* @__PURE__ */ jsx79(DropdownMenuItem, { icon: LinkIcon, label: t("imageInput.addFromUrl"), onClick: () => setShowImageInput(true) }),
20689
- /* @__PURE__ */ jsx79(
21799
+ ) : /* @__PURE__ */ jsxs73(Fragment29, { children: [
21800
+ /* @__PURE__ */ jsx81(DropdownMenuItem, { icon: LinkIcon, label: t("imageInput.addFromUrl"), onClick: () => setShowImageInput(true) }),
21801
+ /* @__PURE__ */ jsx81(
20690
21802
  DropdownMenuItem,
20691
21803
  {
20692
21804
  icon: Upload3,
@@ -20695,8 +21807,8 @@ var EditorToolbar = ({
20695
21807
  onClick: () => fileInputRef.current?.click()
20696
21808
  }
20697
21809
  ),
20698
- imageUploadError && /* @__PURE__ */ jsx79(DropdownMenuItem, { label: imageUploadError, disabled: true, destructive: true }),
20699
- /* @__PURE__ */ jsx79(
21810
+ imageUploadError && /* @__PURE__ */ jsx81(DropdownMenuItem, { label: imageUploadError, disabled: true, destructive: true }),
21811
+ /* @__PURE__ */ jsx81(
20700
21812
  "input",
20701
21813
  {
20702
21814
  ref: fileInputRef,
@@ -20714,16 +21826,16 @@ var EditorToolbar = ({
20714
21826
  ] })
20715
21827
  }
20716
21828
  ),
20717
- /* @__PURE__ */ jsxs71(
21829
+ /* @__PURE__ */ jsxs73(
20718
21830
  DropdownMenu,
20719
21831
  {
20720
- trigger: /* @__PURE__ */ jsxs71(ToolbarButton, { onClick: () => {
21832
+ trigger: /* @__PURE__ */ jsxs73(ToolbarButton, { onClick: () => {
20721
21833
  }, title: t("toolbar.table"), children: [
20722
- /* @__PURE__ */ jsx79(TableIcon, { className: "w-4 h-4" }),
20723
- /* @__PURE__ */ jsx79(ChevronDown6, { className: "w-3 h-3" })
21834
+ /* @__PURE__ */ jsx81(TableIcon, { className: "w-4 h-4" }),
21835
+ /* @__PURE__ */ jsx81(ChevronDown6, { className: "w-3 h-3" })
20724
21836
  ] }),
20725
21837
  children: [
20726
- /* @__PURE__ */ jsx79(
21838
+ /* @__PURE__ */ jsx81(
20727
21839
  DropdownMenuItem,
20728
21840
  {
20729
21841
  icon: TableIcon,
@@ -20731,8 +21843,8 @@ var EditorToolbar = ({
20731
21843
  onClick: () => editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run()
20732
21844
  }
20733
21845
  ),
20734
- /* @__PURE__ */ jsx79("div", { className: "my-1 border-t" }),
20735
- /* @__PURE__ */ jsx79(
21846
+ /* @__PURE__ */ jsx81("div", { className: "my-1 border-t" }),
21847
+ /* @__PURE__ */ jsx81(
20736
21848
  DropdownMenuItem,
20737
21849
  {
20738
21850
  icon: ArrowDown,
@@ -20741,7 +21853,7 @@ var EditorToolbar = ({
20741
21853
  disabled: !editor.can().addColumnBefore()
20742
21854
  }
20743
21855
  ),
20744
- /* @__PURE__ */ jsx79(
21856
+ /* @__PURE__ */ jsx81(
20745
21857
  DropdownMenuItem,
20746
21858
  {
20747
21859
  icon: ArrowDown,
@@ -20750,7 +21862,7 @@ var EditorToolbar = ({
20750
21862
  disabled: !editor.can().addColumnAfter()
20751
21863
  }
20752
21864
  ),
20753
- /* @__PURE__ */ jsx79(
21865
+ /* @__PURE__ */ jsx81(
20754
21866
  DropdownMenuItem,
20755
21867
  {
20756
21868
  icon: ArrowRight,
@@ -20759,7 +21871,7 @@ var EditorToolbar = ({
20759
21871
  disabled: !editor.can().addRowBefore()
20760
21872
  }
20761
21873
  ),
20762
- /* @__PURE__ */ jsx79(
21874
+ /* @__PURE__ */ jsx81(
20763
21875
  DropdownMenuItem,
20764
21876
  {
20765
21877
  icon: ArrowRight,
@@ -20768,8 +21880,8 @@ var EditorToolbar = ({
20768
21880
  disabled: !editor.can().addRowAfter()
20769
21881
  }
20770
21882
  ),
20771
- /* @__PURE__ */ jsx79("div", { className: "my-1 border-t" }),
20772
- /* @__PURE__ */ jsx79(
21883
+ /* @__PURE__ */ jsx81("div", { className: "my-1 border-t" }),
21884
+ /* @__PURE__ */ jsx81(
20773
21885
  DropdownMenuItem,
20774
21886
  {
20775
21887
  icon: Trash22,
@@ -20778,7 +21890,7 @@ var EditorToolbar = ({
20778
21890
  disabled: !editor.can().deleteColumn()
20779
21891
  }
20780
21892
  ),
20781
- /* @__PURE__ */ jsx79(
21893
+ /* @__PURE__ */ jsx81(
20782
21894
  DropdownMenuItem,
20783
21895
  {
20784
21896
  icon: Trash22,
@@ -20787,7 +21899,7 @@ var EditorToolbar = ({
20787
21899
  disabled: !editor.can().deleteRow()
20788
21900
  }
20789
21901
  ),
20790
- /* @__PURE__ */ jsx79(
21902
+ /* @__PURE__ */ jsx81(
20791
21903
  DropdownMenuItem,
20792
21904
  {
20793
21905
  icon: Trash22,
@@ -20799,33 +21911,33 @@ var EditorToolbar = ({
20799
21911
  ]
20800
21912
  }
20801
21913
  ),
20802
- /* @__PURE__ */ jsx79(ToolbarDivider, {}),
20803
- /* @__PURE__ */ jsx79(
21914
+ /* @__PURE__ */ jsx81(ToolbarDivider, {}),
21915
+ /* @__PURE__ */ jsx81(
20804
21916
  ToolbarButton,
20805
21917
  {
20806
21918
  onClick: () => editor.chain().focus().toggleSubscript().run(),
20807
21919
  active: editor.isActive("subscript"),
20808
21920
  title: t("toolbar.subscript"),
20809
- children: /* @__PURE__ */ jsx79(SubscriptIcon, { className: "w-4 h-4" })
21921
+ children: /* @__PURE__ */ jsx81(SubscriptIcon, { className: "w-4 h-4" })
20810
21922
  }
20811
21923
  ),
20812
- /* @__PURE__ */ jsx79(
21924
+ /* @__PURE__ */ jsx81(
20813
21925
  ToolbarButton,
20814
21926
  {
20815
21927
  onClick: () => editor.chain().focus().toggleSuperscript().run(),
20816
21928
  active: editor.isActive("superscript"),
20817
21929
  title: t("toolbar.superscript"),
20818
- children: /* @__PURE__ */ jsx79(SuperscriptIcon, { className: "w-4 h-4" })
21930
+ children: /* @__PURE__ */ jsx81(SuperscriptIcon, { className: "w-4 h-4" })
20819
21931
  }
20820
21932
  ),
20821
- /* @__PURE__ */ jsx79(ToolbarDivider, {}),
20822
- /* @__PURE__ */ jsx79(ToolbarButton, { onClick: () => editor.chain().focus().undo().run(), disabled: !editor.can().undo(), title: t("toolbar.undo"), children: /* @__PURE__ */ jsx79(UndoIcon, { className: "w-4 h-4" }) }),
20823
- /* @__PURE__ */ jsx79(ToolbarButton, { onClick: () => editor.chain().focus().redo().run(), disabled: !editor.can().redo(), title: t("toolbar.redo"), children: /* @__PURE__ */ jsx79(RedoIcon, { className: "w-4 h-4" }) })
21933
+ /* @__PURE__ */ jsx81(ToolbarDivider, {}),
21934
+ /* @__PURE__ */ jsx81(ToolbarButton, { onClick: () => editor.chain().focus().undo().run(), disabled: !editor.can().undo(), title: t("toolbar.undo"), children: /* @__PURE__ */ jsx81(UndoIcon, { className: "w-4 h-4" }) }),
21935
+ /* @__PURE__ */ jsx81(ToolbarButton, { onClick: () => editor.chain().focus().redo().run(), disabled: !editor.can().redo(), title: t("toolbar.redo"), children: /* @__PURE__ */ jsx81(RedoIcon, { className: "w-4 h-4" }) })
20824
21936
  ] });
20825
21937
  };
20826
21938
 
20827
21939
  // ../../components/ui/UEditor/menus.tsx
20828
- import { useCallback as useCallback16, useEffect as useEffect31, useMemo as useMemo24, useRef as useRef28, useState as useState51 } from "react";
21940
+ import { useCallback as useCallback16, useEffect as useEffect33, useMemo as useMemo25, useRef as useRef29, useState as useState53 } from "react";
20829
21941
  import { createPortal as createPortal9 } from "react-dom";
20830
21942
  import { useTranslations as useTranslations5 } from "next-intl";
20831
21943
  import {
@@ -20851,12 +21963,12 @@ import {
20851
21963
  Underline as UnderlineIcon2,
20852
21964
  Strikethrough as StrikethroughIcon2
20853
21965
  } from "lucide-react";
20854
- import { jsx as jsx80, jsxs as jsxs72 } from "react/jsx-runtime";
21966
+ import { jsx as jsx82, jsxs as jsxs74 } from "react/jsx-runtime";
20855
21967
  var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
20856
21968
  const t = useTranslations5("UEditor");
20857
- const [selectedIndex, setSelectedIndex] = useState51(0);
20858
- const menuRef = useRef28(null);
20859
- const allCommands = useMemo24(
21969
+ const [selectedIndex, setSelectedIndex] = useState53(0);
21970
+ const menuRef = useRef29(null);
21971
+ const allCommands = useMemo25(
20860
21972
  () => [
20861
21973
  {
20862
21974
  icon: Type3,
@@ -20927,15 +22039,15 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
20927
22039
  ],
20928
22040
  [editor, t]
20929
22041
  );
20930
- const commands = useMemo24(() => {
22042
+ const commands = useMemo25(() => {
20931
22043
  if (!filterText) return allCommands;
20932
22044
  const lowerFilter = filterText.toLowerCase();
20933
22045
  return allCommands.filter((cmd) => cmd.label.toLowerCase().includes(lowerFilter) || cmd.description.toLowerCase().includes(lowerFilter));
20934
22046
  }, [allCommands, filterText]);
20935
- useEffect31(() => {
22047
+ useEffect33(() => {
20936
22048
  setSelectedIndex(0);
20937
22049
  }, [filterText]);
20938
- useEffect31(() => {
22050
+ useEffect33(() => {
20939
22051
  const selectedElement = menuRef.current?.querySelector(`[data-index="${selectedIndex}"]`);
20940
22052
  selectedElement?.scrollIntoView({ block: "nearest" });
20941
22053
  }, [selectedIndex]);
@@ -20949,7 +22061,7 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
20949
22061
  },
20950
22062
  [commands, onClose]
20951
22063
  );
20952
- useEffect31(() => {
22064
+ useEffect33(() => {
20953
22065
  const handleKeyDown = (e) => {
20954
22066
  if (commands.length === 0) return;
20955
22067
  if (e.key === "ArrowDown") {
@@ -20970,11 +22082,11 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
20970
22082
  return () => document.removeEventListener("keydown", handleKeyDown);
20971
22083
  }, [commands, selectedIndex, selectCommand, onClose]);
20972
22084
  if (commands.length === 0) {
20973
- return /* @__PURE__ */ jsx80("div", { className: "w-72 p-4 text-center text-muted-foreground text-sm", children: t("slashCommand.noResults") });
22085
+ return /* @__PURE__ */ jsx82("div", { className: "w-72 p-4 text-center text-muted-foreground text-sm", children: t("slashCommand.noResults") });
20974
22086
  }
20975
- return /* @__PURE__ */ jsxs72("div", { ref: menuRef, className: "w-72 max-h-80 overflow-y-auto", children: [
20976
- /* @__PURE__ */ jsx80("div", { className: "px-3 py-2 border-b", children: /* @__PURE__ */ jsx80("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: t("slashCommand.basicBlocks") }) }),
20977
- /* @__PURE__ */ jsx80("div", { className: "p-1", children: commands.map((cmd, index) => /* @__PURE__ */ jsxs72(
22087
+ return /* @__PURE__ */ jsxs74("div", { ref: menuRef, className: "w-72 max-h-80 overflow-y-auto", children: [
22088
+ /* @__PURE__ */ jsx82("div", { className: "px-3 py-2 border-b", children: /* @__PURE__ */ jsx82("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: t("slashCommand.basicBlocks") }) }),
22089
+ /* @__PURE__ */ jsx82("div", { className: "p-1", children: commands.map((cmd, index) => /* @__PURE__ */ jsxs74(
20978
22090
  "button",
20979
22091
  {
20980
22092
  type: "button",
@@ -20987,19 +22099,19 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
20987
22099
  selectedIndex === index ? "bg-accent" : "hover:bg-accent/50"
20988
22100
  ),
20989
22101
  children: [
20990
- /* @__PURE__ */ jsx80(
22102
+ /* @__PURE__ */ jsx82(
20991
22103
  "div",
20992
22104
  {
20993
22105
  className: cn(
20994
22106
  "flex items-center justify-center w-10 h-10 rounded-lg mr-3 transition-colors",
20995
22107
  selectedIndex === index ? "bg-primary/10" : "bg-muted/50 group-hover:bg-muted"
20996
22108
  ),
20997
- children: /* @__PURE__ */ jsx80(cmd.icon, { className: cn("w-5 h-5", selectedIndex === index ? "text-primary" : "text-muted-foreground") })
22109
+ children: /* @__PURE__ */ jsx82(cmd.icon, { className: cn("w-5 h-5", selectedIndex === index ? "text-primary" : "text-muted-foreground") })
20998
22110
  }
20999
22111
  ),
21000
- /* @__PURE__ */ jsxs72("div", { className: "text-left", children: [
21001
- /* @__PURE__ */ jsx80("div", { className: cn("text-sm font-medium", selectedIndex === index && "text-primary"), children: cmd.label }),
21002
- /* @__PURE__ */ jsx80("div", { className: "text-xs text-muted-foreground", children: cmd.description })
22112
+ /* @__PURE__ */ jsxs74("div", { className: "text-left", children: [
22113
+ /* @__PURE__ */ jsx82("div", { className: cn("text-sm font-medium", selectedIndex === index && "text-primary"), children: cmd.label }),
22114
+ /* @__PURE__ */ jsx82("div", { className: "text-xs text-muted-foreground", children: cmd.description })
21003
22115
  ] })
21004
22116
  ]
21005
22117
  },
@@ -21009,19 +22121,19 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
21009
22121
  };
21010
22122
  var FloatingMenuContent = ({ editor }) => {
21011
22123
  const t = useTranslations5("UEditor");
21012
- const [showCommands, setShowCommands] = useState51(false);
22124
+ const [showCommands, setShowCommands] = useState53(false);
21013
22125
  if (showCommands) {
21014
- return /* @__PURE__ */ jsx80(SlashCommandMenu, { editor, onClose: () => setShowCommands(false) });
22126
+ return /* @__PURE__ */ jsx82(SlashCommandMenu, { editor, onClose: () => setShowCommands(false) });
21015
22127
  }
21016
- return /* @__PURE__ */ jsxs72(
22128
+ return /* @__PURE__ */ jsxs74(
21017
22129
  "button",
21018
22130
  {
21019
22131
  type: "button",
21020
22132
  onClick: () => setShowCommands(true),
21021
22133
  className: "flex items-center gap-1 px-2 py-1.5 rounded-lg hover:bg-accent transition-all group",
21022
22134
  children: [
21023
- /* @__PURE__ */ jsx80(Plus3, { className: "w-4 h-4 text-muted-foreground group-hover:text-foreground" }),
21024
- /* @__PURE__ */ jsx80("span", { className: "text-sm text-muted-foreground group-hover:text-foreground", children: t("floatingMenu.addBlock") })
22135
+ /* @__PURE__ */ jsx82(Plus3, { className: "w-4 h-4 text-muted-foreground group-hover:text-foreground" }),
22136
+ /* @__PURE__ */ jsx82("span", { className: "text-sm text-muted-foreground group-hover:text-foreground", children: t("floatingMenu.addBlock") })
21025
22137
  ]
21026
22138
  }
21027
22139
  );
@@ -21032,12 +22144,12 @@ var BubbleMenuContent = ({
21032
22144
  }) => {
21033
22145
  const t = useTranslations5("UEditor");
21034
22146
  const { textColors, highlightColors } = useEditorColors();
21035
- const [showLinkInput, setShowLinkInput] = useState51(false);
21036
- const [showEditorColorPalette, setShowEditorColorPalette] = useState51(false);
21037
- useEffect31(() => {
22147
+ const [showLinkInput, setShowLinkInput] = useState53(false);
22148
+ const [showEditorColorPalette, setShowEditorColorPalette] = useState53(false);
22149
+ useEffect33(() => {
21038
22150
  onKeepOpenChange?.(showLinkInput);
21039
22151
  }, [onKeepOpenChange, showLinkInput]);
21040
- useEffect31(() => {
22152
+ useEffect33(() => {
21041
22153
  if (!showLinkInput) return;
21042
22154
  const close = () => setShowLinkInput(false);
21043
22155
  editor.on("selectionUpdate", close);
@@ -21048,7 +22160,7 @@ var BubbleMenuContent = ({
21048
22160
  };
21049
22161
  }, [editor, showLinkInput]);
21050
22162
  if (showLinkInput) {
21051
- return /* @__PURE__ */ jsx80(
22163
+ return /* @__PURE__ */ jsx82(
21052
22164
  LinkInput,
21053
22165
  {
21054
22166
  initialUrl: editor.getAttributes("link").href || "",
@@ -21065,8 +22177,8 @@ var BubbleMenuContent = ({
21065
22177
  );
21066
22178
  }
21067
22179
  if (showEditorColorPalette) {
21068
- return /* @__PURE__ */ jsxs72("div", { className: "w-48", children: [
21069
- /* @__PURE__ */ jsx80(
22180
+ return /* @__PURE__ */ jsxs74("div", { className: "w-48", children: [
22181
+ /* @__PURE__ */ jsx82(
21070
22182
  EditorColorPalette,
21071
22183
  {
21072
22184
  colors: textColors,
@@ -21081,8 +22193,8 @@ var BubbleMenuContent = ({
21081
22193
  label: t("colors.textColor")
21082
22194
  }
21083
22195
  ),
21084
- /* @__PURE__ */ jsx80("div", { className: "border-t my-1" }),
21085
- /* @__PURE__ */ jsx80(
22196
+ /* @__PURE__ */ jsx82("div", { className: "border-t my-1" }),
22197
+ /* @__PURE__ */ jsx82(
21086
22198
  EditorColorPalette,
21087
22199
  {
21088
22200
  colors: highlightColors,
@@ -21097,7 +22209,7 @@ var BubbleMenuContent = ({
21097
22209
  label: t("colors.highlight")
21098
22210
  }
21099
22211
  ),
21100
- /* @__PURE__ */ jsx80("div", { className: "p-2 border-t", children: /* @__PURE__ */ jsx80(
22212
+ /* @__PURE__ */ jsx82("div", { className: "p-2 border-t", children: /* @__PURE__ */ jsx82(
21101
22213
  "button",
21102
22214
  {
21103
22215
  type: "button",
@@ -21108,22 +22220,22 @@ var BubbleMenuContent = ({
21108
22220
  ) })
21109
22221
  ] });
21110
22222
  }
21111
- return /* @__PURE__ */ jsxs72("div", { className: "flex items-center gap-0.5 p-1", children: [
21112
- /* @__PURE__ */ jsx80(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ jsx80(BoldIcon2, { className: "w-4 h-4" }) }),
21113
- /* @__PURE__ */ jsx80(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ jsx80(ItalicIcon2, { className: "w-4 h-4" }) }),
21114
- /* @__PURE__ */ jsx80(
22223
+ return /* @__PURE__ */ jsxs74("div", { className: "flex items-center gap-0.5 p-1", children: [
22224
+ /* @__PURE__ */ jsx82(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ jsx82(BoldIcon2, { className: "w-4 h-4" }) }),
22225
+ /* @__PURE__ */ jsx82(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ jsx82(ItalicIcon2, { className: "w-4 h-4" }) }),
22226
+ /* @__PURE__ */ jsx82(
21115
22227
  ToolbarButton,
21116
22228
  {
21117
22229
  onClick: () => editor.chain().focus().toggleUnderline().run(),
21118
22230
  active: editor.isActive("underline"),
21119
22231
  title: t("toolbar.underline"),
21120
- children: /* @__PURE__ */ jsx80(UnderlineIcon2, { className: "w-4 h-4" })
22232
+ children: /* @__PURE__ */ jsx82(UnderlineIcon2, { className: "w-4 h-4" })
21121
22233
  }
21122
22234
  ),
21123
- /* @__PURE__ */ jsx80(ToolbarButton, { onClick: () => editor.chain().focus().toggleStrike().run(), active: editor.isActive("strike"), title: t("toolbar.strike"), children: /* @__PURE__ */ jsx80(StrikethroughIcon2, { className: "w-4 h-4" }) }),
21124
- /* @__PURE__ */ jsx80(ToolbarButton, { onClick: () => editor.chain().focus().toggleCode().run(), active: editor.isActive("code"), title: t("toolbar.code"), children: /* @__PURE__ */ jsx80(CodeIcon2, { className: "w-4 h-4" }) }),
21125
- /* @__PURE__ */ jsx80("div", { className: "w-px h-6 bg-border/50 mx-1" }),
21126
- /* @__PURE__ */ jsx80(
22235
+ /* @__PURE__ */ jsx82(ToolbarButton, { onClick: () => editor.chain().focus().toggleStrike().run(), active: editor.isActive("strike"), title: t("toolbar.strike"), children: /* @__PURE__ */ jsx82(StrikethroughIcon2, { className: "w-4 h-4" }) }),
22236
+ /* @__PURE__ */ jsx82(ToolbarButton, { onClick: () => editor.chain().focus().toggleCode().run(), active: editor.isActive("code"), title: t("toolbar.code"), children: /* @__PURE__ */ jsx82(CodeIcon2, { className: "w-4 h-4" }) }),
22237
+ /* @__PURE__ */ jsx82("div", { className: "w-px h-6 bg-border/50 mx-1" }),
22238
+ /* @__PURE__ */ jsx82(
21127
22239
  ToolbarButton,
21128
22240
  {
21129
22241
  onMouseDown: () => {
@@ -21134,41 +22246,41 @@ var BubbleMenuContent = ({
21134
22246
  },
21135
22247
  active: editor.isActive("link"),
21136
22248
  title: t("toolbar.link"),
21137
- children: /* @__PURE__ */ jsx80(LinkIcon2, { className: "w-4 h-4" })
22249
+ children: /* @__PURE__ */ jsx82(LinkIcon2, { className: "w-4 h-4" })
21138
22250
  }
21139
22251
  ),
21140
- /* @__PURE__ */ jsx80(ToolbarButton, { onClick: () => setShowEditorColorPalette(true), title: t("colors.textColor"), children: /* @__PURE__ */ jsx80(Palette3, { className: "w-4 h-4" }) }),
21141
- /* @__PURE__ */ jsx80("div", { className: "w-px h-6 bg-border/50 mx-1" }),
21142
- /* @__PURE__ */ jsx80(
22252
+ /* @__PURE__ */ jsx82(ToolbarButton, { onClick: () => setShowEditorColorPalette(true), title: t("colors.textColor"), children: /* @__PURE__ */ jsx82(Palette3, { className: "w-4 h-4" }) }),
22253
+ /* @__PURE__ */ jsx82("div", { className: "w-px h-6 bg-border/50 mx-1" }),
22254
+ /* @__PURE__ */ jsx82(
21143
22255
  ToolbarButton,
21144
22256
  {
21145
22257
  onClick: () => editor.chain().focus().toggleSubscript().run(),
21146
22258
  active: editor.isActive("subscript"),
21147
22259
  title: t("toolbar.subscript"),
21148
- children: /* @__PURE__ */ jsx80(SubscriptIcon2, { className: "w-4 h-4" })
22260
+ children: /* @__PURE__ */ jsx82(SubscriptIcon2, { className: "w-4 h-4" })
21149
22261
  }
21150
22262
  ),
21151
- /* @__PURE__ */ jsx80(
22263
+ /* @__PURE__ */ jsx82(
21152
22264
  ToolbarButton,
21153
22265
  {
21154
22266
  onClick: () => editor.chain().focus().toggleSuperscript().run(),
21155
22267
  active: editor.isActive("superscript"),
21156
22268
  title: t("toolbar.superscript"),
21157
- children: /* @__PURE__ */ jsx80(SuperscriptIcon2, { className: "w-4 h-4" })
22269
+ children: /* @__PURE__ */ jsx82(SuperscriptIcon2, { className: "w-4 h-4" })
21158
22270
  }
21159
22271
  )
21160
22272
  ] });
21161
22273
  };
21162
22274
  var CustomBubbleMenu = ({ editor }) => {
21163
- const [isVisible, setIsVisible] = useState51(false);
21164
- const [position, setPosition] = useState51({ top: 0, left: 0 });
21165
- const menuRef = useRef28(null);
21166
- const keepOpenRef = useRef28(false);
22275
+ const [isVisible, setIsVisible] = useState53(false);
22276
+ const [position, setPosition] = useState53({ top: 0, left: 0 });
22277
+ const menuRef = useRef29(null);
22278
+ const keepOpenRef = useRef29(false);
21167
22279
  const setKeepOpen = useCallback16((next) => {
21168
22280
  keepOpenRef.current = next;
21169
22281
  if (next) setIsVisible(true);
21170
22282
  }, []);
21171
- useEffect31(() => {
22283
+ useEffect33(() => {
21172
22284
  const updatePosition = () => {
21173
22285
  const { state, view } = editor;
21174
22286
  const { from, to, empty } = state.selection;
@@ -21197,7 +22309,7 @@ var CustomBubbleMenu = ({ editor }) => {
21197
22309
  }, [editor]);
21198
22310
  if (!isVisible) return null;
21199
22311
  return createPortal9(
21200
- /* @__PURE__ */ jsx80(
22312
+ /* @__PURE__ */ jsx82(
21201
22313
  "div",
21202
22314
  {
21203
22315
  ref: menuRef,
@@ -21208,7 +22320,7 @@ var CustomBubbleMenu = ({ editor }) => {
21208
22320
  transform: "translate(-50%, -100%)"
21209
22321
  },
21210
22322
  onMouseDown: (e) => e.preventDefault(),
21211
- children: /* @__PURE__ */ jsx80(
22323
+ children: /* @__PURE__ */ jsx82(
21212
22324
  BubbleMenuContent,
21213
22325
  {
21214
22326
  editor,
@@ -21221,9 +22333,9 @@ var CustomBubbleMenu = ({ editor }) => {
21221
22333
  );
21222
22334
  };
21223
22335
  var CustomFloatingMenu = ({ editor }) => {
21224
- const [isVisible, setIsVisible] = useState51(false);
21225
- const [position, setPosition] = useState51({ top: 0, left: 0 });
21226
- useEffect31(() => {
22336
+ const [isVisible, setIsVisible] = useState53(false);
22337
+ const [position, setPosition] = useState53({ top: 0, left: 0 });
22338
+ useEffect33(() => {
21227
22339
  const updatePosition = () => {
21228
22340
  const { state, view } = editor;
21229
22341
  const { $from, empty } = state.selection;
@@ -21250,7 +22362,7 @@ var CustomFloatingMenu = ({ editor }) => {
21250
22362
  }, [editor]);
21251
22363
  if (!isVisible) return null;
21252
22364
  return createPortal9(
21253
- /* @__PURE__ */ jsx80(
22365
+ /* @__PURE__ */ jsx82(
21254
22366
  "div",
21255
22367
  {
21256
22368
  className: "fixed z-50 rounded-2xl border border-border bg-card text-card-foreground shadow-lg backdrop-blur-sm overflow-hidden animate-in fade-in-0 slide-in-from-bottom-2",
@@ -21260,7 +22372,7 @@ var CustomFloatingMenu = ({ editor }) => {
21260
22372
  transform: "translate(-50%, -100%)"
21261
22373
  },
21262
22374
  onMouseDown: (e) => e.preventDefault(),
21263
- children: /* @__PURE__ */ jsx80(FloatingMenuContent, { editor })
22375
+ children: /* @__PURE__ */ jsx82(FloatingMenuContent, { editor })
21264
22376
  }
21265
22377
  ),
21266
22378
  document.body
@@ -21269,25 +22381,25 @@ var CustomFloatingMenu = ({ editor }) => {
21269
22381
 
21270
22382
  // ../../components/ui/UEditor/CharacterCount.tsx
21271
22383
  import { useTranslations as useTranslations6 } from "next-intl";
21272
- import { jsxs as jsxs73 } from "react/jsx-runtime";
22384
+ import { jsxs as jsxs75 } from "react/jsx-runtime";
21273
22385
  var CharacterCountDisplay = ({ editor, maxCharacters }) => {
21274
22386
  const t = useTranslations6("UEditor");
21275
22387
  const storage = editor.storage;
21276
22388
  const characterCount = storage.characterCount?.characters?.() ?? 0;
21277
22389
  const wordCount = storage.characterCount?.words?.() ?? 0;
21278
22390
  const percentage = maxCharacters ? Math.round(characterCount / maxCharacters * 100) : 0;
21279
- return /* @__PURE__ */ jsxs73("div", { className: "flex items-center gap-3 px-3 py-2 text-xs text-muted-foreground border-t bg-muted/20", children: [
21280
- /* @__PURE__ */ jsxs73("span", { children: [
22391
+ return /* @__PURE__ */ jsxs75("div", { className: "flex items-center gap-3 px-3 py-2 text-xs text-muted-foreground border-t bg-muted/20", children: [
22392
+ /* @__PURE__ */ jsxs75("span", { children: [
21281
22393
  wordCount,
21282
22394
  " ",
21283
22395
  t("words")
21284
22396
  ] }),
21285
- /* @__PURE__ */ jsxs73("span", { children: [
22397
+ /* @__PURE__ */ jsxs75("span", { children: [
21286
22398
  characterCount,
21287
22399
  " ",
21288
22400
  t("characters")
21289
22401
  ] }),
21290
- maxCharacters && /* @__PURE__ */ jsxs73("span", { className: cn(percentage > 90 && "text-destructive", percentage > 100 && "font-bold"), children: [
22402
+ maxCharacters && /* @__PURE__ */ jsxs75("span", { className: cn(percentage > 90 && "text-destructive", percentage > 100 && "font-bold"), children: [
21291
22403
  characterCount,
21292
22404
  "/",
21293
22405
  maxCharacters
@@ -21296,7 +22408,7 @@ var CharacterCountDisplay = ({ editor, maxCharacters }) => {
21296
22408
  };
21297
22409
 
21298
22410
  // ../../components/ui/UEditor/UEditor.tsx
21299
- import { jsx as jsx81, jsxs as jsxs74 } from "react/jsx-runtime";
22411
+ import { jsx as jsx83, jsxs as jsxs76 } from "react/jsx-runtime";
21300
22412
  var UEditor = ({
21301
22413
  content = "",
21302
22414
  onChange,
@@ -21319,7 +22431,7 @@ var UEditor = ({
21319
22431
  }) => {
21320
22432
  const t = useTranslations7("UEditor");
21321
22433
  const effectivePlaceholder = placeholder ?? t("placeholder");
21322
- const extensions = useMemo25(
22434
+ const extensions = useMemo26(
21323
22435
  () => buildUEditorExtensions({ placeholder: effectivePlaceholder, maxCharacters, uploadImage, imageInsertMode, editable }),
21324
22436
  [effectivePlaceholder, maxCharacters, uploadImage, imageInsertMode, editable]
21325
22437
  );
@@ -21428,7 +22540,7 @@ var UEditor = ({
21428
22540
  onJsonChange?.(editor2.getJSON());
21429
22541
  }
21430
22542
  });
21431
- useEffect32(() => {
22543
+ useEffect34(() => {
21432
22544
  if (editor && content !== editor.getHTML()) {
21433
22545
  if (editor.isEmpty && content) {
21434
22546
  editor.commands.setContent(content);
@@ -21436,7 +22548,7 @@ var UEditor = ({
21436
22548
  }
21437
22549
  }, [content, editor]);
21438
22550
  if (!editor) {
21439
- return /* @__PURE__ */ jsx81(
22551
+ return /* @__PURE__ */ jsx83(
21440
22552
  "div",
21441
22553
  {
21442
22554
  className: cn("w-full rounded-lg border bg-background flex items-center justify-center text-muted-foreground", className),
@@ -21445,7 +22557,7 @@ var UEditor = ({
21445
22557
  }
21446
22558
  );
21447
22559
  }
21448
- return /* @__PURE__ */ jsxs74(
22560
+ return /* @__PURE__ */ jsxs76(
21449
22561
  "div",
21450
22562
  {
21451
22563
  className: cn(
@@ -21457,10 +22569,10 @@ var UEditor = ({
21457
22569
  className
21458
22570
  ),
21459
22571
  children: [
21460
- editable && showToolbar && /* @__PURE__ */ jsx81(EditorToolbar, { editor, variant, uploadImage, imageInsertMode }),
21461
- editable && showBubbleMenu && /* @__PURE__ */ jsx81(CustomBubbleMenu, { editor }),
21462
- editable && showFloatingMenu && /* @__PURE__ */ jsx81(CustomFloatingMenu, { editor }),
21463
- /* @__PURE__ */ jsx81(
22572
+ editable && showToolbar && /* @__PURE__ */ jsx83(EditorToolbar, { editor, variant, uploadImage, imageInsertMode }),
22573
+ editable && showBubbleMenu && /* @__PURE__ */ jsx83(CustomBubbleMenu, { editor }),
22574
+ editable && showFloatingMenu && /* @__PURE__ */ jsx83(CustomFloatingMenu, { editor }),
22575
+ /* @__PURE__ */ jsx83(
21464
22576
  EditorContent,
21465
22577
  {
21466
22578
  editor,
@@ -21471,7 +22583,7 @@ var UEditor = ({
21471
22583
  }
21472
22584
  }
21473
22585
  ),
21474
- showCharacterCount && /* @__PURE__ */ jsx81(CharacterCountDisplay, { editor, maxCharacters })
22586
+ showCharacterCount && /* @__PURE__ */ jsx83(CharacterCountDisplay, { editor, maxCharacters })
21475
22587
  ]
21476
22588
  }
21477
22589
  );