@ozdao/martyrs 0.2.540 → 0.2.541

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 (264) hide show
  1. package/dist/{globals.verifier-CJ1lr-NW.cjs → globals.verifier-Bi-XLEi9.cjs} +24 -23
  2. package/dist/{globals.verifier-BhqUrneb.js → globals.verifier-gPPX_jhf.js} +24 -23
  3. package/dist/inventory.server.cjs +1 -1
  4. package/dist/inventory.server.js +1 -1
  5. package/dist/{main-Zhs0EqRp.cjs → main-7IA3UHca.cjs} +6 -6
  6. package/dist/{main-gOfhekZG.js → main-BpBtIUcJ.js} +549 -549
  7. package/dist/martyrs/src/components/Button/{Button.vue2.cjs → Button.vue.cjs} +2 -2
  8. package/dist/martyrs/src/components/Button/{Button.vue2.js.map → Button.vue.cjs.map} +1 -1
  9. package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +2 -2
  10. package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
  11. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +1 -1
  12. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
  13. package/dist/martyrs/src/components/FieldTags/create-tags.cjs +11 -2
  14. package/dist/martyrs/src/components/FieldTags/create-tags.cjs.map +1 -1
  15. package/dist/martyrs/src/components/FieldTags/create-tags.js +11 -2
  16. package/dist/martyrs/src/components/FieldTags/create-tags.js.map +1 -1
  17. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue2.cjs → Spoiler.vue.cjs} +2 -2
  18. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue2.js.map → Spoiler.vue.cjs.map} +1 -1
  19. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue2.js → Spoiler.vue.js} +2 -2
  20. package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +1 -0
  21. package/dist/martyrs/src/components/Tab/{Tab.vue2.cjs → Tab.vue.cjs} +2 -2
  22. package/dist/martyrs/src/components/Tab/{Tab.vue2.js.map → Tab.vue.cjs.map} +1 -1
  23. package/dist/martyrs/src/components/Tab/{Tab.vue2.js → Tab.vue.js} +2 -2
  24. package/dist/martyrs/src/components/Tab/Tab.vue.js.map +1 -0
  25. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +2 -2
  26. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +2 -2
  27. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
  28. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
  29. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -1
  30. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
  31. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
  32. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  33. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
  34. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
  35. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
  36. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +2 -2
  38. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +2 -2
  39. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +2 -2
  40. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +2 -2
  41. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +2 -2
  42. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +2 -2
  43. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
  44. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
  45. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  46. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  47. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  48. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  49. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
  50. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  51. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
  52. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  53. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  54. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  55. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  56. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  57. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
  58. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  59. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  60. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  61. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
  62. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
  63. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +1 -1
  64. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +1 -1
  65. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +1 -1
  66. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +1 -1
  67. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +1 -1
  68. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +1 -1
  69. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
  70. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
  71. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
  72. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
  73. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
  74. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
  75. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
  76. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
  77. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +1 -1
  78. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.js +1 -1
  79. package/dist/martyrs/src/modules/globals/views/store/globals.cjs +2 -2
  80. package/dist/martyrs/src/modules/globals/views/store/globals.cjs.map +1 -1
  81. package/dist/martyrs/src/modules/globals/views/store/globals.js +2 -2
  82. package/dist/martyrs/src/modules/globals/views/store/globals.js.map +1 -1
  83. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +1 -1
  84. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
  85. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs +1 -1
  86. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  87. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs +1 -1
  88. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  89. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +1 -1
  90. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
  91. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
  92. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  93. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs +1 -1
  94. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
  95. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +1 -1
  96. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +1 -1
  97. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
  98. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  99. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +1 -1
  100. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  101. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
  102. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  103. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
  104. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  105. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
  106. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
  107. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
  108. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  109. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +1 -1
  110. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
  111. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
  112. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  113. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
  114. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
  115. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
  116. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  117. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
  118. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  119. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +1 -1
  120. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  121. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
  122. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
  123. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
  124. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  125. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
  126. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  127. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
  128. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  129. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
  130. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  131. package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.cjs +1 -1
  132. package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js +1 -1
  133. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +1 -1
  134. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
  135. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +1 -1
  136. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
  137. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +1 -1
  138. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
  139. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
  140. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  141. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +1 -1
  142. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  143. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +2 -2
  144. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
  145. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
  146. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
  147. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs +1 -1
  148. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  149. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs +1 -1
  150. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  151. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +4 -4
  152. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +4 -4
  153. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
  154. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  155. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +1 -1
  156. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  157. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +2 -2
  158. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +2 -2
  159. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +1 -1
  160. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
  161. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +4 -4
  162. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +4 -4
  163. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +4 -4
  164. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +4 -4
  165. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +3 -3
  166. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +3 -3
  167. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
  168. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
  169. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
  170. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  171. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  172. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  173. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  174. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  175. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +2 -2
  176. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
  177. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
  178. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  179. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
  180. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  181. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
  182. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  183. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.cjs +1 -1
  184. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +1 -1
  185. package/dist/martyrs/src/modules/products/components/elements/{THC.vue2.cjs → THC.vue.cjs} +2 -2
  186. package/dist/martyrs/src/modules/products/components/elements/THC.vue.cjs.map +1 -0
  187. package/dist/martyrs/src/modules/products/components/elements/{THC.vue2.js → THC.vue.js} +2 -2
  188. package/dist/martyrs/src/modules/products/components/elements/THC.vue.js.map +1 -0
  189. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +1 -1
  190. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
  191. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +17 -1
  192. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
  193. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +17 -1
  194. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  195. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +2 -2
  196. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
  197. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
  198. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
  199. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +2 -2
  200. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +2 -2
  201. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
  202. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
  203. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
  204. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
  205. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
  206. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
  207. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs +1 -1
  208. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
  209. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
  210. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  211. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
  212. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  213. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +3 -3
  214. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +3 -3
  215. package/dist/martyrs/src/modules/products/store/categories.cjs +4 -0
  216. package/dist/martyrs/src/modules/products/store/categories.cjs.map +1 -1
  217. package/dist/martyrs/src/modules/products/store/categories.js +4 -0
  218. package/dist/martyrs/src/modules/products/store/categories.js.map +1 -1
  219. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +2 -2
  220. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +2 -2
  221. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
  222. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  223. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  224. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  225. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  226. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  227. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
  228. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  229. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs +1 -1
  230. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
  231. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +2 -2
  232. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
  233. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
  234. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
  235. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
  236. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +1 -1
  237. package/dist/martyrs.cjs.js +1 -1
  238. package/dist/martyrs.es.js +1 -1
  239. package/dist/music.server.cjs +1 -1
  240. package/dist/music.server.js +1 -1
  241. package/dist/orders.server.cjs +1 -1
  242. package/dist/orders.server.js +1 -1
  243. package/dist/organizations.server.cjs +1 -1
  244. package/dist/organizations.server.js +1 -1
  245. package/dist/products.server.cjs +10 -2
  246. package/dist/products.server.js +10 -2
  247. package/dist/rents.server.cjs +1 -1
  248. package/dist/rents.server.js +1 -1
  249. package/dist/{web-bMa0DMyG.cjs → web-C9bVm6Nw.cjs} +1 -1
  250. package/dist/{web-DxxU2bwy.js → web-DsdyXC8n.js} +1 -1
  251. package/package.json +1 -1
  252. package/src/components/FieldTags/FieldTagsNew.vue +366 -0
  253. package/src/components/FieldTags/README.md +513 -0
  254. package/src/components/FieldTags/create-tags.js +15 -2
  255. package/src/modules/globals/controllers/classes/globals.validator.js +24 -23
  256. package/src/modules/globals/views/store/globals.js +2 -2
  257. package/src/modules/products/components/pages/CategoryEdit.vue +20 -0
  258. package/src/modules/products/middlewares/categories.verifier.js +9 -1
  259. package/src/modules/products/store/categories.js +5 -0
  260. package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +0 -1
  261. package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.cjs.map +0 -1
  262. package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +0 -1
  263. package/dist/martyrs/src/modules/products/components/elements/THC.vue2.cjs.map +0 -1
  264. package/dist/martyrs/src/modules/products/components/elements/THC.vue2.js.map +0 -1
@@ -0,0 +1,513 @@
1
+ # FieldTags Component
2
+
3
+ Ультра-мощный Vue 3 компонент для работы с тегами с огромным количеством возможностей для создания, редактирования, валидации и управления тегами.
4
+
5
+ ## Архитектура компонента
6
+
7
+ ### Основные компоненты
8
+ 1. **FieldTags.vue** - главный компонент с полным функционалом
9
+ 2. **BlockTags.vue** - готовая обертка с предложенными тегами
10
+ 3. **tag-input.vue** - вспомогательный компонент для inline-редактирования
11
+ 4. **create-tags.js** - утилиты для создания и валидации тегов
12
+ 5. **vue-tags-input.props.js** - валидаторы и определения всех props
13
+
14
+ ## Все возможности компонента
15
+
16
+ ### 1. СОЗДАНИЕ ТЕГОВ (10+ способов)
17
+
18
+ #### Клавиатурный ввод
19
+ - **Настраиваемые триггер-клавиши** - любые комбинации клавиш для создания (Enter, Tab, запятая, точка с запятой и т.д.)
20
+ - **Коды клавиш и строки** - поддержка как keyCode так и строковых значений клавиш
21
+ - **Предотвращение дефолтного поведения** - автоматическая отмена стандартных действий браузера
22
+
23
+ #### Вставка из буфера обмена
24
+ - **Умная обработка вставки** - автоматическое создание множественных тегов из вставленного текста
25
+ - **Отложенная обработка** - обработка через setTimeout для корректной работы с буфером
26
+ - **Фильтрация пустых значений** - автоматическое удаление пустых тегов
27
+
28
+ #### Разделители текста
29
+ - **Множественные сепараторы** - любое количество разделителей (`;`, `,`, `:`, `|` и т.д.)
30
+ - **Regex-обработка** - автоматическое экранирование спецсимволов
31
+ - **Умное разбиение** - создание массива тегов из одной строки
32
+
33
+ #### Автоматическое создание
34
+ - **При потере фокуса** - создание тега когда пользователь кликает вне поля
35
+ - **При выборе из автодополнения** - мгновенное добавление при клике на предложение
36
+ - **При навигации клавиатурой** - добавление выбранного элемента через Enter
37
+
38
+ ### 2. РЕДАКТИРОВАНИЕ ТЕГОВ (продвинутые возможности)
39
+
40
+ #### Режимы редактирования
41
+ - **Inline-редактирование** - прямо в теге без модальных окон
42
+ - **Статус каждого тега** - независимое отслеживание режима редактирования для каждого
43
+ - **Фокусировка на input** - автоматический фокус при входе в режим редактирования
44
+
45
+ #### Управление редактированием
46
+ - **Валидация при редактировании** - проверка в реальном времени
47
+ - **Сохранение по триггерам** - настраиваемые клавиши для сохранения
48
+ - **Отмена изменений** - восстановление оригинального значения
49
+ - **Blur-отмена** - автоматическая отмена при потере фокуса
50
+
51
+ ### 3. АВТОДОПОЛНЕНИЕ (умная система)
52
+
53
+ #### Фильтрация и поиск
54
+ - **Case-insensitive поиск** - поиск без учета регистра
55
+ - **Минимальная длина запроса** - настраиваемый порог для показа
56
+ - **Фильтр дубликатов** - автоматическое скрытие уже добавленных
57
+ - **Кастомная фильтрация** - возможность передать свою функцию фильтрации
58
+
59
+ #### Навигация и выбор
60
+ - **Клавиатурная навигация** - стрелки вверх/вниз с циклическим переходом
61
+ - **Выбор мышью** - hover для предварительного выбора
62
+ - **Автовыбор первого** - опциональный выбор первого элемента
63
+ - **Запоминание позиции** - сохранение выбранного элемента
64
+
65
+ #### Режимы работы
66
+ - **Всегда открыт** - постоянное отображение списка
67
+ - **Только из списка** - запрет на создание произвольных тегов
68
+ - **Динамическое обновление** - реактивное обновление при изменении items
69
+
70
+ ### 4. ВАЛИДАЦИЯ (мощная система правил)
71
+
72
+ #### Типы правил
73
+ - **RegExp правила** - проверка через регулярные выражения
74
+ - **Функциональные правила** - произвольная логика валидации
75
+ - **Строковые правила** - автоматическое преобразование в RegExp
76
+ - **Множественные правила** - применение нескольких правил одновременно
77
+
78
+ #### CSS-классы и состояния
79
+ - **Динамические классы** - автоматическое добавление классов по результатам валидации
80
+ - **ti-valid/ti-invalid** - базовые классы состояния
81
+ - **ti-duplicate** - специальный класс для дубликатов
82
+ - **Кастомные классы** - любые пользовательские классы через правила
83
+
84
+ #### Блокировка действий
85
+ - **disableAdd флаг** - запрет добавления невалидных тегов
86
+ - **Проверка при сохранении** - валидация при редактировании
87
+ - **Предварительная валидация** - проверка до добавления в массив
88
+
89
+ ### 5. УДАЛЕНИЕ ТЕГОВ (множественные способы)
90
+
91
+ #### Визуальное удаление
92
+ - **Иконка закрытия** - кликабельная кнопка на каждом теге
93
+ - **Кастомные действия** - слот для собственных кнопок удаления
94
+
95
+ #### Backspace удаление
96
+ - **Двухэтапное удаление** - сначала пометка, потом удаление
97
+ - **Визуальная индикация** - класс deletion-mark для помеченного тега
98
+ - **Таймер сброса** - автоматический сброс пометки через 1 секунду
99
+ - **Очистка таймеров** - корректная очистка при unmount
100
+
101
+ ### 6. ХУКИ И СОБЫТИЯ (полный контроль)
102
+
103
+ #### Before-хуки (можно отменить действие)
104
+ - **onBeforeAddingTag** - перед добавлением с возможностью отмены
105
+ - **onBeforeDeletingTag** - перед удалением с подтверждением
106
+ - **onBeforeEditingTag** - перед входом в режим редактирования
107
+ - **onBeforeSavingTag** - перед сохранением изменений
108
+
109
+ #### События изменений
110
+ - **tags-changed** - при любом изменении массива тегов
111
+ - **update:tags** - v-model синхронизация для тегов
112
+ - **update:modelValue** - v-model для поля ввода
113
+ - **tag-clicked** - клик по тегу с полной информацией
114
+
115
+ #### События состояний
116
+ - **adding-duplicate** - попытка добавить дубликат
117
+ - **saving-duplicate** - попытка сохранить дубликат при редактировании
118
+ - **max-tags-reached** - достижение лимита тегов
119
+
120
+ ### 7. УПРАВЛЕНИЕ ФОКУСОМ И ВЗАИМОДЕЙСТВИЕМ
121
+
122
+ #### Фокус и Blur
123
+ - **Отслеживание фокуса** - реактивная переменная focused
124
+ - **addOnBlur** - создание тега при потере фокуса
125
+ - **Глобальный click listener** - обработка кликов вне компонента
126
+ - **Предотвращение blur** - при клике внутри компонента
127
+
128
+ #### Размеры и ограничения
129
+ - **maxlength** - максимальная длина текста тега
130
+ - **maxTags** - максимальное количество тегов
131
+ - **Автоматический размер input** - size="1" с flex-grow
132
+
133
+ ### 8. ВНУТРЕННЯЯ АРХИТЕКТУРА
134
+
135
+ #### Управление состоянием
136
+ - **tagsCopy** - внутреннее представление с tiClasses
137
+ - **originalTags** - хранение оригинальных данных
138
+ - **tagsEditStatus** - массив статусов редактирования
139
+ - **shallowRef оптимизация** - для больших массивов тегов
140
+
141
+ #### Refs и DOM
142
+ - **tagCenterRefs Map** - хранение ссылок на DOM элементы
143
+ - **newTagInputRef** - прямая ссылка на поле ввода
144
+ - **nextTick синхронизация** - корректная работа с DOM
145
+
146
+ #### Оптимизации
147
+ - **fast-deep-equal** - быстрое сравнение объектов
148
+ - **Клонирование без мутаций** - иммутабельные операции
149
+ - **Batch обновления** - группировка изменений
150
+
151
+ ### 9. СЛОТЫ (полная кастомизация)
152
+
153
+ #### Слоты тегов
154
+ - **tag-left** - левая часть тега (иконки, чекбоксы)
155
+ - **tag-center** - центральная часть (текст, редактирование)
156
+ - **tag-right** - правая часть (дополнительная информация)
157
+ - **tag-actions** - кнопки действий (удаление, редактирование)
158
+
159
+ #### Слоты автодополнения
160
+ - **autocomplete-item** - кастомный рендеринг элементов
161
+ - **autocomplete-header** - шапка списка автодополнения
162
+ - **autocomplete-footer** - подвал списка
163
+ - **between-elements** - контент между input и автодополнением
164
+
165
+ #### Передаваемые в слоты данные
166
+ - Полная информация о теге и индексе
167
+ - Состояние редактирования
168
+ - Функции для выполнения действий
169
+ - Состояние deletion-mark
170
+
171
+ ### 10. СТИЛИЗАЦИЯ И ВИЗУАЛИЗАЦИЯ
172
+
173
+ #### CSS классы состояний
174
+ - `.ti-disabled` - отключенный компонент
175
+ - `.ti-focus` - компонент в фокусе
176
+ - `.ti-editing` - тег в режиме редактирования
177
+ - `.ti-deletion-mark` - тег помечен для удаления
178
+ - `.ti-selected-item` - выбранный элемент автодополнения
179
+
180
+ #### Классы валидации
181
+ - `.ti-valid` - валидный тег
182
+ - `.ti-invalid` - невалидный тег
183
+ - `.ti-duplicate` - дубликат
184
+ - Кастомные классы через validation rules
185
+
186
+ #### Визуальные эффекты
187
+ - Плавная анимация при добавлении/удалении
188
+ - Hover эффекты на элементах
189
+ - Визуальная индикация состояний
190
+ - Адаптивная верстка с flex-wrap
191
+
192
+ ### 11. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ
193
+
194
+ #### Кастомная проверка дубликатов
195
+ - **isDuplicate функция** - полностью кастомная логика
196
+ - **Сравнение по любым полям** - не только по тексту
197
+ - **Контекстная проверка** - с учетом других тегов
198
+
199
+ #### Inline стили и классы
200
+ - **style property** - inline стили для каждого тега
201
+ - **classes property** - дополнительные CSS классы
202
+ - **tiClasses** - внутренние классы компонента
203
+
204
+ #### Дополнительные данные в тегах
205
+ - **Любые кастомные поля** - сохранение дополнительной информации
206
+ - **Неизменность кастомных данных** - компонент не модифицирует их
207
+ - **Передача через события** - полная информация в event handlers
208
+
209
+ ## Использование
210
+
211
+ ### Базовый пример
212
+ ```vue
213
+ <FieldTags
214
+ v-model="inputValue"
215
+ :tags="tags"
216
+ @tags-changed="handleTagsChanged"
217
+ />
218
+ ```
219
+
220
+ ### Продвинутый пример со всеми возможностями
221
+ ```vue
222
+ <FieldTags
223
+ v-model="inputValue"
224
+ :tags="tags"
225
+ :autocomplete-items="suggestions"
226
+ :autocomplete-min-length="0"
227
+ :autocomplete-filter-duplicates="true"
228
+ :add-on-key="[13, ':', ';', ',']"
229
+ :save-on-key="[13, 'Tab']"
230
+ :separators="[';', ',', '|']"
231
+ :max-tags="20"
232
+ :maxlength="50"
233
+ :allow-edit-tags="true"
234
+ :add-from-paste="true"
235
+ :add-on-blur="true"
236
+ :delete-on-backspace="true"
237
+ :avoid-adding-duplicates="true"
238
+ :validation="validationRules"
239
+ :is-duplicate="customDuplicateCheck"
240
+ :placeholder="'Добавьте теги'"
241
+ @tags-changed="handleTagsChanged"
242
+ @before-adding-tag="validateBeforeAdd"
243
+ @before-deleting-tag="confirmDelete"
244
+ @before-editing-tag="checkEditPermission"
245
+ @before-saving-tag="validateBeforeSave"
246
+ @adding-duplicate="handleDuplicate"
247
+ @max-tags-reached="showMaxTagsWarning"
248
+ @tag-clicked="handleTagClick"
249
+ >
250
+ <!-- Кастомный рендеринг тега -->
251
+ <template #tag-left="{ tag, index }">
252
+ <Icon :name="tag.icon" />
253
+ </template>
254
+
255
+ <template #tag-actions="{ performDelete, performOpenEdit, index }">
256
+ <button @click="performOpenEdit(index)">✏️</button>
257
+ <button @click="performDelete(index)">❌</button>
258
+ </template>
259
+
260
+ <!-- Кастомный элемент автодополнения -->
261
+ <template #autocomplete-item="{ item, performAdd }">
262
+ <div @click="performAdd(item)" class="custom-item">
263
+ <span>{{ item.text }}</span>
264
+ <span class="item-count">({{ item.count }})</span>
265
+ </div>
266
+ </template>
267
+ </FieldTags>
268
+ ```
269
+
270
+ ### Пример с before-хуками
271
+ ```vue
272
+ <script setup>
273
+ function validateBeforeAdd({ tag, addTag }) {
274
+ // Асинхронная проверка на сервере
275
+ checkTagOnServer(tag).then(isValid => {
276
+ if (isValid) {
277
+ addTag(); // Вызываем только если валидно
278
+ } else {
279
+ showError('Тег не прошел проверку');
280
+ }
281
+ });
282
+ }
283
+
284
+ function confirmDelete({ tag, deleteTag, index }) {
285
+ if (confirm(`Удалить тег "${tag.text}"?`)) {
286
+ deleteTag(); // Подтверждаем удаление
287
+ }
288
+ }
289
+ </script>
290
+ ```
291
+
292
+ ### Компонент-обертка BlockTags
293
+ Готовый компонент с предложениями тегов и умной фильтрацией:
294
+
295
+ ```vue
296
+ <BlockTags
297
+ :tags="existingTags"
298
+ :tags-suggested="[
299
+ { text: 'story' },
300
+ { text: 'news' },
301
+ { text: 'guide' },
302
+ { text: 'discussion' },
303
+ { text: 'photos' }
304
+ ]"
305
+ @tags-changed="updateTags"
306
+ />
307
+ ```
308
+
309
+ Компонент BlockTags автоматически:
310
+ - Фильтрует предложения при вводе
311
+ - Показывает оставшиеся неиспользованные теги
312
+ - Позволяет добавлять теги кликом на предложения
313
+ - Синхронизирует состояние с родителем
314
+
315
+ ## Props
316
+
317
+ | Prop | Тип | По умолчанию | Описание |
318
+ |------|-----|--------------|----------|
319
+ | `modelValue` | String | `''` | Связанное значение поля ввода |
320
+ | `tags` | Array | `[]` | Массив существующих тегов |
321
+ | `autocomplete-items` | Array | `[]` | Элементы для автодополнения |
322
+ | `allow-edit-tags` | Boolean | `false` | Разрешить редактирование тегов |
323
+ | `add-on-key` | Array | `[13]` | Клавиши для создания тега |
324
+ | `save-on-key` | Array | `[13]` | Клавиши для сохранения при редактировании |
325
+ | `separators` | Array | `[';']` | Символы-разделители |
326
+ | `max-tags` | Number | - | Максимальное количество тегов |
327
+ | `maxlength` | Number | - | Максимальная длина тега |
328
+ | `placeholder` | String | `'Add Tag'` | Текст-заполнитель |
329
+ | `validation` | Array | `[]` | Правила валидации |
330
+ | `avoid-adding-duplicates` | Boolean | `true` | Запретить дубликаты |
331
+ | `add-on-blur` | Boolean | `true` | Создать тег при потере фокуса |
332
+ | `add-from-paste` | Boolean | `true` | Создавать теги из вставленного текста |
333
+ | `delete-on-backspace` | Boolean | `true` | Удаление через Backspace |
334
+ | `disabled` | Boolean | `false` | Отключить компонент |
335
+ | `autocomplete-min-length` | Number | `1` | Минимум символов для автодополнения |
336
+ | `autocomplete-filter-duplicates` | Boolean | `true` | Фильтровать дубликаты в автодополнении |
337
+ | `add-only-from-autocomplete` | Boolean | `false` | Добавлять только из списка автодополнения |
338
+ | `is-duplicate` | Function | - | Кастомная функция проверки дубликатов |
339
+
340
+ ## События
341
+
342
+ | Событие | Payload | Описание |
343
+ |---------|---------|----------|
344
+ | `tags-changed` | Array | Изменение массива тегов |
345
+ | `before-adding-tag` | {tag, addTag} | Перед добавлением тега |
346
+ | `before-deleting-tag` | {index, tag, deleteTag} | Перед удалением тега |
347
+ | `before-editing-tag` | {index, tag, editTag} | Перед редактированием |
348
+ | `before-saving-tag` | {index, tag, saveTag} | Перед сохранением изменений |
349
+ | `adding-duplicate` | tag | Попытка добавить дубликат |
350
+ | `saving-duplicate` | tag | Попытка сохранить дубликат |
351
+ | `max-tags-reached` | tag | Достигнут лимит тегов |
352
+ | `tag-clicked` | {tag, index} | Клик по тегу |
353
+
354
+ ## Формат тега
355
+
356
+ ```javascript
357
+ {
358
+ text: 'Tag text', // Текст тега (обязательно)
359
+ classes: 'custom-class', // CSS классы (опционально)
360
+ style: 'color: red', // Inline стили (опционально)
361
+ // Любые дополнительные свойства сохраняются
362
+ }
363
+ ```
364
+
365
+ ## Правила валидации (продвинутые примеры)
366
+
367
+ ```javascript
368
+ const validationRules = [
369
+ // RegExp валидация
370
+ {
371
+ classes: 'no-numbers',
372
+ rule: /^[^0-9]*$/,
373
+ },
374
+
375
+ // Функциональная валидация
376
+ {
377
+ classes: 'min-length',
378
+ rule: (tag) => tag.text.length >= 3,
379
+ disableAdd: true // Блокирует добавление
380
+ },
381
+
382
+ // Строковая валидация (преобразуется в RegExp)
383
+ {
384
+ classes: 'email-format',
385
+ rule: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
386
+ },
387
+
388
+ // Сложная валидация с контекстом
389
+ {
390
+ classes: 'no-special-chars',
391
+ rule: (tag) => {
392
+ const forbidden = ['@', '#', '$', '%'];
393
+ return !forbidden.some(char => tag.text.includes(char));
394
+ }
395
+ }
396
+ ];
397
+
398
+ // Кастомная функция проверки дубликатов
399
+ function customDuplicateCheck(tags, tag) {
400
+ // Проверка не только по тексту, но и по другим полям
401
+ return tags.some(t =>
402
+ t.text.toLowerCase() === tag.text.toLowerCase() ||
403
+ t.id === tag.id
404
+ );
405
+ }
406
+ ```
407
+
408
+ ## Стилизация и CSS
409
+
410
+ ### Основные классы компонента
411
+ ```scss
412
+ // Контейнер
413
+ .vue-tags-input // Основной контейнер
414
+ .ti-disabled // Отключенное состояние
415
+ .ti-focus // Фокус на компоненте
416
+
417
+ // Теги
418
+ .ti-tag // Основной класс тега
419
+ .ti-valid // Валидный тег
420
+ .ti-invalid // Невалидный тег
421
+ .ti-duplicate // Тег-дубликат
422
+ .ti-editing // Тег в режиме редактирования
423
+ .ti-deletion-mark // Тег помечен для удаления
424
+
425
+ // Структура тега
426
+ .ti-content // Контейнер содержимого тега
427
+ .ti-tag-center // Центральная часть тега
428
+ .ti-tag-left // Левая часть (слот)
429
+ .ti-tag-right // Правая часть (слот)
430
+ .ti-actions // Контейнер кнопок действий
431
+
432
+ // Input
433
+ .ti-input // Контейнер input
434
+ .ti-tags // Список тегов
435
+ .ti-new-tag-input // Поле ввода нового тега
436
+ .ti-new-tag-input-wrapper // Обертка поля ввода
437
+ .ti-tag-input // Input для редактирования тега
438
+
439
+ // Автодополнение
440
+ .ti-autocomplete // Контейнер автодополнения
441
+ .ti-item // Элемент списка автодополнения
442
+ .ti-selected-item // Выбранный элемент
443
+
444
+ // Иконки
445
+ .ti-icon-close // Иконка закрытия (✕)
446
+ .ti-icon-undo // Иконка отмены (↺)
447
+ .ti-icon-check // Иконка подтверждения
448
+
449
+ // Вспомогательные
450
+ .ti-hidden // Скрытый элемент для расчета размеров
451
+ ```
452
+
453
+ ### Переменные SCSS
454
+ ```scss
455
+ $error: #e54d42; // Цвет ошибки
456
+ $success: #68cd86; // Цвет успеха
457
+ $warn: #ffb648; // Цвет предупреждения
458
+ ```
459
+
460
+ ### Кастомизация через CSS переменные
461
+ ```css
462
+ .vue-tags-input {
463
+ --main: 255, 215, 0; /* Основной цвет */
464
+ --black: 0, 0, 0; /* Цвет текста */
465
+ }
466
+ ```
467
+
468
+ ### Пример полной кастомизации
469
+ ```scss
470
+ .my-custom-tags {
471
+ .ti-tag {
472
+ background: linear-gradient(45deg, #667eea, #764ba2);
473
+ color: white;
474
+ border-radius: 20px;
475
+ padding: 5px 12px;
476
+ font-weight: 600;
477
+ transition: all 0.3s ease;
478
+
479
+ &:hover {
480
+ transform: scale(1.05);
481
+ box-shadow: 0 4px 8px rgba(0,0,0,0.2);
482
+ }
483
+
484
+ &.ti-editing {
485
+ background: #f0f0f0;
486
+ color: #333;
487
+ }
488
+
489
+ &.ti-deletion-mark {
490
+ animation: shake 0.5s;
491
+ background: #ff4757;
492
+ }
493
+ }
494
+
495
+ .ti-autocomplete {
496
+ background: white;
497
+ border: 1px solid #e0e0e0;
498
+ border-radius: 8px;
499
+ box-shadow: 0 4px 12px rgba(0,0,0,0.1);
500
+
501
+ .ti-selected-item {
502
+ background: #667eea;
503
+ color: white;
504
+ }
505
+ }
506
+ }
507
+
508
+ @keyframes shake {
509
+ 0%, 100% { transform: translateX(0); }
510
+ 25% { transform: translateX(-5px); }
511
+ 75% { transform: translateX(5px); }
512
+ }
513
+ ```
@@ -29,6 +29,9 @@ const findIndex = (arr, callback) => {
29
29
 
30
30
  const createClasses = (tag, tags, validation = [], customDuplicateFn) => {
31
31
  if (tag.text === undefined) tag = { text: tag };
32
+
33
+ // Ensure tags is an array
34
+ if (!Array.isArray(tags)) tags = [];
32
35
 
33
36
  // create css classes from the user validation array
34
37
  const classes = validateUserRules(tag, validation);
@@ -40,7 +43,7 @@ const createClasses = (tag, tags, validation = [], customDuplicateFn) => {
40
43
  const inputTag = index !== -1 ? tagsDiff.splice(index, 1)[0] : clone(tag);
41
44
 
42
45
  // check whether the tag is a duplicate or not
43
- const duplicate = customDuplicateFn ? customDuplicateFn(tagsDiff, inputTag) : tagsDiff.map(t => t.text).indexOf(inputTag.text) !== -1;
46
+ const duplicate = customDuplicateFn ? customDuplicateFn(tagsDiff, inputTag) : (Array.isArray(tagsDiff) ? tagsDiff.map(t => t.text).indexOf(inputTag.text) !== -1 : false);
44
47
 
45
48
  // if it's a duplicate, push the class duplicate to the array
46
49
  if (duplicate) classes.push('ti-duplicate');
@@ -64,6 +67,11 @@ const createTag = (tag, ...rest) => {
64
67
 
65
68
  // we better make a clone to not getting reference trouble
66
69
  const t = clone(tag);
70
+
71
+ // Ensure the first argument in rest (tags array) is actually an array
72
+ if (rest[0] && !Array.isArray(rest[0])) {
73
+ rest[0] = [];
74
+ }
67
75
 
68
76
  // create the validation classes
69
77
  t.tiClasses = createClasses(tag, ...rest);
@@ -79,6 +87,11 @@ const createTag = (tag, ...rest) => {
79
87
  * @example &#47;* Example to call the function *&#47;
80
88
  const validatedTags = createTags(['tag1Text', 'tag2Text'], [{ type: 'length', rule: /[0-9]/ }])
81
89
  */
82
- const createTags = (tags, ...rest) => tags.map(t => createTag(t, tags, ...rest));
90
+ const createTags = (tags, ...rest) => {
91
+ if (!Array.isArray(tags)) {
92
+ return [];
93
+ }
94
+ return tags.map(t => createTag(t, tags, ...rest));
95
+ };
83
96
 
84
97
  export { clone, createClasses, createTag, createTags };
@@ -341,7 +341,8 @@ class Validator {
341
341
  for (let i = 0; i < value.length; i++) {
342
342
  const result = validator.validate(value[i]);
343
343
  if (!result.isValid) {
344
- this.errors.push(`Item at index ${i}: ${result.errors.join(', ')}`);
344
+ const fieldName = message ? `${message}[${i}]` : `Item ${i}`;
345
+ this.errors.push(`${fieldName}: ${result.errors.join(', ')}`);
345
346
  return false;
346
347
  }
347
348
  }
@@ -367,7 +368,7 @@ class Validator {
367
368
  }
368
369
  const result = validator.validate(value[key]);
369
370
  if (!result.isValid) {
370
- this.errors.push(`Property "${key}": ${result.errors.join(', ')}`);
371
+ this.errors.push(`"${key}" ${result.errors.join(', ')}`);
371
372
  return false;
372
373
  }
373
374
  }
@@ -394,7 +395,7 @@ class Validator {
394
395
  }
395
396
  const result = validator.validate(value[key]);
396
397
  if (!result.isValid) {
397
- this.errors.push(`Property "${key}": ${result.errors.join(', ')}`);
398
+ this.errors.push(`"${key}" ${result.errors.join(', ')}`);
398
399
  return false;
399
400
  }
400
401
  }
@@ -425,46 +426,46 @@ class Validator {
425
426
  const context = this.options.context ? `${this.options.context} ` : '';
426
427
  switch (rule.type) {
427
428
  case 'string':
428
- return `${context}должно быть строкой`;
429
+ return `${context}must be a string`;
429
430
  case 'number':
430
- return `${context}должно быть числом`;
431
+ return `${context}must be a number`;
431
432
  case 'integer':
432
- return `${context}должно быть целым числом`;
433
+ return `${context}must be an integer`;
433
434
  case 'boolean':
434
- return `${context}должно быть логическим значением`;
435
+ return `${context}must be a boolean`;
435
436
  case 'array':
436
- return `${context}должно быть массивом`;
437
+ return `${context}must be an array`;
437
438
  case 'date':
438
- return `${context}должно быть корректной датой`;
439
+ return `${context}must be a valid date`;
439
440
  case 'required':
440
- return `${context}обязательное поле`;
441
+ return `${context}is required`;
441
442
  case 'min':
442
- if (rule.param instanceof Date) return `${context}должно быть не ранее ${rule.param.toLocaleDateString()}`;
443
- return `${context}должно быть не менее ${rule.param}`;
443
+ if (rule.param instanceof Date) return `${context}must be no earlier than ${rule.param.toLocaleDateString()}`;
444
+ return `${context}must be at least ${rule.param}`;
444
445
  case 'max':
445
- if (rule.param instanceof Date) return `${context}должно быть не позднее ${rule.param.toLocaleDateString()}`;
446
- return `${context}должно быть не более ${rule.param}`;
446
+ if (rule.param instanceof Date) return `${context}must be no later than ${rule.param.toLocaleDateString()}`;
447
+ return `${context}must be at most ${rule.param}`;
447
448
  case 'length':
448
449
  if (rule.param.min !== undefined && rule.param.max !== undefined) {
449
- return `${context}длина должна быть от ${rule.param.min} до ${rule.param.max} символов`;
450
+ return `${context}length must be between ${rule.param.min} and ${rule.param.max} characters`;
450
451
  } else if (rule.param.min !== undefined) {
451
- return `${context}длина должна быть не менее ${rule.param.min} символов`;
452
+ return `${context}length must be at least ${rule.param.min} characters`;
452
453
  } else if (rule.param.max !== undefined) {
453
- return `${context}длина должна быть не более ${rule.param.max} символов`;
454
+ return `${context}length must be at most ${rule.param.max} characters`;
454
455
  }
455
- return `${context}не соответствует требованиям длины`;
456
+ return `${context}does not meet length requirements`;
456
457
  case 'pattern':
457
- return `${context}не соответствует требуемому формату`;
458
+ return `${context}does not match required format`;
458
459
  case 'email':
459
- return `${context}должно быть корректным email-адресом`;
460
+ return `${context}must be a valid email address`;
460
461
  case 'oneOf':
461
- return `${context}должно быть одним из: ${rule.param.join(', ')}`;
462
+ return `${context}must be one of: ${rule.param.join(', ')}`;
462
463
  case 'oneOfTypes':
463
- return `${context}должно быть одного из типов: ${rule.param.join(', ')}`;
464
+ return `${context}must be one of types: ${rule.param.join(', ')}`;
464
465
  case 'custom':
465
466
  return rule.param;
466
467
  case 'items':
467
- return `${context}содержит невалидные элементы`;
468
+ return `${context}contains invalid items`;
468
469
  case 'object':
469
470
  return `${context}не соответствует типу объекта`;
470
471
  case 'shape':
@@ -162,7 +162,7 @@ function setError(error) {
162
162
  if (error?.response?.data) errorData = error.response.data;
163
163
 
164
164
  // Обработка ошибок верификации
165
- if (errorData?.error === 'VALIDATION_ERROR' && errorData?.errors) {
165
+ if ((errorData?.error === 'VALIDATION_ERROR' || errorData?.errors) && errorData?.errors) {
166
166
  // Собираем все сообщения об ошибках в одну строку
167
167
  const errorMessages = [];
168
168
  for (const field in errorData.errors) {
@@ -173,7 +173,7 @@ function setError(error) {
173
173
  errorMessages.push(fieldErrors);
174
174
  }
175
175
  }
176
- state.error.message = errorMessages.join(', ') || 'Validation error';
176
+ state.error.message = errorMessages.join(', ') || errorData.message || 'Validation error';
177
177
  } else if (error && errorData.errorCode) {
178
178
  // state.error.message = i18n.global.t(`errors.${errorData.errorCode}`);
179
179
  state.error.message = errorData.errorCode;