@ozdao/martyrs 0.2.541 → 0.2.543
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +3 -6
- package/dist/_virtual/index2.cjs.map +1 -1
- package/dist/_virtual/index2.js +2 -5
- package/dist/_virtual/index2.js.map +1 -1
- package/dist/main-BNdv8Ji-.cjs +11 -0
- package/dist/{main-BpBtIUcJ.js → main-DUwlesGq.js} +3135 -3555
- package/dist/martyrs/src/components/Button/{Button.vue.cjs → Button.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +2 -2
- package/dist/martyrs/src/components/Button/{Button.vue.cjs.map → Button.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs +93 -0
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js +94 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs +0 -93
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +1 -94
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Carousel.vue.cjs +4 -2
- package/dist/martyrs/src/components/Feed/Carousel.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Carousel.vue.js +5 -3
- package/dist/martyrs/src/components/Feed/Carousel.vue.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +5 -3
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +5 -3
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.cjs +30 -21
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js +32 -23
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.cjs +235 -0
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.js +235 -0
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Marquee/Marquee.vue.cjs +17 -8
- package/dist/martyrs/src/components/Marquee/Marquee.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Marquee/Marquee.vue.js +17 -8
- package/dist/martyrs/src/components/Marquee/Marquee.vue.js.map +1 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.cjs +3 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.js +4 -2
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +1 -1
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue2.cjs +219 -0
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue2.js +219 -0
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue2.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +4 -4
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +2 -7
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +2 -7
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/FooterBlogpost.vue.cjs +2 -13
- package/dist/martyrs/src/modules/community/components/blocks/FooterBlogpost.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/FooterBlogpost.vue.js +2 -13
- package/dist/martyrs/src/modules/community/components/blocks/FooterBlogpost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -4
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -4
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +3 -3
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +22 -22
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +2 -2
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/{Filters.vue2.cjs → Filters.vue.cjs} +2 -2
- package/dist/martyrs/src/modules/globals/views/components/sections/{Filters.vue2.js.map → Filters.vue.cjs.map} +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/{Filters.vue2.js → Filters.vue.js} +2 -2
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue.js.map +1 -0
- package/dist/martyrs/src/modules/globals/views/plugins/alert.plugin.cjs +1 -0
- package/dist/martyrs/src/modules/globals/views/plugins/alert.plugin.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/plugins/alert.plugin.js +1 -0
- package/dist/martyrs/src/modules/globals/views/plugins/alert.plugin.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +11 -11
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +12 -12
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +16 -16
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +16 -16
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +3 -4
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +3 -4
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +20 -20
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +3 -4
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +3 -4
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +4 -5
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +4 -5
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +3 -4
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +3 -4
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +6 -6
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.cjs +11 -5
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js +12 -6
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +5 -2
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +5 -2
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +49 -41
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +54 -46
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +5 -5
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +5 -5
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +11 -11
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +1 -1
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.cjs +1 -1
- package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.js +1 -1
- package/dist/style.css +133 -133
- package/dist/{web-DsdyXC8n.js → web-C6njYH1C.js} +1 -1
- package/dist/{web-C9bVm6Nw.cjs → web-CVdyxtLD.cjs} +1 -1
- package/package.json +1 -1
- package/src/components/Feed/Carousel.vue +3 -0
- package/src/components/Feed/Feed.vue +3 -0
- package/src/components/FieldTags/BlockTags.vue +28 -16
- package/src/components/FieldTags/FieldTags.vue +327 -508
- package/src/components/Marquee/Marquee.vue +25 -14
- package/src/components/Tab/Tab.vue +2 -0
- package/src/components/UploadImage/UploadImage.vue +192 -18
- package/src/modules/community/components/blocks/CardBlogpost.vue +2 -7
- package/src/modules/community/components/blocks/FooterBlogpost.vue +2 -13
- package/src/modules/community/components/pages/CreateBlogPost.vue +0 -1
- package/src/modules/globals/TASK.MD +105 -1
- package/src/modules/globals/views/plugins/alert.plugin.js +1 -0
- package/src/modules/products/components/blocks/CardCategory.vue +6 -0
- package/src/modules/products/components/pages/Categories.vue +4 -1
- package/src/modules/products/components/pages/CategoryEdit.vue +53 -39
- package/src/modules/products/components/pages/Products.vue +1 -1
- package/dist/_virtual/index3.cjs +0 -5
- package/dist/_virtual/index3.cjs.map +0 -1
- package/dist/_virtual/index3.js +0 -5
- package/dist/_virtual/index3.js.map +0 -1
- package/dist/main-7IA3UHca.cjs +0 -11
- package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +0 -480
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +0 -480
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js.map +0 -1
- package/dist/martyrs/src/components/FieldTags/create-tags.cjs +0 -52
- package/dist/martyrs/src/components/FieldTags/create-tags.cjs.map +0 -1
- package/dist/martyrs/src/components/FieldTags/create-tags.js +0 -52
- package/dist/martyrs/src/components/FieldTags/create-tags.js.map +0 -1
- package/dist/martyrs/src/components/FieldTags/tag-input.vue2.cjs +0 -32
- package/dist/martyrs/src/components/FieldTags/tag-input.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/FieldTags/tag-input.vue2.js +0 -32
- package/dist/martyrs/src/components/FieldTags/tag-input.vue2.js.map +0 -1
- package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.cjs +0 -329
- package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.cjs.map +0 -1
- package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.js +0 -329
- package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.js.map +0 -1
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.cjs +0 -100
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +0 -100
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs.map +0 -1
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs +0 -39
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs.map +0 -1
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +0 -39
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js.map +0 -1
- package/src/components/FieldTags/FieldTagsNew.vue +0 -366
- package/src/components/FieldTags/README.md +0 -513
- package/src/components/FieldTags/create-tags.js +0 -97
- package/src/components/FieldTags/tag-input.vue +0 -55
- package/src/components/FieldTags/vue-tags-input.props.js +0 -342
- package/src/components/FieldTags/vue-tags-input.scss +0 -149
|
@@ -69,6 +69,7 @@ const loopInterval = ref(null)
|
|
|
69
69
|
const resizeObserver = ref(null)
|
|
70
70
|
const checkInterval = ref(null)
|
|
71
71
|
const resizeTimeout = ref(null)
|
|
72
|
+
const previousSize = ref({ width: 0, height: 0 })
|
|
72
73
|
|
|
73
74
|
const widthMin = ref('100%')
|
|
74
75
|
const widthContainer = ref(0)
|
|
@@ -152,11 +153,22 @@ const checkForClone = async () => {
|
|
|
152
153
|
resizeObserver.value.disconnect()
|
|
153
154
|
}
|
|
154
155
|
|
|
155
|
-
resizeObserver.value = new ResizeObserver(() => {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
156
|
+
resizeObserver.value = new ResizeObserver((entries) => {
|
|
157
|
+
const entry = entries[0]
|
|
158
|
+
const newWidth = entry.contentRect.width
|
|
159
|
+
const newHeight = entry.contentRect.height
|
|
160
|
+
|
|
161
|
+
// Only recalculate if size changed significantly (more than 1px)
|
|
162
|
+
const widthChanged = Math.abs(newWidth - previousSize.value.width) > 1
|
|
163
|
+
const heightChanged = Math.abs(newHeight - previousSize.value.height) > 1
|
|
164
|
+
|
|
165
|
+
if (widthChanged || heightChanged) {
|
|
166
|
+
previousSize.value = { width: newWidth, height: newHeight }
|
|
167
|
+
clearTimeout(resizeTimeout.value)
|
|
168
|
+
resizeTimeout.value = setTimeout(() => {
|
|
169
|
+
calculateClones()
|
|
170
|
+
}, 300)
|
|
171
|
+
}
|
|
160
172
|
})
|
|
161
173
|
|
|
162
174
|
resizeObserver.value.observe(marqueeOverlayContainer.value)
|
|
@@ -188,7 +200,7 @@ const getCurrentStyle = computed(() => {
|
|
|
188
200
|
'--pauseOnHover': `${props.pauseOnHover ? 'paused' : 'running'}`,
|
|
189
201
|
'--pauseOnClick': `${props.pauseOnClick ? 'paused' : 'running'}`,
|
|
190
202
|
'--pauseAnimation': `${(props.vertical && verticalAnimationPause.value) || props.pause ? 'paused' : 'running'}`,
|
|
191
|
-
'--gradient-color':
|
|
203
|
+
'--gradient-color': props.gradientColor,
|
|
192
204
|
'--gradient-length': `${gradientLength.value}`,
|
|
193
205
|
'--min-width': `${widthMin.value}`,
|
|
194
206
|
'--min-height': `${heightMin.value}`,
|
|
@@ -258,9 +270,9 @@ watch(
|
|
|
258
270
|
(newVal, oldVal) => {
|
|
259
271
|
if (newVal !== oldVal) {
|
|
260
272
|
if (newVal) {
|
|
261
|
-
emits('onResume')
|
|
262
|
-
} else {
|
|
263
273
|
emits('onPause')
|
|
274
|
+
} else {
|
|
275
|
+
emits('onResume')
|
|
264
276
|
}
|
|
265
277
|
}
|
|
266
278
|
}
|
|
@@ -271,20 +283,19 @@ watch(
|
|
|
271
283
|
.vue3-marquee {
|
|
272
284
|
display: flex !important;
|
|
273
285
|
position: relative;
|
|
286
|
+
will-change: transform;
|
|
287
|
+
transform: translateZ(0);
|
|
288
|
+
backface-visibility: hidden;
|
|
274
289
|
|
|
275
290
|
.marquee {
|
|
276
291
|
flex: 0 0 auto;
|
|
277
292
|
min-width: var(--min-width);
|
|
278
293
|
min-height: var(--min-height);
|
|
279
294
|
z-index: 1;
|
|
280
|
-
will-change: transform;
|
|
281
|
-
transform: translateZ(0);
|
|
282
|
-
backface-visibility: hidden;
|
|
283
295
|
|
|
284
296
|
animation: var(--orientation) var(--duration) linear var(--delay) var(--loops);
|
|
285
297
|
animation-play-state: var(--pauseAnimation);
|
|
286
298
|
animation-direction: var(--direction);
|
|
287
|
-
contain: layout style paint;
|
|
288
299
|
}
|
|
289
300
|
|
|
290
301
|
.overlay {
|
|
@@ -325,7 +336,7 @@ watch(
|
|
|
325
336
|
}
|
|
326
337
|
|
|
327
338
|
.overlay::before,.overlay::after {
|
|
328
|
-
background: linear-gradient(to right, var(--gradient-color));
|
|
339
|
+
background: linear-gradient(to right, var(--gradient-color), transparent);
|
|
329
340
|
height: 100%;
|
|
330
341
|
width: var(--gradient-length);
|
|
331
342
|
}
|
|
@@ -351,7 +362,7 @@ watch(
|
|
|
351
362
|
}
|
|
352
363
|
|
|
353
364
|
.overlay::before, .overlay::after {
|
|
354
|
-
background: linear-gradient(to bottom, var(--gradient-color));
|
|
365
|
+
background: linear-gradient(to bottom, var(--gradient-color), transparent);
|
|
355
366
|
height: var(--gradient-length);
|
|
356
367
|
width: 100%;
|
|
357
368
|
}
|
|
@@ -18,7 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
<script setup>
|
|
20
20
|
import { ref, computed, watch } from 'vue'
|
|
21
|
+
import { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';
|
|
21
22
|
|
|
23
|
+
const { replaceClasses } = useGlobalMixins();
|
|
22
24
|
const emit = defineEmits(['update:selected', 'tab-click']);
|
|
23
25
|
|
|
24
26
|
const props = defineProps({
|
|
@@ -1,40 +1,116 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
<div class="upload-image-wrapper flex-v-center flex-nowrap flex gap-small" :class="{'with-text': text}">
|
|
3
|
+
<div
|
|
4
|
+
@click="onComponentClick"
|
|
5
|
+
@drop="onDrop"
|
|
6
|
+
@dragover.prevent
|
|
7
|
+
class="pos-relative radius-small br-solid br-1px br-black-transp-10 h-100 aspect-1x1 flex-v-center flex-h-center flex cursor-pointer"
|
|
8
|
+
>
|
|
7
9
|
<img loading="lazy"
|
|
8
|
-
v-if="imageUrl || photo"
|
|
9
|
-
:src="(FILE_SERVER_URL || '') + (imageUrl || photo)"
|
|
10
|
+
v-if="imageUrl || photo || previewUrl"
|
|
11
|
+
:src="previewUrl || (FILE_SERVER_URL || '') + (imageUrl || photo)"
|
|
10
12
|
alt="Uploaded image"
|
|
11
|
-
class="w-100 h-100 object-fit-cover"
|
|
12
|
-
|
|
13
|
+
class="pos-absolute radius-small o-hidden z-index-1 w-100 h-100 object-fit-cover"
|
|
14
|
+
/>
|
|
13
15
|
|
|
14
|
-
<div v-else class="flex-v-center flex-h-center flex w-100 h-100 bg-second" >
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
<div v-else class="flex-v-center pos-relative z-index-2 flex-h-center flex w-100 h-100 radius-small bg-second" >
|
|
17
|
+
<IconUpload class="i-medium upload-icon" fill="rgb(var(--white))" />
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<!-- Hover controls -->
|
|
21
|
+
<div class="z-index-2 pos-relative hover-controls pos-absolute w-100 h-100 flex-v-center flex-h-center flex">
|
|
22
|
+
<div v-if="!imageUrl && !photo && !previewUrl" class="hover-upload-icon">
|
|
23
|
+
<IconUpload class="i-medium" fill="rgb(var(--white))" />
|
|
24
|
+
</div>
|
|
25
|
+
<div v-else class="hover-buttons flex gap-small">
|
|
26
|
+
<button @click.stop="onComponentClick" class="hover-button radius-small pd-thin bg-main t-white br-none cursor-pointer">
|
|
27
|
+
<IconUpload class="i-semi" fill="rgb(var(--white))" />
|
|
28
|
+
</button>
|
|
29
|
+
<button @click.stop="deleteImage" class="hover-button radius-small pd-thin bg-danger t-white br-none cursor-pointer">
|
|
30
|
+
<IconDelete class="i-semi" fill="rgb(var(--white))" />
|
|
31
|
+
</button>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<!-- Loading overlay -->
|
|
36
|
+
<div v-if="loading" class="z-index-2 loading-overlay pos-absolute w-100 h-100 flex-v-center flex-h-center flex">
|
|
37
|
+
<Loader :centered="false" />
|
|
18
38
|
</div>
|
|
19
39
|
|
|
20
40
|
<input type="file" name="file" ref="fileInput" @change="onFileChange" style="display: none"/>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<!-- Text block -->
|
|
44
|
+
<div v-if="text" class="upload-text-block flex flex-column">
|
|
45
|
+
<span class="mn-b-small t-medium">{{ textConfig.title }}</span>
|
|
46
|
+
<span class="mn-b-medium t-transp">{{ textConfig.subtitle }}</span>
|
|
47
|
+
<div v-if="!imageUrl && !photo && !previewUrl">
|
|
48
|
+
<button @click="onComponentClick" class="button button-small w-max bg-main t-black cursor-pointer">
|
|
49
|
+
{{ textConfig.buttonText }}
|
|
50
|
+
</button>
|
|
51
|
+
</div>
|
|
52
|
+
<div v-else class="flex gap-thin">
|
|
53
|
+
<button @click="onComponentClick" class="button button-small w-max bg-second t-white cursor-pointer">
|
|
54
|
+
Upload
|
|
55
|
+
</button>
|
|
56
|
+
<button @click="deleteImage" class="button button-small w-max bg-red t-white cursor-pointer">
|
|
57
|
+
Delete
|
|
58
|
+
</button>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
21
61
|
</div>
|
|
22
62
|
</template>
|
|
23
63
|
|
|
24
64
|
<script setup>
|
|
25
|
-
import { ref, watch } from 'vue';
|
|
65
|
+
import { ref, watch, computed } from 'vue';
|
|
26
66
|
import axios from 'axios';
|
|
67
|
+
import Loader from '@martyrs/src/components/Loader/Loader.vue';
|
|
68
|
+
import IconUpload from '@martyrs/src/modules/icons/navigation/IconUpload.vue';
|
|
69
|
+
import IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';
|
|
27
70
|
|
|
28
71
|
const imageUrl = ref(null);
|
|
29
72
|
const fileInput = ref(null);
|
|
73
|
+
const previewUrl = ref(null);
|
|
74
|
+
const loading = ref(false);
|
|
30
75
|
|
|
31
|
-
const props = defineProps(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
76
|
+
const props = defineProps({
|
|
77
|
+
uploadPath: {
|
|
78
|
+
type: String,
|
|
79
|
+
required: true
|
|
80
|
+
},
|
|
81
|
+
photo: {
|
|
82
|
+
type: String,
|
|
83
|
+
default: null
|
|
84
|
+
},
|
|
85
|
+
text: {
|
|
86
|
+
type: [Object, Boolean],
|
|
87
|
+
default: null
|
|
88
|
+
}
|
|
89
|
+
});
|
|
35
90
|
|
|
36
91
|
const emit = defineEmits(['update:photo', 'error']);
|
|
37
92
|
|
|
93
|
+
// Text configuration with defaults
|
|
94
|
+
const textConfig = computed(() => {
|
|
95
|
+
const defaults = {
|
|
96
|
+
title: 'Upload Image',
|
|
97
|
+
subtitle: 'Drag & drop your image here or click button. Supported: JPG, PNG, GIF. Max size: 2MB',
|
|
98
|
+
buttonText: 'Choose Image'
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
if (props.text === true) {
|
|
102
|
+
return defaults;
|
|
103
|
+
} else if (typeof props.text === 'object' && props.text !== null) {
|
|
104
|
+
return {
|
|
105
|
+
title: props.text.title || defaults.title,
|
|
106
|
+
subtitle: props.text.subtitle || defaults.subtitle,
|
|
107
|
+
buttonText: props.text.buttonText || defaults.buttonText
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return defaults;
|
|
112
|
+
});
|
|
113
|
+
|
|
38
114
|
watch(props, ({photo}) => {
|
|
39
115
|
if(photo) imageUrl.value = photo;
|
|
40
116
|
});
|
|
@@ -50,10 +126,19 @@ async function onFileChange(e) {
|
|
|
50
126
|
return;
|
|
51
127
|
}
|
|
52
128
|
|
|
129
|
+
// Create preview from file
|
|
130
|
+
const reader = new FileReader();
|
|
131
|
+
reader.onload = (e) => {
|
|
132
|
+
previewUrl.value = e.target.result;
|
|
133
|
+
};
|
|
134
|
+
reader.readAsDataURL(file);
|
|
135
|
+
|
|
53
136
|
let formData = new FormData();
|
|
54
137
|
formData.append("file", file);
|
|
55
138
|
|
|
56
139
|
console.log("Sending file:", file.name); // Логируем имя файла перед отправкой
|
|
140
|
+
|
|
141
|
+
loading.value = true;
|
|
57
142
|
|
|
58
143
|
try {
|
|
59
144
|
const $axios = axios.create({ baseURL: process.env.API_URL, withCredentials: true });
|
|
@@ -61,10 +146,14 @@ async function onFileChange(e) {
|
|
|
61
146
|
let response = await $axios.post(`/api/upload/multiple?folderName=${encodeURIComponent(props.uploadPath)}`, formData);
|
|
62
147
|
console.log("Upload response:", response); // Логируем ответ сервера
|
|
63
148
|
imageUrl.value = response.data[0].filepath;
|
|
149
|
+
previewUrl.value = null; // Clear preview after successful upload
|
|
64
150
|
emit('update:photo', imageUrl.value);
|
|
65
151
|
} catch (error) {
|
|
66
152
|
emit('error', error);
|
|
67
153
|
console.error("Upload error:", error); // Логируем ошибку
|
|
154
|
+
previewUrl.value = null; // Clear preview on error
|
|
155
|
+
} finally {
|
|
156
|
+
loading.value = false;
|
|
68
157
|
}
|
|
69
158
|
}
|
|
70
159
|
|
|
@@ -77,4 +166,89 @@ function onDrop(e) {
|
|
|
77
166
|
}
|
|
78
167
|
});
|
|
79
168
|
}
|
|
169
|
+
|
|
170
|
+
function deleteImage() {
|
|
171
|
+
imageUrl.value = null;
|
|
172
|
+
previewUrl.value = null;
|
|
173
|
+
emit('update:photo', null);
|
|
174
|
+
// Reset file input
|
|
175
|
+
if (fileInput.value) {
|
|
176
|
+
fileInput.value.value = '';
|
|
177
|
+
}
|
|
178
|
+
}
|
|
80
179
|
</script>
|
|
180
|
+
|
|
181
|
+
<style scoped>
|
|
182
|
+
.image-upload-area {
|
|
183
|
+
overflow: hidden;
|
|
184
|
+
transition: all 0.3s ease;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.image-upload-area:hover {
|
|
188
|
+
opacity: 0.95;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* Hover controls */
|
|
192
|
+
.hover-controls {
|
|
193
|
+
top: 0;
|
|
194
|
+
left: 0;
|
|
195
|
+
background: rgba(0, 0, 0, 0.7);
|
|
196
|
+
opacity: 0;
|
|
197
|
+
transition: opacity 0.3s ease;
|
|
198
|
+
pointer-events: none;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.image-upload-area:hover .hover-controls {
|
|
202
|
+
opacity: 1;
|
|
203
|
+
pointer-events: all;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.hover-upload-icon {
|
|
207
|
+
animation: pulse 1.5s infinite;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.hover-button {
|
|
211
|
+
transition: transform 0.2s ease, background-color 0.2s ease;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.hover-button:hover {
|
|
215
|
+
transform: scale(1.1);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.hover-button:active {
|
|
219
|
+
transform: scale(0.95);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* Loading overlay */
|
|
223
|
+
.loading-overlay {
|
|
224
|
+
top: 0;
|
|
225
|
+
left: 0;
|
|
226
|
+
background: rgba(255, 255, 255, 0.9);
|
|
227
|
+
z-index: 10;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* Animations */
|
|
231
|
+
@keyframes pulse {
|
|
232
|
+
0% {
|
|
233
|
+
transform: scale(1);
|
|
234
|
+
opacity: 1;
|
|
235
|
+
}
|
|
236
|
+
50% {
|
|
237
|
+
transform: scale(1.05);
|
|
238
|
+
opacity: 0.8;
|
|
239
|
+
}
|
|
240
|
+
100% {
|
|
241
|
+
transform: scale(1);
|
|
242
|
+
opacity: 1;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/* Upload icon in empty state */
|
|
247
|
+
.upload-icon {
|
|
248
|
+
transition: transform 0.3s ease;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.image-upload-area:hover .upload-icon {
|
|
252
|
+
transform: scale(1.1);
|
|
253
|
+
}
|
|
254
|
+
</style>
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
:creator="blogpost.creator"
|
|
15
15
|
:date="blogpost.createdAt"
|
|
16
16
|
:actions="user && user === blogpost.creator.target._id ? [
|
|
17
|
-
{ to: {
|
|
17
|
+
{ to: `/community/posts/${blogpost.url}/edit`, label: 'Edit' }
|
|
18
18
|
]: null"
|
|
19
19
|
/>
|
|
20
20
|
|
|
@@ -30,12 +30,7 @@
|
|
|
30
30
|
:text="blogpost.name || ''"
|
|
31
31
|
:maxLen="80"
|
|
32
32
|
class="h3 d-block"
|
|
33
|
-
@click="router.push({
|
|
34
|
-
name: 'BlogPost',
|
|
35
|
-
params: {
|
|
36
|
-
url: blogpost.url
|
|
37
|
-
}
|
|
38
|
-
})"
|
|
33
|
+
@click="router.push(`/community/posts/${blogpost.url}`)"
|
|
39
34
|
/>
|
|
40
35
|
|
|
41
36
|
<div
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<footer class="t-semi br-top-dark flex-nowrap flex-nojustify flex">
|
|
3
|
-
<router-link :to="{
|
|
4
|
-
name: 'BlogPost',
|
|
5
|
-
params: {
|
|
6
|
-
url: blogpost.url
|
|
7
|
-
}
|
|
8
|
-
}"
|
|
3
|
+
<router-link :to="`/community/posts/${blogpost.url}`"
|
|
9
4
|
class="font-second cursor-pointer hover-bg-white pd-l-thin pd-r-thin radius-big">
|
|
10
5
|
👁️ {{blogpost.views}}
|
|
11
6
|
</router-link>
|
|
@@ -18,13 +13,7 @@
|
|
|
18
13
|
👍 {{reactionsCount }}
|
|
19
14
|
</div>
|
|
20
15
|
</div>
|
|
21
|
-
<router-link :to="{
|
|
22
|
-
name: 'BlogPost',
|
|
23
|
-
hash: '#comments',
|
|
24
|
-
params: {
|
|
25
|
-
url: blogpost.url
|
|
26
|
-
}
|
|
27
|
-
}"
|
|
16
|
+
<router-link :to="`/community/posts/${blogpost.url}#comments`"
|
|
28
17
|
class="font-second cursor-pointer hover-bg-white pd-l-thin pd-r-thin radius-big">
|
|
29
18
|
💬 {{ blogpost.numberOfComments }}
|
|
30
19
|
</router-link>
|
|
@@ -130,7 +130,6 @@ import Textarea from '@martyrs/src/modules/constructor/components/elements/Texta
|
|
|
130
130
|
import Constructor from '@martyrs/src/modules/constructor/components/sections/Constructor.vue';
|
|
131
131
|
|
|
132
132
|
import Popup from '@martyrs/src/components/Popup/Popup.vue'
|
|
133
|
-
import FieldTags from '@martyrs/src/components/FieldTags/FieldTags.vue'
|
|
134
133
|
import BlockTags from '@martyrs/src/components/FieldTags/BlockTags.vue'
|
|
135
134
|
import Checkbox from '@martyrs/src/components/Checkbox/Checkbox.vue'
|
|
136
135
|
import Field from '@martyrs/src/components/Field/Field.vue'
|
|
@@ -1 +1,105 @@
|
|
|
1
|
-
|
|
1
|
+
# Проблема с отображением лоадера при загрузке модулей
|
|
2
|
+
|
|
3
|
+
## Описание проблемы
|
|
4
|
+
При переходе на роут, который требует загрузки нового модуля:
|
|
5
|
+
1. После клика на ссылку UI полностью блокируется
|
|
6
|
+
2. Начинается загрузка модуля (2-3 секунды)
|
|
7
|
+
3. Лоадер показывается только ПОСЛЕ загрузки модуля на мгновение
|
|
8
|
+
4. Затем происходит переход на новый роут
|
|
9
|
+
|
|
10
|
+
**Ожидаемое поведение:** Лоадер должен показываться СРАЗУ после клика, до начала загрузки модулей.
|
|
11
|
+
|
|
12
|
+
## Технические детали
|
|
13
|
+
|
|
14
|
+
### Архитектура загрузки модулей
|
|
15
|
+
- **Файл:** `globals.app.js:89-119`
|
|
16
|
+
- Модули загружаются динамически в `router.beforeEach` guard
|
|
17
|
+
- Модули регистрируют роуты через `router.addRoute()` после загрузки
|
|
18
|
+
- После загрузки возвращается `to.fullPath` для повторной навигации
|
|
19
|
+
|
|
20
|
+
### Условие показа лоадера
|
|
21
|
+
- **Файл:** `Client.vue:16`
|
|
22
|
+
- Условие: `v-if="!page || globals.state.loading"`
|
|
23
|
+
- `page` - ref на текущий компонент страницы
|
|
24
|
+
- `globals.state.loading` - глобальный флаг загрузки
|
|
25
|
+
|
|
26
|
+
## Корень проблемы
|
|
27
|
+
Vue Router `beforeEach` guard блокирует все обновления DOM до своего завершения:
|
|
28
|
+
- Guards выполняются синхронно и блокируют навигацию
|
|
29
|
+
- Vue не может обновить DOM пока `beforeEach` не завершится
|
|
30
|
+
- Даже установка `globals.state.loading = true` не приводит к рендерингу
|
|
31
|
+
|
|
32
|
+
**Подтверждение из документации Vue Router:**
|
|
33
|
+
> "Guards may be resolved asynchronously, and the navigation is considered pending before all hooks have been resolved"
|
|
34
|
+
|
|
35
|
+
**GitHub issue vuejs/vue #9200:**
|
|
36
|
+
> "Vue.nextTick doesn't seem to cover browser re-render"
|
|
37
|
+
|
|
38
|
+
## Что пробовали и не сработало
|
|
39
|
+
|
|
40
|
+
### 1. nextTick после установки loading флага
|
|
41
|
+
```javascript
|
|
42
|
+
store.globals.state.loading = true;
|
|
43
|
+
await nextTick();
|
|
44
|
+
```
|
|
45
|
+
**Результат:** Не работает, т.к. nextTick работает с микротасками, которые выполняются ДО отрисовки браузером
|
|
46
|
+
|
|
47
|
+
### 2. requestAnimationFrame
|
|
48
|
+
```javascript
|
|
49
|
+
store.globals.state.loading = true;
|
|
50
|
+
await new Promise(resolve => requestAnimationFrame(resolve));
|
|
51
|
+
```
|
|
52
|
+
**Результат:** Не работает, beforeEach все равно блокирует рендеринг
|
|
53
|
+
|
|
54
|
+
### 3. setTimeout с return false
|
|
55
|
+
```javascript
|
|
56
|
+
setTimeout(async () => {
|
|
57
|
+
// загрузка модулей
|
|
58
|
+
router.push(to.fullPath);
|
|
59
|
+
}, 0);
|
|
60
|
+
return false;
|
|
61
|
+
```
|
|
62
|
+
**Результат:** Приводит к 404, т.к. роуты еще не зарегистрированы
|
|
63
|
+
|
|
64
|
+
### 4. Watch на route.path в Client.vue
|
|
65
|
+
```javascript
|
|
66
|
+
watch(() => route.path, () => {
|
|
67
|
+
page.value = null;
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
**Результат:** Не работает, т.к. route.path меняется только ПОСЛЕ завершения beforeEach
|
|
71
|
+
|
|
72
|
+
### 5. Свой beforeEach в Client.vue
|
|
73
|
+
```javascript
|
|
74
|
+
router.beforeEach((to, from) => {
|
|
75
|
+
page.value = null;
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
**Результат:** Не работает, все beforeEach выполняются синхронно и блокируют рендеринг
|
|
79
|
+
|
|
80
|
+
### 6. Создание DOM элемента напрямую
|
|
81
|
+
```javascript
|
|
82
|
+
const loader = document.createElement('div');
|
|
83
|
+
document.body.appendChild(loader);
|
|
84
|
+
```
|
|
85
|
+
**Результат:** Работает, но это хак, обходящий Vue реактивность
|
|
86
|
+
|
|
87
|
+
## Ограничения
|
|
88
|
+
1. **Нельзя загружать модули после навигации** - модули регистрируют роуты, без них будет 404
|
|
89
|
+
2. **Нельзя загружать модули вне beforeEach** - нужно гарантировать загрузку ДО навигации
|
|
90
|
+
3. **return to.fullPath необходим** - для повторной навигации с новыми роутами
|
|
91
|
+
|
|
92
|
+
## Возможные решения
|
|
93
|
+
|
|
94
|
+
### 1. Использовать HTML лоадер (не Vue компонент)
|
|
95
|
+
Добавить лоадер прямо в index.html, показывать/скрывать через классы
|
|
96
|
+
|
|
97
|
+
### 2. Изменить архитектуру загрузки
|
|
98
|
+
- Предзагружать все возможные роуты
|
|
99
|
+
- Использовать другой подход к динамической регистрации
|
|
100
|
+
|
|
101
|
+
### 3. Использовать Web Workers
|
|
102
|
+
Загружать модули в воркере, но это потребует полного рефакторинга
|
|
103
|
+
|
|
104
|
+
## Вывод
|
|
105
|
+
Проблема фундаментальная: Vue Router beforeEach блокирует рендеринг, а мы обязаны загружать модули именно там из-за динамической регистрации роутов. Единственное рабочее решение - создавать лоадер в обход Vue (прямой DOM манипуляцией).
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
<h4 class="my-handle word-break t-truncate w-100 w-max-100 mn-r-auto">{{category.name}}</h4>
|
|
6
6
|
|
|
7
7
|
<router-link
|
|
8
|
+
v-if="access"
|
|
8
9
|
:to="{
|
|
9
10
|
name: 'Category Edit',
|
|
10
11
|
params: {
|
|
@@ -27,6 +28,7 @@
|
|
|
27
28
|
</router-link>
|
|
28
29
|
|
|
29
30
|
<button
|
|
31
|
+
v-if="access"
|
|
30
32
|
@click="deleteCategory(category)"
|
|
31
33
|
class="
|
|
32
34
|
i-semi
|
|
@@ -68,6 +70,10 @@ import IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue'
|
|
|
68
70
|
|
|
69
71
|
const props = defineProps({
|
|
70
72
|
category: Object,
|
|
73
|
+
access: {
|
|
74
|
+
type: Boolean,
|
|
75
|
+
default: false
|
|
76
|
+
}
|
|
71
77
|
});
|
|
72
78
|
|
|
73
79
|
const emits = defineEmits(['delete']);
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
>
|
|
56
56
|
<CardCategory
|
|
57
57
|
:category="item"
|
|
58
|
+
:access="hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)"
|
|
58
59
|
@delete="deleteCategory"
|
|
59
60
|
/>
|
|
60
61
|
</Tree>
|
|
@@ -69,10 +70,12 @@
|
|
|
69
70
|
|
|
70
71
|
import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';
|
|
71
72
|
import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';
|
|
72
|
-
import * as categories from '@martyrs/src/modules/products/store/categories.js';
|
|
73
|
+
import * as categories from '@martyrs/src/modules/products/store/categories.js';
|
|
74
|
+
import { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';
|
|
73
75
|
|
|
74
76
|
const route = useRoute();
|
|
75
77
|
const router = useRouter();
|
|
78
|
+
const { hasAccess } = useGlobalMixins();
|
|
76
79
|
|
|
77
80
|
import Button from "@martyrs/src/components/Button/Button.vue";
|
|
78
81
|
import Block from '@martyrs/src/components/Block/Block.vue';
|