@ozdao/martyrs 0.2.541 → 0.2.542

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/_virtual/index.cjs +4 -4
  2. package/dist/_virtual/index.js +4 -4
  3. package/dist/_virtual/index2.cjs +3 -6
  4. package/dist/_virtual/index2.cjs.map +1 -1
  5. package/dist/_virtual/index2.js +2 -5
  6. package/dist/_virtual/index2.js.map +1 -1
  7. package/dist/{main-BpBtIUcJ.js → main-ByKkD9qa.js} +2724 -3143
  8. package/dist/main-Czyu-VcC.cjs +11 -0
  9. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.cjs +30 -21
  10. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.cjs.map +1 -1
  11. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js +32 -23
  12. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js.map +1 -1
  13. package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.cjs +235 -0
  14. package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.cjs.map +1 -0
  15. package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.js +235 -0
  16. package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.js.map +1 -0
  17. package/dist/martyrs/src/components/Marquee/Marquee.vue.cjs +17 -8
  18. package/dist/martyrs/src/components/Marquee/Marquee.vue.cjs.map +1 -1
  19. package/dist/martyrs/src/components/Marquee/Marquee.vue.js +17 -8
  20. package/dist/martyrs/src/components/Marquee/Marquee.vue.js.map +1 -1
  21. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.cjs → Spoiler.vue2.cjs} +2 -2
  22. package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.cjs.map +1 -0
  23. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.js → Spoiler.vue2.js} +2 -2
  24. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.cjs.map → Spoiler.vue2.js.map} +1 -1
  25. package/dist/martyrs/src/components/Tab/{Tab.vue.cjs → Tab.vue2.cjs} +2 -2
  26. package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +1 -0
  27. package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
  28. package/dist/martyrs/src/components/Tab/{Tab.vue.cjs.map → Tab.vue2.js.map} +1 -1
  29. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.cjs +161 -42
  30. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.cjs.map +1 -1
  31. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +162 -43
  32. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +1 -1
  33. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
  34. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
  35. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
  36. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
  38. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  39. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +4 -4
  40. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
  41. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
  42. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
  43. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
  44. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
  45. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
  46. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +0 -3
  47. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs.map +1 -1
  48. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +0 -3
  49. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js.map +1 -1
  50. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +2 -2
  51. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +21 -21
  52. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
  53. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  54. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
  55. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
  56. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
  57. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
  58. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
  59. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
  60. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +1 -1
  61. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.js +1 -1
  62. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs +1 -1
  63. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
  64. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +1 -1
  65. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +1 -1
  66. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +11 -11
  67. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +12 -12
  68. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +16 -16
  69. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +16 -16
  70. package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.cjs +1 -1
  71. package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js +1 -1
  72. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
  73. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  74. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
  75. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
  76. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +3 -4
  77. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs.map +1 -1
  78. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +3 -4
  79. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js.map +1 -1
  80. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +1 -1
  81. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +20 -20
  82. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +3 -4
  83. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
  84. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +3 -4
  85. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
  86. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +4 -5
  87. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs.map +1 -1
  88. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +4 -5
  89. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
  90. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +3 -4
  91. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
  92. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +3 -4
  93. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
  94. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  95. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +7 -7
  96. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
  97. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  98. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  99. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  100. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +46 -38
  101. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
  102. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +52 -44
  103. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  104. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
  105. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
  106. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  107. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  108. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +2 -2
  109. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +2 -2
  110. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs +1 -1
  111. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
  112. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
  113. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  114. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
  115. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  116. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
  117. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  118. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  119. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  120. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs +1 -1
  121. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
  122. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
  123. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +11 -11
  124. package/dist/martyrs.cjs.js +1 -1
  125. package/dist/martyrs.css +1 -1
  126. package/dist/martyrs.es.js +1 -1
  127. package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.cjs +1 -1
  128. package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.js +1 -1
  129. package/dist/style.css +129 -129
  130. package/dist/{web-DsdyXC8n.js → web-BklgIiYr.js} +1 -1
  131. package/dist/{web-C9bVm6Nw.cjs → web-CQBm7C6L.cjs} +1 -1
  132. package/package.json +1 -1
  133. package/src/components/FieldTags/BlockTags.vue +28 -16
  134. package/src/components/FieldTags/FieldTags.vue +327 -508
  135. package/src/components/Marquee/Marquee.vue +25 -14
  136. package/src/components/UploadImage/UploadImage.vue +192 -18
  137. package/src/modules/community/components/pages/CreateBlogPost.vue +0 -1
  138. package/src/modules/products/components/pages/CategoryEdit.vue +53 -39
  139. package/dist/_virtual/index3.cjs +0 -5
  140. package/dist/_virtual/index3.cjs.map +0 -1
  141. package/dist/_virtual/index3.js +0 -5
  142. package/dist/_virtual/index3.js.map +0 -1
  143. package/dist/main-7IA3UHca.cjs +0 -11
  144. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +0 -480
  145. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs.map +0 -1
  146. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +0 -480
  147. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js.map +0 -1
  148. package/dist/martyrs/src/components/FieldTags/create-tags.cjs +0 -52
  149. package/dist/martyrs/src/components/FieldTags/create-tags.cjs.map +0 -1
  150. package/dist/martyrs/src/components/FieldTags/create-tags.js +0 -52
  151. package/dist/martyrs/src/components/FieldTags/create-tags.js.map +0 -1
  152. package/dist/martyrs/src/components/FieldTags/tag-input.vue2.cjs +0 -32
  153. package/dist/martyrs/src/components/FieldTags/tag-input.vue2.cjs.map +0 -1
  154. package/dist/martyrs/src/components/FieldTags/tag-input.vue2.js +0 -32
  155. package/dist/martyrs/src/components/FieldTags/tag-input.vue2.js.map +0 -1
  156. package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.cjs +0 -329
  157. package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.cjs.map +0 -1
  158. package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.js +0 -329
  159. package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.js.map +0 -1
  160. package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +0 -1
  161. package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
  162. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs +0 -39
  163. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs.map +0 -1
  164. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +0 -39
  165. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js.map +0 -1
  166. package/src/components/FieldTags/FieldTagsNew.vue +0 -366
  167. package/src/components/FieldTags/README.md +0 -513
  168. package/src/components/FieldTags/create-tags.js +0 -97
  169. package/src/components/FieldTags/tag-input.vue +0 -55
  170. package/src/components/FieldTags/vue-tags-input.props.js +0 -342
  171. package/src/components/FieldTags/vue-tags-input.scss +0 -149
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
- const FieldTags = require("./FieldTags.vue.cjs");
4
+ const FieldTags = require("./FieldTags.vue2.cjs");
5
5
  ;/* empty css */
6
6
  const _hoisted_1 = ["onClick"];
7
7
  const _hoisted_2 = { key: 1 };
@@ -29,48 +29,57 @@ const _sfc_main = {
29
29
  const tag = vue.ref("");
30
30
  const selectedTags = vue.ref([]);
31
31
  const autocompleteItems = vue.ref(props.tagsSuggested);
32
- if (props.tags) selectedTags.value = props.tags.map((tag2) => ({ text: tag2 }));
32
+ if (props.tags) {
33
+ selectedTags.value = props.tags.map(
34
+ (tag2) => typeof tag2 === "string" ? { text: tag2 } : tag2
35
+ );
36
+ }
33
37
  const filteredItems = vue.computed(() => {
34
- return autocompleteItems.value.filter((i) => {
35
- return i.text.toLowerCase().includes(tag.value.toLowerCase());
36
- });
38
+ return autocompleteItems.value;
37
39
  });
38
40
  const filteredSuggestedItems = vue.computed(() => {
39
41
  return autocompleteItems.value.filter((item) => {
40
42
  return !selectedTags.value.some((tag2) => tag2.text === item.text);
41
43
  });
42
44
  });
43
- function addTag(tag2) {
44
- selectedTags.value.push(tag2);
45
- emits("tags-changed", selectedTags.value.map((tag3) => {
46
- return tag3.text;
47
- }));
45
+ function addTag(tagToAdd) {
46
+ selectedTags.value.push(tagToAdd);
47
+ emits("tags-changed", selectedTags.value.map((t) => t.text));
48
+ }
49
+ function addTagFromInput() {
50
+ if (tag.value) {
51
+ addTag({ text: tag.value });
52
+ tag.value = "";
53
+ }
48
54
  }
49
55
  function handleTagsChanged(newTags) {
50
56
  selectedTags.value = newTags;
51
- emits("tags-changed", selectedTags.value.map((tag2) => {
52
- return tag2.text;
53
- }));
57
+ emits("tags-changed", newTags.map((t) => typeof t === "string" ? t : t.text));
54
58
  }
55
59
  return (_ctx, _cache) => {
56
60
  return vue.openBlock(), vue.createElementBlock("div", null, [
57
61
  vue.createVNode(FieldTags.default, {
58
- modelValue: tag.value,
59
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => tag.value = $event),
60
- tags: selectedTags.value,
62
+ modelValue: selectedTags.value,
63
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedTags.value = $event),
61
64
  "autocomplete-items": filteredItems.value,
62
65
  "add-on-key": [13, ":", ";", ","],
63
- "save-on-key": [13, ":", ";", ","],
64
66
  separators: [";", ","],
65
67
  "max-tags": 20,
66
68
  maxlength: 20,
67
69
  placeholder: "Please add tags",
68
- "add-from-paste": true,
69
- "allow-edit-tags": true,
70
70
  onTagsChanged: handleTagsChanged,
71
71
  class: "mn-b-thin bg-light radius-medium pd-small"
72
- }, null, 8, ["modelValue", "tags", "autocomplete-items"]),
73
- _cache[1] || (_cache[1] = vue.createElementVNode("p", { class: "p-small mn-b-thin" }, "Suggested:", -1)),
72
+ }, null, 8, ["modelValue", "autocomplete-items"]),
73
+ vue.withDirectives(vue.createElementVNode("input", {
74
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => tag.value = $event),
75
+ onKeydown: vue.withKeys(addTagFromInput, ["enter"]),
76
+ placeholder: "Type to filter suggestions",
77
+ class: "hidden-input",
78
+ style: { "position": "absolute", "left": "-9999px" }
79
+ }, null, 544), [
80
+ [vue.vModelText, tag.value]
81
+ ]),
82
+ _cache[2] || (_cache[2] = vue.createElementVNode("p", { class: "p-small mn-b-thin" }, "Suggested:", -1)),
74
83
  filteredSuggestedItems.value.length > 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(filteredSuggestedItems.value, (tag2, index) => {
75
84
  return vue.openBlock(), vue.createElementBlock("span", {
76
85
  onClick: ($event) => addTag(tag2),
@@ -1 +1 @@
1
- {"version":3,"file":"BlockTags.vue.cjs","sources":["../../../../../src/components/FieldTags/BlockTags.vue"],"sourcesContent":["<template>\n <div>\n <FieldTags\n v-model=\"tag\"\n :tags=\"selectedTags\"\n :autocomplete-items=\"filteredItems\"\n :add-on-key=\"[13, ':', ';', ',']\"\n :save-on-key=\"[13, ':', ';', ',']\"\n :separators=\"[';', ',']\"\n :max-tags=\"20\"\n :maxlength=\"20\"\n :placeholder=\"'Please add tags'\"\n :add-from-paste=\"true\"\n :allow-edit-tags=\"true\"\n @tags-changed=\"handleTagsChanged\"\n class=\"mn-b-thin bg-light radius-medium pd-small\"\n />\n\n <p class=\"p-small mn-b-thin\">Suggested:</p>\n\n <span \n v-if=\"filteredSuggestedItems.length > 0\" \n v-for=\"(tag,index) in filteredSuggestedItems\" \n @click=\"addTag(tag)\"\n class=\"cursor-pointer t-medium ti-tag-toDefactor\"\n :class=\"{'mn-r-micro':index !== filteredSuggestedItems.length - 1}\"\n >\n {{ tag.text }}\n </span>\n <span v-else>You added all suggested tags</span> \n </div>\n</template>\n\n<script setup>\nimport FieldTags from '@martyrs/src/components/FieldTags/FieldTags.vue'\nimport { ref, computed, onMounted } from 'vue';\n\nconst emits = defineEmits(['tags-changed']);\nconst props = defineProps({\n tags: {\n type: Array\n },\n tagsSuggested: {\n type: Array,\n default: [\n { text: 'story' },\n { text: 'news' },\n { text: 'guide' },\n { text: 'discussion' },\n { text: 'photos' },\n ]\n }\n});\n\nconst tag = ref('');\n\nconst selectedTags = ref([]);\n\nconst autocompleteItems = ref(props.tagsSuggested);\n\nif (props.tags) selectedTags.value = props.tags.map(tag => ({text: tag}))\n \n\nconst filteredItems = computed(() => {\n return autocompleteItems.value.filter(i => {\n return i.text.toLowerCase().includes(tag.value.toLowerCase());\n });\n});\n\nconst filteredSuggestedItems = computed(() => {\n return autocompleteItems.value.filter(item => {\n return !selectedTags.value.some(tag => tag.text === item.text);\n });\n })\n\nfunction addTag (tag) {\n selectedTags.value.push(tag)\n emits('tags-changed', selectedTags.value.map(tag => { return tag.text }));\n}\n\nfunction handleTagsChanged(newTags) {\n selectedTags.value = newTags;\n emits('tags-changed', selectedTags.value.map(tag => { return tag.text }));\n}\n\n\n\n</script>\n\n<style>\n .ti-tag-toDefactor {\n background-color: rgb(var(--main));\n color: rgb(var(--black));\n border-radius: 4rem;\n padding: 1px 8px 2px;\n margin: 2px;\n font-size: .85em;\n }\n</style>"],"names":["ref","tag","computed"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,UAAM,QAAQ;AACd,UAAM,QAAQ;AAgBd,UAAM,MAAMA,IAAAA,IAAI,EAAE;AAElB,UAAM,eAAeA,IAAAA,IAAI,EAAE;AAE3B,UAAM,oBAAoBA,IAAAA,IAAI,MAAM,aAAa;AAEjD,QAAI,MAAM,KAAM,cAAa,QAAQ,MAAM,KAAK,IAAI,CAAAC,UAAQ,EAAC,MAAMA,KAAG,EAAE;AAGxE,UAAM,gBAAgBC,IAAAA,SAAS,MAAM;AACnC,aAAO,kBAAkB,MAAM,OAAO,OAAK;AACzC,eAAO,EAAE,KAAK,YAAW,EAAG,SAAS,IAAI,MAAM,aAAa;AAAA,MAC9D,CAAC;AAAA,IACH,CAAC;AAED,UAAM,yBAAyBA,IAAAA,SAAS,MAAM;AAC1C,aAAO,kBAAkB,MAAM,OAAO,UAAQ;AAC5C,eAAO,CAAC,aAAa,MAAM,KAAK,CAAAD,SAAOA,KAAI,SAAS,KAAK,IAAI;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAEH,aAAS,OAAQA,MAAK;AACpB,mBAAa,MAAM,KAAKA,IAAG;AAC3B,YAAM,gBAAgB,aAAa,MAAM,IAAI,CAAAA,SAAO;AAAE,eAAOA,KAAI;AAAA,MAAK,CAAC,CAAC;AAAA,IAC1E;AAEA,aAAS,kBAAkB,SAAS;AAClC,mBAAa,QAAQ;AACrB,YAAM,gBAAgB,aAAa,MAAM,IAAI,CAAAA,SAAO;AAAE,eAAOA,KAAI;AAAA,MAAK,CAAC,CAAC;AAAA,IAC1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"BlockTags.vue.cjs","sources":["../../../../../src/components/FieldTags/BlockTags.vue"],"sourcesContent":["<template>\n <div>\n <FieldTags\n v-model=\"selectedTags\"\n :autocomplete-items=\"filteredItems\"\n :add-on-key=\"[13, ':', ';', ',']\"\n :separators=\"[';', ',']\"\n :max-tags=\"20\"\n :maxlength=\"20\"\n :placeholder=\"'Please add tags'\"\n @tags-changed=\"handleTagsChanged\"\n class=\"mn-b-thin bg-light radius-medium pd-small\"\n />\n \n <input\n v-model=\"tag\"\n @keydown.enter=\"addTagFromInput\"\n placeholder=\"Type to filter suggestions\"\n class=\"hidden-input\"\n style=\"position: absolute; left: -9999px;\"\n />\n\n <p class=\"p-small mn-b-thin\">Suggested:</p>\n\n <span \n v-if=\"filteredSuggestedItems.length > 0\" \n v-for=\"(tag,index) in filteredSuggestedItems\" \n @click=\"addTag(tag)\"\n class=\"cursor-pointer t-medium ti-tag-toDefactor\"\n :class=\"{'mn-r-micro':index !== filteredSuggestedItems.length - 1}\"\n >\n {{ tag.text }}\n </span>\n <span v-else>You added all suggested tags</span> \n </div>\n</template>\n\n<script setup>\nimport FieldTags from '@martyrs/src/components/FieldTags/FieldTags.vue'\nimport { ref, computed, onMounted } from 'vue';\n\nconst emits = defineEmits(['tags-changed']);\nconst props = defineProps({\n tags: {\n type: Array\n },\n tagsSuggested: {\n type: Array,\n default: [\n { text: 'story' },\n { text: 'news' },\n { text: 'guide' },\n { text: 'discussion' },\n { text: 'photos' },\n ]\n }\n});\n\nconst tag = ref('');\nconst selectedTags = ref([]);\nconst autocompleteItems = ref(props.tagsSuggested);\n\n// Initialize tags\nif (props.tags) {\n selectedTags.value = props.tags.map(tag => \n typeof tag === 'string' ? { text: tag } : tag\n );\n}\n\n// Filter autocomplete items based on current input\nconst filteredItems = computed(() => {\n return autocompleteItems.value;\n});\n\nconst filteredSuggestedItems = computed(() => {\n return autocompleteItems.value.filter(item => {\n return !selectedTags.value.some(tag => tag.text === item.text);\n });\n })\n\nfunction addTag (tagToAdd) {\n selectedTags.value.push(tagToAdd)\n emits('tags-changed', selectedTags.value.map(t => t.text));\n}\n\nfunction addTagFromInput() {\n if (tag.value) {\n addTag({ text: tag.value });\n tag.value = '';\n }\n}\n\nfunction handleTagsChanged(newTags) {\n selectedTags.value = newTags;\n emits('tags-changed', newTags.map(t => typeof t === 'string' ? t : t.text));\n}\n\n\n\n</script>\n\n<style>\n .ti-tag-toDefactor {\n background-color: rgb(var(--main));\n color: rgb(var(--black));\n border-radius: 4rem;\n padding: 1px 8px 2px;\n margin: 2px;\n font-size: .85em;\n }\n</style>"],"names":["ref","tag","computed"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,UAAM,QAAQ;AACd,UAAM,QAAQ;AAgBd,UAAM,MAAMA,IAAAA,IAAI,EAAE;AAClB,UAAM,eAAeA,IAAAA,IAAI,EAAE;AAC3B,UAAM,oBAAoBA,IAAAA,IAAI,MAAM,aAAa;AAGjD,QAAI,MAAM,MAAM;AACd,mBAAa,QAAQ,MAAM,KAAK;AAAA,QAAI,CAAAC,SAClC,OAAOA,SAAQ,WAAW,EAAE,MAAMA,KAAG,IAAKA;AAAA,MAC9C;AAAA,IACA;AAGA,UAAM,gBAAgBC,IAAAA,SAAS,MAAM;AACnC,aAAO,kBAAkB;AAAA,IAC3B,CAAC;AAED,UAAM,yBAAyBA,IAAAA,SAAS,MAAM;AAC1C,aAAO,kBAAkB,MAAM,OAAO,UAAQ;AAC5C,eAAO,CAAC,aAAa,MAAM,KAAK,CAAAD,SAAOA,KAAI,SAAS,KAAK,IAAI;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAEH,aAAS,OAAQ,UAAU;AACzB,mBAAa,MAAM,KAAK,QAAQ;AAChC,YAAM,gBAAgB,aAAa,MAAM,IAAI,OAAK,EAAE,IAAI,CAAC;AAAA,IAC3D;AAEA,aAAS,kBAAkB;AACzB,UAAI,IAAI,OAAO;AACb,eAAO,EAAE,MAAM,IAAI,MAAK,CAAE;AAC1B,YAAI,QAAQ;AAAA,MACd;AAAA,IACF;AAEA,aAAS,kBAAkB,SAAS;AAClC,mBAAa,QAAQ;AACrB,YAAM,gBAAgB,QAAQ,IAAI,OAAK,OAAO,MAAM,WAAW,IAAI,EAAE,IAAI,CAAC;AAAA,IAC5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
- import { ref, computed, createElementBlock, openBlock, createVNode, createElementVNode, Fragment, renderList, normalizeClass, toDisplayString } from "vue";
2
- import _sfc_main$1 from "./FieldTags.vue.js";
1
+ import { ref, computed, createElementBlock, openBlock, createVNode, withDirectives, createElementVNode, withKeys, vModelText, Fragment, renderList, normalizeClass, toDisplayString } from "vue";
2
+ import FieldTags from "./FieldTags.vue2.js";
3
3
  /* empty css */
4
4
  const _hoisted_1 = ["onClick"];
5
5
  const _hoisted_2 = { key: 1 };
@@ -27,48 +27,57 @@ const _sfc_main = {
27
27
  const tag = ref("");
28
28
  const selectedTags = ref([]);
29
29
  const autocompleteItems = ref(props.tagsSuggested);
30
- if (props.tags) selectedTags.value = props.tags.map((tag2) => ({ text: tag2 }));
30
+ if (props.tags) {
31
+ selectedTags.value = props.tags.map(
32
+ (tag2) => typeof tag2 === "string" ? { text: tag2 } : tag2
33
+ );
34
+ }
31
35
  const filteredItems = computed(() => {
32
- return autocompleteItems.value.filter((i) => {
33
- return i.text.toLowerCase().includes(tag.value.toLowerCase());
34
- });
36
+ return autocompleteItems.value;
35
37
  });
36
38
  const filteredSuggestedItems = computed(() => {
37
39
  return autocompleteItems.value.filter((item) => {
38
40
  return !selectedTags.value.some((tag2) => tag2.text === item.text);
39
41
  });
40
42
  });
41
- function addTag(tag2) {
42
- selectedTags.value.push(tag2);
43
- emits("tags-changed", selectedTags.value.map((tag3) => {
44
- return tag3.text;
45
- }));
43
+ function addTag(tagToAdd) {
44
+ selectedTags.value.push(tagToAdd);
45
+ emits("tags-changed", selectedTags.value.map((t) => t.text));
46
+ }
47
+ function addTagFromInput() {
48
+ if (tag.value) {
49
+ addTag({ text: tag.value });
50
+ tag.value = "";
51
+ }
46
52
  }
47
53
  function handleTagsChanged(newTags) {
48
54
  selectedTags.value = newTags;
49
- emits("tags-changed", selectedTags.value.map((tag2) => {
50
- return tag2.text;
51
- }));
55
+ emits("tags-changed", newTags.map((t) => typeof t === "string" ? t : t.text));
52
56
  }
53
57
  return (_ctx, _cache) => {
54
58
  return openBlock(), createElementBlock("div", null, [
55
- createVNode(_sfc_main$1, {
56
- modelValue: tag.value,
57
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => tag.value = $event),
58
- tags: selectedTags.value,
59
+ createVNode(FieldTags, {
60
+ modelValue: selectedTags.value,
61
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedTags.value = $event),
59
62
  "autocomplete-items": filteredItems.value,
60
63
  "add-on-key": [13, ":", ";", ","],
61
- "save-on-key": [13, ":", ";", ","],
62
64
  separators: [";", ","],
63
65
  "max-tags": 20,
64
66
  maxlength: 20,
65
67
  placeholder: "Please add tags",
66
- "add-from-paste": true,
67
- "allow-edit-tags": true,
68
68
  onTagsChanged: handleTagsChanged,
69
69
  class: "mn-b-thin bg-light radius-medium pd-small"
70
- }, null, 8, ["modelValue", "tags", "autocomplete-items"]),
71
- _cache[1] || (_cache[1] = createElementVNode("p", { class: "p-small mn-b-thin" }, "Suggested:", -1)),
70
+ }, null, 8, ["modelValue", "autocomplete-items"]),
71
+ withDirectives(createElementVNode("input", {
72
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => tag.value = $event),
73
+ onKeydown: withKeys(addTagFromInput, ["enter"]),
74
+ placeholder: "Type to filter suggestions",
75
+ class: "hidden-input",
76
+ style: { "position": "absolute", "left": "-9999px" }
77
+ }, null, 544), [
78
+ [vModelText, tag.value]
79
+ ]),
80
+ _cache[2] || (_cache[2] = createElementVNode("p", { class: "p-small mn-b-thin" }, "Suggested:", -1)),
72
81
  filteredSuggestedItems.value.length > 0 ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(filteredSuggestedItems.value, (tag2, index) => {
73
82
  return openBlock(), createElementBlock("span", {
74
83
  onClick: ($event) => addTag(tag2),
@@ -1 +1 @@
1
- {"version":3,"file":"BlockTags.vue.js","sources":["../../../../../src/components/FieldTags/BlockTags.vue"],"sourcesContent":["<template>\n <div>\n <FieldTags\n v-model=\"tag\"\n :tags=\"selectedTags\"\n :autocomplete-items=\"filteredItems\"\n :add-on-key=\"[13, ':', ';', ',']\"\n :save-on-key=\"[13, ':', ';', ',']\"\n :separators=\"[';', ',']\"\n :max-tags=\"20\"\n :maxlength=\"20\"\n :placeholder=\"'Please add tags'\"\n :add-from-paste=\"true\"\n :allow-edit-tags=\"true\"\n @tags-changed=\"handleTagsChanged\"\n class=\"mn-b-thin bg-light radius-medium pd-small\"\n />\n\n <p class=\"p-small mn-b-thin\">Suggested:</p>\n\n <span \n v-if=\"filteredSuggestedItems.length > 0\" \n v-for=\"(tag,index) in filteredSuggestedItems\" \n @click=\"addTag(tag)\"\n class=\"cursor-pointer t-medium ti-tag-toDefactor\"\n :class=\"{'mn-r-micro':index !== filteredSuggestedItems.length - 1}\"\n >\n {{ tag.text }}\n </span>\n <span v-else>You added all suggested tags</span> \n </div>\n</template>\n\n<script setup>\nimport FieldTags from '@martyrs/src/components/FieldTags/FieldTags.vue'\nimport { ref, computed, onMounted } from 'vue';\n\nconst emits = defineEmits(['tags-changed']);\nconst props = defineProps({\n tags: {\n type: Array\n },\n tagsSuggested: {\n type: Array,\n default: [\n { text: 'story' },\n { text: 'news' },\n { text: 'guide' },\n { text: 'discussion' },\n { text: 'photos' },\n ]\n }\n});\n\nconst tag = ref('');\n\nconst selectedTags = ref([]);\n\nconst autocompleteItems = ref(props.tagsSuggested);\n\nif (props.tags) selectedTags.value = props.tags.map(tag => ({text: tag}))\n \n\nconst filteredItems = computed(() => {\n return autocompleteItems.value.filter(i => {\n return i.text.toLowerCase().includes(tag.value.toLowerCase());\n });\n});\n\nconst filteredSuggestedItems = computed(() => {\n return autocompleteItems.value.filter(item => {\n return !selectedTags.value.some(tag => tag.text === item.text);\n });\n })\n\nfunction addTag (tag) {\n selectedTags.value.push(tag)\n emits('tags-changed', selectedTags.value.map(tag => { return tag.text }));\n}\n\nfunction handleTagsChanged(newTags) {\n selectedTags.value = newTags;\n emits('tags-changed', selectedTags.value.map(tag => { return tag.text }));\n}\n\n\n\n</script>\n\n<style>\n .ti-tag-toDefactor {\n background-color: rgb(var(--main));\n color: rgb(var(--black));\n border-radius: 4rem;\n padding: 1px 8px 2px;\n margin: 2px;\n font-size: .85em;\n }\n</style>"],"names":["tag"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAqCA,UAAM,QAAQ;AACd,UAAM,QAAQ;AAgBd,UAAM,MAAM,IAAI,EAAE;AAElB,UAAM,eAAe,IAAI,EAAE;AAE3B,UAAM,oBAAoB,IAAI,MAAM,aAAa;AAEjD,QAAI,MAAM,KAAM,cAAa,QAAQ,MAAM,KAAK,IAAI,CAAAA,UAAQ,EAAC,MAAMA,KAAG,EAAE;AAGxE,UAAM,gBAAgB,SAAS,MAAM;AACnC,aAAO,kBAAkB,MAAM,OAAO,OAAK;AACzC,eAAO,EAAE,KAAK,YAAW,EAAG,SAAS,IAAI,MAAM,aAAa;AAAA,MAC9D,CAAC;AAAA,IACH,CAAC;AAED,UAAM,yBAAyB,SAAS,MAAM;AAC1C,aAAO,kBAAkB,MAAM,OAAO,UAAQ;AAC5C,eAAO,CAAC,aAAa,MAAM,KAAK,CAAAA,SAAOA,KAAI,SAAS,KAAK,IAAI;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAEH,aAAS,OAAQA,MAAK;AACpB,mBAAa,MAAM,KAAKA,IAAG;AAC3B,YAAM,gBAAgB,aAAa,MAAM,IAAI,CAAAA,SAAO;AAAE,eAAOA,KAAI;AAAA,MAAK,CAAC,CAAC;AAAA,IAC1E;AAEA,aAAS,kBAAkB,SAAS;AAClC,mBAAa,QAAQ;AACrB,YAAM,gBAAgB,aAAa,MAAM,IAAI,CAAAA,SAAO;AAAE,eAAOA,KAAI;AAAA,MAAK,CAAC,CAAC;AAAA,IAC1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"BlockTags.vue.js","sources":["../../../../../src/components/FieldTags/BlockTags.vue"],"sourcesContent":["<template>\n <div>\n <FieldTags\n v-model=\"selectedTags\"\n :autocomplete-items=\"filteredItems\"\n :add-on-key=\"[13, ':', ';', ',']\"\n :separators=\"[';', ',']\"\n :max-tags=\"20\"\n :maxlength=\"20\"\n :placeholder=\"'Please add tags'\"\n @tags-changed=\"handleTagsChanged\"\n class=\"mn-b-thin bg-light radius-medium pd-small\"\n />\n \n <input\n v-model=\"tag\"\n @keydown.enter=\"addTagFromInput\"\n placeholder=\"Type to filter suggestions\"\n class=\"hidden-input\"\n style=\"position: absolute; left: -9999px;\"\n />\n\n <p class=\"p-small mn-b-thin\">Suggested:</p>\n\n <span \n v-if=\"filteredSuggestedItems.length > 0\" \n v-for=\"(tag,index) in filteredSuggestedItems\" \n @click=\"addTag(tag)\"\n class=\"cursor-pointer t-medium ti-tag-toDefactor\"\n :class=\"{'mn-r-micro':index !== filteredSuggestedItems.length - 1}\"\n >\n {{ tag.text }}\n </span>\n <span v-else>You added all suggested tags</span> \n </div>\n</template>\n\n<script setup>\nimport FieldTags from '@martyrs/src/components/FieldTags/FieldTags.vue'\nimport { ref, computed, onMounted } from 'vue';\n\nconst emits = defineEmits(['tags-changed']);\nconst props = defineProps({\n tags: {\n type: Array\n },\n tagsSuggested: {\n type: Array,\n default: [\n { text: 'story' },\n { text: 'news' },\n { text: 'guide' },\n { text: 'discussion' },\n { text: 'photos' },\n ]\n }\n});\n\nconst tag = ref('');\nconst selectedTags = ref([]);\nconst autocompleteItems = ref(props.tagsSuggested);\n\n// Initialize tags\nif (props.tags) {\n selectedTags.value = props.tags.map(tag => \n typeof tag === 'string' ? { text: tag } : tag\n );\n}\n\n// Filter autocomplete items based on current input\nconst filteredItems = computed(() => {\n return autocompleteItems.value;\n});\n\nconst filteredSuggestedItems = computed(() => {\n return autocompleteItems.value.filter(item => {\n return !selectedTags.value.some(tag => tag.text === item.text);\n });\n })\n\nfunction addTag (tagToAdd) {\n selectedTags.value.push(tagToAdd)\n emits('tags-changed', selectedTags.value.map(t => t.text));\n}\n\nfunction addTagFromInput() {\n if (tag.value) {\n addTag({ text: tag.value });\n tag.value = '';\n }\n}\n\nfunction handleTagsChanged(newTags) {\n selectedTags.value = newTags;\n emits('tags-changed', newTags.map(t => typeof t === 'string' ? t : t.text));\n}\n\n\n\n</script>\n\n<style>\n .ti-tag-toDefactor {\n background-color: rgb(var(--main));\n color: rgb(var(--black));\n border-radius: 4rem;\n padding: 1px 8px 2px;\n margin: 2px;\n font-size: .85em;\n }\n</style>"],"names":["tag"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAyCA,UAAM,QAAQ;AACd,UAAM,QAAQ;AAgBd,UAAM,MAAM,IAAI,EAAE;AAClB,UAAM,eAAe,IAAI,EAAE;AAC3B,UAAM,oBAAoB,IAAI,MAAM,aAAa;AAGjD,QAAI,MAAM,MAAM;AACd,mBAAa,QAAQ,MAAM,KAAK;AAAA,QAAI,CAAAA,SAClC,OAAOA,SAAQ,WAAW,EAAE,MAAMA,KAAG,IAAKA;AAAA,MAC9C;AAAA,IACA;AAGA,UAAM,gBAAgB,SAAS,MAAM;AACnC,aAAO,kBAAkB;AAAA,IAC3B,CAAC;AAED,UAAM,yBAAyB,SAAS,MAAM;AAC1C,aAAO,kBAAkB,MAAM,OAAO,UAAQ;AAC5C,eAAO,CAAC,aAAa,MAAM,KAAK,CAAAA,SAAOA,KAAI,SAAS,KAAK,IAAI;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAEH,aAAS,OAAQ,UAAU;AACzB,mBAAa,MAAM,KAAK,QAAQ;AAChC,YAAM,gBAAgB,aAAa,MAAM,IAAI,OAAK,EAAE,IAAI,CAAC;AAAA,IAC3D;AAEA,aAAS,kBAAkB;AACzB,UAAI,IAAI,OAAO;AACb,eAAO,EAAE,MAAM,IAAI,MAAK,CAAE;AAC1B,YAAI,QAAQ;AAAA,MACd;AAAA,IACF;AAEA,aAAS,kBAAkB,SAAS;AAClC,mBAAa,QAAQ;AACrB,YAAM,gBAAgB,QAAQ,IAAI,OAAK,OAAO,MAAM,WAAW,IAAI,EAAE,IAAI,CAAC;AAAA,IAC5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const vue = require("vue");
4
+ ;/* empty css */
5
+ const _pluginVue_exportHelper = require("../../../../_virtual/_plugin-vue_export-helper.cjs");
6
+ const _hoisted_1 = { class: "field-tags-new" };
7
+ const _hoisted_2 = { class: "tags-container" };
8
+ const _hoisted_3 = ["onClick"];
9
+ const _hoisted_4 = ["placeholder", "maxlength", "disabled"];
10
+ const _hoisted_5 = {
11
+ key: 0,
12
+ class: "autocomplete"
13
+ };
14
+ const _hoisted_6 = ["onClick", "onMouseenter"];
15
+ const _sfc_main = {
16
+ __name: "FieldTags",
17
+ props: {
18
+ modelValue: Array,
19
+ textField: {
20
+ type: String,
21
+ default: "text"
22
+ },
23
+ autocompleteItems: Array,
24
+ separators: {
25
+ type: Array,
26
+ default: () => [",", ";"]
27
+ },
28
+ addOnKey: {
29
+ type: Array,
30
+ default: () => [13]
31
+ // Enter key
32
+ },
33
+ maxTags: {
34
+ type: Number,
35
+ default: 20
36
+ },
37
+ maxlength: {
38
+ type: Number,
39
+ default: 50
40
+ },
41
+ placeholder: String,
42
+ disabled: Boolean,
43
+ addOnBlur: {
44
+ type: Boolean,
45
+ default: true
46
+ },
47
+ autocompleteMinLength: {
48
+ type: Number,
49
+ default: 1
50
+ }
51
+ },
52
+ emits: ["update:modelValue", "tags-changed"],
53
+ setup(__props, { emit: __emit }) {
54
+ const props = __props;
55
+ const emit = __emit;
56
+ const newTag = vue.ref("");
57
+ const focused = vue.ref(false);
58
+ const selectedIndex = vue.ref(-1);
59
+ const inputRef = vue.ref(null);
60
+ const tags = vue.computed({
61
+ get: () => props.modelValue || [],
62
+ set: (value) => {
63
+ emit("update:modelValue", value);
64
+ emit("tags-changed", value);
65
+ }
66
+ });
67
+ const showAutocomplete = vue.computed(() => {
68
+ return focused.value && props.autocompleteItems?.length > 0 && newTag.value.length >= props.autocompleteMinLength;
69
+ });
70
+ const filteredAutocomplete = vue.computed(() => {
71
+ if (!props.autocompleteItems) return [];
72
+ const searchText = newTag.value.toLowerCase();
73
+ return props.autocompleteItems.filter((item) => {
74
+ const itemText = getTagText(item).toLowerCase();
75
+ if (!itemText.includes(searchText)) return false;
76
+ return !isDuplicate(itemText);
77
+ });
78
+ });
79
+ function getTagText(tag) {
80
+ if (tag === null || tag === void 0) return "";
81
+ if (typeof tag === "string") return tag;
82
+ return tag[props.textField] || "";
83
+ }
84
+ function createTag(text) {
85
+ if (tags.value.length > 0) {
86
+ if (typeof tags.value[0] === "string") {
87
+ return text;
88
+ }
89
+ }
90
+ return { [props.textField]: text };
91
+ }
92
+ function isDuplicate(text) {
93
+ const searchText = text.toLowerCase().trim();
94
+ return tags.value.some(
95
+ (tag) => getTagText(tag).toLowerCase().trim() === searchText
96
+ );
97
+ }
98
+ function addTag(input) {
99
+ let text = "";
100
+ if (typeof input === "string") {
101
+ text = input.trim();
102
+ } else if (typeof input === "object") {
103
+ if (props.autocompleteItems?.includes(input)) {
104
+ if (!isDuplicate(getTagText(input))) {
105
+ tags.value = [...tags.value, input];
106
+ }
107
+ newTag.value = "";
108
+ selectedIndex.value = -1;
109
+ return;
110
+ }
111
+ text = getTagText(input).trim();
112
+ }
113
+ if (!text || tags.value.length >= props.maxTags) return;
114
+ if (isDuplicate(text)) return;
115
+ const tag = createTag(text);
116
+ tags.value = [...tags.value, tag];
117
+ newTag.value = "";
118
+ selectedIndex.value = -1;
119
+ }
120
+ function removeTag(index) {
121
+ if (props.disabled) return;
122
+ const newTags = [...tags.value];
123
+ newTags.splice(index, 1);
124
+ tags.value = newTags;
125
+ }
126
+ function handleKeyDown(event) {
127
+ if (showAutocomplete.value) {
128
+ if (event.key === "ArrowDown") {
129
+ event.preventDefault();
130
+ selectedIndex.value = Math.min(
131
+ selectedIndex.value + 1,
132
+ filteredAutocomplete.value.length - 1
133
+ );
134
+ return;
135
+ }
136
+ if (event.key === "ArrowUp") {
137
+ event.preventDefault();
138
+ selectedIndex.value = Math.max(selectedIndex.value - 1, -1);
139
+ return;
140
+ }
141
+ if (event.key === "Enter" && selectedIndex.value >= 0) {
142
+ event.preventDefault();
143
+ addTag(filteredAutocomplete.value[selectedIndex.value]);
144
+ return;
145
+ }
146
+ }
147
+ const shouldAdd = props.addOnKey.some((key) => {
148
+ if (typeof key === "number") {
149
+ return event.keyCode === key;
150
+ }
151
+ return event.key === key;
152
+ });
153
+ if (shouldAdd) {
154
+ event.preventDefault();
155
+ addTag(newTag.value);
156
+ return;
157
+ }
158
+ if (event.key === "Backspace" && newTag.value === "" && tags.value.length > 0) {
159
+ removeTag(tags.value.length - 1);
160
+ }
161
+ }
162
+ function handlePaste(event) {
163
+ event.preventDefault();
164
+ const text = event.clipboardData.getData("text");
165
+ if (!text) return;
166
+ const separatorRegex = new RegExp(
167
+ props.separators.map((s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|")
168
+ );
169
+ const parts = text.split(separatorRegex);
170
+ parts.forEach((part) => {
171
+ if (tags.value.length >= props.maxTags) return;
172
+ addTag(part);
173
+ });
174
+ }
175
+ function handleBlur() {
176
+ setTimeout(() => {
177
+ focused.value = false;
178
+ selectedIndex.value = -1;
179
+ if (props.addOnBlur && newTag.value) {
180
+ addTag(newTag.value);
181
+ }
182
+ }, 200);
183
+ }
184
+ vue.watch(filteredAutocomplete, () => {
185
+ selectedIndex.value = -1;
186
+ });
187
+ return (_ctx, _cache) => {
188
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
189
+ vue.createElementVNode("div", _hoisted_2, [
190
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(tags.value, (tag, index) => {
191
+ return vue.openBlock(), vue.createElementBlock("span", {
192
+ key: index,
193
+ class: "tag"
194
+ }, [
195
+ vue.createTextVNode(vue.toDisplayString(getTagText(tag)) + " ", 1),
196
+ vue.createElementVNode("button", {
197
+ onClick: ($event) => removeTag(index),
198
+ class: "tag-remove",
199
+ type: "button"
200
+ }, " × ", 8, _hoisted_3)
201
+ ]);
202
+ }), 128)),
203
+ vue.withDirectives(vue.createElementVNode("input", {
204
+ ref_key: "inputRef",
205
+ ref: inputRef,
206
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => newTag.value = $event),
207
+ onKeydown: handleKeyDown,
208
+ onPaste: handlePaste,
209
+ onFocus: _cache[1] || (_cache[1] = ($event) => focused.value = true),
210
+ onBlur: handleBlur,
211
+ placeholder: __props.placeholder || "Add tags",
212
+ maxlength: __props.maxlength,
213
+ disabled: __props.disabled,
214
+ class: "tag-input"
215
+ }, null, 40, _hoisted_4), [
216
+ [vue.vModelText, newTag.value]
217
+ ])
218
+ ]),
219
+ showAutocomplete.value && filteredAutocomplete.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5, [
220
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredAutocomplete.value, (item, index) => {
221
+ return vue.openBlock(), vue.createElementBlock("div", {
222
+ key: getTagText(item),
223
+ onClick: ($event) => addTag(item),
224
+ onMouseenter: ($event) => selectedIndex.value = index,
225
+ class: vue.normalizeClass(["autocomplete-item", { selected: selectedIndex.value === index }])
226
+ }, vue.toDisplayString(getTagText(item)), 43, _hoisted_6);
227
+ }), 128))
228
+ ])) : vue.createCommentVNode("", true)
229
+ ]);
230
+ };
231
+ }
232
+ };
233
+ const FieldTags = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-1b76c0f9"]]);
234
+ exports.default = FieldTags;
235
+ //# sourceMappingURL=FieldTags.vue2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldTags.vue2.cjs","sources":["../../../../../src/components/FieldTags/FieldTags.vue"],"sourcesContent":["<template>\n <div class=\"field-tags-new\">\n <!-- Tags container -->\n <div class=\"tags-container\">\n <span \n v-for=\"(tag, index) in tags\" \n :key=\"index\"\n class=\"tag\"\n >\n {{ getTagText(tag) }}\n <button \n @click=\"removeTag(index)\" \n class=\"tag-remove\"\n type=\"button\"\n >\n ×\n </button>\n </span>\n \n <input\n ref=\"inputRef\"\n v-model=\"newTag\"\n @keydown=\"handleKeyDown\"\n @paste=\"handlePaste\"\n @focus=\"focused = true\"\n @blur=\"handleBlur\"\n :placeholder=\"placeholder || 'Add tags'\"\n :maxlength=\"maxlength\"\n :disabled=\"disabled\"\n class=\"tag-input\"\n />\n </div>\n \n <!-- Autocomplete dropdown -->\n <div \n v-if=\"showAutocomplete && filteredAutocomplete.length > 0\"\n class=\"autocomplete\"\n >\n <div \n v-for=\"(item, index) in filteredAutocomplete\"\n :key=\"getTagText(item)\"\n @click=\"addTag(item)\"\n @mouseenter=\"selectedIndex = index\"\n :class=\"['autocomplete-item', { selected: selectedIndex === index }]\"\n >\n {{ getTagText(item) }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch } from 'vue'\n\nconst props = defineProps({\n modelValue: Array,\n textField: {\n type: String,\n default: 'text'\n },\n autocompleteItems: Array,\n separators: {\n type: Array,\n default: () => [',', ';']\n },\n addOnKey: {\n type: Array,\n default: () => [13] // Enter key\n },\n maxTags: {\n type: Number,\n default: 20\n },\n maxlength: {\n type: Number,\n default: 50\n },\n placeholder: String,\n disabled: Boolean,\n addOnBlur: {\n type: Boolean,\n default: true\n },\n autocompleteMinLength: {\n type: Number,\n default: 1\n }\n})\n\nconst emit = defineEmits(['update:modelValue', 'tags-changed'])\n\n// State\nconst newTag = ref('')\nconst focused = ref(false)\nconst selectedIndex = ref(-1)\nconst inputRef = ref(null)\n\n// Computed\nconst tags = computed({\n get: () => props.modelValue || [],\n set: (value) => {\n emit('update:modelValue', value)\n emit('tags-changed', value)\n }\n})\n\nconst showAutocomplete = computed(() => {\n return focused.value && \n props.autocompleteItems?.length > 0 &&\n newTag.value.length >= props.autocompleteMinLength\n})\n\nconst filteredAutocomplete = computed(() => {\n if (!props.autocompleteItems) return []\n \n const searchText = newTag.value.toLowerCase()\n \n return props.autocompleteItems.filter(item => {\n const itemText = getTagText(item).toLowerCase()\n \n // Filter by search text\n if (!itemText.includes(searchText)) return false\n \n // Filter out duplicates\n return !isDuplicate(itemText)\n })\n})\n\n// Methods\nfunction getTagText(tag) {\n if (tag === null || tag === undefined) return ''\n if (typeof tag === 'string') return tag\n return tag[props.textField] || ''\n}\n\nfunction createTag(text) {\n // Preserve format based on existing data\n if (tags.value.length > 0) {\n if (typeof tags.value[0] === 'string') {\n return text\n }\n }\n \n // Default to object with custom field\n return { [props.textField]: text }\n}\n\nfunction isDuplicate(text) {\n const searchText = text.toLowerCase().trim()\n return tags.value.some(tag => \n getTagText(tag).toLowerCase().trim() === searchText\n )\n}\n\nfunction addTag(input) {\n let text = ''\n \n if (typeof input === 'string') {\n text = input.trim()\n } else if (typeof input === 'object') {\n // If it's an autocomplete item, preserve the whole object\n if (props.autocompleteItems?.includes(input)) {\n if (!isDuplicate(getTagText(input))) {\n tags.value = [...tags.value, input]\n }\n newTag.value = ''\n selectedIndex.value = -1\n return\n }\n text = getTagText(input).trim()\n }\n \n if (!text || tags.value.length >= props.maxTags) return\n \n if (isDuplicate(text)) return\n \n const tag = createTag(text)\n tags.value = [...tags.value, tag]\n newTag.value = ''\n selectedIndex.value = -1\n}\n\nfunction removeTag(index) {\n if (props.disabled) return\n \n const newTags = [...tags.value]\n newTags.splice(index, 1)\n tags.value = newTags\n}\n\nfunction handleKeyDown(event) {\n // Handle arrow keys for autocomplete navigation\n if (showAutocomplete.value) {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n selectedIndex.value = Math.min(\n selectedIndex.value + 1, \n filteredAutocomplete.value.length - 1\n )\n return\n }\n \n if (event.key === 'ArrowUp') {\n event.preventDefault()\n selectedIndex.value = Math.max(selectedIndex.value - 1, -1)\n return\n }\n \n // Add selected autocomplete item on Enter\n if (event.key === 'Enter' && selectedIndex.value >= 0) {\n event.preventDefault()\n addTag(filteredAutocomplete.value[selectedIndex.value])\n return\n }\n }\n \n // Check for add triggers\n const shouldAdd = props.addOnKey.some(key => {\n if (typeof key === 'number') {\n return event.keyCode === key\n }\n return event.key === key\n })\n \n if (shouldAdd) {\n event.preventDefault()\n addTag(newTag.value)\n return\n }\n \n // Handle backspace to delete last tag\n if (event.key === 'Backspace' && newTag.value === '' && tags.value.length > 0) {\n removeTag(tags.value.length - 1)\n }\n}\n\nfunction handlePaste(event) {\n event.preventDefault()\n \n const text = event.clipboardData.getData('text')\n if (!text) return\n \n // Create regex from separators\n const separatorRegex = new RegExp(\n props.separators.map(s => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|')\n )\n \n // Split by separators and add each tag\n const parts = text.split(separatorRegex)\n \n parts.forEach(part => {\n if (tags.value.length >= props.maxTags) return\n addTag(part)\n })\n}\n\nfunction handleBlur() {\n // Small delay to allow click on autocomplete items\n setTimeout(() => {\n focused.value = false\n selectedIndex.value = -1\n \n if (props.addOnBlur && newTag.value) {\n addTag(newTag.value)\n }\n }, 200)\n}\n\n// Reset selected index when autocomplete items change\nwatch(filteredAutocomplete, () => {\n selectedIndex.value = -1\n})\n</script>\n\n<style scoped>\n.field-tags-new {\n position: relative;\n}\n\n.tags-container {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.5rem;\n}\n\n.tag {\n display: inline-flex;\n align-items: center;\n background: rgb(var(--main, 255, 215, 0));\n color: rgb(var(--black, 0, 0, 0));\n padding: 0.25rem 0.5rem;\n border-radius: 2rem;\n font-size: 0.875rem;\n}\n\n.tag-remove {\n margin-left: 0.25rem;\n background: none;\n border: none;\n color: inherit;\n font-size: 1.25rem;\n cursor: pointer;\n padding: 0;\n line-height: 1;\n opacity: 0.7;\n}\n\n.tag-remove:hover {\n opacity: 1;\n}\n\n.tag-input {\n flex: 1;\n border: none;\n background: none;\n outline: none;\n min-width: 150px;\n padding: 0.25rem;\n font-size: inherit;\n font-family: inherit;\n}\n\n.tag-input:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.autocomplete {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n margin-top: 0.25rem;\n background: white;\n border: 1px solid rgb(var(--gray, 224, 224, 224));\n border-radius: 0.5rem;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n max-height: 200px;\n overflow-y: auto;\n z-index: 100;\n}\n\n.autocomplete-item {\n padding: 0.5rem 0.75rem;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.autocomplete-item:hover,\n.autocomplete-item.selected {\n background: rgb(var(--gray-light, 248, 248, 248));\n}\n\n.autocomplete-item:first-child {\n border-radius: 0.5rem 0.5rem 0 0;\n}\n\n.autocomplete-item:last-child {\n border-radius: 0 0 0.5rem 0.5rem;\n}\n</style>"],"names":["ref","computed","watch"],"mappings":"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"}