tiptapify 0.0.15 → 0.0.16

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tiptapify",
3
3
  "types": "./index.d.ts",
4
- "version": "0.0.15",
4
+ "version": "0.0.16",
5
5
  "description": "Tiptap3 editor with Vuetify3 menu implementation",
6
6
  "exports": {
7
7
  ".": {
@@ -1,6 +1,5 @@
1
1
  <script setup lang="ts">
2
2
  import Group from "@tiptapify/components/Toolbar/Group.vue";
3
- import Toggle from "@tiptapify/components/Toolbar/Toggle.vue";
4
3
  import { computed, defineProps, PropType, Ref, ref } from 'vue'
5
4
 
6
5
  import { ToolbarItemSections } from "@tiptapify/types/toolbarItems";
@@ -1,10 +1,12 @@
1
1
  <script setup lang="ts">
2
2
 
3
+ import * as mdi from "@mdi/js";
4
+
3
5
  import { Editor } from "@tiptap/vue-3";
4
6
 
5
7
  import tiptapifyEmojis from "@tiptapify/extensions/emoji"
6
8
 
7
- import { computed, inject, Ref, ref } from 'vue'
9
+ import { computed, inject, Ref, ref, watch } from 'vue'
8
10
 
9
11
  const { t } = inject('tiptapifyI18n') as any
10
12
 
@@ -14,6 +16,7 @@ const emit = defineEmits(['close'])
14
16
 
15
17
  const editor = inject('tiptapifyEditor') as Ref<Editor>
16
18
 
19
+ const filter = ref(null)
17
20
  const tab = ref('smileys_and_emotion')
18
21
  const sorted = tiptapifyEmojis.sort((previous, current) => {
19
22
  if (previous.order < current.order) {
@@ -26,15 +29,45 @@ const sorted = tiptapifyEmojis.sort((previous, current) => {
26
29
  return 0
27
30
  })
28
31
  const emojis = computed(() => sorted.map(item => { return { group: item.name, emojis: item.items } }))
32
+ const emojisRef = ref(JSON.parse(JSON.stringify(emojis.value)))
29
33
 
30
34
  const handleEmojiClick = (emoji: any) => {
31
35
  editor.value.chain().focus().insertContent(emoji.char).run()
32
36
  close()
33
37
  }
34
38
 
39
+ const filterEmoji = (filterValue: string) => {
40
+ resetFilter()
41
+ if (!filterValue) {
42
+ return
43
+ }
44
+
45
+ const filtered: any[] = []
46
+
47
+ const groupItems = emojisRef.value.find(item => item.group === tab.value)
48
+ if (groupItems?.emojis) {
49
+ groupItems.emojis.forEach(item => {
50
+ if (item.name.toLowerCase().match(filterValue)) {
51
+ filtered.push(item)
52
+ }
53
+ })
54
+
55
+ groupItems.emojis = filtered
56
+ }
57
+ }
58
+
59
+ const resetFilter = () => {
60
+ emojisRef.value = JSON.parse(JSON.stringify(emojis.value))
61
+ }
62
+
35
63
  function close() {
36
64
  emit('close')
37
65
  }
66
+
67
+ watch(() => tab.value, () => {
68
+ resetFilter()
69
+ filter.value = null
70
+ })
38
71
  </script>
39
72
 
40
73
  <template>
@@ -42,7 +75,7 @@ function close() {
42
75
  <div class="d-flex flex-row">
43
76
  <VTabs v-model="tab" mandatory direction="vertical" color="primary" density="compact">
44
77
  <VTab
45
- v-for="item of emojis"
78
+ v-for="item of emojisRef"
46
79
  :text="item.group"
47
80
  :value="item.group"
48
81
  :key="item.group"
@@ -54,31 +87,51 @@ function close() {
54
87
  </VTab>
55
88
  </VTabs>
56
89
 
57
- <VWindow v-model="tab" direction="vertical">
58
- <VWindowItem v-for="item of emojis" :value="item.group">
59
- <div class="tiptapify-emoji-container">
60
- <div v-for="emojiItem in item.emojis" class="tiptapify-emoji-container-item" @click="handleEmojiClick(emojiItem)" :title="emojiItem.name">
61
- <div class="tiptapify-emoji-container-item__overlay">
62
- <span>
63
- {{ emojiItem.char }}
64
- </span>
90
+ <div>
91
+ <VTextField
92
+ v-model="filter"
93
+ label="Filter emoji"
94
+ density="compact"
95
+ variant="solo"
96
+ :prepend-inner-icon="`mdiSvg:${mdi.mdiMagnify}`"
97
+ class="mb-2"
98
+ hide-details
99
+ clearable
100
+ @input="filterEmoji($event.target.value)"
101
+ @click:clear="resetFilter"
102
+ />
103
+ <div class="tiptapify-emoji-container">
104
+ <VWindow v-model="tab" direction="vertical">
105
+ <VWindowItem v-for="item of emojisRef" :value="item.group">
106
+ <div
107
+ v-for="emojiItem in item.emojis"
108
+ class="tiptapify-emoji-container-item"
109
+ @click="handleEmojiClick(emojiItem)"
110
+ :title="emojiItem.name"
111
+ >
112
+ <div class="tiptapify-emoji-container-item__overlay">
113
+ <span>
114
+ {{ emojiItem.char }}
115
+ </span>
116
+ </div>
65
117
  </div>
66
- </div>
67
- </div>
68
- </VWindowItem>
69
- </VWindow>
118
+ </VWindowItem>
119
+ </VWindow>
120
+ </div>
121
+ </div>
70
122
  </div>
71
123
  </VSheet>
72
124
  </template>
73
125
 
74
126
  <style lang="scss" scoped>
75
127
  .tiptapify-emoji-container {
76
- max-height: 500px;
128
+ width: 360px;
129
+ height: 500px;
77
130
  overflow-y: auto;
78
131
 
79
- border: 1px solid #ddd;
132
+ border: 1px solid rgba(var(--v-theme-on-background), calc(var(--v-border-opacity)));
80
133
  border-radius: 8px;
81
- filter: drop-shadow(1px 2px 3px #777);
134
+ box-shadow: 0 0 5px rgba(var(--v-theme-on-background), calc(var(--v-border-opacity))) inset;
82
135
  }
83
136
 
84
137
  .tiptapify-emoji-container-item__overlay {
@@ -99,6 +152,7 @@ function close() {
99
152
  cursor: pointer;
100
153
  width: 32px;
101
154
  height: 32px;
155
+ filter: drop-shadow(1px 2px 3px #777);
102
156
  transition: background-color 0.2s ease-in-out;
103
157
  }
104
158
 
@@ -151,14 +151,6 @@ export default [
151
151
  "group": "Activities",
152
152
  "subgroup": "event"
153
153
  },
154
- {
155
- "codes": "1F397",
156
- "char": "🎗",
157
- "name": "reminder ribbon",
158
- "category": "Activities (event)",
159
- "group": "Activities",
160
- "subgroup": "event"
161
- },
162
154
  {
163
155
  "codes": "1F39F FE0F",
164
156
  "char": "🎟️",
@@ -167,14 +159,6 @@ export default [
167
159
  "group": "Activities",
168
160
  "subgroup": "event"
169
161
  },
170
- {
171
- "codes": "1F39F",
172
- "char": "🎟",
173
- "name": "admission tickets",
174
- "category": "Activities (event)",
175
- "group": "Activities",
176
- "subgroup": "event"
177
- },
178
162
  {
179
163
  "codes": "1F3AB",
180
164
  "char": "🎫",
@@ -191,14 +175,6 @@ export default [
191
175
  "group": "Activities",
192
176
  "subgroup": "award-medal"
193
177
  },
194
- {
195
- "codes": "1F396",
196
- "char": "🎖",
197
- "name": "military medal",
198
- "category": "Activities (award-medal)",
199
- "group": "Activities",
200
- "subgroup": "award-medal"
201
- },
202
178
  {
203
179
  "codes": "1F3C6",
204
180
  "char": "🏆",
@@ -407,14 +383,6 @@ export default [
407
383
  "group": "Activities",
408
384
  "subgroup": "sport"
409
385
  },
410
- {
411
- "codes": "26F8",
412
- "char": "⛸",
413
- "name": "ice skate",
414
- "category": "Activities (sport)",
415
- "group": "Activities",
416
- "subgroup": "sport"
417
- },
418
386
  {
419
387
  "codes": "1F3A3",
420
388
  "char": "🎣",
@@ -535,14 +503,6 @@ export default [
535
503
  "group": "Activities",
536
504
  "subgroup": "game"
537
505
  },
538
- {
539
- "codes": "1F579",
540
- "char": "🕹",
541
- "name": "joystick",
542
- "category": "Activities (game)",
543
- "group": "Activities",
544
- "subgroup": "game"
545
- },
546
506
  {
547
507
  "codes": "1F3B0",
548
508
  "char": "🎰",
@@ -607,14 +567,6 @@ export default [
607
567
  "group": "Activities",
608
568
  "subgroup": "game"
609
569
  },
610
- {
611
- "codes": "2660",
612
- "char": "♠",
613
- "name": "spade suit",
614
- "category": "Activities (game)",
615
- "group": "Activities",
616
- "subgroup": "game"
617
- },
618
570
  {
619
571
  "codes": "2665 FE0F",
620
572
  "char": "♥️",
@@ -623,14 +575,6 @@ export default [
623
575
  "group": "Activities",
624
576
  "subgroup": "game"
625
577
  },
626
- {
627
- "codes": "2665",
628
- "char": "♥",
629
- "name": "heart suit",
630
- "category": "Activities (game)",
631
- "group": "Activities",
632
- "subgroup": "game"
633
- },
634
578
  {
635
579
  "codes": "2666 FE0F",
636
580
  "char": "♦️",
@@ -639,14 +583,6 @@ export default [
639
583
  "group": "Activities",
640
584
  "subgroup": "game"
641
585
  },
642
- {
643
- "codes": "2666",
644
- "char": "♦",
645
- "name": "diamond suit",
646
- "category": "Activities (game)",
647
- "group": "Activities",
648
- "subgroup": "game"
649
- },
650
586
  {
651
587
  "codes": "2663 FE0F",
652
588
  "char": "♣️",
@@ -655,14 +591,6 @@ export default [
655
591
  "group": "Activities",
656
592
  "subgroup": "game"
657
593
  },
658
- {
659
- "codes": "2663",
660
- "char": "♣",
661
- "name": "club suit",
662
- "category": "Activities (game)",
663
- "group": "Activities",
664
- "subgroup": "game"
665
- },
666
594
  {
667
595
  "codes": "265F FE0F",
668
596
  "char": "♟️",
@@ -671,14 +599,6 @@ export default [
671
599
  "group": "Activities",
672
600
  "subgroup": "game"
673
601
  },
674
- {
675
- "codes": "265F",
676
- "char": "♟",
677
- "name": "chess pawn",
678
- "category": "Activities (game)",
679
- "group": "Activities",
680
- "subgroup": "game"
681
- },
682
602
  {
683
603
  "codes": "1F0CF",
684
604
  "char": "🃏",
@@ -719,14 +639,6 @@ export default [
719
639
  "group": "Activities",
720
640
  "subgroup": "arts & crafts"
721
641
  },
722
- {
723
- "codes": "1F5BC",
724
- "char": "🖼",
725
- "name": "framed picture",
726
- "category": "Activities (arts & crafts)",
727
- "group": "Activities",
728
- "subgroup": "arts & crafts"
729
- },
730
642
  {
731
643
  "codes": "1F3A8",
732
644
  "char": "🎨",
@@ -423,14 +423,6 @@ export default [
423
423
  "group": "Animals & Nature",
424
424
  "subgroup": "animal-mammal"
425
425
  },
426
- {
427
- "codes": "1F43F",
428
- "char": "🐿",
429
- "name": "chipmunk",
430
- "category": "Animals & Nature (animal-mammal)",
431
- "group": "Animals & Nature",
432
- "subgroup": "animal-mammal"
433
- },
434
426
  {
435
427
  "codes": "1F9AB",
436
428
  "char": "🦫",
@@ -471,14 +463,6 @@ export default [
471
463
  "group": "Animals & Nature",
472
464
  "subgroup": "animal-mammal"
473
465
  },
474
- {
475
- "codes": "1F43B 200D 2744",
476
- "char": "🐻‍❄",
477
- "name": "polar bear",
478
- "category": "Animals & Nature (animal-mammal)",
479
- "group": "Animals & Nature",
480
- "subgroup": "animal-mammal"
481
- },
482
466
  {
483
467
  "codes": "1F428",
484
468
  "char": "🐨",
@@ -615,14 +599,6 @@ export default [
615
599
  "group": "Animals & Nature",
616
600
  "subgroup": "animal-bird"
617
601
  },
618
- {
619
- "codes": "1F54A",
620
- "char": "🕊",
621
- "name": "dove",
622
- "category": "Animals & Nature (animal-bird)",
623
- "group": "Animals & Nature",
624
- "subgroup": "animal-bird"
625
- },
626
602
  {
627
603
  "codes": "1F985",
628
604
  "char": "🦅",
@@ -1015,14 +991,6 @@ export default [
1015
991
  "group": "Animals & Nature",
1016
992
  "subgroup": "animal-bug"
1017
993
  },
1018
- {
1019
- "codes": "1F577",
1020
- "char": "🕷",
1021
- "name": "spider",
1022
- "category": "Animals & Nature (animal-bug)",
1023
- "group": "Animals & Nature",
1024
- "subgroup": "animal-bug"
1025
- },
1026
994
  {
1027
995
  "codes": "1F578 FE0F",
1028
996
  "char": "🕸️",
@@ -1031,14 +999,6 @@ export default [
1031
999
  "group": "Animals & Nature",
1032
1000
  "subgroup": "animal-bug"
1033
1001
  },
1034
- {
1035
- "codes": "1F578",
1036
- "char": "🕸",
1037
- "name": "spider web",
1038
- "category": "Animals & Nature (animal-bug)",
1039
- "group": "Animals & Nature",
1040
- "subgroup": "animal-bug"
1041
- },
1042
1002
  {
1043
1003
  "codes": "1F982",
1044
1004
  "char": "🦂",
@@ -1119,14 +1079,6 @@ export default [
1119
1079
  "group": "Animals & Nature",
1120
1080
  "subgroup": "plant-flower"
1121
1081
  },
1122
- {
1123
- "codes": "1F3F5",
1124
- "char": "🏵",
1125
- "name": "rosette",
1126
- "category": "Animals & Nature (plant-flower)",
1127
- "group": "Animals & Nature",
1128
- "subgroup": "plant-flower"
1129
- },
1130
1082
  {
1131
1083
  "codes": "1F339",
1132
1084
  "char": "🌹",
@@ -1255,14 +1207,6 @@ export default [
1255
1207
  "group": "Animals & Nature",
1256
1208
  "subgroup": "plant-other"
1257
1209
  },
1258
- {
1259
- "codes": "2618",
1260
- "char": "☘",
1261
- "name": "shamrock",
1262
- "category": "Animals & Nature (plant-other)",
1263
- "group": "Animals & Nature",
1264
- "subgroup": "plant-other"
1265
- },
1266
1210
  {
1267
1211
  "codes": "1F340",
1268
1212
  "char": "🍀",
@@ -39,14 +39,6 @@ export default [
39
39
  "group": "Flags",
40
40
  "subgroup": "flag"
41
41
  },
42
- {
43
- "codes": "1F3F3",
44
- "char": "🏳",
45
- "name": "white flag",
46
- "category": "Flags (flag)",
47
- "group": "Flags",
48
- "subgroup": "flag"
49
- },
50
42
  {
51
43
  "codes": "1F3F3 FE0F 200D 1F308",
52
44
  "char": "🏳️‍🌈",
@@ -55,14 +47,6 @@ export default [
55
47
  "group": "Flags",
56
48
  "subgroup": "flag"
57
49
  },
58
- {
59
- "codes": "1F3F3 200D 1F308",
60
- "char": "🏳‍🌈",
61
- "name": "rainbow flag",
62
- "category": "Flags (flag)",
63
- "group": "Flags",
64
- "subgroup": "flag"
65
- },
66
50
  {
67
51
  "codes": "1F3F3 FE0F 200D 26A7 FE0F",
68
52
  "char": "🏳️‍⚧️",
@@ -71,30 +55,6 @@ export default [
71
55
  "group": "Flags",
72
56
  "subgroup": "flag"
73
57
  },
74
- {
75
- "codes": "1F3F3 200D 26A7 FE0F",
76
- "char": "🏳‍⚧️",
77
- "name": "transgender flag",
78
- "category": "Flags (flag)",
79
- "group": "Flags",
80
- "subgroup": "flag"
81
- },
82
- {
83
- "codes": "1F3F3 FE0F 200D 26A7",
84
- "char": "🏳️‍⚧",
85
- "name": "transgender flag",
86
- "category": "Flags (flag)",
87
- "group": "Flags",
88
- "subgroup": "flag"
89
- },
90
- {
91
- "codes": "1F3F3 200D 26A7",
92
- "char": "🏳‍⚧",
93
- "name": "transgender flag",
94
- "category": "Flags (flag)",
95
- "group": "Flags",
96
- "subgroup": "flag"
97
- },
98
58
  {
99
59
  "codes": "1F3F4 200D 2620 FE0F",
100
60
  "char": "🏴‍☠️",
@@ -103,14 +63,6 @@ export default [
103
63
  "group": "Flags",
104
64
  "subgroup": "flag"
105
65
  },
106
- {
107
- "codes": "1F3F4 200D 2620",
108
- "char": "🏴‍☠",
109
- "name": "pirate flag",
110
- "category": "Flags (flag)",
111
- "group": "Flags",
112
- "subgroup": "flag"
113
- },
114
66
  {
115
67
  "codes": "1F1E6 1F1E8",
116
68
  "char": "🇦🇨",
@@ -207,14 +207,6 @@ export default [
207
207
  "group": "Food & Drink",
208
208
  "subgroup": "food-vegetable"
209
209
  },
210
- {
211
- "codes": "1F336",
212
- "char": "🌶",
213
- "name": "hot pepper",
214
- "category": "Food & Drink (food-vegetable)",
215
- "group": "Food & Drink",
216
- "subgroup": "food-vegetable"
217
- },
218
210
  {
219
211
  "codes": "1FAD1",
220
212
  "char": "🫑",
@@ -1015,14 +1007,6 @@ export default [
1015
1007
  "group": "Food & Drink",
1016
1008
  "subgroup": "dishware"
1017
1009
  },
1018
- {
1019
- "codes": "1F37D",
1020
- "char": "🍽",
1021
- "name": "fork and knife with plate",
1022
- "category": "Food & Drink (dishware)",
1023
- "group": "Food & Drink",
1024
- "subgroup": "dishware"
1025
- },
1026
1010
  {
1027
1011
  "codes": "1F374",
1028
1012
  "char": "🍴",