@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.cjs CHANGED
@@ -19605,9 +19605,9 @@ function useSmartLocale() {
19605
19605
  }
19606
19606
 
19607
19607
  // ../../components/ui/UEditor/UEditor.tsx
19608
- var import_react47 = require("react");
19608
+ var import_react50 = require("react");
19609
19609
  var import_next_intl6 = require("next-intl");
19610
- var import_react48 = require("@tiptap/react");
19610
+ var import_react51 = require("@tiptap/react");
19611
19611
 
19612
19612
  // ../../components/ui/UEditor/extensions.ts
19613
19613
  var import_extension_document = __toESM(require("@tiptap/extension-document"), 1);
@@ -19966,12 +19966,924 @@ var ClipboardImages = import_core2.Extension.create({
19966
19966
  }
19967
19967
  });
19968
19968
 
19969
- // ../../components/ui/UEditor/resizable-image.tsx
19970
- var import_react41 = require("react");
19971
- var import_extension_image = __toESM(require("@tiptap/extension-image"), 1);
19969
+ // ../../components/ui/UEditor/emoji-suggestion.tsx
19972
19970
  var import_core3 = require("@tiptap/core");
19973
- var import_react42 = require("@tiptap/react");
19971
+ var import_suggestion2 = __toESM(require("@tiptap/suggestion"), 1);
19972
+ var import_react41 = require("@tiptap/react");
19973
+ var import_state2 = require("@tiptap/pm/state");
19974
+ var import_react42 = require("react");
19975
+ var import_lucide_react39 = require("lucide-react");
19976
+ var import_tippy2 = __toESM(require("tippy.js"), 1);
19977
+
19978
+ // ../../components/ui/UEditor/emojis.ts
19979
+ var EMOJI_LIST = [
19980
+ {
19981
+ id: "smileys_people",
19982
+ name: "Smileys & People",
19983
+ emojis: [
19984
+ { emoji: "\u{1F600}", name: "grinning_face" },
19985
+ { emoji: "\u{1F603}", name: "big_eyes_grin" },
19986
+ { emoji: "\u{1F604}", name: "smiling_eyes_grin" },
19987
+ { emoji: "\u{1F601}", name: "beaming_smile" },
19988
+ { emoji: "\u{1F606}", name: "squinting_laugh" },
19989
+ { emoji: "\u{1F605}", name: "sweat_grin" },
19990
+ { emoji: "\u{1F602}", name: "joy_tears" },
19991
+ { emoji: "\u{1F923}", name: "rofl_laugh" },
19992
+ { emoji: "\u{1F972}", name: "tear_smile" },
19993
+ { emoji: "\u263A\uFE0F", name: "warm_smile" },
19994
+ { emoji: "\u{1F60A}", name: "blush_smile" },
19995
+ { emoji: "\u{1F607}", name: "halo_smile" },
19996
+ { emoji: "\u{1F642}", name: "slight_smile" },
19997
+ { emoji: "\u{1F643}", name: "upside_down" },
19998
+ { emoji: "\u{1F609}", name: "wink_face" },
19999
+ { emoji: "\u{1F60C}", name: "relieved_face" },
20000
+ { emoji: "\u{1F60D}", name: "heart_eyes" },
20001
+ { emoji: "\u{1F970}", name: "hearts_face" },
20002
+ { emoji: "\u{1F618}", name: "blow_kiss" },
20003
+ { emoji: "\u{1F617}", name: "kissing_face" },
20004
+ { emoji: "\u{1F619}", name: "smiling_kiss" },
20005
+ { emoji: "\u{1F61A}", name: "closed_eyes_kiss" },
20006
+ { emoji: "\u{1F60B}", name: "yummy_face" },
20007
+ { emoji: "\u{1F61B}", name: "tongue_out" },
20008
+ { emoji: "\u{1F61D}", name: "squinting_tongue" },
20009
+ { emoji: "\u{1F61C}", name: "wink_tongue" },
20010
+ { emoji: "\u{1F92A}", name: "zany_face" },
20011
+ { emoji: "\u{1F928}", name: "raised_eyebrow" },
20012
+ { emoji: "\u{1F9D0}", name: "monocle_face" },
20013
+ { emoji: "\u{1F913}", name: "nerd_face" },
20014
+ { emoji: "\u{1F60E}", name: "sunglasses_face" },
20015
+ { emoji: "\u{1F978}", name: "disguised_face" },
20016
+ { emoji: "\u{1F929}", name: "star_struck" },
20017
+ { emoji: "\u{1F973}", name: "partying_face" },
20018
+ { emoji: "\u{1F60F}", name: "smirking_face" },
20019
+ { emoji: "\u{1F612}", name: "unamused_face" },
20020
+ { emoji: "\u{1F61E}", name: "disappointed_face" },
20021
+ { emoji: "\u{1F614}", name: "pensive_face" },
20022
+ { emoji: "\u{1F61F}", name: "worried_face" },
20023
+ { emoji: "\u{1F615}", name: "confused_face" },
20024
+ { emoji: "\u{1F641}", name: "slight_frown" },
20025
+ { emoji: "\u2639\uFE0F", name: "frowning_face" },
20026
+ { emoji: "\u{1F623}", name: "persevering_face" },
20027
+ { emoji: "\u{1F616}", name: "confounded_face" },
20028
+ { emoji: "\u{1F62B}", name: "tired_face" },
20029
+ { emoji: "\u{1F629}", name: "weary_face" },
20030
+ { emoji: "\u{1F97A}", name: "pleading_face" },
20031
+ { emoji: "\u{1F622}", name: "crying_face" },
20032
+ { emoji: "\u{1F62D}", name: "loudly_crying" },
20033
+ { emoji: "\u{1F624}", name: "steam_nose" },
20034
+ { emoji: "\u{1F621}", name: "pouting_face" },
20035
+ { emoji: "\u{1F92C}", name: "cursing_face" },
20036
+ { emoji: "\u{1F92F}", name: "exploding_head" },
20037
+ { emoji: "\u{1F633}", name: "flushed_face" },
20038
+ { emoji: "\u{1F975}", name: "hot_face" },
20039
+ { emoji: "\u{1F976}", name: "cold_face" },
20040
+ { emoji: "\u{1F631}", name: "screaming_fear" },
20041
+ { emoji: "\u{1F628}", name: "fearful_face" },
20042
+ { emoji: "\u{1F630}", name: "anxious_sweat" },
20043
+ { emoji: "\u{1F625}", name: "relieved_sad" },
20044
+ { emoji: "\u{1F613}", name: "downcast_sweat" },
20045
+ { emoji: "\u{1F917}", name: "hugging_face" },
20046
+ { emoji: "\u{1F914}", name: "thinking_face" },
20047
+ { emoji: "\u{1F92D}", name: "hand_over_mouth" },
20048
+ { emoji: "\u{1F92B}", name: "shushing_face" },
20049
+ { emoji: "\u{1F925}", name: "lying_face" },
20050
+ { emoji: "\u{1F636}", name: "no_mouth" },
20051
+ { emoji: "\u{1F610}", name: "neutral_face" },
20052
+ { emoji: "\u{1F611}", name: "expressionless_face" },
20053
+ { emoji: "\u{1F62C}", name: "grimacing_face" },
20054
+ { emoji: "\u{1F644}", name: "rolling_eyes" },
20055
+ { emoji: "\u{1F62F}", name: "hushed_face" },
20056
+ { emoji: "\u{1F626}", name: "frowning_open" },
20057
+ { emoji: "\u{1F627}", name: "anguished_face" },
20058
+ { emoji: "\u{1F62E}", name: "open_mouth" },
20059
+ { emoji: "\u{1F632}", name: "astonished_face" },
20060
+ { emoji: "\u{1F971}", name: "yawning_face" },
20061
+ { emoji: "\u{1F634}", name: "sleeping_face" },
20062
+ { emoji: "\u{1F924}", name: "drooling_face" },
20063
+ { emoji: "\u{1F62A}", name: "sleepy_face" },
20064
+ { emoji: "\u{1F635}", name: "dizzy_face" },
20065
+ { emoji: "\u{1F910}", name: "zipper_mouth" },
20066
+ { emoji: "\u{1F974}", name: "woozy_face" },
20067
+ { emoji: "\u{1F922}", name: "nauseated_face" },
20068
+ { emoji: "\u{1F92E}", name: "face_vomiting" },
20069
+ { emoji: "\u{1F927}", name: "sneezing_face" },
20070
+ { emoji: "\u{1F637}", name: "medical_mask" },
20071
+ { emoji: "\u{1F912}", name: "thermometer_face" },
20072
+ { emoji: "\u{1F915}", name: "bandage_head" },
20073
+ { emoji: "\u{1F911}", name: "money_mouth" },
20074
+ { emoji: "\u{1F920}", name: "cowboy_hat" },
20075
+ { emoji: "\u{1F608}", name: "devil_smile" },
20076
+ { emoji: "\u{1F47F}", name: "devil_angry" },
20077
+ { emoji: "\u{1F479}", name: "ogre_mask" },
20078
+ { emoji: "\u{1F47A}", name: "goblin_mask" },
20079
+ { emoji: "\u{1F921}", name: "clown_face" },
20080
+ { emoji: "\u{1F4A9}", name: "poop_pile" },
20081
+ { emoji: "\u{1F47B}", name: "ghost_spooky" },
20082
+ { emoji: "\u{1F480}", name: "skull_head" },
20083
+ { emoji: "\u2620\uFE0F", name: "skull_crossbones" },
20084
+ { emoji: "\u{1F47D}", name: "alien_face" },
20085
+ { emoji: "\u{1F47E}", name: "alien_monster" },
20086
+ { emoji: "\u{1F916}", name: "robot_face" },
20087
+ { emoji: "\u{1F383}", name: "pumpkin_jack" },
20088
+ { emoji: "\u{1F63A}", name: "cat_grin" },
20089
+ { emoji: "\u{1F638}", name: "cat_smile" },
20090
+ { emoji: "\u{1F639}", name: "cat_joy" },
20091
+ { emoji: "\u{1F63B}", name: "cat_heart_eyes" },
20092
+ { emoji: "\u{1F63C}", name: "cat_smirk" },
20093
+ { emoji: "\u{1F63D}", name: "cat_kiss" },
20094
+ { emoji: "\u{1F640}", name: "cat_weary" },
20095
+ { emoji: "\u{1F63F}", name: "cat_crying" },
20096
+ { emoji: "\u{1F63E}", name: "cat_pouting" },
20097
+ { emoji: "\u{1F44B}", name: "waving_hand" },
20098
+ { emoji: "\u{1F91A}", name: "raised_back_hand" },
20099
+ { emoji: "\u{1F590}\uFE0F", name: "splayed_fingers" },
20100
+ { emoji: "\u270B", name: "raised_hand" },
20101
+ { emoji: "\u{1F596}", name: "vulcan_salute" },
20102
+ { emoji: "\u{1F44C}", name: "ok_hand" },
20103
+ { emoji: "\u{1F90C}", name: "pinched_fingers" },
20104
+ { emoji: "\u{1F90F}", name: "pinching_hand" },
20105
+ { emoji: "\u270C\uFE0F", name: "victory_hand" },
20106
+ { emoji: "\u{1F91E}", name: "crossed_fingers" },
20107
+ { emoji: "\u{1F91F}", name: "love_you" },
20108
+ { emoji: "\u{1F918}", name: "rock_on" },
20109
+ { emoji: "\u{1F919}", name: "call_me" },
20110
+ { emoji: "\u{1F448}", name: "point_left" },
20111
+ { emoji: "\u{1F449}", name: "point_right" },
20112
+ { emoji: "\u{1F446}", name: "point_up" },
20113
+ { emoji: "\u{1F595}", name: "middle_finger" },
20114
+ { emoji: "\u{1F447}", name: "point_down" },
20115
+ { emoji: "\u261D\uFE0F", name: "index_up" },
20116
+ { emoji: "\u{1F44D}", name: "thumbs_up" },
20117
+ { emoji: "\u{1F44E}", name: "thumbs_down" },
20118
+ { emoji: "\u270A", name: "raised_fist" },
20119
+ { emoji: "\u{1F44A}", name: "oncoming_fist" },
20120
+ { emoji: "\u{1F91B}", name: "left_fist" },
20121
+ { emoji: "\u{1F91C}", name: "right_fist" },
20122
+ { emoji: "\u{1F44F}", name: "clapping_hands" },
20123
+ { emoji: "\u{1F64C}", name: "raising_hands" },
20124
+ { emoji: "\u{1F450}", name: "open_hands" },
20125
+ { emoji: "\u{1F932}", name: "palms_up" },
20126
+ { emoji: "\u{1F91D}", name: "handshake" },
20127
+ { emoji: "\u{1F64F}", name: "folded_hands" },
20128
+ { emoji: "\u270D\uFE0F", name: "writing_hand" },
20129
+ { emoji: "\u{1F485}", name: "nail_polish" },
20130
+ { emoji: "\u{1F933}", name: "selfie_hand" },
20131
+ { emoji: "\u{1F4AA}", name: "flex_biceps" },
20132
+ { emoji: "\u{1F9BE}", name: "robot_arm" },
20133
+ { emoji: "\u{1F9BF}", name: "robot_leg" },
20134
+ { emoji: "\u{1F9B5}", name: "leg_foot" },
20135
+ { emoji: "\u{1F9B6}", name: "foot_leg" },
20136
+ { emoji: "\u{1F442}", name: "ear_listen" },
20137
+ { emoji: "\u{1F9BB}", name: "ear_hearing_aid" },
20138
+ { emoji: "\u{1F443}", name: "nose_smell" },
20139
+ { emoji: "\u{1F9E0}", name: "brain_mind" },
20140
+ { emoji: "\u{1FAC0}", name: "anatomical_heart" },
20141
+ { emoji: "\u{1FAC1}", name: "lungs_organ" },
20142
+ { emoji: "\u{1F9B7}", name: "tooth_dentist" },
20143
+ { emoji: "\u{1F9B4}", name: "bone_skeleton" },
20144
+ { emoji: "\u{1F440}", name: "eyes_look" },
20145
+ { emoji: "\u{1F441}\uFE0F", name: "eye_look" },
20146
+ { emoji: "\u{1F445}", name: "tongue_lick" },
20147
+ { emoji: "\u{1F444}", name: "mouth_lips" },
20148
+ { emoji: "\u{1F48B}", name: "kiss_mark" },
20149
+ { emoji: "\u{1FA78}", name: "blood_drop" },
20150
+ { emoji: "\u{1F476}", name: "baby_face" },
20151
+ { emoji: "\u{1F9D2}", name: "child_face" },
20152
+ { emoji: "\u{1F466}", name: "boy_face" },
20153
+ { emoji: "\u{1F467}", name: "girl_face" },
20154
+ { emoji: "\u{1F9D1}", name: "person_face" },
20155
+ { emoji: "\u{1F471}", name: "blond_person" },
20156
+ { emoji: "\u{1F468}", name: "man_face" },
20157
+ { emoji: "\u{1F9D4}", name: "beard_person" },
20158
+ { emoji: "\u{1F469}", name: "woman_face" },
20159
+ { emoji: "\u{1F9D3}", name: "older_person" },
20160
+ { emoji: "\u{1F474}", name: "old_man" },
20161
+ { emoji: "\u{1F475}", name: "old_woman" },
20162
+ { emoji: "\u{1F472}", name: "skullcap_person" },
20163
+ { emoji: "\u{1F473}", name: "turban_person" },
20164
+ { emoji: "\u{1F9D5}", name: "headscarf_woman" },
20165
+ { emoji: "\u{1F46E}", name: "police_officer" },
20166
+ { emoji: "\u{1F477}", name: "construction_worker" },
20167
+ { emoji: "\u{1F482}", name: "guard_person" },
20168
+ { emoji: "\u{1F575}\uFE0F", name: "detective_spy" },
20169
+ { emoji: "\u{1F469}\u200D\u2695\uFE0F", name: "woman_doctor" },
20170
+ { emoji: "\u{1F468}\u200D\u2695\uFE0F", name: "man_doctor" },
20171
+ { emoji: "\u{1F469}\u200D\u{1F33E}", name: "woman_farmer" },
20172
+ { emoji: "\u{1F468}\u200D\u{1F33E}", name: "man_farmer" },
20173
+ { emoji: "\u{1F469}\u200D\u{1F373}", name: "woman_cook" },
20174
+ { emoji: "\u{1F468}\u200D\u{1F373}", name: "man_cook" },
20175
+ { emoji: "\u{1F469}\u200D\u{1F393}", name: "woman_student" },
20176
+ { emoji: "\u{1F468}\u200D\u{1F393}", name: "man_student" },
20177
+ { emoji: "\u{1F469}\u200D\u{1F3A4}", name: "woman_singer" },
20178
+ { emoji: "\u{1F468}\u200D\u{1F3A4}", name: "man_singer" },
20179
+ { emoji: "\u{1F469}\u200D\u{1F3EB}", name: "woman_teacher" },
20180
+ { emoji: "\u{1F468}\u200D\u{1F3EB}", name: "man_teacher" },
20181
+ { emoji: "\u{1F469}\u200D", name: "woman_factory" },
20182
+ { emoji: "\u{1F468}\u200D", name: "man_factory" },
20183
+ { emoji: "\u{1F469}\u200D\u{1F4BB}", name: "woman_tech" },
20184
+ { emoji: "\u{1F468}\u200D\u{1F4BB}", name: "man_tech" },
20185
+ { emoji: "\u{1F469}\u200D\u{1F4BC}", name: "woman_office" },
20186
+ { emoji: "\u{1F468}\u200D\u{1F4BC}", name: "man_office" },
20187
+ { emoji: "\u{1F469}\u200D\u{1F527}", name: "woman_mechanic" },
20188
+ { emoji: "\u{1F468}\u200D\u{1F527}", name: "man_mechanic" },
20189
+ { emoji: "\u{1F469}\u200D\u{1F52C}", name: "woman_scientist" },
20190
+ { emoji: "\u{1F468}\u200D\u{1F52C}", name: "man_scientist" },
20191
+ { emoji: "\u{1F469}\u200D\u{1F3A8}", name: "woman_artist" },
20192
+ { emoji: "\u{1F468}\u200D\u{1F3A8}", name: "man_artist" },
20193
+ { emoji: "\u{1F469}\u200D\u{1F692}", name: "woman_firefighter" },
20194
+ { emoji: "\u{1F468}\u200D\u{1F692}", name: "man_firefighter" },
20195
+ { emoji: "\u{1F469}\u200D\u2708\uFE0F", name: "woman_pilot" },
20196
+ { emoji: "\u{1F468}\u200D\u2708\uFE0F", name: "man_pilot" },
20197
+ { emoji: "\u{1F469}\u200D\u{1F680}", name: "woman_astronaut" },
20198
+ { emoji: "\u{1F468}\u200D\u{1F680}", name: "man_astronaut" },
20199
+ { emoji: "\u{1F469}\u200D\u2696\uFE0F", name: "woman_judge" },
20200
+ { emoji: "\u{1F468}\u200D\u2696\uFE0F", name: "man_judge" },
20201
+ { emoji: "\u{1F470}", name: "bride_wedding" },
20202
+ { emoji: "\u{1F935}", name: "groom_tuxedo" },
20203
+ { emoji: "\u{1F478}", name: "princess_crown" },
20204
+ { emoji: "\u{1F934}", name: "prince_crown" },
20205
+ { emoji: "\u{1F9B8}", name: "superhero_person" },
20206
+ { emoji: "\u{1F9B9}", name: "supervillain_person" },
20207
+ { emoji: "\u{1F936}", name: "mrs_claus" },
20208
+ { emoji: "\u{1F385}", name: "santa_claus" },
20209
+ { emoji: "\u{1F9D9}", name: "mage_wizard" },
20210
+ { emoji: "\u{1F9DD}", name: "elf_fantasy" },
20211
+ { emoji: "\u{1F9DB}", name: "vampire_dracula" },
20212
+ { emoji: "\u{1F9DF}", name: "zombie_undead" },
20213
+ { emoji: "\u{1F9DE}", name: "genie_magic" },
20214
+ { emoji: "\u{1F9DC}", name: "mermaid_person" },
20215
+ { emoji: "\u{1F9DA}", name: "fairy_magic" },
20216
+ { emoji: "\u{1F47C}", name: "angel_baby" },
20217
+ { emoji: "\u{1F930}", name: "pregnant_woman" },
20218
+ { emoji: "\u{1F931}", name: "breast_feeding" },
20219
+ { emoji: "\u{1F647}", name: "bowing_person" },
20220
+ { emoji: "\u{1F481}", name: "tipping_hand" },
20221
+ { emoji: "\u{1F645}", name: "gesturing_no" },
20222
+ { emoji: "\u{1F646}", name: "gesturing_ok" },
20223
+ { emoji: "\u{1F64B}", name: "raising_hand" },
20224
+ { emoji: "\u{1F9CF}", name: "deaf_person" },
20225
+ { emoji: "\u{1F926}", name: "face_palm" },
20226
+ { emoji: "\u{1F937}", name: "shrugging_person" },
20227
+ { emoji: "\u{1F64E}", name: "pouting_person" },
20228
+ { emoji: "\u{1F64D}", name: "frowning_person" },
20229
+ { emoji: "\u{1F487}", name: "haircut_person" },
20230
+ { emoji: "\u{1F486}", name: "massage_person" },
20231
+ { emoji: "\u{1F9D6}", name: "sauna_person" },
20232
+ { emoji: "\u{1F483}", name: "woman_dancing" },
20233
+ { emoji: "\u{1F57A}", name: "man_dancing" },
20234
+ { emoji: "\u{1F46F}", name: "bunny_friends" },
20235
+ { emoji: "\u{1F574}\uFE0F", name: "levitating_suit" },
20236
+ { emoji: "\u{1F6B6}", name: "walking_person" },
20237
+ { emoji: "\u{1F3C3}", name: "running_person" },
20238
+ { emoji: "\u{1F9CD}", name: "standing_person" },
20239
+ { emoji: "\u{1F9CE}", name: "kneeling_person" },
20240
+ { emoji: "\u{1F468}\u200D\u{1F9AF}", name: "blind_cane" },
20241
+ { emoji: "\u{1F468}\u200D\u{1F9BC}", name: "motor_wheelchair" },
20242
+ { emoji: "\u{1F468}\u200D\u{1F9BD}", name: "manual_wheelchair" },
20243
+ { emoji: "\u{1F9D7}", name: "climbing_person" },
20244
+ { emoji: "\u{1F93A}", name: "fencing_person" },
20245
+ { emoji: "\u{1F3C7}", name: "horse_racing" },
20246
+ { emoji: "\u26F7\uFE0F", name: "skier_snow" },
20247
+ { emoji: "\u{1F3C2}", name: "snowboarder_snow" },
20248
+ { emoji: "\u{1F3CC}\uFE0F", name: "golfing_person" },
20249
+ { emoji: "\u{1F3C4}", name: "surfing_person" },
20250
+ { emoji: "\u{1F6A3}", name: "rowing_person" },
20251
+ { emoji: "\u{1F3CA}", name: "swimming_person" },
20252
+ { emoji: "\u26F9\uFE0F", name: "basketball_person" },
20253
+ { emoji: "\u{1F3CB}\uFE0F", name: "lifting_weights" },
20254
+ { emoji: "\u{1F6B4}", name: "biking_person" },
20255
+ { emoji: "\u{1F6B5}", name: "mountain_biking" },
20256
+ { emoji: "\u{1F938}", name: "cartwheel_person" },
20257
+ { emoji: "\u{1F93C}", name: "wrestling_people" },
20258
+ { emoji: "\u{1F93D}", name: "water_polo" },
20259
+ { emoji: "\u{1F93E}", name: "handball_person" },
20260
+ { emoji: "\u{1F939}", name: "juggling_person" },
20261
+ { emoji: "\u{1F9D8}", name: "yoga_lotus" },
20262
+ { emoji: "\u{1F6C0}", name: "bath_person" },
20263
+ { emoji: "\u{1F6CC}", name: "bed_person" }
20264
+ ]
20265
+ },
20266
+ {
20267
+ id: "animals_nature",
20268
+ name: "Animals & Nature",
20269
+ emojis: [
20270
+ { emoji: "\u{1F435}", name: "monkey_face" },
20271
+ { emoji: "\u{1F436}", name: "dog_face" },
20272
+ { emoji: "\u{1F43A}", name: "wolf_face" },
20273
+ { emoji: "\u{1F431}", name: "cat_face" },
20274
+ { emoji: "\u{1F981}", name: "lion_face" },
20275
+ { emoji: "\u{1F42F}", name: "tiger_face" },
20276
+ { emoji: "\u{1F434}", name: "horse_face" },
20277
+ { emoji: "\u{1F984}", name: "unicorn_face" },
20278
+ { emoji: "\u{1F42E}", name: "cow_face" },
20279
+ { emoji: "\u{1F437}", name: "pig_face" },
20280
+ { emoji: "\u{1F42D}", name: "mouse_face" },
20281
+ { emoji: "\u{1F430}", name: "rabbit_face" },
20282
+ { emoji: "\u{1F43B}", name: "bear_face" },
20283
+ { emoji: "\u{1F428}", name: "koala_bear" },
20284
+ { emoji: "\u{1F43C}", name: "panda_face" },
20285
+ { emoji: "\u{1F414}", name: "chicken_bird" },
20286
+ { emoji: "\u{1F427}", name: "penguin_bird" },
20287
+ { emoji: "\u{1F426}", name: "bird_fly" },
20288
+ { emoji: "\u{1F986}", name: "duck_bird" },
20289
+ { emoji: "\u{1F985}", name: "eagle_bird" },
20290
+ { emoji: "\u{1F989}", name: "owl_bird" },
20291
+ { emoji: "\u{1F438}", name: "frog_face" },
20292
+ { emoji: "\u{1F422}", name: "turtle_slow" },
20293
+ { emoji: "\u{1F40D}", name: "snake_hiss" },
20294
+ { emoji: "\u{1F433}", name: "whale_sprout" },
20295
+ { emoji: "\u{1F42C}", name: "dolphin_jump" },
20296
+ { emoji: "\u{1F41F}", name: "fish_swim" },
20297
+ { emoji: "\u{1F419}", name: "octopus_legs" },
20298
+ { emoji: "\u{1F98B}", name: "butterfly_fly" },
20299
+ { emoji: "\u{1F490}", name: "flower_bouquet" },
20300
+ { emoji: "\u{1F338}", name: "cherry_blossom" },
20301
+ { emoji: "\u{1F339}", name: "rose_flower" },
20302
+ { emoji: "\u{1F33B}", name: "sunflower_yellow" },
20303
+ { emoji: "\u{1F332}", name: "evergreen_tree" },
20304
+ { emoji: "\u{1F333}", name: "deciduous_tree" },
20305
+ { emoji: "\u{1F334}", name: "palm_tree" },
20306
+ { emoji: "\u{1F335}", name: "cactus_plant" },
20307
+ { emoji: "\u{1F525}", name: "fire_flame" },
20308
+ { emoji: "\u{1F4A7}", name: "water_drop" },
20309
+ { emoji: "\u2B50", name: "star_shine" }
20310
+ ]
20311
+ },
20312
+ {
20313
+ id: "food_drink",
20314
+ name: "Food & Drink",
20315
+ emojis: [
20316
+ { emoji: "\u{1F347}", name: "grapes_fruit" },
20317
+ { emoji: "\u{1F348}", name: "melon_fruit" },
20318
+ { emoji: "\u{1F349}", name: "watermelon_slice" },
20319
+ { emoji: "\u{1F34A}", name: "tangerine_orange" },
20320
+ { emoji: "\u{1F34B}", name: "lemon_sour" },
20321
+ { emoji: "\u{1F34C}", name: "banana_fruit" },
20322
+ { emoji: "\u{1F34D}", name: "pineapple_fruit" },
20323
+ { emoji: "\u{1F34E}", name: "red_apple" },
20324
+ { emoji: "\u{1F34F}", name: "green_apple" },
20325
+ { emoji: "\u{1F350}", name: "pear_fruit" },
20326
+ { emoji: "\u{1F351}", name: "peach_fruit" },
20327
+ { emoji: "\u{1F352}", name: "cherries_red" },
20328
+ { emoji: "\u{1F353}", name: "strawberry_red" },
20329
+ { emoji: "\u{1F95D}", name: "kiwi_fruit" },
20330
+ { emoji: "\u{1F345}", name: "tomato_red" },
20331
+ { emoji: "\u{1F951}", name: "avocado_green" },
20332
+ { emoji: "\u{1F346}", name: "eggplant_purple" },
20333
+ { emoji: "\u{1F954}", name: "potato_spud" },
20334
+ { emoji: "\u{1F955}", name: "carrot_veg" },
20335
+ { emoji: "\u{1F33D}", name: "corn_cob" },
20336
+ { emoji: "\u{1F35E}", name: "bread_loaf" },
20337
+ { emoji: "\u{1F9C0}", name: "cheese_wedge" },
20338
+ { emoji: "\u{1F356}", name: "meat_bone" },
20339
+ { emoji: "\u{1F357}", name: "poultry_leg" },
20340
+ { emoji: "\u{1F969}", name: "meat_cut" },
20341
+ { emoji: "\u{1F953}", name: "bacon_strips" },
20342
+ { emoji: "\u{1F354}", name: "hamburger_fast" },
20343
+ { emoji: "\u{1F35F}", name: "french_fries" },
20344
+ { emoji: "\u{1F355}", name: "pizza_slice" },
20345
+ { emoji: "\u{1F32D}", name: "hot_dog" },
20346
+ { emoji: "\u{1F96A}", name: "sandwich_lunch" },
20347
+ { emoji: "\u{1F32E}", name: "taco_mexican" },
20348
+ { emoji: "\u{1F32F}", name: "burrito_wrap" },
20349
+ { emoji: "\u{1F95A}", name: "egg_white" },
20350
+ { emoji: "\u{1F373}", name: "cooking_egg" },
20351
+ { emoji: "\u{1F37F}", name: "popcorn_box" },
20352
+ { emoji: "\u{1F35A}", name: "rice_bowl" },
20353
+ { emoji: "\u{1F35D}", name: "spaghetti_pasta" },
20354
+ { emoji: "\u{1F363}", name: "sushi_roll" },
20355
+ { emoji: "\u{1F364}", name: "fried_shrimp" },
20356
+ { emoji: "\u{1F366}", name: "ice_cream" },
20357
+ { emoji: "\u{1F369}", name: "doughnut_sweet" },
20358
+ { emoji: "\u{1F36A}", name: "cookie_sweet" },
20359
+ { emoji: "\u{1F382}", name: "birthday_cake" },
20360
+ { emoji: "\u{1F370}", name: "shortcake_slice" },
20361
+ { emoji: "\u{1F36B}", name: "chocolate_bar" },
20362
+ { emoji: "\u{1F36C}", name: "candy_sweet" },
20363
+ { emoji: "\u{1F36D}", name: "lollipop_candy" },
20364
+ { emoji: "\u2615", name: "coffee_hot" },
20365
+ { emoji: "\u{1F37A}", name: "beer_mug" },
20366
+ { emoji: "\u{1F37B}", name: "beer_cheers" },
20367
+ { emoji: "\u{1F942}", name: "champagne_cheers" },
20368
+ { emoji: "\u{1F377}", name: "wine_glass" },
20369
+ { emoji: "\u{1F943}", name: "whiskey_glass" },
20370
+ { emoji: "\u{1F379}", name: "tropical_drink" }
20371
+ ]
20372
+ },
20373
+ {
20374
+ id: "activity",
20375
+ name: "Activity",
20376
+ emojis: [
20377
+ { emoji: "\u26BD", name: "soccer_ball" },
20378
+ { emoji: "\u{1F3C0}", name: "basketball_hoop" },
20379
+ { emoji: "\u{1F3C8}", name: "football_american" },
20380
+ { emoji: "\u26BE", name: "baseball_game" },
20381
+ { emoji: "\u{1F3BE}", name: "tennis_ball" },
20382
+ { emoji: "\u{1F3D0}", name: "volleyball_game" },
20383
+ { emoji: "\u{1F3B1}", name: "pool_8ball" },
20384
+ { emoji: "\u{1F3D3}", name: "ping_pong" },
20385
+ { emoji: "\u{1F3F8}", name: "badminton_game" },
20386
+ { emoji: "\u{1F94A}", name: "boxing_glove" },
20387
+ { emoji: "\u{1F945}", name: "goal_net" },
20388
+ { emoji: "\u{1F3A3}", name: "fishing_pole" },
20389
+ { emoji: "\u{1F3AE}", name: "video_game" },
20390
+ { emoji: "\u{1F3B2}", name: "game_die" },
20391
+ { emoji: "\u{1F3AD}", name: "theater_masks" },
20392
+ { emoji: "\u{1F3A8}", name: "artist_palette" },
20393
+ { emoji: "\u{1F3AC}", name: "clapper_board" },
20394
+ { emoji: "\u{1F3A4}", name: "microphone_sing" },
20395
+ { emoji: "\u{1F3A7}", name: "headphone_music" },
20396
+ { emoji: "\u{1F3B7}", name: "saxophone_jazz" },
20397
+ { emoji: "\u{1F3B8}", name: "guitar_rock" },
20398
+ { emoji: "\u{1F3B9}", name: "piano_keys" },
20399
+ { emoji: "\u{1F3BA}", name: "trumpet_horn" },
20400
+ { emoji: "\u{1F3BB}", name: "violin_music" },
20401
+ { emoji: "\u{1F941}", name: "drum_beat" }
20402
+ ]
20403
+ },
20404
+ {
20405
+ id: "objects",
20406
+ name: "Objects",
20407
+ emojis: [
20408
+ { emoji: "\u{1F4F1}", name: "mobile_phone" },
20409
+ { emoji: "\u{1F4BB}", name: "laptop_computer" },
20410
+ { emoji: "\u{1F5A5}\uFE0F", name: "desktop_computer" },
20411
+ { emoji: "\u231A", name: "watch_wrist" },
20412
+ { emoji: "\u{1F4F7}", name: "camera_photo" },
20413
+ { emoji: "\u{1F4A1}", name: "light_bulb" },
20414
+ { emoji: "\u{1F4DA}", name: "books_pile" },
20415
+ { emoji: "\u{1F4B0}", name: "money_bag" },
20416
+ { emoji: "\u{1F381}", name: "gift_box" },
20417
+ { emoji: "\u{1F388}", name: "balloon_red" },
20418
+ { emoji: "\u{1F389}", name: "party_popper" },
20419
+ { emoji: "\u{1F38A}", name: "confetti_ball" },
20420
+ { emoji: "\u2709\uFE0F", name: "envelope_mail" },
20421
+ { emoji: "\u{1F4E6}", name: "package_box" },
20422
+ { emoji: "\u270F\uFE0F", name: "pencil_write" },
20423
+ { emoji: "\u{1F512}", name: "lock_closed" },
20424
+ { emoji: "\u{1F511}", name: "key_gold" },
20425
+ { emoji: "\u{1F528}", name: "hammer_tool" },
20426
+ { emoji: "\u{1F4A3}", name: "bomb_explode" },
20427
+ { emoji: "\u{1F52B}", name: "pistol_toy" },
20428
+ { emoji: "\u{1F48A}", name: "pill_capsule" },
20429
+ { emoji: "\u{1F6D2}", name: "shopping_cart" }
20430
+ ]
20431
+ },
20432
+ {
20433
+ id: "symbols",
20434
+ name: "Symbols",
20435
+ emojis: [
20436
+ { emoji: "\u2764\uFE0F", name: "red_heart" },
20437
+ { emoji: "\u{1F9E1}", name: "orange_heart" },
20438
+ { emoji: "\u{1F49B}", name: "yellow_heart" },
20439
+ { emoji: "\u{1F49A}", name: "green_heart" },
20440
+ { emoji: "\u{1F499}", name: "blue_heart" },
20441
+ { emoji: "\u{1F49C}", name: "purple_heart" },
20442
+ { emoji: "\u{1F5A4}", name: "black_heart" },
20443
+ { emoji: "\u{1F90D}", name: "white_heart" },
20444
+ { emoji: "\u{1F90E}", name: "brown_heart" },
20445
+ { emoji: "\u{1F494}", name: "broken_heart" },
20446
+ { emoji: "\u2763\uFE0F", name: "heart_exclamation" },
20447
+ { emoji: "\u{1F495}", name: "two_hearts" },
20448
+ { emoji: "\u{1F49E}", name: "revolving_hearts" },
20449
+ { emoji: "\u{1F493}", name: "beating_heart" },
20450
+ { emoji: "\u{1F497}", name: "growing_heart" },
20451
+ { emoji: "\u{1F496}", name: "sparkling_heart" },
20452
+ { emoji: "\u{1F498}", name: "cupid_heart" },
20453
+ { emoji: "\u{1F49D}", name: "gift_heart" },
20454
+ { emoji: "\u{1F4AF}", name: "hundred_points" },
20455
+ { emoji: "\u{1F4A2}", name: "anger_symbol" },
20456
+ { emoji: "\u{1F4A5}", name: "collision_boom" },
20457
+ { emoji: "\u{1F4AB}", name: "dizzy_star" },
20458
+ { emoji: "\u{1F4A6}", name: "sweat_drops" },
20459
+ { emoji: "\u{1F4A8}", name: "dash_away" },
20460
+ { emoji: "\u{1F4A4}", name: "sleeping_zzz" },
20461
+ { emoji: "\u2705", name: "check_mark" },
20462
+ { emoji: "\u274C", name: "cross_mark" },
20463
+ { emoji: "\u26A0\uFE0F", name: "warning_sign" },
20464
+ { emoji: "\u26D4", name: "no_entry" },
20465
+ { emoji: "\u{1F6AB}", name: "prohibited_sign" },
20466
+ { emoji: "\u2B06\uFE0F", name: "arrow_up" },
20467
+ { emoji: "\u2B07\uFE0F", name: "arrow_down" },
20468
+ { emoji: "\u2B05\uFE0F", name: "arrow_left" },
20469
+ { emoji: "\u27A1\uFE0F", name: "arrow_right" },
20470
+ { emoji: "\u267B\uFE0F", name: "recycling_symbol" }
20471
+ ]
20472
+ },
20473
+ {
20474
+ id: "flags",
20475
+ name: "Flags",
20476
+ emojis: [
20477
+ { emoji: "\u{1F3C1}", name: "checkered_flag" },
20478
+ { emoji: "\u{1F3F3}\uFE0F", name: "white_flag" },
20479
+ { emoji: "\u{1F3F3}\uFE0F\u200D\u{1F308}", name: "rainbow_flag" },
20480
+ { emoji: "\u{1F3F3}\uFE0F\u200D\u26A7\uFE0F", name: "transgender_flag" },
20481
+ { emoji: "\u{1F3F4}\u200D\u2620\uFE0F", name: "pirate_flag" },
20482
+ { emoji: "\u{1F1E6}\u{1F1E8}", name: "flag_ascension" },
20483
+ { emoji: "\u{1F1E6}\u{1F1E9}", name: "flag_andorra" },
20484
+ { emoji: "\u{1F1E6}\u{1F1EA}", name: "flag_uae" },
20485
+ { emoji: "\u{1F1E6}\u{1F1EB}", name: "flag_afghanistan" },
20486
+ { emoji: "\u{1F1E6}\u{1F1EC}", name: "flag_antigua" },
20487
+ { emoji: "\u{1F1E6}\u{1F1EE}", name: "flag_anguilla" },
20488
+ { emoji: "\u{1F1E6}\u{1F1F1}", name: "flag_albania" },
20489
+ { emoji: "\u{1F1E6}\u{1F1F2}", name: "flag_armenia" },
20490
+ { emoji: "\u{1F1E6}\u{1F1F4}", name: "flag_angola" },
20491
+ { emoji: "\u{1F1E6}\u{1F1F6}", name: "flag_antarctica" },
20492
+ { emoji: "\u{1F1E6}\u{1F1F7}", name: "flag_argentina" },
20493
+ { emoji: "\u{1F1E6}\u{1F1F8}", name: "flag_american_samoa" },
20494
+ { emoji: "\u{1F1E6}\u{1F1F9}", name: "flag_austria" },
20495
+ { emoji: "\u{1F1E6}\u{1F1FA}", name: "flag_australia" },
20496
+ { emoji: "\u{1F1E6}\u{1F1FC}", name: "flag_aruba" },
20497
+ { emoji: "\u{1F1E6}\u{1F1FD}", name: "flag_aland" },
20498
+ { emoji: "\u{1F1E6}\u{1F1FF}", name: "flag_azerbaijan" },
20499
+ { emoji: "\u{1F1E7}\u{1F1E6}", name: "flag_bosnia" },
20500
+ { emoji: "\u{1F1E7}\u{1F1E7}", name: "flag_barbados" },
20501
+ { emoji: "\u{1F1E7}\u{1F1E9}", name: "flag_bangladesh" },
20502
+ { emoji: "\u{1F1E7}\u{1F1EA}", name: "flag_belgium" },
20503
+ { emoji: "\u{1F1E7}\u{1F1EB}", name: "flag_burkina" },
20504
+ { emoji: "\u{1F1E7}\u{1F1EC}", name: "flag_bulgaria" },
20505
+ { emoji: "\u{1F1E7}\u{1F1ED}", name: "flag_bahrain" },
20506
+ { emoji: "\u{1F1E7}\u{1F1EE}", name: "flag_burundi" },
20507
+ { emoji: "\u{1F1E7}\u{1F1EF}", name: "flag_benin" },
20508
+ { emoji: "\u{1F1E7}\u{1F1F1}", name: "flag_st_barthelemy" },
20509
+ { emoji: "\u{1F1E7}\u{1F1F2}", name: "flag_bermuda" },
20510
+ { emoji: "\u{1F1E7}\u{1F1F3}", name: "flag_brunei" },
20511
+ { emoji: "\u{1F1E7}\u{1F1F4}", name: "flag_bolivia" },
20512
+ { emoji: "\u{1F1E7}\u{1F1F6}", name: "flag_bonaire" },
20513
+ { emoji: "\u{1F1E7}\u{1F1F7}", name: "flag_brazil" },
20514
+ { emoji: "\u{1F1E7}\u{1F1F8}", name: "flag_bahamas" },
20515
+ { emoji: "\u{1F1E7}\u{1F1F9}", name: "flag_bhutan" },
20516
+ { emoji: "\u{1F1E7}\u{1F1FB}", name: "flag_bouvet" },
20517
+ { emoji: "\u{1F1E7}\u{1F1FC}", name: "flag_botswana" },
20518
+ { emoji: "\u{1F1E7}\u{1F1FE}", name: "flag_belarus" },
20519
+ { emoji: "\u{1F1E7}\u{1F1FF}", name: "flag_belize" },
20520
+ { emoji: "\u{1F1E8}\u{1F1E6}", name: "flag_canada" },
20521
+ { emoji: "\u{1F1E8}\u{1F1E8}", name: "flag_cocos" },
20522
+ { emoji: "\u{1F1E8}\u{1F1E9}", name: "flag_congo_dr" },
20523
+ { emoji: "\u{1F1E8}\u{1F1EB}", name: "flag_central_africa" },
20524
+ { emoji: "\u{1F1E8}\u{1F1EC}", name: "flag_congo" },
20525
+ { emoji: "\u{1F1E8}\u{1F1ED}", name: "flag_switzerland" },
20526
+ { emoji: "\u{1F1E8}\u{1F1EE}", name: "flag_cote_divoire" },
20527
+ { emoji: "\u{1F1E8}\u{1F1F0}", name: "flag_cook_islands" },
20528
+ { emoji: "\u{1F1E8}\u{1F1F1}", name: "flag_chile" },
20529
+ { emoji: "\u{1F1E8}\u{1F1F2}", name: "flag_cameroon" },
20530
+ { emoji: "\u{1F1E8}\u{1F1F3}", name: "flag_china" },
20531
+ { emoji: "\u{1F1E8}\u{1F1F4}", name: "flag_colombia" },
20532
+ { emoji: "\u{1F1E8}\u{1F1F5}", name: "flag_clipperton" },
20533
+ { emoji: "\u{1F1E8}\u{1F1F7}", name: "flag_costa_rica" },
20534
+ { emoji: "\u{1F1E8}\u{1F1FA}", name: "flag_cuba" },
20535
+ { emoji: "\u{1F1E8}\u{1F1FB}", name: "flag_cape_verde" },
20536
+ { emoji: "\u{1F1E8}\u{1F1FC}", name: "flag_curacao" },
20537
+ { emoji: "\u{1F1E8}\u{1F1FD}", name: "flag_christmas_island" },
20538
+ { emoji: "\u{1F1E8}\u{1F1FE}", name: "flag_cyprus" },
20539
+ { emoji: "\u{1F1E8}\u{1F1FF}", name: "flag_czechia" },
20540
+ { emoji: "\u{1F1E9}\u{1F1EA}", name: "flag_germany" },
20541
+ { emoji: "\u{1F1E9}\u{1F1EC}", name: "flag_diego_garcia" },
20542
+ { emoji: "\u{1F1E9}\u{1F1EF}", name: "flag_djibouti" },
20543
+ { emoji: "\u{1F1E9}\u{1F1F0}", name: "flag_denmark" },
20544
+ { emoji: "\u{1F1E9}\u{1F1F2}", name: "flag_dominica" },
20545
+ { emoji: "\u{1F1E9}\u{1F1F4}", name: "flag_dominican_rep" },
20546
+ { emoji: "\u{1F1E9}\u{1F1FF}", name: "flag_algeria" },
20547
+ { emoji: "\u{1F1EA}\u{1F1E8}", name: "flag_ecuador" },
20548
+ { emoji: "\u{1F1EA}\u{1F1EA}", name: "flag_estonia" },
20549
+ { emoji: "\u{1F1EA}\u{1F1EC}", name: "flag_egypt" },
20550
+ { emoji: "\u{1F1EA}\u{1F1ED}", name: "flag_western_sahara" },
20551
+ { emoji: "\u{1F1EA}\u{1F1F7}", name: "flag_eritrea" },
20552
+ { emoji: "\u{1F1EA}\u{1F1F8}", name: "flag_spain" },
20553
+ { emoji: "\u{1F1EA}\u{1F1F9}", name: "flag_ethiopia" },
20554
+ { emoji: "\u{1F1EA}\u{1F1FA}", name: "flag_eu" },
20555
+ { emoji: "\u{1F1EB}\u{1F1EE}", name: "flag_finland" },
20556
+ { emoji: "\u{1F1EB}\u{1F1EF}", name: "flag_fiji" },
20557
+ { emoji: "\u{1F1EB}\u{1F1F0}", name: "flag_falkland" },
20558
+ { emoji: "\u{1F1EB}\u{1F1F2}", name: "flag_micronesia" },
20559
+ { emoji: "\u{1F1EB}\u{1F1F4}", name: "flag_faroe" },
20560
+ { emoji: "\u{1F1EB}\u{1F1F7}", name: "flag_france" },
20561
+ { emoji: "\u{1F1EC}\u{1F1E6}", name: "flag_gabon" },
20562
+ { emoji: "\u{1F1EC}\u{1F1E7}", name: "flag_uk" },
20563
+ { emoji: "\u{1F1EC}\u{1F1E9}", name: "flag_grenada" },
20564
+ { emoji: "\u{1F1EC}\u{1F1EA}", name: "flag_georgia" },
20565
+ { emoji: "\u{1F1EC}\u{1F1EB}", name: "flag_french_guiana" },
20566
+ { emoji: "\u{1F1EC}\u{1F1EC}", name: "flag_guernsey" },
20567
+ { emoji: "\u{1F1EC}\u{1F1ED}", name: "flag_ghana" },
20568
+ { emoji: "\u{1F1EC}\u{1F1EE}", name: "flag_gibraltar" },
20569
+ { emoji: "\u{1F1EC}\u{1F1F1}", name: "flag_greenland" },
20570
+ { emoji: "\u{1F1EC}\u{1F1F2}", name: "flag_gambia" },
20571
+ { emoji: "\u{1F1EC}\u{1F1F3}", name: "flag_guinea" },
20572
+ { emoji: "\u{1F1EC}\u{1F1F5}", name: "flag_guadeloupe" },
20573
+ { emoji: "\u{1F1EC}\u{1F1F6}", name: "flag_equatorial_guinea" },
20574
+ { emoji: "\u{1F1EC}\u{1F1F7}", name: "flag_greece" },
20575
+ { emoji: "\u{1F1EC}\u{1F1F8}", name: "flag_south_georgia" },
20576
+ { emoji: "\u{1F1EC}\u{1F1F9}", name: "flag_guatemala" },
20577
+ { emoji: "\u{1F1EC}\u{1F1FA}", name: "flag_guam" },
20578
+ { emoji: "\u{1F1EC}\u{1F1FC}", name: "flag_guinea_bissau" },
20579
+ { emoji: "\u{1F1EC}\u{1F1FE}", name: "flag_guyana" },
20580
+ { emoji: "\u{1F1ED}\u{1F1F0}", name: "flag_hong_kong" },
20581
+ { emoji: "\u{1F1ED}\u{1F1F2}", name: "flag_heard_island" },
20582
+ { emoji: "\u{1F1ED}\u{1F1F3}", name: "flag_honduras" },
20583
+ { emoji: "\u{1F1ED}\u{1F1F7}", name: "flag_croatia" },
20584
+ { emoji: "\u{1F1ED}\u{1F1F9}", name: "flag_haiti" },
20585
+ { emoji: "\u{1F1ED}\u{1F1FA}", name: "flag_hungary" },
20586
+ { emoji: "\u{1F1EE}\u{1F1E8}", name: "flag_canary_islands" },
20587
+ { emoji: "\u{1F1EE}\u{1F1E9}", name: "flag_indonesia" },
20588
+ { emoji: "\u{1F1EE}\u{1F1EA}", name: "flag_ireland" },
20589
+ { emoji: "\u{1F1EE}\u{1F1F1}", name: "flag_israel" },
20590
+ { emoji: "\u{1F1EE}\u{1F1F2}", name: "flag_isle_of_man" },
20591
+ { emoji: "\u{1F1EE}\u{1F1F3}", name: "flag_india" },
20592
+ { emoji: "\u{1F1EE}\u{1F1F4}", name: "flag_british_indian_ocean" },
20593
+ { emoji: "\u{1F1EE}\u{1F1F6}", name: "flag_iraq" },
20594
+ { emoji: "\u{1F1EE}\u{1F1F7}", name: "flag_iran" },
20595
+ { emoji: "\u{1F1EE}\u{1F1F8}", name: "flag_iceland" },
20596
+ { emoji: "\u{1F1EE}\u{1F1F9}", name: "flag_italy" },
20597
+ { emoji: "\u{1F1EF}\u{1F1EA}", name: "flag_jersey" },
20598
+ { emoji: "\u{1F1EF}\u{1F1F2}", name: "flag_jamaica" },
20599
+ { emoji: "\u{1F1EF}\u{1F1F4}", name: "flag_jordan" },
20600
+ { emoji: "\u{1F1EF}\u{1F1F5}", name: "flag_japan" },
20601
+ { emoji: "\u{1F1F0}\u{1F1EA}", name: "flag_kenya" },
20602
+ { emoji: "\u{1F1F0}\u{1F1EC}", name: "flag_kyrgyzstan" },
20603
+ { emoji: "\u{1F1F0}\u{1F1ED}", name: "flag_cambodia" },
20604
+ { emoji: "\u{1F1F0}\u{1F1EE}", name: "flag_kiribati" },
20605
+ { emoji: "\u{1F1F0}\u{1F1F2}", name: "flag_comoros" },
20606
+ { emoji: "\u{1F1F0}\u{1F1F3}", name: "flag_st_kitts" },
20607
+ { emoji: "\u{1F1F0}\u{1F1F5}", name: "flag_north_korea" },
20608
+ { emoji: "\u{1F1F0}\u{1F1F7}", name: "flag_south_korea" },
20609
+ { emoji: "\u{1F1F0}\u{1F1FC}", name: "flag_kuwait" },
20610
+ { emoji: "\u{1F1F0}\u{1F1FE}", name: "flag_cayman" },
20611
+ { emoji: "\u{1F1F0}\u{1F1FF}", name: "flag_kazakhstan" },
20612
+ { emoji: "\u{1F1F1}\u{1F1E6}", name: "flag_laos" },
20613
+ { emoji: "\u{1F1F1}\u{1F1E7}", name: "flag_lebanon" },
20614
+ { emoji: "\u{1F1F1}\u{1F1E8}", name: "flag_st_lucia" },
20615
+ { emoji: "\u{1F1F1}\u{1F1EE}", name: "flag_liechtenstein" },
20616
+ { emoji: "\u{1F1F1}\u{1F1F0}", name: "flag_sri_lanka" },
20617
+ { emoji: "\u{1F1F1}\u{1F1F7}", name: "flag_liberia" },
20618
+ { emoji: "\u{1F1F1}\u{1F1F8}", name: "flag_lesotho" },
20619
+ { emoji: "\u{1F1F1}\u{1F1F9}", name: "flag_lithuania" },
20620
+ { emoji: "\u{1F1F1}\u{1F1FA}", name: "flag_luxembourg" },
20621
+ { emoji: "\u{1F1F1}\u{1F1FB}", name: "flag_latvia" },
20622
+ { emoji: "\u{1F1F1}\u{1F1FE}", name: "flag_libya" },
20623
+ { emoji: "\u{1F1F2}\u{1F1E6}", name: "flag_morocco" },
20624
+ { emoji: "\u{1F1F2}\u{1F1E8}", name: "flag_monaco" },
20625
+ { emoji: "\u{1F1F2}\u{1F1E9}", name: "flag_moldova" },
20626
+ { emoji: "\u{1F1F2}\u{1F1EA}", name: "flag_montenegro" },
20627
+ { emoji: "\u{1F1F2}\u{1F1EB}", name: "flag_st_martin" },
20628
+ { emoji: "\u{1F1F2}\u{1F1EC}", name: "flag_madagascar" },
20629
+ { emoji: "\u{1F1F2}\u{1F1ED}", name: "flag_marshall_islands" },
20630
+ { emoji: "\u{1F1F2}\u{1F1F0}", name: "flag_north_macedonia" },
20631
+ { emoji: "\u{1F1F2}\u{1F1F1}", name: "flag_mali" },
20632
+ { emoji: "\u{1F1F2}\u{1F1F2}", name: "flag_myanmar" },
20633
+ { emoji: "\u{1F1F2}\u{1F1F3}", name: "flag_mongolia" },
20634
+ { emoji: "\u{1F1F2}\u{1F1F4}", name: "flag_macau" },
20635
+ { emoji: "\u{1F1F2}\u{1F1F5}", name: "flag_northern_mariana" },
20636
+ { emoji: "\u{1F1F2}\u{1F1F6}", name: "flag_martinique" },
20637
+ { emoji: "\u{1F1F2}\u{1F1F7}", name: "flag_mauritania" },
20638
+ { emoji: "\u{1F1F2}\u{1F1F8}", name: "flag_montserrat" },
20639
+ { emoji: "\u{1F1F2}\u{1F1F9}", name: "flag_malta" },
20640
+ { emoji: "\u{1F1F2}\u{1F1FA}", name: "flag_mauritius" },
20641
+ { emoji: "\u{1F1F2}\u{1F1FB}", name: "flag_maldives" },
20642
+ { emoji: "\u{1F1F2}\u{1F1FC}", name: "flag_malawi" },
20643
+ { emoji: "\u{1F1F2}\u{1F1FD}", name: "flag_mexico" },
20644
+ { emoji: "\u{1F1F2}\u{1F1FE}", name: "flag_malaysia" },
20645
+ { emoji: "\u{1F1F2}\u{1F1FF}", name: "flag_mozambique" },
20646
+ { emoji: "\u{1F1F3}\u{1F1E6}", name: "flag_namibia" },
20647
+ { emoji: "\u{1F1F3}\u{1F1E8}", name: "flag_new_caledonia" },
20648
+ { emoji: "\u{1F1F3}\u{1F1EA}", name: "flag_niger" },
20649
+ { emoji: "\u{1F1F3}\u{1F1EB}", name: "flag_norfolk" },
20650
+ { emoji: "\u{1F1F3}\u{1F1EC}", name: "flag_nigeria" },
20651
+ { emoji: "\u{1F1F3}\u{1F1EE}", name: "flag_nicaragua" },
20652
+ { emoji: "\u{1F1F3}\u{1F1F1}", name: "flag_netherlands" },
20653
+ { emoji: "\u{1F1F3}\u{1F1F4}", name: "flag_norway" },
20654
+ { emoji: "\u{1F1F3}\u{1F1F5}", name: "flag_nepal" },
20655
+ { emoji: "\u{1F1F3}\u{1F1F7}", name: "flag_nauru" },
20656
+ { emoji: "\u{1F1F3}\u{1F1FA}", name: "flag_niue" },
20657
+ { emoji: "\u{1F1F3}\u{1F1FF}", name: "flag_new_zealand" },
20658
+ { emoji: "\u{1F1F4}\u{1F1F2}", name: "flag_oman" },
20659
+ { emoji: "\u{1F1F5}\u{1F1E6}", name: "flag_panama" },
20660
+ { emoji: "\u{1F1F5}\u{1F1EA}", name: "flag_peru" },
20661
+ { emoji: "\u{1F1F5}\u{1F1EB}", name: "flag_french_polynesia" },
20662
+ { emoji: "\u{1F1F5}\u{1F1EC}", name: "flag_papua_new_guinea" },
20663
+ { emoji: "\u{1F1F5}\u{1F1ED}", name: "flag_philippines" },
20664
+ { emoji: "\u{1F1F5}\u{1F1F0}", name: "flag_pakistan" },
20665
+ { emoji: "\u{1F1F5}\u{1F1F1}", name: "flag_poland" },
20666
+ { emoji: "\u{1F1F5}\u{1F1F2}", name: "flag_st_pierre" },
20667
+ { emoji: "\u{1F1F5}\u{1F1F3}", name: "flag_pitcairn" },
20668
+ { emoji: "\u{1F1F5}\u{1F1F7}", name: "flag_puerto_rico" },
20669
+ { emoji: "\u{1F1F5}\u{1F1F8}", name: "flag_palestine" },
20670
+ { emoji: "\u{1F1F5}\u{1F1F9}", name: "flag_portugal" },
20671
+ { emoji: "\u{1F1F5}\u{1F1FC}", name: "flag_palau" },
20672
+ { emoji: "\u{1F1F5}\u{1F1FE}", name: "flag_paraguay" },
20673
+ { emoji: "\u{1F1F6}\u{1F1E6}", name: "flag_qatar" },
20674
+ { emoji: "\u{1F1F7}\u{1F1EA}", name: "flag_reunion" },
20675
+ { emoji: "\u{1F1F7}\u{1F1F4}", name: "flag_romania" },
20676
+ { emoji: "\u{1F1F7}\u{1F1F8}", name: "flag_serbia" },
20677
+ { emoji: "\u{1F1F7}\u{1F1FA}", name: "flag_russia" },
20678
+ { emoji: "\u{1F1F7}\u{1F1FC}", name: "flag_rwanda" },
20679
+ { emoji: "\u{1F1F8}\u{1F1E6}", name: "flag_saudi_arabia" },
20680
+ { emoji: "\u{1F1F8}\u{1F1E7}", name: "flag_solomon_islands" },
20681
+ { emoji: "\u{1F1F8}\u{1F1E8}", name: "flag_seychelles" },
20682
+ { emoji: "\u{1F1F8}\u{1F1E9}", name: "flag_sudan" },
20683
+ { emoji: "\u{1F1F8}\u{1F1EA}", name: "flag_sweden" },
20684
+ { emoji: "\u{1F1F8}\u{1F1EC}", name: "flag_singapore" },
20685
+ { emoji: "\u{1F1F8}\u{1F1ED}", name: "flag_st_helena" },
20686
+ { emoji: "\u{1F1F8}\u{1F1EE}", name: "flag_slovenia" },
20687
+ { emoji: "\u{1F1F8}\u{1F1EF}", name: "flag_svalbard" },
20688
+ { emoji: "\u{1F1F8}\u{1F1F0}", name: "flag_slovakia" },
20689
+ { emoji: "\u{1F1F8}\u{1F1F1}", name: "flag_sierra_leone" },
20690
+ { emoji: "\u{1F1F8}\u{1F1F2}", name: "flag_san_marino" },
20691
+ { emoji: "\u{1F1F8}\u{1F1F3}", name: "flag_senegal" },
20692
+ { emoji: "\u{1F1F8}\u{1F1F4}", name: "flag_somalia" },
20693
+ { emoji: "\u{1F1F8}\u{1F1F7}", name: "flag_suriname" },
20694
+ { emoji: "\u{1F1F8}\u{1F1F8}", name: "flag_south_sudan" },
20695
+ { emoji: "\u{1F1F8}\u{1F1F9}", name: "flag_sao_tome" },
20696
+ { emoji: "\u{1F1F8}\u{1F1FB}", name: "flag_el_salvador" },
20697
+ { emoji: "\u{1F1F8}\u{1F1FD}", name: "flag_sint_maarten" },
20698
+ { emoji: "\u{1F1F8}\u{1F1FE}", name: "flag_syria" },
20699
+ { emoji: "\u{1F1F8}\u{1F1FF}", name: "flag_eswatini" },
20700
+ { emoji: "\u{1F1F9}\u{1F1E6}", name: "flag_tristan" },
20701
+ { emoji: "\u{1F1F9}\u{1F1E8}", name: "flag_turks_caicos" },
20702
+ { emoji: "\u{1F1F9}\u{1F1E9}", name: "flag_chad" },
20703
+ { emoji: "\u{1F1F9}\u{1F1EB}", name: "flag_french_southern" },
20704
+ { emoji: "\u{1F1F9}\u{1F1EC}", name: "flag_togo" },
20705
+ { emoji: "\u{1F1F9}\u{1F1ED}", name: "flag_thailand" },
20706
+ { emoji: "\u{1F1F9}\u{1F1EF}", name: "flag_tajikistan" },
20707
+ { emoji: "\u{1F1F9}\u{1F1F0}", name: "flag_tokelau" },
20708
+ { emoji: "\u{1F1F9}\u{1F1F1}", name: "flag_timor_leste" },
20709
+ { emoji: "\u{1F1F9}\u{1F1F2}", name: "flag_turkmenistan" },
20710
+ { emoji: "\u{1F1F9}\u{1F1F3}", name: "flag_tunisia" },
20711
+ { emoji: "\u{1F1F9}\u{1F1F4}", name: "flag_tonga" },
20712
+ { emoji: "\u{1F1F9}\u{1F1F7}", name: "flag_turkey" },
20713
+ { emoji: "\u{1F1F9}\u{1F1F9}", name: "flag_trinidad" },
20714
+ { emoji: "\u{1F1F9}\u{1F1FB}", name: "flag_tuvalu" },
20715
+ { emoji: "\u{1F1F9}\u{1F1FC}", name: "flag_taiwan" },
20716
+ { emoji: "\u{1F1F9}\u{1F1FF}", name: "flag_tanzania" },
20717
+ { emoji: "\u{1F1FA}\u{1F1E6}", name: "flag_ukraine" },
20718
+ { emoji: "\u{1F1FA}\u{1F1EC}", name: "flag_uganda" },
20719
+ { emoji: "\u{1F1FA}\u{1F1F2}", name: "flag_us_outlying" },
20720
+ { emoji: "\u{1F1FA}\u{1F1F3}", name: "flag_un" },
20721
+ { emoji: "\u{1F1FA}\u{1F1F8}", name: "flag_usa" },
20722
+ { emoji: "\u{1F1FA}\u{1F1FE}", name: "flag_uruguay" },
20723
+ { emoji: "\u{1F1FA}\u{1F1FF}", name: "flag_uzbekistan" },
20724
+ { emoji: "\u{1F1FB}\u{1F1E6}", name: "flag_vatican" },
20725
+ { emoji: "\u{1F1FB}\u{1F1E8}", name: "flag_st_vincent" },
20726
+ { emoji: "\u{1F1FB}\u{1F1EA}", name: "flag_venezuela" },
20727
+ { emoji: "\u{1F1FB}\u{1F1EC}", name: "flag_bvi" },
20728
+ { emoji: "\u{1F1FB}\u{1F1EE}", name: "flag_usvi" },
20729
+ { emoji: "\u{1F1FB}\u{1F1F3}", name: "flag_vietnam" },
20730
+ { emoji: "\u{1F1FB}\u{1F1FA}", name: "flag_vanuatu" },
20731
+ { emoji: "\u{1F1FC}\u{1F1EB}", name: "flag_wallis" },
20732
+ { emoji: "\u{1F1FC}\u{1F1F8}", name: "flag_samoa" },
20733
+ { emoji: "\u{1F1FD}\u{1F1F0}", name: "flag_kosovo" },
20734
+ { emoji: "\u{1F1FE}\u{1F1EA}", name: "flag_yemen" },
20735
+ { emoji: "\u{1F1FE}\u{1F1F9}", name: "flag_mayotte" },
20736
+ { emoji: "\u{1F1FF}\u{1F1E6}", name: "flag_south_africa" },
20737
+ { emoji: "\u{1F1FF}\u{1F1F2}", name: "flag_zambia" },
20738
+ { emoji: "\u{1F1FF}\u{1F1FC}", name: "flag_zimbabwe" }
20739
+ ]
20740
+ }
20741
+ ];
20742
+
20743
+ // ../../components/ui/UEditor/emoji-suggestion.tsx
19974
20744
  var import_jsx_runtime76 = require("react/jsx-runtime");
20745
+ var EmojiList = (0, import_react42.forwardRef)((props, ref) => {
20746
+ const [selectedIndex, setSelectedIndex] = (0, import_react42.useState)(0);
20747
+ (0, import_react42.useEffect)(() => {
20748
+ setSelectedIndex(0);
20749
+ }, [props.items]);
20750
+ (0, import_react42.useImperativeHandle)(ref, () => ({
20751
+ onKeyDown: ({ event }) => {
20752
+ if (event.key === "ArrowUp") {
20753
+ setSelectedIndex((prev) => (prev + props.items.length - 1) % props.items.length);
20754
+ return true;
20755
+ }
20756
+ if (event.key === "ArrowDown") {
20757
+ setSelectedIndex((prev) => (prev + 1) % props.items.length);
20758
+ return true;
20759
+ }
20760
+ if (event.key === "ArrowLeft") {
20761
+ setSelectedIndex((prev) => Math.max(0, prev - 8));
20762
+ return true;
20763
+ }
20764
+ if (event.key === "ArrowRight") {
20765
+ setSelectedIndex((prev) => Math.min(props.items.length - 1, prev + 8));
20766
+ return true;
20767
+ }
20768
+ if (event.key === "Enter") {
20769
+ const item = props.items[selectedIndex];
20770
+ if (item) {
20771
+ props.command(item);
20772
+ }
20773
+ return true;
20774
+ }
20775
+ return false;
20776
+ }
20777
+ }));
20778
+ if (props.items.length === 0) {
20779
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("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" });
20780
+ }
20781
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "w-80 max-h-80 overflow-y-auto bg-card border border-border rounded-2xl shadow-lg", children: [
20782
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "px-3 py-2 border-b bg-muted/30", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "flex items-center gap-2", children: [
20783
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_lucide_react39.Smile, { className: "w-4 h-4 text-primary" }),
20784
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: "Emoji" })
20785
+ ] }) }),
20786
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "p-3", children: [
20787
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "grid grid-cols-8 gap-1", children: props.items.slice(0, 64).map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
20788
+ "button",
20789
+ {
20790
+ type: "button",
20791
+ onClick: () => props.command(item),
20792
+ className: cn(
20793
+ "w-9 h-9 flex items-center justify-center rounded-lg text-xl transition-colors",
20794
+ selectedIndex === index ? "bg-primary/10 ring-2 ring-primary/30" : "hover:bg-accent"
20795
+ ),
20796
+ title: item.name.replace(/_/g, " "),
20797
+ children: item.emoji
20798
+ },
20799
+ item.name
20800
+ )) }),
20801
+ props.items.length > 64 && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "mt-2 text-xs text-center text-muted-foreground", children: [
20802
+ "Showing first 64 of ",
20803
+ props.items.length,
20804
+ " emojis"
20805
+ ] })
20806
+ ] })
20807
+ ] });
20808
+ });
20809
+ EmojiList.displayName = "EmojiList";
20810
+ var getEmojiSuggestionItems = ({ query }) => {
20811
+ const allEmojis = EMOJI_LIST.flatMap((category) => category.emojis);
20812
+ if (!query.trim()) {
20813
+ return allEmojis.slice(0, 64);
20814
+ }
20815
+ const searchQuery = query.toLowerCase();
20816
+ return allEmojis.filter(
20817
+ (emoji) => emoji.name.toLowerCase().includes(searchQuery) || emoji.emoji.includes(query)
20818
+ );
20819
+ };
20820
+ var EmojiSuggestion = import_core3.Extension.create({
20821
+ name: "emojiSuggestion",
20822
+ addProseMirrorPlugins() {
20823
+ return [
20824
+ (0, import_suggestion2.default)({
20825
+ editor: this.editor,
20826
+ char: ":",
20827
+ pluginKey: new import_state2.PluginKey("emojiSuggestion"),
20828
+ command: ({ editor, range, props }) => {
20829
+ editor.chain().focus().deleteRange(range).insertContent(props.emoji).run();
20830
+ },
20831
+ items: getEmojiSuggestionItems,
20832
+ render: () => {
20833
+ let component;
20834
+ let popup;
20835
+ return {
20836
+ onStart: (props) => {
20837
+ component = new import_react41.ReactRenderer(EmojiList, {
20838
+ props,
20839
+ editor: props.editor
20840
+ });
20841
+ if (!props.clientRect) {
20842
+ return;
20843
+ }
20844
+ popup = (0, import_tippy2.default)("body", {
20845
+ getReferenceClientRect: props.clientRect,
20846
+ appendTo: () => document.body,
20847
+ content: component.element,
20848
+ showOnCreate: true,
20849
+ interactive: true,
20850
+ trigger: "manual",
20851
+ placement: "bottom-start"
20852
+ });
20853
+ },
20854
+ onUpdate(props) {
20855
+ component?.updateProps(props);
20856
+ if (!props.clientRect) {
20857
+ return;
20858
+ }
20859
+ popup?.[0]?.setProps({
20860
+ getReferenceClientRect: props.clientRect
20861
+ });
20862
+ },
20863
+ onKeyDown(props) {
20864
+ if (props.event.key === "Escape") {
20865
+ popup?.[0]?.hide();
20866
+ return true;
20867
+ }
20868
+ return component?.ref?.onKeyDown(props) ?? false;
20869
+ },
20870
+ onExit() {
20871
+ popup?.[0]?.destroy();
20872
+ component?.destroy();
20873
+ }
20874
+ };
20875
+ }
20876
+ })
20877
+ ];
20878
+ }
20879
+ });
20880
+
20881
+ // ../../components/ui/UEditor/resizable-image.tsx
20882
+ var import_react43 = require("react");
20883
+ var import_extension_image = __toESM(require("@tiptap/extension-image"), 1);
20884
+ var import_core4 = require("@tiptap/core");
20885
+ var import_react44 = require("@tiptap/react");
20886
+ var import_jsx_runtime77 = require("react/jsx-runtime");
19975
20887
  var MIN_IMAGE_SIZE_PX = 40;
19976
20888
  var AXIS_LOCK_THRESHOLD_PX = 4;
19977
20889
  function toNullableNumber(value) {
@@ -19987,15 +20899,15 @@ function clamp7(value, min, max) {
19987
20899
  }
19988
20900
  function ResizableImageNodeView(props) {
19989
20901
  const { node, selected, updateAttributes, editor, getPos } = props;
19990
- const wrapperRef = (0, import_react41.useRef)(null);
19991
- const imgRef = (0, import_react41.useRef)(null);
19992
- const [isHovered, setIsHovered] = (0, import_react41.useState)(false);
19993
- const [isResizing, setIsResizing] = (0, import_react41.useState)(false);
20902
+ const wrapperRef = (0, import_react43.useRef)(null);
20903
+ const imgRef = (0, import_react43.useRef)(null);
20904
+ const [isHovered, setIsHovered] = (0, import_react43.useState)(false);
20905
+ const [isResizing, setIsResizing] = (0, import_react43.useState)(false);
19994
20906
  const widthAttr = toNullableNumber(node.attrs["width"]);
19995
20907
  const heightAttr = toNullableNumber(node.attrs["height"]);
19996
20908
  const textAlign = String(node.attrs["textAlign"] ?? "");
19997
- const dragStateRef = (0, import_react41.useRef)(null);
19998
- (0, import_react41.useEffect)(() => {
20909
+ const dragStateRef = (0, import_react43.useRef)(null);
20910
+ (0, import_react43.useEffect)(() => {
19999
20911
  const img = imgRef.current;
20000
20912
  if (!img) return;
20001
20913
  img.style.width = widthAttr ? `${widthAttr}px` : "";
@@ -20089,8 +21001,8 @@ function ResizableImageNodeView(props) {
20089
21001
  const showHandle = selected || isHovered || isResizing;
20090
21002
  const wrapperAlignClass = textAlign === "center" ? "mx-auto" : textAlign === "right" ? "ml-auto" : textAlign === "justify" ? "mx-auto" : "";
20091
21003
  const wrapperWidthClass = "w-fit";
20092
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
20093
- import_react42.NodeViewWrapper,
21004
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
21005
+ import_react44.NodeViewWrapper,
20094
21006
  {
20095
21007
  as: "div",
20096
21008
  ref: wrapperRef,
@@ -20103,7 +21015,7 @@ function ResizableImageNodeView(props) {
20103
21015
  },
20104
21016
  contentEditable: false,
20105
21017
  children: [
20106
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
21018
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
20107
21019
  "img",
20108
21020
  {
20109
21021
  ref: imgRef,
@@ -20122,7 +21034,7 @@ function ResizableImageNodeView(props) {
20122
21034
  }
20123
21035
  }
20124
21036
  ),
20125
- showHandle && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
21037
+ showHandle && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
20126
21038
  "div",
20127
21039
  {
20128
21040
  "aria-hidden": "true",
@@ -20168,10 +21080,10 @@ var ResizableImage = import_extension_image.default.extend({
20168
21080
  };
20169
21081
  },
20170
21082
  renderHTML({ HTMLAttributes: HTMLAttributes2 }) {
20171
- return ["img", (0, import_core3.mergeAttributes)(this.options.HTMLAttributes, HTMLAttributes2)];
21083
+ return ["img", (0, import_core4.mergeAttributes)(this.options.HTMLAttributes, HTMLAttributes2)];
20172
21084
  },
20173
21085
  addNodeView() {
20174
- return (0, import_react42.ReactNodeViewRenderer)(ResizableImageNodeView);
21086
+ return (0, import_react44.ReactNodeViewRenderer)(ResizableImageNodeView);
20175
21087
  }
20176
21088
  }).configure({
20177
21089
  allowBase64: true,
@@ -20282,23 +21194,24 @@ function buildUEditorExtensions({
20282
21194
  emptyEditorClass: "is-editor-empty",
20283
21195
  emptyNodeClass: "is-empty"
20284
21196
  }),
20285
- SlashCommand
21197
+ SlashCommand,
21198
+ EmojiSuggestion
20286
21199
  ];
20287
21200
  }
20288
21201
 
20289
21202
  // ../../components/ui/UEditor/toolbar.tsx
20290
- var import_react45 = __toESM(require("react"), 1);
21203
+ var import_react48 = __toESM(require("react"), 1);
20291
21204
  var import_next_intl3 = require("next-intl");
20292
- var import_lucide_react41 = require("lucide-react");
21205
+ var import_lucide_react43 = require("lucide-react");
20293
21206
 
20294
21207
  // ../../components/ui/UEditor/colors.tsx
20295
- var import_react43 = require("react");
21208
+ var import_react45 = require("react");
20296
21209
  var import_next_intl = require("next-intl");
20297
- var import_lucide_react39 = require("lucide-react");
20298
- var import_jsx_runtime77 = require("react/jsx-runtime");
21210
+ var import_lucide_react40 = require("lucide-react");
21211
+ var import_jsx_runtime78 = require("react/jsx-runtime");
20299
21212
  var useEditorColors = () => {
20300
21213
  const t = (0, import_next_intl.useTranslations)("UEditor");
20301
- const textColors = (0, import_react43.useMemo)(
21214
+ const textColors = (0, import_react45.useMemo)(
20302
21215
  () => [
20303
21216
  { name: t("colors.default"), color: "inherit", cssClass: "text-foreground" },
20304
21217
  { name: t("colors.muted"), color: "var(--muted-foreground)", cssClass: "text-muted-foreground" },
@@ -20311,7 +21224,7 @@ var useEditorColors = () => {
20311
21224
  ],
20312
21225
  [t]
20313
21226
  );
20314
- const highlightColors = (0, import_react43.useMemo)(
21227
+ const highlightColors = (0, import_react45.useMemo)(
20315
21228
  () => [
20316
21229
  { name: t("colors.default"), color: "", cssClass: "" },
20317
21230
  { name: t("colors.muted"), color: "var(--muted)", cssClass: "bg-muted" },
@@ -20332,9 +21245,9 @@ var EditorColorPalette = ({
20332
21245
  currentColor,
20333
21246
  onSelect,
20334
21247
  label
20335
- }) => /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "p-2", children: [
20336
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider px-2", children: label }),
20337
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "grid grid-cols-4 gap-1.5 mt-2", children: colors.map((c) => /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
21248
+ }) => /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "p-2", children: [
21249
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider px-2", children: label }),
21250
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "grid grid-cols-4 gap-1.5 mt-2", children: colors.map((c) => /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
20338
21251
  "button",
20339
21252
  {
20340
21253
  type: "button",
@@ -20347,8 +21260,8 @@ var EditorColorPalette = ({
20347
21260
  style: { backgroundColor: c.color || "transparent" },
20348
21261
  title: c.name,
20349
21262
  children: [
20350
- c.color === "" && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react39.X, { className: "w-4 h-4 text-muted-foreground" }),
20351
- c.color === "inherit" && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "text-xs font-medium", children: "A" })
21263
+ c.color === "" && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react40.X, { className: "w-4 h-4 text-muted-foreground" }),
21264
+ c.color === "inherit" && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "text-xs font-medium", children: "A" })
20352
21265
  ]
20353
21266
  },
20354
21267
  c.name
@@ -20356,10 +21269,10 @@ var EditorColorPalette = ({
20356
21269
  ] });
20357
21270
 
20358
21271
  // ../../components/ui/UEditor/inputs.tsx
20359
- var import_react44 = require("react");
21272
+ var import_react46 = require("react");
20360
21273
  var import_next_intl2 = require("next-intl");
20361
- var import_lucide_react40 = require("lucide-react");
20362
- var import_jsx_runtime78 = require("react/jsx-runtime");
21274
+ var import_lucide_react41 = require("lucide-react");
21275
+ var import_jsx_runtime79 = require("react/jsx-runtime");
20363
21276
  function normalizeUrl(raw) {
20364
21277
  const url = raw.trim();
20365
21278
  if (!url) return "";
@@ -20373,9 +21286,9 @@ var LinkInput = ({
20373
21286
  initialUrl = ""
20374
21287
  }) => {
20375
21288
  const t = (0, import_next_intl2.useTranslations)("UEditor");
20376
- const [url, setUrl] = (0, import_react44.useState)(initialUrl);
20377
- const inputRef = (0, import_react44.useRef)(null);
20378
- (0, import_react44.useEffect)(() => {
21289
+ const [url, setUrl] = (0, import_react46.useState)(initialUrl);
21290
+ const inputRef = (0, import_react46.useRef)(null);
21291
+ (0, import_react46.useEffect)(() => {
20379
21292
  inputRef.current?.focus();
20380
21293
  inputRef.current?.select();
20381
21294
  }, []);
@@ -20384,8 +21297,8 @@ var LinkInput = ({
20384
21297
  const normalized = normalizeUrl(url);
20385
21298
  if (normalized) onSubmit(normalized);
20386
21299
  };
20387
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("form", { onSubmit: handleSubmit, className: "flex items-center gap-2 p-2", children: [
20388
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
21300
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("form", { onSubmit: handleSubmit, className: "flex items-center gap-2 p-2", children: [
21301
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
20389
21302
  "input",
20390
21303
  {
20391
21304
  ref: inputRef,
@@ -20396,16 +21309,16 @@ var LinkInput = ({
20396
21309
  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"
20397
21310
  }
20398
21311
  ),
20399
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("button", { type: "submit", className: "p-2 rounded-lg bg-primary text-primary-foreground hover:bg-primary/90 transition-colors", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react40.Check, { className: "w-4 h-4" }) }),
20400
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("button", { type: "button", onClick: onCancel, className: "p-2 rounded-lg hover:bg-muted transition-colors text-muted-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react40.X, { className: "w-4 h-4" }) })
21312
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("button", { type: "submit", className: "p-2 rounded-lg bg-primary text-primary-foreground hover:bg-primary/90 transition-colors", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Check, { className: "w-4 h-4" }) }),
21313
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("button", { type: "button", onClick: onCancel, className: "p-2 rounded-lg hover:bg-muted transition-colors text-muted-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.X, { className: "w-4 h-4" }) })
20401
21314
  ] });
20402
21315
  };
20403
21316
  var ImageInput = ({ onSubmit, onCancel }) => {
20404
21317
  const t = (0, import_next_intl2.useTranslations)("UEditor");
20405
- const [url, setUrl] = (0, import_react44.useState)("");
20406
- const [alt, setAlt] = (0, import_react44.useState)("");
20407
- const inputRef = (0, import_react44.useRef)(null);
20408
- (0, import_react44.useEffect)(() => {
21318
+ const [url, setUrl] = (0, import_react46.useState)("");
21319
+ const [alt, setAlt] = (0, import_react46.useState)("");
21320
+ const inputRef = (0, import_react46.useRef)(null);
21321
+ (0, import_react46.useEffect)(() => {
20409
21322
  inputRef.current?.focus();
20410
21323
  }, []);
20411
21324
  const handleSubmit = (e) => {
@@ -20414,10 +21327,10 @@ var ImageInput = ({ onSubmit, onCancel }) => {
20414
21327
  onSubmit(url, alt);
20415
21328
  }
20416
21329
  };
20417
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("form", { onSubmit: handleSubmit, className: "p-3 space-y-3", children: [
20418
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
20419
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-xs font-medium text-muted-foreground", children: t("imageInput.urlLabel") }),
20420
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
21330
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("form", { onSubmit: handleSubmit, className: "p-3 space-y-3", children: [
21331
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { children: [
21332
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("label", { className: "text-xs font-medium text-muted-foreground", children: t("imageInput.urlLabel") }),
21333
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
20421
21334
  "input",
20422
21335
  {
20423
21336
  ref: inputRef,
@@ -20429,9 +21342,9 @@ var ImageInput = ({ onSubmit, onCancel }) => {
20429
21342
  }
20430
21343
  )
20431
21344
  ] }),
20432
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
20433
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-xs font-medium text-muted-foreground", children: t("imageInput.altLabel") }),
20434
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
21345
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { children: [
21346
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("label", { className: "text-xs font-medium text-muted-foreground", children: t("imageInput.altLabel") }),
21347
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
20435
21348
  "input",
20436
21349
  {
20437
21350
  type: "text",
@@ -20442,8 +21355,8 @@ var ImageInput = ({ onSubmit, onCancel }) => {
20442
21355
  }
20443
21356
  )
20444
21357
  ] }),
20445
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex gap-2", children: [
20446
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
21358
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "flex gap-2", children: [
21359
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
20447
21360
  "button",
20448
21361
  {
20449
21362
  type: "submit",
@@ -20452,13 +21365,195 @@ var ImageInput = ({ onSubmit, onCancel }) => {
20452
21365
  children: t("imageInput.addBtn")
20453
21366
  }
20454
21367
  ),
20455
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("button", { type: "button", onClick: onCancel, className: "px-4 py-2 rounded-lg hover:bg-muted transition-colors text-muted-foreground", children: t("imageInput.cancelBtn") })
21368
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("button", { type: "button", onClick: onCancel, className: "px-4 py-2 rounded-lg hover:bg-muted transition-colors text-muted-foreground", children: t("imageInput.cancelBtn") })
20456
21369
  ] })
20457
21370
  ] });
20458
21371
  };
20459
21372
 
21373
+ // ../../components/ui/UEditor/emoji-picker.tsx
21374
+ var import_react47 = require("react");
21375
+ var import_lucide_react42 = require("lucide-react");
21376
+ var import_jsx_runtime80 = require("react/jsx-runtime");
21377
+ var CATEGORY_ICONS = {
21378
+ "smileys_people": import_lucide_react42.Smile,
21379
+ "animals_nature": import_lucide_react42.Leaf,
21380
+ "food_drink": import_lucide_react42.Utensils,
21381
+ "activity": import_lucide_react42.Dumbbell,
21382
+ "objects": import_lucide_react42.Lightbulb,
21383
+ "symbols": import_lucide_react42.Hash,
21384
+ "flags": import_lucide_react42.Flag
21385
+ };
21386
+ var EmojiPicker = ({ onSelect, onClose }) => {
21387
+ const [search, setSearch] = (0, import_react47.useState)("");
21388
+ const [activeCategory, setActiveCategory] = (0, import_react47.useState)(EMOJI_LIST[0]?.id || "");
21389
+ const scrollContainerRef = (0, import_react47.useRef)(null);
21390
+ const categoryRefs = (0, import_react47.useRef)({});
21391
+ const isUserScrolling = (0, import_react47.useRef)(false);
21392
+ const filteredCategories = (0, import_react47.useMemo)(() => {
21393
+ if (!search.trim()) return EMOJI_LIST;
21394
+ const query = search.toLowerCase();
21395
+ return EMOJI_LIST.map((category) => ({
21396
+ ...category,
21397
+ emojis: category.emojis.filter(
21398
+ (emoji) => emoji.name.toLowerCase().includes(query) || emoji.emoji.includes(search)
21399
+ )
21400
+ })).filter((category) => category.emojis.length > 0);
21401
+ }, [search]);
21402
+ const handleEmojiClick = (emoji) => {
21403
+ onSelect(emoji);
21404
+ setSearch("");
21405
+ };
21406
+ (0, import_react47.useEffect)(() => {
21407
+ if (search) return;
21408
+ const container = scrollContainerRef.current;
21409
+ if (!container) return;
21410
+ const handleScroll = () => {
21411
+ if (!isUserScrolling.current) return;
21412
+ const scrollTop = container.scrollTop;
21413
+ const containerHeight = container.clientHeight;
21414
+ let maxVisibility = 0;
21415
+ let mostVisibleCategory = EMOJI_LIST[0]?.id || "";
21416
+ EMOJI_LIST.forEach((category) => {
21417
+ const element = categoryRefs.current[category.id];
21418
+ if (!element) return;
21419
+ const rect = element.getBoundingClientRect();
21420
+ const containerRect = container.getBoundingClientRect();
21421
+ const visibleTop = Math.max(rect.top, containerRect.top);
21422
+ const visibleBottom = Math.min(rect.bottom, containerRect.bottom);
21423
+ const visibleHeight = Math.max(0, visibleBottom - visibleTop);
21424
+ if (visibleHeight > maxVisibility) {
21425
+ maxVisibility = visibleHeight;
21426
+ mostVisibleCategory = category.id;
21427
+ }
21428
+ });
21429
+ if (mostVisibleCategory !== activeCategory) {
21430
+ setActiveCategory(mostVisibleCategory);
21431
+ }
21432
+ };
21433
+ container.addEventListener("scroll", handleScroll);
21434
+ return () => container.removeEventListener("scroll", handleScroll);
21435
+ }, [search, activeCategory]);
21436
+ const handleCategoryClick = (categoryId) => {
21437
+ const element = categoryRefs.current[categoryId];
21438
+ if (!element || !scrollContainerRef.current) return;
21439
+ isUserScrolling.current = false;
21440
+ setActiveCategory(categoryId);
21441
+ element.scrollIntoView({ behavior: "smooth", block: "start" });
21442
+ setTimeout(() => {
21443
+ isUserScrolling.current = true;
21444
+ }, 500);
21445
+ };
21446
+ (0, import_react47.useEffect)(() => {
21447
+ isUserScrolling.current = true;
21448
+ }, []);
21449
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "w-96 bg-card border border-border rounded-2xl shadow-xl overflow-hidden flex flex-col max-h-128", children: [
21450
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "p-3 border-b bg-muted/30 shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "relative", children: [
21451
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground" }),
21452
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
21453
+ "input",
21454
+ {
21455
+ type: "text",
21456
+ placeholder: "T\xECm ki\u1EBFm bi\u1EC3u t\u01B0\u1EE3ng c\u1EA3m x\xFAc",
21457
+ value: search,
21458
+ onChange: (e) => setSearch(e.target.value),
21459
+ className: cn(
21460
+ "w-full pl-9 pr-9 py-2 rounded-lg",
21461
+ "bg-background border border-border",
21462
+ "text-sm placeholder:text-muted-foreground",
21463
+ "focus:outline-none focus:ring-2 focus:ring-primary/20"
21464
+ )
21465
+ }
21466
+ ),
21467
+ search && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
21468
+ "button",
21469
+ {
21470
+ onClick: () => setSearch(""),
21471
+ className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",
21472
+ children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.X, { className: "w-4 h-4" })
21473
+ }
21474
+ )
21475
+ ] }) }),
21476
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
21477
+ "div",
21478
+ {
21479
+ ref: scrollContainerRef,
21480
+ className: "overflow-y-auto px-3 py-2 shrink",
21481
+ style: { height: "20rem" },
21482
+ children: search ? (
21483
+ // Search Results
21484
+ filteredCategories.length > 0 ? filteredCategories.map((category) => /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "mb-4", children: [
21485
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-2 sticky top-0 bg-card py-1", children: category.name }),
21486
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "grid grid-cols-9 gap-1", children: category.emojis.map((emoji) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
21487
+ "button",
21488
+ {
21489
+ onClick: () => handleEmojiClick(emoji.emoji),
21490
+ className: cn(
21491
+ "w-9 h-9 flex items-center justify-center rounded-lg",
21492
+ "text-2xl hover:bg-accent transition-colors",
21493
+ "focus:outline-none focus:ring-2 focus:ring-primary/20"
21494
+ ),
21495
+ title: emoji.name.replace(/_/g, " "),
21496
+ children: emoji.emoji
21497
+ },
21498
+ emoji.name
21499
+ )) })
21500
+ ] }, category.id)) : /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "flex flex-col items-center justify-center h-full text-center", children: [
21501
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "text-4xl mb-2", children: "\u{1F50D}" }),
21502
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "text-sm font-medium text-muted-foreground", children: "Kh\xF4ng t\xECm th\u1EA5y emoji" }),
21503
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "text-xs text-muted-foreground mt-1", children: "Th\u1EED t\u1EEB kh\xF3a kh\xE1c" })
21504
+ ] })
21505
+ ) : (
21506
+ // All Categories - Messenger Style
21507
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "space-y-4", children: EMOJI_LIST.map((category) => /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
21508
+ "div",
21509
+ {
21510
+ ref: (el) => {
21511
+ categoryRefs.current[category.id] = el;
21512
+ },
21513
+ children: [
21514
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("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 }),
21515
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "grid grid-cols-9 gap-1", children: category.emojis.map((emoji) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
21516
+ "button",
21517
+ {
21518
+ onClick: () => handleEmojiClick(emoji.emoji),
21519
+ className: cn(
21520
+ "w-9 h-9 flex items-center justify-center rounded-lg",
21521
+ "text-2xl hover:bg-accent transition-colors",
21522
+ "focus:outline-none focus:ring-2 focus:ring-primary/20"
21523
+ ),
21524
+ title: emoji.name.replace(/_/g, " "),
21525
+ children: emoji.emoji
21526
+ },
21527
+ emoji.name
21528
+ )) })
21529
+ ]
21530
+ },
21531
+ category.id
21532
+ )) })
21533
+ )
21534
+ }
21535
+ ),
21536
+ !search && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "flex items-center justify-around px-2 py-2 border-t bg-muted/30 shrink-0", children: EMOJI_LIST.map((category) => {
21537
+ const IconComponent = CATEGORY_ICONS[category.id] || import_lucide_react42.Smile;
21538
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
21539
+ "button",
21540
+ {
21541
+ onClick: () => handleCategoryClick(category.id),
21542
+ className: cn(
21543
+ "p-2 rounded-lg transition-colors",
21544
+ activeCategory === category.id ? "text-primary bg-primary/10" : "text-muted-foreground hover:text-foreground hover:bg-accent"
21545
+ ),
21546
+ title: category.name,
21547
+ children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconComponent, { className: "w-5 h-5" })
21548
+ },
21549
+ category.id
21550
+ );
21551
+ }) })
21552
+ ] });
21553
+ };
21554
+
20460
21555
  // ../../components/ui/UEditor/toolbar.tsx
20461
- var import_jsx_runtime79 = require("react/jsx-runtime");
21556
+ var import_jsx_runtime81 = require("react/jsx-runtime");
20462
21557
  function fileToDataUrl2(file) {
20463
21558
  return new Promise((resolve, reject) => {
20464
21559
  const reader = new FileReader();
@@ -20467,8 +21562,8 @@ function fileToDataUrl2(file) {
20467
21562
  reader.readAsDataURL(file);
20468
21563
  });
20469
21564
  }
20470
- var ToolbarButton = import_react45.default.forwardRef(({ onClick, onMouseDown, active, disabled, children, title, className }, ref) => {
20471
- const button = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21565
+ var ToolbarButton = import_react48.default.forwardRef(({ onClick, onMouseDown, active, disabled, children, title, className }, ref) => {
21566
+ const button = /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20472
21567
  "button",
20473
21568
  {
20474
21569
  ref,
@@ -20491,12 +21586,12 @@ var ToolbarButton = import_react45.default.forwardRef(({ onClick, onMouseDown, a
20491
21586
  }
20492
21587
  );
20493
21588
  if (title) {
20494
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Tooltip, { content: title, placement: "top", delay: { open: 200, close: 0 }, children: button });
21589
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Tooltip, { content: title, placement: "top", delay: { open: 200, close: 0 }, children: button });
20495
21590
  }
20496
21591
  return button;
20497
21592
  });
20498
21593
  ToolbarButton.displayName = "ToolbarButton";
20499
- var ToolbarDivider = () => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "w-px h-6 bg-border/50 mx-1" });
21594
+ var ToolbarDivider = () => /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "w-px h-6 bg-border/50 mx-1" });
20500
21595
  var EditorToolbar = ({
20501
21596
  editor,
20502
21597
  variant,
@@ -20505,10 +21600,10 @@ var EditorToolbar = ({
20505
21600
  }) => {
20506
21601
  const t = (0, import_next_intl3.useTranslations)("UEditor");
20507
21602
  const { textColors, highlightColors } = useEditorColors();
20508
- const [showImageInput, setShowImageInput] = (0, import_react45.useState)(false);
20509
- const fileInputRef = (0, import_react45.useRef)(null);
20510
- const [isUploadingImage, setIsUploadingImage] = (0, import_react45.useState)(false);
20511
- const [imageUploadError, setImageUploadError] = (0, import_react45.useState)(null);
21603
+ const [showImageInput, setShowImageInput] = (0, import_react48.useState)(false);
21604
+ const fileInputRef = (0, import_react48.useRef)(null);
21605
+ const [isUploadingImage, setIsUploadingImage] = (0, import_react48.useState)(false);
21606
+ const [imageUploadError, setImageUploadError] = (0, import_react48.useState)(null);
20512
21607
  const insertImageFiles = async (files) => {
20513
21608
  if (files.length === 0) return;
20514
21609
  setIsUploadingImage(true);
@@ -20527,63 +21622,63 @@ var EditorToolbar = ({
20527
21622
  setIsUploadingImage(false);
20528
21623
  };
20529
21624
  if (variant === "minimal") {
20530
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "flex items-center gap-1 p-2 border-b bg-muted/30", children: [
20531
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Bold, { className: "w-4 h-4" }) }),
20532
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Italic, { className: "w-4 h-4" }) }),
20533
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21625
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "flex items-center gap-1 p-2 border-b bg-muted/30", children: [
21626
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Bold, { className: "w-4 h-4" }) }),
21627
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Italic, { className: "w-4 h-4" }) }),
21628
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20534
21629
  ToolbarButton,
20535
21630
  {
20536
21631
  onClick: () => editor.chain().focus().toggleBulletList().run(),
20537
21632
  active: editor.isActive("bulletList"),
20538
21633
  title: t("toolbar.bulletList"),
20539
- children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.List, { className: "w-4 h-4" })
21634
+ children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.List, { className: "w-4 h-4" })
20540
21635
  }
20541
21636
  )
20542
21637
  ] });
20543
21638
  }
20544
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "flex flex-wrap items-center gap-1 p-2 border-b bg-linear-to-r from-muted/30 to-transparent", children: [
20545
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
21639
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "flex flex-wrap items-center gap-1 p-2 border-b bg-linear-to-r from-muted/30 to-transparent", children: [
21640
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
20546
21641
  DropdownMenu,
20547
21642
  {
20548
- trigger: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(ToolbarButton, { onClick: () => {
21643
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(ToolbarButton, { onClick: () => {
20549
21644
  }, title: t("toolbar.textStyle"), className: "px-2 w-auto gap-1", children: [
20550
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Type, { className: "w-4 h-4" }),
20551
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.ChevronDown, { className: "w-3 h-3" })
21645
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Type, { className: "w-4 h-4" }),
21646
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.ChevronDown, { className: "w-3 h-3" })
20552
21647
  ] }),
20553
21648
  children: [
20554
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21649
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20555
21650
  DropdownMenuItem,
20556
21651
  {
20557
- icon: import_lucide_react41.Type,
21652
+ icon: import_lucide_react43.Type,
20558
21653
  label: t("toolbar.normal"),
20559
21654
  onClick: () => editor.chain().focus().setParagraph().run(),
20560
21655
  active: editor.isActive("paragraph")
20561
21656
  }
20562
21657
  ),
20563
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21658
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20564
21659
  DropdownMenuItem,
20565
21660
  {
20566
- icon: import_lucide_react41.Heading1,
21661
+ icon: import_lucide_react43.Heading1,
20567
21662
  label: t("toolbar.heading1"),
20568
21663
  onClick: () => editor.chain().focus().toggleHeading({ level: 1 }).run(),
20569
21664
  active: editor.isActive("heading", { level: 1 }),
20570
21665
  shortcut: "Ctrl+Alt+1"
20571
21666
  }
20572
21667
  ),
20573
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21668
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20574
21669
  DropdownMenuItem,
20575
21670
  {
20576
- icon: import_lucide_react41.Heading2,
21671
+ icon: import_lucide_react43.Heading2,
20577
21672
  label: t("toolbar.heading2"),
20578
21673
  onClick: () => editor.chain().focus().toggleHeading({ level: 2 }).run(),
20579
21674
  active: editor.isActive("heading", { level: 2 }),
20580
21675
  shortcut: "Ctrl+Alt+2"
20581
21676
  }
20582
21677
  ),
20583
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21678
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20584
21679
  DropdownMenuItem,
20585
21680
  {
20586
- icon: import_lucide_react41.Heading3,
21681
+ icon: import_lucide_react43.Heading3,
20587
21682
  label: t("toolbar.heading3"),
20588
21683
  onClick: () => editor.chain().focus().toggleHeading({ level: 3 }).run(),
20589
21684
  active: editor.isActive("heading", { level: 3 }),
@@ -20593,30 +21688,30 @@ var EditorToolbar = ({
20593
21688
  ]
20594
21689
  }
20595
21690
  ),
20596
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarDivider, {}),
20597
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Bold, { className: "w-4 h-4" }) }),
20598
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Italic, { className: "w-4 h-4" }) }),
20599
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21691
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarDivider, {}),
21692
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Bold, { className: "w-4 h-4" }) }),
21693
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Italic, { className: "w-4 h-4" }) }),
21694
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20600
21695
  ToolbarButton,
20601
21696
  {
20602
21697
  onClick: () => editor.chain().focus().toggleUnderline().run(),
20603
21698
  active: editor.isActive("underline"),
20604
21699
  title: t("toolbar.underline"),
20605
- children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Underline, { className: "w-4 h-4" })
21700
+ children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Underline, { className: "w-4 h-4" })
20606
21701
  }
20607
21702
  ),
20608
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleStrike().run(), active: editor.isActive("strike"), title: t("toolbar.strike"), children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Strikethrough, { className: "w-4 h-4" }) }),
20609
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleCode().run(), active: editor.isActive("code"), title: t("toolbar.code"), children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Code, { className: "w-4 h-4" }) }),
20610
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarDivider, {}),
20611
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21703
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleStrike().run(), active: editor.isActive("strike"), title: t("toolbar.strike"), children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Strikethrough, { className: "w-4 h-4" }) }),
21704
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleCode().run(), active: editor.isActive("code"), title: t("toolbar.code"), children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Code, { className: "w-4 h-4" }) }),
21705
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarDivider, {}),
21706
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20612
21707
  DropdownMenu,
20613
21708
  {
20614
- trigger: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(ToolbarButton, { onClick: () => {
21709
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(ToolbarButton, { onClick: () => {
20615
21710
  }, title: t("colors.textColor"), children: [
20616
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Palette, { className: "w-4 h-4" }),
20617
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.ChevronDown, { className: "w-3 h-3" })
21711
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Palette, { className: "w-4 h-4" }),
21712
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.ChevronDown, { className: "w-3 h-3" })
20618
21713
  ] }),
20619
- children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21714
+ children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20620
21715
  EditorColorPalette,
20621
21716
  {
20622
21717
  colors: textColors,
@@ -20633,15 +21728,15 @@ var EditorToolbar = ({
20633
21728
  )
20634
21729
  }
20635
21730
  ),
20636
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21731
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20637
21732
  DropdownMenu,
20638
21733
  {
20639
- trigger: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(ToolbarButton, { onClick: () => {
21734
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(ToolbarButton, { onClick: () => {
20640
21735
  }, active: editor.isActive("highlight"), title: t("colors.highlight"), children: [
20641
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Highlighter, { className: "w-4 h-4" }),
20642
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.ChevronDown, { className: "w-3 h-3" })
21736
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Highlighter, { className: "w-4 h-4" }),
21737
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.ChevronDown, { className: "w-3 h-3" })
20643
21738
  ] }),
20644
- children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21739
+ children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20645
21740
  EditorColorPalette,
20646
21741
  {
20647
21742
  colors: highlightColors,
@@ -20658,47 +21753,63 @@ var EditorToolbar = ({
20658
21753
  )
20659
21754
  }
20660
21755
  ),
20661
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarDivider, {}),
20662
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
21756
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarDivider, {}),
21757
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20663
21758
  DropdownMenu,
20664
21759
  {
20665
- trigger: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(ToolbarButton, { onClick: () => {
21760
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarButton, { onClick: () => {
21761
+ }, title: t("toolbar.emoji"), children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Smile, { className: "w-4 h-4" }) }),
21762
+ children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
21763
+ EmojiPicker,
21764
+ {
21765
+ onSelect: (emoji) => {
21766
+ editor.chain().focus().insertContent(emoji).run();
21767
+ }
21768
+ }
21769
+ )
21770
+ }
21771
+ ),
21772
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarDivider, {}),
21773
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
21774
+ DropdownMenu,
21775
+ {
21776
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(ToolbarButton, { onClick: () => {
20666
21777
  }, title: t("toolbar.alignment"), children: [
20667
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.AlignLeft, { className: "w-4 h-4" }),
20668
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.ChevronDown, { className: "w-3 h-3" })
21778
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.AlignLeft, { className: "w-4 h-4" }),
21779
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.ChevronDown, { className: "w-3 h-3" })
20669
21780
  ] }),
20670
21781
  children: [
20671
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21782
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20672
21783
  DropdownMenuItem,
20673
21784
  {
20674
- icon: import_lucide_react41.AlignLeft,
21785
+ icon: import_lucide_react43.AlignLeft,
20675
21786
  label: t("toolbar.alignLeft"),
20676
21787
  onClick: () => editor.chain().focus().setTextAlign("left").run(),
20677
21788
  active: editor.isActive({ textAlign: "left" })
20678
21789
  }
20679
21790
  ),
20680
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21791
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20681
21792
  DropdownMenuItem,
20682
21793
  {
20683
- icon: import_lucide_react41.AlignCenter,
21794
+ icon: import_lucide_react43.AlignCenter,
20684
21795
  label: t("toolbar.alignCenter"),
20685
21796
  onClick: () => editor.chain().focus().setTextAlign("center").run(),
20686
21797
  active: editor.isActive({ textAlign: "center" })
20687
21798
  }
20688
21799
  ),
20689
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21800
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20690
21801
  DropdownMenuItem,
20691
21802
  {
20692
- icon: import_lucide_react41.AlignRight,
21803
+ icon: import_lucide_react43.AlignRight,
20693
21804
  label: t("toolbar.alignRight"),
20694
21805
  onClick: () => editor.chain().focus().setTextAlign("right").run(),
20695
21806
  active: editor.isActive({ textAlign: "right" })
20696
21807
  }
20697
21808
  ),
20698
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21809
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20699
21810
  DropdownMenuItem,
20700
21811
  {
20701
- icon: import_lucide_react41.AlignJustify,
21812
+ icon: import_lucide_react43.AlignJustify,
20702
21813
  label: t("toolbar.justify"),
20703
21814
  onClick: () => editor.chain().focus().setTextAlign("justify").run(),
20704
21815
  active: editor.isActive({ textAlign: "justify" })
@@ -20707,40 +21818,40 @@ var EditorToolbar = ({
20707
21818
  ]
20708
21819
  }
20709
21820
  ),
20710
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarDivider, {}),
20711
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
21821
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarDivider, {}),
21822
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
20712
21823
  DropdownMenu,
20713
21824
  {
20714
- trigger: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(ToolbarButton, { onClick: () => {
21825
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(ToolbarButton, { onClick: () => {
20715
21826
  }, title: t("toolbar.bulletList"), children: [
20716
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.List, { className: "w-4 h-4" }),
20717
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.ChevronDown, { className: "w-3 h-3" })
21827
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.List, { className: "w-4 h-4" }),
21828
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.ChevronDown, { className: "w-3 h-3" })
20718
21829
  ] }),
20719
21830
  children: [
20720
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21831
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20721
21832
  DropdownMenuItem,
20722
21833
  {
20723
- icon: import_lucide_react41.List,
21834
+ icon: import_lucide_react43.List,
20724
21835
  label: t("toolbar.bulletList"),
20725
21836
  onClick: () => editor.chain().focus().toggleBulletList().run(),
20726
21837
  active: editor.isActive("bulletList"),
20727
21838
  shortcut: "Ctrl+Shift+8"
20728
21839
  }
20729
21840
  ),
20730
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21841
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20731
21842
  DropdownMenuItem,
20732
21843
  {
20733
- icon: import_lucide_react41.ListOrdered,
21844
+ icon: import_lucide_react43.ListOrdered,
20734
21845
  label: t("toolbar.orderedList"),
20735
21846
  onClick: () => editor.chain().focus().toggleOrderedList().run(),
20736
21847
  active: editor.isActive("orderedList"),
20737
21848
  shortcut: "Ctrl+Shift+7"
20738
21849
  }
20739
21850
  ),
20740
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21851
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20741
21852
  DropdownMenuItem,
20742
21853
  {
20743
- icon: import_lucide_react41.ListTodo,
21854
+ icon: import_lucide_react43.ListTodo,
20744
21855
  label: t("toolbar.taskList"),
20745
21856
  onClick: () => editor.chain().focus().toggleTaskList().run(),
20746
21857
  active: editor.isActive("taskList"),
@@ -20750,29 +21861,29 @@ var EditorToolbar = ({
20750
21861
  ]
20751
21862
  }
20752
21863
  ),
20753
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
21864
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
20754
21865
  DropdownMenu,
20755
21866
  {
20756
- trigger: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(ToolbarButton, { onClick: () => {
21867
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(ToolbarButton, { onClick: () => {
20757
21868
  }, title: t("toolbar.quote"), children: [
20758
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Quote, { className: "w-4 h-4" }),
20759
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.ChevronDown, { className: "w-3 h-3" })
21869
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Quote, { className: "w-4 h-4" }),
21870
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.ChevronDown, { className: "w-3 h-3" })
20760
21871
  ] }),
20761
21872
  children: [
20762
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21873
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20763
21874
  DropdownMenuItem,
20764
21875
  {
20765
- icon: import_lucide_react41.Quote,
21876
+ icon: import_lucide_react43.Quote,
20766
21877
  label: t("toolbar.quote"),
20767
21878
  onClick: () => editor.chain().focus().toggleBlockquote().run(),
20768
21879
  active: editor.isActive("blockquote"),
20769
21880
  shortcut: "Ctrl+Shift+B"
20770
21881
  }
20771
21882
  ),
20772
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21883
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20773
21884
  DropdownMenuItem,
20774
21885
  {
20775
- icon: import_lucide_react41.FileCode,
21886
+ icon: import_lucide_react43.FileCode,
20776
21887
  label: t("toolbar.codeBlock"),
20777
21888
  onClick: () => editor.chain().focus().toggleCodeBlock().run(),
20778
21889
  active: editor.isActive("codeBlock"),
@@ -20782,15 +21893,15 @@ var EditorToolbar = ({
20782
21893
  ]
20783
21894
  }
20784
21895
  ),
20785
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21896
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20786
21897
  DropdownMenu,
20787
21898
  {
20788
- trigger: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(ToolbarButton, { onClick: () => {
21899
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(ToolbarButton, { onClick: () => {
20789
21900
  }, title: t("toolbar.image"), children: [
20790
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Image, { className: "w-4 h-4" }),
20791
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.ChevronDown, { className: "w-3 h-3" })
21901
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Image, { className: "w-4 h-4" }),
21902
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.ChevronDown, { className: "w-3 h-3" })
20792
21903
  ] }),
20793
- children: showImageInput ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21904
+ children: showImageInput ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20794
21905
  ImageInput,
20795
21906
  {
20796
21907
  onSubmit: (url, alt) => {
@@ -20799,19 +21910,19 @@ var EditorToolbar = ({
20799
21910
  },
20800
21911
  onCancel: () => setShowImageInput(false)
20801
21912
  }
20802
- ) : /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_jsx_runtime79.Fragment, { children: [
20803
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(DropdownMenuItem, { icon: import_lucide_react41.Link, label: t("imageInput.addFromUrl"), onClick: () => setShowImageInput(true) }),
20804
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21913
+ ) : /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
21914
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(DropdownMenuItem, { icon: import_lucide_react43.Link, label: t("imageInput.addFromUrl"), onClick: () => setShowImageInput(true) }),
21915
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20805
21916
  DropdownMenuItem,
20806
21917
  {
20807
- icon: import_lucide_react41.Upload,
21918
+ icon: import_lucide_react43.Upload,
20808
21919
  label: isUploadingImage ? t("imageInput.uploading") : t("imageInput.uploadTab"),
20809
21920
  disabled: isUploadingImage,
20810
21921
  onClick: () => fileInputRef.current?.click()
20811
21922
  }
20812
21923
  ),
20813
- imageUploadError && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(DropdownMenuItem, { label: imageUploadError, disabled: true, destructive: true }),
20814
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21924
+ imageUploadError && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(DropdownMenuItem, { label: imageUploadError, disabled: true, destructive: true }),
21925
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20815
21926
  "input",
20816
21927
  {
20817
21928
  ref: fileInputRef,
@@ -20829,83 +21940,83 @@ var EditorToolbar = ({
20829
21940
  ] })
20830
21941
  }
20831
21942
  ),
20832
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
21943
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
20833
21944
  DropdownMenu,
20834
21945
  {
20835
- trigger: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(ToolbarButton, { onClick: () => {
21946
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(ToolbarButton, { onClick: () => {
20836
21947
  }, title: t("toolbar.table"), children: [
20837
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Table, { className: "w-4 h-4" }),
20838
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.ChevronDown, { className: "w-3 h-3" })
21948
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Table, { className: "w-4 h-4" }),
21949
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.ChevronDown, { className: "w-3 h-3" })
20839
21950
  ] }),
20840
21951
  children: [
20841
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21952
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20842
21953
  DropdownMenuItem,
20843
21954
  {
20844
- icon: import_lucide_react41.Table,
21955
+ icon: import_lucide_react43.Table,
20845
21956
  label: t("tableMenu.insert3x3"),
20846
21957
  onClick: () => editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run()
20847
21958
  }
20848
21959
  ),
20849
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "my-1 border-t" }),
20850
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21960
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "my-1 border-t" }),
21961
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20851
21962
  DropdownMenuItem,
20852
21963
  {
20853
- icon: import_lucide_react41.ArrowDown,
21964
+ icon: import_lucide_react43.ArrowDown,
20854
21965
  label: t("tableMenu.addColumnBefore"),
20855
21966
  onClick: () => editor.chain().focus().addColumnBefore().run(),
20856
21967
  disabled: !editor.can().addColumnBefore()
20857
21968
  }
20858
21969
  ),
20859
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21970
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20860
21971
  DropdownMenuItem,
20861
21972
  {
20862
- icon: import_lucide_react41.ArrowDown,
21973
+ icon: import_lucide_react43.ArrowDown,
20863
21974
  label: t("tableMenu.addColumnAfter"),
20864
21975
  onClick: () => editor.chain().focus().addColumnAfter().run(),
20865
21976
  disabled: !editor.can().addColumnAfter()
20866
21977
  }
20867
21978
  ),
20868
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21979
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20869
21980
  DropdownMenuItem,
20870
21981
  {
20871
- icon: import_lucide_react41.ArrowRight,
21982
+ icon: import_lucide_react43.ArrowRight,
20872
21983
  label: t("tableMenu.addRowBefore"),
20873
21984
  onClick: () => editor.chain().focus().addRowBefore().run(),
20874
21985
  disabled: !editor.can().addRowBefore()
20875
21986
  }
20876
21987
  ),
20877
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21988
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20878
21989
  DropdownMenuItem,
20879
21990
  {
20880
- icon: import_lucide_react41.ArrowRight,
21991
+ icon: import_lucide_react43.ArrowRight,
20881
21992
  label: t("tableMenu.addRowAfter"),
20882
21993
  onClick: () => editor.chain().focus().addRowAfter().run(),
20883
21994
  disabled: !editor.can().addRowAfter()
20884
21995
  }
20885
21996
  ),
20886
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "my-1 border-t" }),
20887
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
21997
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "my-1 border-t" }),
21998
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20888
21999
  DropdownMenuItem,
20889
22000
  {
20890
- icon: import_lucide_react41.Trash2,
22001
+ icon: import_lucide_react43.Trash2,
20891
22002
  label: t("tableMenu.deleteColumn"),
20892
22003
  onClick: () => editor.chain().focus().deleteColumn().run(),
20893
22004
  disabled: !editor.can().deleteColumn()
20894
22005
  }
20895
22006
  ),
20896
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
22007
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20897
22008
  DropdownMenuItem,
20898
22009
  {
20899
- icon: import_lucide_react41.Trash2,
22010
+ icon: import_lucide_react43.Trash2,
20900
22011
  label: t("tableMenu.deleteRow"),
20901
22012
  onClick: () => editor.chain().focus().deleteRow().run(),
20902
22013
  disabled: !editor.can().deleteRow()
20903
22014
  }
20904
22015
  ),
20905
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
22016
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20906
22017
  DropdownMenuItem,
20907
22018
  {
20908
- icon: import_lucide_react41.Trash2,
22019
+ icon: import_lucide_react43.Trash2,
20909
22020
  label: t("tableMenu.deleteTable"),
20910
22021
  onClick: () => editor.chain().focus().deleteTable().run(),
20911
22022
  disabled: !editor.can().deleteTable()
@@ -20914,105 +22025,105 @@ var EditorToolbar = ({
20914
22025
  ]
20915
22026
  }
20916
22027
  ),
20917
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarDivider, {}),
20918
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
22028
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarDivider, {}),
22029
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20919
22030
  ToolbarButton,
20920
22031
  {
20921
22032
  onClick: () => editor.chain().focus().toggleSubscript().run(),
20922
22033
  active: editor.isActive("subscript"),
20923
22034
  title: t("toolbar.subscript"),
20924
- children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Subscript, { className: "w-4 h-4" })
22035
+ children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Subscript, { className: "w-4 h-4" })
20925
22036
  }
20926
22037
  ),
20927
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
22038
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
20928
22039
  ToolbarButton,
20929
22040
  {
20930
22041
  onClick: () => editor.chain().focus().toggleSuperscript().run(),
20931
22042
  active: editor.isActive("superscript"),
20932
22043
  title: t("toolbar.superscript"),
20933
- children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Superscript, { className: "w-4 h-4" })
22044
+ children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Superscript, { className: "w-4 h-4" })
20934
22045
  }
20935
22046
  ),
20936
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarDivider, {}),
20937
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().undo().run(), disabled: !editor.can().undo(), title: t("toolbar.undo"), children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Undo, { className: "w-4 h-4" }) }),
20938
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().redo().run(), disabled: !editor.can().redo(), title: t("toolbar.redo"), children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react41.Redo, { className: "w-4 h-4" }) })
22047
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarDivider, {}),
22048
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().undo().run(), disabled: !editor.can().undo(), title: t("toolbar.undo"), children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Undo, { className: "w-4 h-4" }) }),
22049
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().redo().run(), disabled: !editor.can().redo(), title: t("toolbar.redo"), children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react43.Redo, { className: "w-4 h-4" }) })
20939
22050
  ] });
20940
22051
  };
20941
22052
 
20942
22053
  // ../../components/ui/UEditor/menus.tsx
20943
- var import_react46 = require("react");
22054
+ var import_react49 = require("react");
20944
22055
  var import_react_dom9 = require("react-dom");
20945
22056
  var import_next_intl4 = require("next-intl");
20946
- var import_lucide_react42 = require("lucide-react");
20947
- var import_jsx_runtime80 = require("react/jsx-runtime");
22057
+ var import_lucide_react44 = require("lucide-react");
22058
+ var import_jsx_runtime82 = require("react/jsx-runtime");
20948
22059
  var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
20949
22060
  const t = (0, import_next_intl4.useTranslations)("UEditor");
20950
- const [selectedIndex, setSelectedIndex] = (0, import_react46.useState)(0);
20951
- const menuRef = (0, import_react46.useRef)(null);
20952
- const allCommands = (0, import_react46.useMemo)(
22061
+ const [selectedIndex, setSelectedIndex] = (0, import_react49.useState)(0);
22062
+ const menuRef = (0, import_react49.useRef)(null);
22063
+ const allCommands = (0, import_react49.useMemo)(
20953
22064
  () => [
20954
22065
  {
20955
- icon: import_lucide_react42.Type,
22066
+ icon: import_lucide_react44.Type,
20956
22067
  label: t("slashCommand.text"),
20957
22068
  description: t("slashCommand.textDesc"),
20958
22069
  action: () => editor.chain().focus().setParagraph().run()
20959
22070
  },
20960
22071
  {
20961
- icon: import_lucide_react42.Heading1,
22072
+ icon: import_lucide_react44.Heading1,
20962
22073
  label: t("slashCommand.heading1"),
20963
22074
  description: t("slashCommand.heading1Desc"),
20964
22075
  action: () => editor.chain().focus().toggleHeading({ level: 1 }).run()
20965
22076
  },
20966
22077
  {
20967
- icon: import_lucide_react42.Heading2,
22078
+ icon: import_lucide_react44.Heading2,
20968
22079
  label: t("slashCommand.heading2"),
20969
22080
  description: t("slashCommand.heading2Desc"),
20970
22081
  action: () => editor.chain().focus().toggleHeading({ level: 2 }).run()
20971
22082
  },
20972
22083
  {
20973
- icon: import_lucide_react42.Heading3,
22084
+ icon: import_lucide_react44.Heading3,
20974
22085
  label: t("slashCommand.heading3"),
20975
22086
  description: t("slashCommand.heading3Desc"),
20976
22087
  action: () => editor.chain().focus().toggleHeading({ level: 3 }).run()
20977
22088
  },
20978
22089
  {
20979
- icon: import_lucide_react42.List,
22090
+ icon: import_lucide_react44.List,
20980
22091
  label: t("slashCommand.bulletList"),
20981
22092
  description: t("slashCommand.bulletListDesc"),
20982
22093
  action: () => editor.chain().focus().toggleBulletList().run()
20983
22094
  },
20984
22095
  {
20985
- icon: import_lucide_react42.ListOrdered,
22096
+ icon: import_lucide_react44.ListOrdered,
20986
22097
  label: t("slashCommand.orderedList"),
20987
22098
  description: t("slashCommand.orderedListDesc"),
20988
22099
  action: () => editor.chain().focus().toggleOrderedList().run()
20989
22100
  },
20990
22101
  {
20991
- icon: import_lucide_react42.ListTodo,
22102
+ icon: import_lucide_react44.ListTodo,
20992
22103
  label: t("slashCommand.todoList"),
20993
22104
  description: t("slashCommand.todoListDesc"),
20994
22105
  action: () => editor.chain().focus().toggleTaskList().run()
20995
22106
  },
20996
22107
  {
20997
- icon: import_lucide_react42.Quote,
22108
+ icon: import_lucide_react44.Quote,
20998
22109
  label: t("slashCommand.quote"),
20999
22110
  description: t("slashCommand.quoteDesc"),
21000
22111
  action: () => editor.chain().focus().toggleBlockquote().run()
21001
22112
  },
21002
22113
  {
21003
- icon: import_lucide_react42.FileCode,
22114
+ icon: import_lucide_react44.FileCode,
21004
22115
  label: t("slashCommand.codeBlock"),
21005
22116
  description: t("slashCommand.codeBlockDesc"),
21006
22117
  action: () => editor.chain().focus().toggleCodeBlock().run()
21007
22118
  },
21008
22119
  {
21009
- icon: import_lucide_react42.Minus,
22120
+ icon: import_lucide_react44.Minus,
21010
22121
  label: t("slashCommand.divider"),
21011
22122
  description: t("slashCommand.dividerDesc"),
21012
22123
  action: () => editor.chain().focus().setHorizontalRule().run()
21013
22124
  },
21014
22125
  {
21015
- icon: import_lucide_react42.Table,
22126
+ icon: import_lucide_react44.Table,
21016
22127
  label: t("slashCommand.table"),
21017
22128
  description: t("slashCommand.tableDesc"),
21018
22129
  action: () => editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run()
@@ -21020,19 +22131,19 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
21020
22131
  ],
21021
22132
  [editor, t]
21022
22133
  );
21023
- const commands = (0, import_react46.useMemo)(() => {
22134
+ const commands = (0, import_react49.useMemo)(() => {
21024
22135
  if (!filterText) return allCommands;
21025
22136
  const lowerFilter = filterText.toLowerCase();
21026
22137
  return allCommands.filter((cmd) => cmd.label.toLowerCase().includes(lowerFilter) || cmd.description.toLowerCase().includes(lowerFilter));
21027
22138
  }, [allCommands, filterText]);
21028
- (0, import_react46.useEffect)(() => {
22139
+ (0, import_react49.useEffect)(() => {
21029
22140
  setSelectedIndex(0);
21030
22141
  }, [filterText]);
21031
- (0, import_react46.useEffect)(() => {
22142
+ (0, import_react49.useEffect)(() => {
21032
22143
  const selectedElement = menuRef.current?.querySelector(`[data-index="${selectedIndex}"]`);
21033
22144
  selectedElement?.scrollIntoView({ block: "nearest" });
21034
22145
  }, [selectedIndex]);
21035
- const selectCommand = (0, import_react46.useCallback)(
22146
+ const selectCommand = (0, import_react49.useCallback)(
21036
22147
  (index) => {
21037
22148
  const command = commands[index];
21038
22149
  if (command) {
@@ -21042,7 +22153,7 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
21042
22153
  },
21043
22154
  [commands, onClose]
21044
22155
  );
21045
- (0, import_react46.useEffect)(() => {
22156
+ (0, import_react49.useEffect)(() => {
21046
22157
  const handleKeyDown = (e) => {
21047
22158
  if (commands.length === 0) return;
21048
22159
  if (e.key === "ArrowDown") {
@@ -21063,11 +22174,11 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
21063
22174
  return () => document.removeEventListener("keydown", handleKeyDown);
21064
22175
  }, [commands, selectedIndex, selectCommand, onClose]);
21065
22176
  if (commands.length === 0) {
21066
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "w-72 p-4 text-center text-muted-foreground text-sm", children: t("slashCommand.noResults") });
22177
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "w-72 p-4 text-center text-muted-foreground text-sm", children: t("slashCommand.noResults") });
21067
22178
  }
21068
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { ref: menuRef, className: "w-72 max-h-80 overflow-y-auto", children: [
21069
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "px-3 py-2 border-b", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: t("slashCommand.basicBlocks") }) }),
21070
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "p-1", children: commands.map((cmd, index) => /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
22179
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { ref: menuRef, className: "w-72 max-h-80 overflow-y-auto", children: [
22180
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "px-3 py-2 border-b", children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: t("slashCommand.basicBlocks") }) }),
22181
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "p-1", children: commands.map((cmd, index) => /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
21071
22182
  "button",
21072
22183
  {
21073
22184
  type: "button",
@@ -21080,19 +22191,19 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
21080
22191
  selectedIndex === index ? "bg-accent" : "hover:bg-accent/50"
21081
22192
  ),
21082
22193
  children: [
21083
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22194
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21084
22195
  "div",
21085
22196
  {
21086
22197
  className: cn(
21087
22198
  "flex items-center justify-center w-10 h-10 rounded-lg mr-3 transition-colors",
21088
22199
  selectedIndex === index ? "bg-primary/10" : "bg-muted/50 group-hover:bg-muted"
21089
22200
  ),
21090
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(cmd.icon, { className: cn("w-5 h-5", selectedIndex === index ? "text-primary" : "text-muted-foreground") })
22201
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(cmd.icon, { className: cn("w-5 h-5", selectedIndex === index ? "text-primary" : "text-muted-foreground") })
21091
22202
  }
21092
22203
  ),
21093
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "text-left", children: [
21094
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: cn("text-sm font-medium", selectedIndex === index && "text-primary"), children: cmd.label }),
21095
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "text-xs text-muted-foreground", children: cmd.description })
22204
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "text-left", children: [
22205
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: cn("text-sm font-medium", selectedIndex === index && "text-primary"), children: cmd.label }),
22206
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "text-xs text-muted-foreground", children: cmd.description })
21096
22207
  ] })
21097
22208
  ]
21098
22209
  },
@@ -21102,19 +22213,19 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
21102
22213
  };
21103
22214
  var FloatingMenuContent = ({ editor }) => {
21104
22215
  const t = (0, import_next_intl4.useTranslations)("UEditor");
21105
- const [showCommands, setShowCommands] = (0, import_react46.useState)(false);
22216
+ const [showCommands, setShowCommands] = (0, import_react49.useState)(false);
21106
22217
  if (showCommands) {
21107
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(SlashCommandMenu, { editor, onClose: () => setShowCommands(false) });
22218
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(SlashCommandMenu, { editor, onClose: () => setShowCommands(false) });
21108
22219
  }
21109
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
22220
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
21110
22221
  "button",
21111
22222
  {
21112
22223
  type: "button",
21113
22224
  onClick: () => setShowCommands(true),
21114
22225
  className: "flex items-center gap-1 px-2 py-1.5 rounded-lg hover:bg-accent transition-all group",
21115
22226
  children: [
21116
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Plus, { className: "w-4 h-4 text-muted-foreground group-hover:text-foreground" }),
21117
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "text-sm text-muted-foreground group-hover:text-foreground", children: t("floatingMenu.addBlock") })
22227
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react44.Plus, { className: "w-4 h-4 text-muted-foreground group-hover:text-foreground" }),
22228
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "text-sm text-muted-foreground group-hover:text-foreground", children: t("floatingMenu.addBlock") })
21118
22229
  ]
21119
22230
  }
21120
22231
  );
@@ -21125,12 +22236,12 @@ var BubbleMenuContent = ({
21125
22236
  }) => {
21126
22237
  const t = (0, import_next_intl4.useTranslations)("UEditor");
21127
22238
  const { textColors, highlightColors } = useEditorColors();
21128
- const [showLinkInput, setShowLinkInput] = (0, import_react46.useState)(false);
21129
- const [showEditorColorPalette, setShowEditorColorPalette] = (0, import_react46.useState)(false);
21130
- (0, import_react46.useEffect)(() => {
22239
+ const [showLinkInput, setShowLinkInput] = (0, import_react49.useState)(false);
22240
+ const [showEditorColorPalette, setShowEditorColorPalette] = (0, import_react49.useState)(false);
22241
+ (0, import_react49.useEffect)(() => {
21131
22242
  onKeepOpenChange?.(showLinkInput);
21132
22243
  }, [onKeepOpenChange, showLinkInput]);
21133
- (0, import_react46.useEffect)(() => {
22244
+ (0, import_react49.useEffect)(() => {
21134
22245
  if (!showLinkInput) return;
21135
22246
  const close = () => setShowLinkInput(false);
21136
22247
  editor.on("selectionUpdate", close);
@@ -21141,7 +22252,7 @@ var BubbleMenuContent = ({
21141
22252
  };
21142
22253
  }, [editor, showLinkInput]);
21143
22254
  if (showLinkInput) {
21144
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22255
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21145
22256
  LinkInput,
21146
22257
  {
21147
22258
  initialUrl: editor.getAttributes("link").href || "",
@@ -21158,8 +22269,8 @@ var BubbleMenuContent = ({
21158
22269
  );
21159
22270
  }
21160
22271
  if (showEditorColorPalette) {
21161
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "w-48", children: [
21162
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22272
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "w-48", children: [
22273
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21163
22274
  EditorColorPalette,
21164
22275
  {
21165
22276
  colors: textColors,
@@ -21174,8 +22285,8 @@ var BubbleMenuContent = ({
21174
22285
  label: t("colors.textColor")
21175
22286
  }
21176
22287
  ),
21177
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "border-t my-1" }),
21178
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22288
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "border-t my-1" }),
22289
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21179
22290
  EditorColorPalette,
21180
22291
  {
21181
22292
  colors: highlightColors,
@@ -21190,7 +22301,7 @@ var BubbleMenuContent = ({
21190
22301
  label: t("colors.highlight")
21191
22302
  }
21192
22303
  ),
21193
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "p-2 border-t", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22304
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "p-2 border-t", children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21194
22305
  "button",
21195
22306
  {
21196
22307
  type: "button",
@@ -21201,22 +22312,22 @@ var BubbleMenuContent = ({
21201
22312
  ) })
21202
22313
  ] });
21203
22314
  }
21204
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "flex items-center gap-0.5 p-1", children: [
21205
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Bold, { className: "w-4 h-4" }) }),
21206
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Italic, { className: "w-4 h-4" }) }),
21207
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22315
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "flex items-center gap-0.5 p-1", children: [
22316
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleBold().run(), active: editor.isActive("bold"), title: t("toolbar.bold"), children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react44.Bold, { className: "w-4 h-4" }) }),
22317
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive("italic"), title: t("toolbar.italic"), children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react44.Italic, { className: "w-4 h-4" }) }),
22318
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21208
22319
  ToolbarButton,
21209
22320
  {
21210
22321
  onClick: () => editor.chain().focus().toggleUnderline().run(),
21211
22322
  active: editor.isActive("underline"),
21212
22323
  title: t("toolbar.underline"),
21213
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Underline, { className: "w-4 h-4" })
22324
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react44.Underline, { className: "w-4 h-4" })
21214
22325
  }
21215
22326
  ),
21216
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleStrike().run(), active: editor.isActive("strike"), title: t("toolbar.strike"), children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Strikethrough, { className: "w-4 h-4" }) }),
21217
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleCode().run(), active: editor.isActive("code"), title: t("toolbar.code"), children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Code, { className: "w-4 h-4" }) }),
21218
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "w-px h-6 bg-border/50 mx-1" }),
21219
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22327
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleStrike().run(), active: editor.isActive("strike"), title: t("toolbar.strike"), children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react44.Strikethrough, { className: "w-4 h-4" }) }),
22328
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(ToolbarButton, { onClick: () => editor.chain().focus().toggleCode().run(), active: editor.isActive("code"), title: t("toolbar.code"), children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react44.Code, { className: "w-4 h-4" }) }),
22329
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "w-px h-6 bg-border/50 mx-1" }),
22330
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21220
22331
  ToolbarButton,
21221
22332
  {
21222
22333
  onMouseDown: () => {
@@ -21227,41 +22338,41 @@ var BubbleMenuContent = ({
21227
22338
  },
21228
22339
  active: editor.isActive("link"),
21229
22340
  title: t("toolbar.link"),
21230
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Link, { className: "w-4 h-4" })
22341
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react44.Link, { className: "w-4 h-4" })
21231
22342
  }
21232
22343
  ),
21233
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(ToolbarButton, { onClick: () => setShowEditorColorPalette(true), title: t("colors.textColor"), children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Palette, { className: "w-4 h-4" }) }),
21234
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "w-px h-6 bg-border/50 mx-1" }),
21235
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22344
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(ToolbarButton, { onClick: () => setShowEditorColorPalette(true), title: t("colors.textColor"), children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react44.Palette, { className: "w-4 h-4" }) }),
22345
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "w-px h-6 bg-border/50 mx-1" }),
22346
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21236
22347
  ToolbarButton,
21237
22348
  {
21238
22349
  onClick: () => editor.chain().focus().toggleSubscript().run(),
21239
22350
  active: editor.isActive("subscript"),
21240
22351
  title: t("toolbar.subscript"),
21241
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Subscript, { className: "w-4 h-4" })
22352
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react44.Subscript, { className: "w-4 h-4" })
21242
22353
  }
21243
22354
  ),
21244
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22355
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21245
22356
  ToolbarButton,
21246
22357
  {
21247
22358
  onClick: () => editor.chain().focus().toggleSuperscript().run(),
21248
22359
  active: editor.isActive("superscript"),
21249
22360
  title: t("toolbar.superscript"),
21250
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_lucide_react42.Superscript, { className: "w-4 h-4" })
22361
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react44.Superscript, { className: "w-4 h-4" })
21251
22362
  }
21252
22363
  )
21253
22364
  ] });
21254
22365
  };
21255
22366
  var CustomBubbleMenu = ({ editor }) => {
21256
- const [isVisible, setIsVisible] = (0, import_react46.useState)(false);
21257
- const [position, setPosition] = (0, import_react46.useState)({ top: 0, left: 0 });
21258
- const menuRef = (0, import_react46.useRef)(null);
21259
- const keepOpenRef = (0, import_react46.useRef)(false);
21260
- const setKeepOpen = (0, import_react46.useCallback)((next) => {
22367
+ const [isVisible, setIsVisible] = (0, import_react49.useState)(false);
22368
+ const [position, setPosition] = (0, import_react49.useState)({ top: 0, left: 0 });
22369
+ const menuRef = (0, import_react49.useRef)(null);
22370
+ const keepOpenRef = (0, import_react49.useRef)(false);
22371
+ const setKeepOpen = (0, import_react49.useCallback)((next) => {
21261
22372
  keepOpenRef.current = next;
21262
22373
  if (next) setIsVisible(true);
21263
22374
  }, []);
21264
- (0, import_react46.useEffect)(() => {
22375
+ (0, import_react49.useEffect)(() => {
21265
22376
  const updatePosition = () => {
21266
22377
  const { state, view } = editor;
21267
22378
  const { from, to, empty } = state.selection;
@@ -21290,7 +22401,7 @@ var CustomBubbleMenu = ({ editor }) => {
21290
22401
  }, [editor]);
21291
22402
  if (!isVisible) return null;
21292
22403
  return (0, import_react_dom9.createPortal)(
21293
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22404
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21294
22405
  "div",
21295
22406
  {
21296
22407
  ref: menuRef,
@@ -21301,7 +22412,7 @@ var CustomBubbleMenu = ({ editor }) => {
21301
22412
  transform: "translate(-50%, -100%)"
21302
22413
  },
21303
22414
  onMouseDown: (e) => e.preventDefault(),
21304
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22415
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21305
22416
  BubbleMenuContent,
21306
22417
  {
21307
22418
  editor,
@@ -21314,9 +22425,9 @@ var CustomBubbleMenu = ({ editor }) => {
21314
22425
  );
21315
22426
  };
21316
22427
  var CustomFloatingMenu = ({ editor }) => {
21317
- const [isVisible, setIsVisible] = (0, import_react46.useState)(false);
21318
- const [position, setPosition] = (0, import_react46.useState)({ top: 0, left: 0 });
21319
- (0, import_react46.useEffect)(() => {
22428
+ const [isVisible, setIsVisible] = (0, import_react49.useState)(false);
22429
+ const [position, setPosition] = (0, import_react49.useState)({ top: 0, left: 0 });
22430
+ (0, import_react49.useEffect)(() => {
21320
22431
  const updatePosition = () => {
21321
22432
  const { state, view } = editor;
21322
22433
  const { $from, empty } = state.selection;
@@ -21343,7 +22454,7 @@ var CustomFloatingMenu = ({ editor }) => {
21343
22454
  }, [editor]);
21344
22455
  if (!isVisible) return null;
21345
22456
  return (0, import_react_dom9.createPortal)(
21346
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
22457
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21347
22458
  "div",
21348
22459
  {
21349
22460
  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",
@@ -21353,7 +22464,7 @@ var CustomFloatingMenu = ({ editor }) => {
21353
22464
  transform: "translate(-50%, -100%)"
21354
22465
  },
21355
22466
  onMouseDown: (e) => e.preventDefault(),
21356
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(FloatingMenuContent, { editor })
22467
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(FloatingMenuContent, { editor })
21357
22468
  }
21358
22469
  ),
21359
22470
  document.body
@@ -21362,25 +22473,25 @@ var CustomFloatingMenu = ({ editor }) => {
21362
22473
 
21363
22474
  // ../../components/ui/UEditor/CharacterCount.tsx
21364
22475
  var import_next_intl5 = require("next-intl");
21365
- var import_jsx_runtime81 = require("react/jsx-runtime");
22476
+ var import_jsx_runtime83 = require("react/jsx-runtime");
21366
22477
  var CharacterCountDisplay = ({ editor, maxCharacters }) => {
21367
22478
  const t = (0, import_next_intl5.useTranslations)("UEditor");
21368
22479
  const storage = editor.storage;
21369
22480
  const characterCount = storage.characterCount?.characters?.() ?? 0;
21370
22481
  const wordCount = storage.characterCount?.words?.() ?? 0;
21371
22482
  const percentage = maxCharacters ? Math.round(characterCount / maxCharacters * 100) : 0;
21372
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "flex items-center gap-3 px-3 py-2 text-xs text-muted-foreground border-t bg-muted/20", children: [
21373
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("span", { children: [
22483
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "flex items-center gap-3 px-3 py-2 text-xs text-muted-foreground border-t bg-muted/20", children: [
22484
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("span", { children: [
21374
22485
  wordCount,
21375
22486
  " ",
21376
22487
  t("words")
21377
22488
  ] }),
21378
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("span", { children: [
22489
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("span", { children: [
21379
22490
  characterCount,
21380
22491
  " ",
21381
22492
  t("characters")
21382
22493
  ] }),
21383
- maxCharacters && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("span", { className: cn(percentage > 90 && "text-destructive", percentage > 100 && "font-bold"), children: [
22494
+ maxCharacters && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("span", { className: cn(percentage > 90 && "text-destructive", percentage > 100 && "font-bold"), children: [
21384
22495
  characterCount,
21385
22496
  "/",
21386
22497
  maxCharacters
@@ -21389,7 +22500,7 @@ var CharacterCountDisplay = ({ editor, maxCharacters }) => {
21389
22500
  };
21390
22501
 
21391
22502
  // ../../components/ui/UEditor/UEditor.tsx
21392
- var import_jsx_runtime82 = require("react/jsx-runtime");
22503
+ var import_jsx_runtime84 = require("react/jsx-runtime");
21393
22504
  var UEditor = ({
21394
22505
  content = "",
21395
22506
  onChange,
@@ -21412,11 +22523,11 @@ var UEditor = ({
21412
22523
  }) => {
21413
22524
  const t = (0, import_next_intl6.useTranslations)("UEditor");
21414
22525
  const effectivePlaceholder = placeholder ?? t("placeholder");
21415
- const extensions = (0, import_react47.useMemo)(
22526
+ const extensions = (0, import_react50.useMemo)(
21416
22527
  () => buildUEditorExtensions({ placeholder: effectivePlaceholder, maxCharacters, uploadImage, imageInsertMode, editable }),
21417
22528
  [effectivePlaceholder, maxCharacters, uploadImage, imageInsertMode, editable]
21418
22529
  );
21419
- const editor = (0, import_react48.useEditor)({
22530
+ const editor = (0, import_react51.useEditor)({
21420
22531
  immediatelyRender: false,
21421
22532
  extensions,
21422
22533
  content,
@@ -21521,7 +22632,7 @@ var UEditor = ({
21521
22632
  onJsonChange?.(editor2.getJSON());
21522
22633
  }
21523
22634
  });
21524
- (0, import_react47.useEffect)(() => {
22635
+ (0, import_react50.useEffect)(() => {
21525
22636
  if (editor && content !== editor.getHTML()) {
21526
22637
  if (editor.isEmpty && content) {
21527
22638
  editor.commands.setContent(content);
@@ -21529,7 +22640,7 @@ var UEditor = ({
21529
22640
  }
21530
22641
  }, [content, editor]);
21531
22642
  if (!editor) {
21532
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
22643
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
21533
22644
  "div",
21534
22645
  {
21535
22646
  className: cn("w-full rounded-lg border bg-background flex items-center justify-center text-muted-foreground", className),
@@ -21538,7 +22649,7 @@ var UEditor = ({
21538
22649
  }
21539
22650
  );
21540
22651
  }
21541
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
22652
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
21542
22653
  "div",
21543
22654
  {
21544
22655
  className: cn(
@@ -21550,11 +22661,11 @@ var UEditor = ({
21550
22661
  className
21551
22662
  ),
21552
22663
  children: [
21553
- editable && showToolbar && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(EditorToolbar, { editor, variant, uploadImage, imageInsertMode }),
21554
- editable && showBubbleMenu && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(CustomBubbleMenu, { editor }),
21555
- editable && showFloatingMenu && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(CustomFloatingMenu, { editor }),
21556
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
21557
- import_react48.EditorContent,
22664
+ editable && showToolbar && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(EditorToolbar, { editor, variant, uploadImage, imageInsertMode }),
22665
+ editable && showBubbleMenu && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(CustomBubbleMenu, { editor }),
22666
+ editable && showFloatingMenu && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(CustomFloatingMenu, { editor }),
22667
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
22668
+ import_react51.EditorContent,
21558
22669
  {
21559
22670
  editor,
21560
22671
  className: "flex-1 overflow-y-auto",
@@ -21564,7 +22675,7 @@ var UEditor = ({
21564
22675
  }
21565
22676
  }
21566
22677
  ),
21567
- showCharacterCount && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(CharacterCountDisplay, { editor, maxCharacters })
22678
+ showCharacterCount && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(CharacterCountDisplay, { editor, maxCharacters })
21568
22679
  ]
21569
22680
  }
21570
22681
  );