@ozdao/martyrs 0.2.506 → 0.2.508
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 +4 -4
- package/dist/_virtual/index2.js +4 -4
- package/dist/auth.server.cjs +1 -1
- package/dist/auth.server.js +1 -1
- package/dist/builder.cjs +52 -60
- package/dist/builder.js +52 -60
- package/dist/chats.server.cjs +1 -1
- package/dist/chats.server.js +1 -1
- package/dist/events.server.cjs +1 -1
- package/dist/events.server.js +1 -1
- package/dist/{mailing-q7sR8gCV.cjs → mailing-Bs9ThyVZ.cjs} +1 -24
- package/dist/{mailing-C11EYWm-.js → mailing-DzlhsxCC.js} +1 -24
- package/dist/main-AWSb_d2P.cjs +11 -0
- package/dist/{main-DC__VS5b.js → main-Dq-UfO4G.js} +2562 -2477
- package/dist/martyrs/src/components/Button/Button.vue.cjs +1 -1
- package/dist/martyrs/src/components/Button/Button.vue.js +1 -1
- package/dist/martyrs/src/components/Checkbox/Checkbox.vue.cjs +3 -3
- package/dist/martyrs/src/components/Checkbox/Checkbox.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js +3 -3
- package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs +0 -93
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js +1 -94
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs +93 -0
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +94 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Carousel.vue.cjs +1 -1
- package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +15 -46
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +22 -53
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/Field/Field.vue.cjs +14 -6
- package/dist/martyrs/src/components/Field/Field.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Field/Field.vue.js +14 -6
- package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +58 -11
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +60 -13
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
- package/dist/martyrs/src/components/Loader/{Loader.vue.cjs → Loader.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Loader/Loader.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Loader/{Loader.vue.js → Loader.vue2.js} +2 -2
- package/dist/martyrs/src/components/Loader/{Loader.vue.cjs.map → Loader.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.cjs +1 -1
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.js +1 -1
- package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.cjs +2 -2
- package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.js +2 -2
- package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.js.map +1 -1
- package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.cjs → Spoiler.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.js → Spoiler.vue2.js} +2 -2
- package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.cjs.map → Spoiler.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/Tab/{Tab.vue.cjs → Tab.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
- package/dist/martyrs/src/components/Tab/{Tab.vue.cjs.map → Tab.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.cjs +1 -1
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
- 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 +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs +42 -10
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +44 -12
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +11 -15
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +21 -25
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +12 -16
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +33 -37
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditSidebar.vue.cjs +13 -9
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditSidebar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditSidebar.vue.js +13 -9
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditSidebar.vue.js.map +1 -1
- 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/router/users.cjs +0 -4
- package/dist/martyrs/src/modules/auth/views/router/users.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/router/users.js +0 -4
- package/dist/martyrs/src/modules/auth/views/router/users.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 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs +431 -0
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +431 -0
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js.map +1 -0
- package/dist/martyrs/src/modules/community/router/blogposts.cjs +17 -0
- package/dist/martyrs/src/modules/community/router/blogposts.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/router/blogposts.js +17 -0
- package/dist/martyrs/src/modules/community/router/blogposts.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -4
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -4
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/sections/Feed.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/sections/List.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/sections/List.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/globals.client.cjs +3 -0
- package/dist/martyrs/src/modules/globals/globals.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/globals.client.js +3 -0
- package/dist/martyrs/src/modules/globals/globals.client.js.map +1 -1
- 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/classes/globals.websocket.cjs +4 -6
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.js +4 -6
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/Card.vue.cjs +5 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/Card.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/Card.vue.js +6 -3
- package/dist/martyrs/src/modules/globals/views/components/blocks/Card.vue.js.map +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/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 +2 -3
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +2 -3
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs +321 -0
- package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js +321 -0
- package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +324 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs.map +1 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +324 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js.map +1 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
- package/dist/martyrs/src/modules/icons/entities/IconLock.vue.cjs +32 -0
- package/dist/martyrs/src/modules/icons/entities/IconLock.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/entities/IconLock.vue.js +32 -0
- package/dist/martyrs/src/modules/icons/entities/IconLock.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/icons.client.cjs +2 -0
- package/dist/martyrs/src/modules/icons/icons.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/icons.client.js +116 -114
- package/dist/martyrs/src/modules/icons/icons.client.js.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +5 -3
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +117 -115
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.cjs +11 -36
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js +11 -36
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/landing.client.cjs +3 -0
- package/dist/martyrs/src/modules/landing/landing.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/landing.client.js +3 -0
- package/dist/martyrs/src/modules/landing/landing.client.js.map +1 -1
- package/dist/martyrs/src/modules/landing/locales/en.cjs +12 -0
- package/dist/martyrs/src/modules/landing/locales/en.cjs.map +1 -0
- package/dist/martyrs/src/modules/landing/locales/en.js +12 -0
- package/dist/martyrs/src/modules/landing/locales/en.js.map +1 -0
- package/dist/martyrs/src/modules/landing/locales/index.cjs +10 -0
- package/dist/martyrs/src/modules/landing/locales/index.cjs.map +1 -0
- package/dist/martyrs/src/modules/landing/locales/index.js +10 -0
- package/dist/martyrs/src/modules/landing/locales/index.js.map +1 -0
- package/dist/martyrs/src/modules/landing/locales/ru.cjs +12 -0
- package/dist/martyrs/src/modules/landing/locales/ru.cjs.map +1 -0
- package/dist/martyrs/src/modules/landing/locales/ru.js +12 -0
- package/dist/martyrs/src/modules/landing/locales/ru.js.map +1 -0
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.cjs +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +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/Playlist.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +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 +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +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/router/music.cjs +2 -4
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.js +2 -4
- package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.cjs +1 -1
- package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.cjs +86 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.js +86 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.cjs +103 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.js +103 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.cjs +194 -0
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js +194 -0
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +138 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +138 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +189 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +189 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +173 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +173 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.cjs +233 -0
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.js +233 -0
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.cjs +234 -0
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.js +234 -0
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +9 -8
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +9 -8
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +8 -82
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +9 -83
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs +119 -0
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +119 -0
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs +139 -0
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +139 -0
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +2 -4
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -4
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/locales/en.cjs +38 -0
- package/dist/martyrs/src/modules/orders/locales/en.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/locales/en.js +38 -0
- package/dist/martyrs/src/modules/orders/locales/en.js.map +1 -0
- package/dist/martyrs/src/modules/orders/locales/index.cjs +10 -0
- package/dist/martyrs/src/modules/orders/locales/index.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/locales/index.js +10 -0
- package/dist/martyrs/src/modules/orders/locales/index.js.map +1 -0
- package/dist/martyrs/src/modules/orders/locales/ru.cjs +38 -0
- package/dist/martyrs/src/modules/orders/locales/ru.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/locales/ru.js +38 -0
- package/dist/martyrs/src/modules/orders/locales/ru.js.map +1 -0
- package/dist/martyrs/src/modules/orders/orders.client.cjs +78 -3
- package/dist/martyrs/src/modules/orders/orders.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.js +80 -5
- package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
- package/dist/martyrs/src/modules/orders/router/applications.router.cjs +17 -0
- package/dist/martyrs/src/modules/orders/router/applications.router.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/router/applications.router.js +17 -0
- package/dist/martyrs/src/modules/orders/router/applications.router.js.map +1 -0
- package/dist/martyrs/src/modules/orders/router/customers.router.cjs +18 -0
- package/dist/martyrs/src/modules/orders/router/customers.router.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/router/customers.router.js +18 -0
- package/dist/martyrs/src/modules/orders/router/customers.router.js.map +1 -0
- package/dist/martyrs/src/modules/orders/store/applications.cjs +4 -42
- package/dist/martyrs/src/modules/orders/store/applications.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/store/applications.js +3 -41
- package/dist/martyrs/src/modules/orders/store/applications.js.map +1 -1
- package/dist/martyrs/src/modules/orders/store/models/application.cjs +20 -0
- package/dist/martyrs/src/modules/orders/store/models/application.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/store/models/application.js +20 -0
- package/dist/martyrs/src/modules/orders/store/models/application.js.map +1 -0
- package/dist/martyrs/src/modules/orders/store/models/customer.cjs +13 -1
- package/dist/martyrs/src/modules/orders/store/models/customer.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/store/models/customer.js +13 -1
- package/dist/martyrs/src/modules/orders/store/models/customer.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +126 -192
- 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 +128 -194
- 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 +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- 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/Organizations.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +85 -89
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +92 -96
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.cjs +0 -3
- package/dist/martyrs/src/modules/organizations/organizations.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.js +36 -39
- package/dist/martyrs/src/modules/organizations/organizations.client.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.cjs +4 -0
- package/dist/martyrs/src/modules/organizations/router/organizations.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.js +4 -0
- package/dist/martyrs/src/modules/organizations/router/organizations.js.map +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/Page.vue.cjs +3 -6
- package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.js +3 -6
- package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.cjs +1 -1
- 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 +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Image360.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +22 -19
- 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 +22 -19
- 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 +28 -19
- 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 +28 -19
- 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 +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
- 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/ProductRecommmendation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +361 -105
- 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 +379 -123
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +32 -2
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +33 -3
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js.map +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/products/router/products.router.cjs +15 -0
- package/dist/martyrs/src/modules/products/router/products.router.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/router/products.router.js +15 -0
- package/dist/martyrs/src/modules/products/router/products.router.js.map +1 -1
- package/dist/martyrs/src/modules/products/store/categories.cjs +25 -7
- package/dist/martyrs/src/modules/products/store/categories.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/store/categories.js +25 -7
- package/dist/martyrs/src/modules/products/store/categories.js.map +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/rents/views/components/pages/Rents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs +345 -0
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +345 -0
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -0
- package/dist/martyrs/src/modules/spots/router/spots.cjs +17 -0
- package/dist/martyrs/src/modules/spots/router/spots.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/router/spots.js +17 -0
- package/dist/martyrs/src/modules/spots/router/spots.js.map +1 -1
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/notifications.server.cjs +1 -1
- package/dist/notifications.server.js +1 -1
- package/dist/orders.server.cjs +459 -201
- package/dist/orders.server.js +459 -201
- package/dist/organizations.server.cjs +1 -1
- package/dist/organizations.server.js +1 -1
- package/dist/products.server.cjs +428 -255
- package/dist/products.server.js +428 -255
- package/dist/style.css +129 -140
- package/dist/{tickets.controller-DQQcjyui.js → tickets.controller-C56OvH6v.js} +1 -1
- package/dist/{tickets.controller-D0V0gJCA.cjs → tickets.controller-DdnndM6c.cjs} +1 -1
- package/dist/wallet.server.cjs +1 -1
- package/dist/wallet.server.js +1 -1
- package/dist/{web-B1bEJ1W9.js → web-BXajFCU2.js} +1 -1
- package/dist/{web-D5i9k2Vv.cjs → web-DaBwwCQ5.cjs} +1 -1
- package/package.json +1 -1
- package/src/builder/modes/ssr.dev.js +10 -10
- package/src/builder/rspack/rspack.config.ssr.client.js +50 -50
- package/src/components/Checkbox/Checkbox.vue +3 -4
- package/src/components/Feed/Feed.old.vue +522 -0
- package/src/components/Feed/Feed.vue +4 -4
- package/src/components/Field/Field.vue +7 -1
- package/src/components/FieldBig/FieldBig.vue +62 -8
- package/src/components/PhotoViewer/PhotoViewer.vue +1 -1
- package/src/modules/STYLES.MD +198 -0
- package/src/modules/auth/views/components/pages/Profile.vue +1 -1
- package/src/modules/auth/views/components/pages/ProfileEdit.vue +42 -8
- package/src/modules/auth/views/components/pages/ProfileEditAccount.vue +9 -11
- package/src/modules/auth/views/components/pages/ProfileEditProfile.vue +9 -11
- package/src/modules/auth/views/components/pages/ProfileEditSidebar.vue +7 -4
- package/src/modules/auth/views/router/users.js +0 -4
- package/src/modules/community/components/pages/Posts.vue +444 -0
- package/src/modules/community/router/blogposts.js +15 -0
- package/src/modules/globals/globals.client.js +3 -0
- package/src/modules/globals/views/classes/globals.websocket.js +7 -8
- package/src/modules/globals/views/components/blocks/Card.vue +2 -1
- package/src/modules/globals/views/components/layouts/Client.vue +1 -2
- package/src/modules/globals/views/components/partials/Footer.vue +318 -164
- package/src/modules/globals/views/components/sections/Filters.vue +261 -121
- package/src/modules/globals/views/components/sections/filters/FilterCheckbox.vue +78 -0
- package/src/modules/globals/views/components/sections/filters/FilterDateRange.vue +177 -0
- package/src/modules/globals/views/components/sections/filters/FilterRange.vue +51 -50
- package/src/modules/icons/entities/IconLock.vue +14 -0
- package/src/modules/icons/icons.client.js +2 -1
- package/src/modules/icons/pages/IconsPage.vue +4 -2
- package/src/modules/landing/components/sections/SubscribeNewsletter.vue +11 -61
- package/src/modules/landing/landing.client.js +6 -0
- package/src/modules/landing/locales/en.js +9 -0
- package/src/modules/landing/locales/index.js +7 -0
- package/src/modules/landing/locales/ru.js +9 -0
- package/src/modules/music/components/pages/Album.vue +1 -1
- package/src/modules/music/components/pages/Playlist.vue +1 -1
- package/src/modules/music/components/pages/Track.vue +1 -1
- package/src/modules/orders/components/blocks/CardApplication.vue +74 -0
- package/src/modules/orders/components/blocks/CardCustomer.vue +90 -0
- package/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue +199 -0
- package/src/modules/orders/components/forms/FormApplicationDetails.vue +117 -0
- package/src/modules/orders/components/forms/FormCustomerDetails.vue +165 -0
- package/src/modules/orders/components/forms/FormSelectCustomer.vue +172 -0
- package/src/modules/orders/components/pages/Applications.vue +240 -0
- package/src/modules/orders/components/pages/Customers.vue +239 -0
- package/src/modules/orders/components/pages/OrderCreate.vue +2 -2
- package/src/modules/orders/components/pages/OrderCreateBackoffice.vue +4 -75
- package/src/modules/orders/components/sections/ApplicationDetails.vue +91 -0
- package/src/modules/orders/components/sections/CustomerDetails.vue +107 -0
- package/src/modules/orders/locales/en.js +35 -0
- package/src/modules/orders/locales/index.js +7 -0
- package/src/modules/orders/locales/ru.js +35 -0
- package/src/modules/orders/middlewares/applications.verifier.js +189 -0
- package/src/modules/orders/middlewares/customers.verifier.js +251 -0
- package/src/modules/orders/models/application.model.js +21 -0
- package/src/modules/orders/models/customer.model.js +26 -0
- package/src/modules/orders/orders.client.js +86 -1
- package/src/modules/orders/orders.server.js +3 -1
- package/src/modules/orders/router/applications.router.js +15 -0
- package/src/modules/orders/router/customers.router.js +17 -0
- package/src/modules/orders/routes/applications.routes.js +124 -12
- package/src/modules/orders/routes/customers.routes.js +43 -0
- package/src/modules/orders/store/applications.js +3 -159
- package/src/modules/orders/store/models/application.js +18 -0
- package/src/modules/orders/store/models/customer.js +12 -0
- package/src/modules/organizations/components/pages/Organization.new.vue +593 -0
- package/src/modules/organizations/components/pages/Organization.vue +155 -206
- package/src/modules/organizations/configs/navigation.organization.config.js +69 -85
- package/src/modules/organizations/organizations.client.js +0 -3
- package/src/modules/organizations/router/organizations.js +5 -0
- package/src/modules/pages/views/components/pages/Page.vue +1 -1
- package/src/modules/products/TASKS.MD +157 -0
- package/src/modules/products/components/blocks/CardCategory.vue +1 -1
- package/src/modules/products/components/blocks/ProductImages.vue +1 -1
- package/src/modules/products/components/pages/Categories.vue +27 -22
- package/src/modules/products/components/pages/CategoryEdit.vue +24 -13
- package/src/modules/products/components/pages/Products.vue +418 -173
- package/src/modules/products/components/sections/ProductsRecommended.vue +46 -2
- package/src/modules/products/controllers/categories.controller.js +321 -282
- package/src/modules/products/controllers/configs/products.lookup.config.js +9 -0
- package/src/modules/products/controllers/products.controller.js +2 -1
- package/src/modules/products/controllers/queries/products.queries.js +183 -11
- package/src/modules/products/middlewares/categories.verifier.js +58 -15
- package/src/modules/products/migrations/categories-to-materialized-path.js +433 -0
- package/src/modules/products/migrations/path-to-url.js +27 -0
- package/src/modules/products/models/category.model.js +8 -23
- package/src/modules/products/router/products.router.js +12 -0
- package/src/modules/products/store/categories.js +26 -7
- package/src/modules/rents/TASK.MD +161 -0
- package/src/modules/spots/components/pages/Spots.vue +342 -0
- package/src/modules/spots/router/spots.js +15 -0
- package/src/styles/base/all.scss +2 -3
- package/src/styles/layout.scss +16 -0
- package/dist/main-w3rPUBVh.cjs +0 -11
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.cjs +0 -96
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js +0 -96
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js.map +0 -1
- package/dist/martyrs/src/components/Loader/Loader.vue.js.map +0 -1
- package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +0 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +0 -155
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js +0 -155
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js.map +0 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs +0 -81
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.js +0 -81
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +0 -146
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +0 -146
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js.map +0 -1
- package/src/modules/globals/views/components/partials/FooterAlt.vue +0 -363
- package/src/modules/orders/components/sections/FormAddCustomer.vue +0 -152
- package/src/modules/orders/components/sections/FormCustomerDetails.vue +0 -67
- package/src/modules/orders/controllers/applications.controller.js +0 -122
- package/src/modules/organizations/components/sections/DetailsTabSection.vue +0 -190
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const Field = require("../Field/Field.vue.cjs");
|
|
5
|
+
const Button = require("../Button/Button.vue.cjs");
|
|
5
6
|
const IconArrow = require("../../modules/icons/navigation/IconArrow.vue.cjs");
|
|
6
7
|
const vueI18n = require("vue-i18n");
|
|
7
8
|
const _hoisted_1 = {
|
|
@@ -44,11 +45,42 @@ const _sfc_main = {
|
|
|
44
45
|
enableTyping: {
|
|
45
46
|
type: Boolean,
|
|
46
47
|
default: false
|
|
48
|
+
},
|
|
49
|
+
showLoader: {
|
|
50
|
+
type: Boolean,
|
|
51
|
+
default: true
|
|
52
|
+
},
|
|
53
|
+
showSuccess: {
|
|
54
|
+
type: Boolean,
|
|
55
|
+
default: true
|
|
56
|
+
},
|
|
57
|
+
callback: {
|
|
58
|
+
type: Function,
|
|
59
|
+
default: null
|
|
60
|
+
},
|
|
61
|
+
callbackDelay: {
|
|
62
|
+
type: Number,
|
|
63
|
+
default: 750
|
|
64
|
+
},
|
|
65
|
+
name: {
|
|
66
|
+
type: String,
|
|
67
|
+
default: null
|
|
68
|
+
},
|
|
69
|
+
id: {
|
|
70
|
+
type: String,
|
|
71
|
+
default: null
|
|
72
|
+
},
|
|
73
|
+
validation: {
|
|
74
|
+
type: [Object, Boolean],
|
|
75
|
+
default: false
|
|
47
76
|
}
|
|
48
77
|
},
|
|
49
78
|
emits: ["update:input", "action"],
|
|
50
79
|
setup(__props, { emit: __emit }) {
|
|
80
|
+
const uniqueId = Math.random().toString(36).substr(2, 9);
|
|
51
81
|
const props = __props;
|
|
82
|
+
const fieldName = props.name || `field-big-${uniqueId}`;
|
|
83
|
+
const fieldId = props.id || `field-big-${uniqueId}`;
|
|
52
84
|
const { t, locale } = vueI18n.useI18n();
|
|
53
85
|
let placeholderIndex = vue.ref(0);
|
|
54
86
|
let inputField = vue.ref(props.input);
|
|
@@ -59,8 +91,12 @@ const _sfc_main = {
|
|
|
59
91
|
let cursorVisible = vue.ref(true);
|
|
60
92
|
let cursorInterval = null;
|
|
61
93
|
const emit = __emit;
|
|
62
|
-
function
|
|
63
|
-
emit("action");
|
|
94
|
+
async function handleAction() {
|
|
95
|
+
const result = emit("action");
|
|
96
|
+
if (result && typeof result.then === "function") {
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
return Promise.resolve(result);
|
|
64
100
|
}
|
|
65
101
|
function updateInput(event) {
|
|
66
102
|
emit("update:input", event);
|
|
@@ -135,19 +171,30 @@ const _sfc_main = {
|
|
|
135
171
|
onInput: handleInput,
|
|
136
172
|
onFocus: handleFocus,
|
|
137
173
|
onBlur: checkInput,
|
|
138
|
-
|
|
174
|
+
name: vue.unref(fieldName),
|
|
175
|
+
id: vue.unref(fieldId),
|
|
176
|
+
validation: __props.validation,
|
|
177
|
+
class: "pd-l-medium radius-extra flex-nowrap flex w-100 p-medium t-regular uppercase pd-thin"
|
|
139
178
|
}, {
|
|
140
179
|
default: vue.withCtx(() => [
|
|
141
|
-
vue.
|
|
142
|
-
|
|
180
|
+
vue.renderSlot(_ctx.$slots, "default"),
|
|
181
|
+
vue.createVNode(Button.default, {
|
|
182
|
+
submit: handleAction,
|
|
183
|
+
showSucces: __props.showSuccess,
|
|
184
|
+
showLoader: __props.showLoader,
|
|
185
|
+
callback: __props.callback,
|
|
186
|
+
callbackDelay: __props.callbackDelay,
|
|
143
187
|
class: "t-nowrap t-medium radius-big uppercase cursor-pointer flex flex-v-center pd-thin w-max hover-bg-fifth t-semi transition-linear transition-timing-1 t-black bg-main"
|
|
144
|
-
},
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
188
|
+
}, {
|
|
189
|
+
default: vue.withCtx(() => [
|
|
190
|
+
__props.action ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_1, vue.toDisplayString(__props.action), 1)) : vue.createCommentVNode("", true),
|
|
191
|
+
vue.createVNode(IconArrow.default, { class: "i-medium" })
|
|
192
|
+
]),
|
|
193
|
+
_: 1
|
|
194
|
+
}, 8, ["showSucces", "showLoader", "callback", "callbackDelay"])
|
|
148
195
|
]),
|
|
149
|
-
_:
|
|
150
|
-
}, 8, ["field", "placeholder"]);
|
|
196
|
+
_: 3
|
|
197
|
+
}, 8, ["field", "placeholder", "name", "id", "validation"]);
|
|
151
198
|
};
|
|
152
199
|
}
|
|
153
200
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldBig.vue.cjs","sources":["../../../../../src/components/FieldBig/FieldBig.vue"],"sourcesContent":["<template>\n <Field\n v-model:field=\"inputField\"\n @update:field=\"updateInput\"\n :placeholder=\"typing ? '' : placeholder\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"checkInput\"\n class=\"pd-
|
|
1
|
+
{"version":3,"file":"FieldBig.vue.cjs","sources":["../../../../../src/components/FieldBig/FieldBig.vue"],"sourcesContent":["<template>\n <Field\n v-model:field=\"inputField\"\n @update:field=\"updateInput\"\n :placeholder=\"typing ? '' : placeholder\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"checkInput\"\n :name=\"fieldName\"\n :id=\"fieldId\"\n :validation=\"validation\"\n class=\"pd-l-medium radius-extra flex-nowrap flex w-100 p-medium t-regular uppercase pd-thin\"\n >\n <slot></slot>\n <Button\n :submit=\"handleAction\"\n :showSucces=\"showSuccess\"\n :showLoader=\"showLoader\"\n :callback=\"callback\"\n :callbackDelay=\"callbackDelay\"\n class=\"t-nowrap t-medium radius-big uppercase cursor-pointer flex flex-v-center pd-thin w-max hover-bg-fifth t-semi transition-linear transition-timing-1 t-black bg-main\"\n >\n <span v-if=\"action\" class=\"desktop-only mn-r-thin\">{{action}}</span>\n <IconArrow class=\"i-medium\"/>\n </Button>\n</Field>\n</template>\n\n<script setup=\"props\">\n import { ref, watchEffect, onMounted } from 'vue'\n import Field from '@martyrs/src/components/Field/Field.vue'\n import Button from '@martyrs/src/components/Button/Button.vue'\n import IconArrow from '@martyrs/src/modules/icons/navigation/IconArrow.vue'\n import { useI18n } from 'vue-i18n'\n\n // Генерируем уникальный ID для каждого экземпляра\n const uniqueId = Math.random().toString(36).substr(2, 9)\n\n const props = defineProps({\n input: String,\n placeholder: {\n type: String\n },\n action: {\n type: String\n },\n placeholderTexts: {\n type: Object,\n default: () => ({\n en: [\n 'Lowest THC, please!',\n 'Something with banana flavors?',\n \"I'm in the mood for trippy vibes.\"\n ],\n ru: [\n 'Я хочу самый низкий THC',\n 'Я хочу чего-нибудь бананового',\n 'Я хочу курнуть хейза'\n ],\n })\n },\n typingSpeed: {\n type: Number,\n default: 200\n },\n loopTyping: {\n type: Boolean,\n default: false\n },\n enableTyping: {\n type: Boolean,\n default: false\n },\n showLoader: {\n type: Boolean,\n default: true\n },\n showSuccess: {\n type: Boolean,\n default: true\n },\n callback: {\n type: Function,\n default: null\n },\n callbackDelay: {\n type: Number,\n default: 750\n },\n name: {\n type: String,\n default: null\n },\n id: {\n type: String,\n default: null\n },\n validation: {\n type: [Object, Boolean],\n default: false\n }\n });\n\n // Уникальные имена для полей\n const fieldName = props.name || `field-big-${uniqueId}`\n const fieldId = props.id || `field-big-${uniqueId}`\n\n const { t, locale } = useI18n()\n\n let placeholderIndex = ref(0)\n\n let inputField = ref(props.input)\n let inputPlaceholder = ref(props.placeholder)\n let typing = ref(props.enableTyping)\n let typeInterval = ref(null)\n let userText = ref('') // Stores user input\n let cursorVisible = ref(true)\n let cursorInterval = null\n\n const emit = defineEmits(['update:input', 'action']);\n\n function emitAction() {\n emit('action')\n }\n\n async function handleAction() {\n const result = emit('action')\n // Если обработчик вернул промис, ждем его\n if (result && typeof result.then === 'function') {\n return result\n }\n // Иначе возвращаем resolved промис\n return Promise.resolve(result)\n }\n \n function updateInput(event) {\n emit('update:input', event)\n userText.value = event // Stores user input\n }\n\n function handleInput() {\n placeholderIndex.value = (placeholderIndex.value + 1) % props.placeholderTexts[locale.value].length\n }\n\n function handleFocus() {\n typing.value = false\n\n clearInterval(typeInterval.value)\n\n inputPlaceholder.value = props.placeholder\n\n if (!userText.value) {\n inputField.value = ''\n }\n }\n\n function checkInput() {\n if (!userText.value && props.enableTyping) {\n typing.value = true\n inputPlaceholder.value = ''\n startTyping()\n }\n }\n\n function startTyping() {\n let placeholderText = props.placeholderTexts[locale.value][placeholderIndex.value]\n let i = 0\n let typingBackwards = false\n \n // Start the cursor blinking\n cursorInterval = setInterval(() => {\n cursorVisible.value = !cursorVisible.value\n }, 200)\n\n typeInterval.value = setInterval(() => {\n if (typing.value) {\n if (!typingBackwards) {\n inputField.value = placeholderText.substring(0, i) + (cursorVisible.value && i % 2 ? '|' : '')\n i++\n } else {\n inputField.value = inputField.value.slice(0, -1)\n inputField.value = placeholderText.substring(0, i) + (cursorVisible.value && i % 2 ? '|' : '')\n i--\n }\n\n if (i > placeholderText.length && props.loopTyping) {\n setTimeout(() => {\n typingBackwards = true\n inputField.value = placeholderText.substring(0, i)\n }, 333)\n }\n\n if (i === 0 && typingBackwards) {\n typingBackwards = false\n handleInput()\n placeholderText = props.placeholderTexts[locale.value][placeholderIndex.value]\n }\n }\n }, props.typingSpeed)\n }\n\n\n onMounted(() => {\n if (props.enableTyping) startTyping()\n })\n\n watchEffect(() => {\n if (!typing.value) {\n clearInterval(typeInterval.value)\n clearInterval(cursorInterval)\n }\n })\n</script>\n\n<style lang=\"scss\">\n</style>"],"names":["useI18n","ref","onMounted","watchEffect"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { ref, onMounted, watchEffect, createBlock, openBlock, unref, isRef, withCtx,
|
|
1
|
+
import { ref, onMounted, watchEffect, createBlock, openBlock, unref, isRef, withCtx, renderSlot, createVNode, createElementBlock, createCommentVNode, toDisplayString } from "vue";
|
|
2
2
|
import Field from "../Field/Field.vue.js";
|
|
3
|
-
import _sfc_main$1 from "
|
|
3
|
+
import _sfc_main$1 from "../Button/Button.vue.js";
|
|
4
|
+
import _sfc_main$2 from "../../modules/icons/navigation/IconArrow.vue.js";
|
|
4
5
|
import { useI18n } from "vue-i18n";
|
|
5
6
|
const _hoisted_1 = {
|
|
6
7
|
key: 0,
|
|
@@ -42,11 +43,42 @@ const _sfc_main = {
|
|
|
42
43
|
enableTyping: {
|
|
43
44
|
type: Boolean,
|
|
44
45
|
default: false
|
|
46
|
+
},
|
|
47
|
+
showLoader: {
|
|
48
|
+
type: Boolean,
|
|
49
|
+
default: true
|
|
50
|
+
},
|
|
51
|
+
showSuccess: {
|
|
52
|
+
type: Boolean,
|
|
53
|
+
default: true
|
|
54
|
+
},
|
|
55
|
+
callback: {
|
|
56
|
+
type: Function,
|
|
57
|
+
default: null
|
|
58
|
+
},
|
|
59
|
+
callbackDelay: {
|
|
60
|
+
type: Number,
|
|
61
|
+
default: 750
|
|
62
|
+
},
|
|
63
|
+
name: {
|
|
64
|
+
type: String,
|
|
65
|
+
default: null
|
|
66
|
+
},
|
|
67
|
+
id: {
|
|
68
|
+
type: String,
|
|
69
|
+
default: null
|
|
70
|
+
},
|
|
71
|
+
validation: {
|
|
72
|
+
type: [Object, Boolean],
|
|
73
|
+
default: false
|
|
45
74
|
}
|
|
46
75
|
},
|
|
47
76
|
emits: ["update:input", "action"],
|
|
48
77
|
setup(__props, { emit: __emit }) {
|
|
78
|
+
const uniqueId = Math.random().toString(36).substr(2, 9);
|
|
49
79
|
const props = __props;
|
|
80
|
+
const fieldName = props.name || `field-big-${uniqueId}`;
|
|
81
|
+
const fieldId = props.id || `field-big-${uniqueId}`;
|
|
50
82
|
const { t, locale } = useI18n();
|
|
51
83
|
let placeholderIndex = ref(0);
|
|
52
84
|
let inputField = ref(props.input);
|
|
@@ -57,8 +89,12 @@ const _sfc_main = {
|
|
|
57
89
|
let cursorVisible = ref(true);
|
|
58
90
|
let cursorInterval = null;
|
|
59
91
|
const emit = __emit;
|
|
60
|
-
function
|
|
61
|
-
emit("action");
|
|
92
|
+
async function handleAction() {
|
|
93
|
+
const result = emit("action");
|
|
94
|
+
if (result && typeof result.then === "function") {
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
return Promise.resolve(result);
|
|
62
98
|
}
|
|
63
99
|
function updateInput(event) {
|
|
64
100
|
emit("update:input", event);
|
|
@@ -133,19 +169,30 @@ const _sfc_main = {
|
|
|
133
169
|
onInput: handleInput,
|
|
134
170
|
onFocus: handleFocus,
|
|
135
171
|
onBlur: checkInput,
|
|
136
|
-
|
|
172
|
+
name: unref(fieldName),
|
|
173
|
+
id: unref(fieldId),
|
|
174
|
+
validation: __props.validation,
|
|
175
|
+
class: "pd-l-medium radius-extra flex-nowrap flex w-100 p-medium t-regular uppercase pd-thin"
|
|
137
176
|
}, {
|
|
138
177
|
default: withCtx(() => [
|
|
139
|
-
|
|
140
|
-
|
|
178
|
+
renderSlot(_ctx.$slots, "default"),
|
|
179
|
+
createVNode(_sfc_main$1, {
|
|
180
|
+
submit: handleAction,
|
|
181
|
+
showSucces: __props.showSuccess,
|
|
182
|
+
showLoader: __props.showLoader,
|
|
183
|
+
callback: __props.callback,
|
|
184
|
+
callbackDelay: __props.callbackDelay,
|
|
141
185
|
class: "t-nowrap t-medium radius-big uppercase cursor-pointer flex flex-v-center pd-thin w-max hover-bg-fifth t-semi transition-linear transition-timing-1 t-black bg-main"
|
|
142
|
-
},
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
186
|
+
}, {
|
|
187
|
+
default: withCtx(() => [
|
|
188
|
+
__props.action ? (openBlock(), createElementBlock("span", _hoisted_1, toDisplayString(__props.action), 1)) : createCommentVNode("", true),
|
|
189
|
+
createVNode(_sfc_main$2, { class: "i-medium" })
|
|
190
|
+
]),
|
|
191
|
+
_: 1
|
|
192
|
+
}, 8, ["showSucces", "showLoader", "callback", "callbackDelay"])
|
|
146
193
|
]),
|
|
147
|
-
_:
|
|
148
|
-
}, 8, ["field", "placeholder"]);
|
|
194
|
+
_: 3
|
|
195
|
+
}, 8, ["field", "placeholder", "name", "id", "validation"]);
|
|
149
196
|
};
|
|
150
197
|
}
|
|
151
198
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldBig.vue.js","sources":["../../../../../src/components/FieldBig/FieldBig.vue"],"sourcesContent":["<template>\n <Field\n v-model:field=\"inputField\"\n @update:field=\"updateInput\"\n :placeholder=\"typing ? '' : placeholder\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"checkInput\"\n class=\"pd-
|
|
1
|
+
{"version":3,"file":"FieldBig.vue.js","sources":["../../../../../src/components/FieldBig/FieldBig.vue"],"sourcesContent":["<template>\n <Field\n v-model:field=\"inputField\"\n @update:field=\"updateInput\"\n :placeholder=\"typing ? '' : placeholder\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"checkInput\"\n :name=\"fieldName\"\n :id=\"fieldId\"\n :validation=\"validation\"\n class=\"pd-l-medium radius-extra flex-nowrap flex w-100 p-medium t-regular uppercase pd-thin\"\n >\n <slot></slot>\n <Button\n :submit=\"handleAction\"\n :showSucces=\"showSuccess\"\n :showLoader=\"showLoader\"\n :callback=\"callback\"\n :callbackDelay=\"callbackDelay\"\n class=\"t-nowrap t-medium radius-big uppercase cursor-pointer flex flex-v-center pd-thin w-max hover-bg-fifth t-semi transition-linear transition-timing-1 t-black bg-main\"\n >\n <span v-if=\"action\" class=\"desktop-only mn-r-thin\">{{action}}</span>\n <IconArrow class=\"i-medium\"/>\n </Button>\n</Field>\n</template>\n\n<script setup=\"props\">\n import { ref, watchEffect, onMounted } from 'vue'\n import Field from '@martyrs/src/components/Field/Field.vue'\n import Button from '@martyrs/src/components/Button/Button.vue'\n import IconArrow from '@martyrs/src/modules/icons/navigation/IconArrow.vue'\n import { useI18n } from 'vue-i18n'\n\n // Генерируем уникальный ID для каждого экземпляра\n const uniqueId = Math.random().toString(36).substr(2, 9)\n\n const props = defineProps({\n input: String,\n placeholder: {\n type: String\n },\n action: {\n type: String\n },\n placeholderTexts: {\n type: Object,\n default: () => ({\n en: [\n 'Lowest THC, please!',\n 'Something with banana flavors?',\n \"I'm in the mood for trippy vibes.\"\n ],\n ru: [\n 'Я хочу самый низкий THC',\n 'Я хочу чего-нибудь бананового',\n 'Я хочу курнуть хейза'\n ],\n })\n },\n typingSpeed: {\n type: Number,\n default: 200\n },\n loopTyping: {\n type: Boolean,\n default: false\n },\n enableTyping: {\n type: Boolean,\n default: false\n },\n showLoader: {\n type: Boolean,\n default: true\n },\n showSuccess: {\n type: Boolean,\n default: true\n },\n callback: {\n type: Function,\n default: null\n },\n callbackDelay: {\n type: Number,\n default: 750\n },\n name: {\n type: String,\n default: null\n },\n id: {\n type: String,\n default: null\n },\n validation: {\n type: [Object, Boolean],\n default: false\n }\n });\n\n // Уникальные имена для полей\n const fieldName = props.name || `field-big-${uniqueId}`\n const fieldId = props.id || `field-big-${uniqueId}`\n\n const { t, locale } = useI18n()\n\n let placeholderIndex = ref(0)\n\n let inputField = ref(props.input)\n let inputPlaceholder = ref(props.placeholder)\n let typing = ref(props.enableTyping)\n let typeInterval = ref(null)\n let userText = ref('') // Stores user input\n let cursorVisible = ref(true)\n let cursorInterval = null\n\n const emit = defineEmits(['update:input', 'action']);\n\n function emitAction() {\n emit('action')\n }\n\n async function handleAction() {\n const result = emit('action')\n // Если обработчик вернул промис, ждем его\n if (result && typeof result.then === 'function') {\n return result\n }\n // Иначе возвращаем resolved промис\n return Promise.resolve(result)\n }\n \n function updateInput(event) {\n emit('update:input', event)\n userText.value = event // Stores user input\n }\n\n function handleInput() {\n placeholderIndex.value = (placeholderIndex.value + 1) % props.placeholderTexts[locale.value].length\n }\n\n function handleFocus() {\n typing.value = false\n\n clearInterval(typeInterval.value)\n\n inputPlaceholder.value = props.placeholder\n\n if (!userText.value) {\n inputField.value = ''\n }\n }\n\n function checkInput() {\n if (!userText.value && props.enableTyping) {\n typing.value = true\n inputPlaceholder.value = ''\n startTyping()\n }\n }\n\n function startTyping() {\n let placeholderText = props.placeholderTexts[locale.value][placeholderIndex.value]\n let i = 0\n let typingBackwards = false\n \n // Start the cursor blinking\n cursorInterval = setInterval(() => {\n cursorVisible.value = !cursorVisible.value\n }, 200)\n\n typeInterval.value = setInterval(() => {\n if (typing.value) {\n if (!typingBackwards) {\n inputField.value = placeholderText.substring(0, i) + (cursorVisible.value && i % 2 ? '|' : '')\n i++\n } else {\n inputField.value = inputField.value.slice(0, -1)\n inputField.value = placeholderText.substring(0, i) + (cursorVisible.value && i % 2 ? '|' : '')\n i--\n }\n\n if (i > placeholderText.length && props.loopTyping) {\n setTimeout(() => {\n typingBackwards = true\n inputField.value = placeholderText.substring(0, i)\n }, 333)\n }\n\n if (i === 0 && typingBackwards) {\n typingBackwards = false\n handleInput()\n placeholderText = props.placeholderTexts[locale.value][placeholderIndex.value]\n }\n }\n }, props.typingSpeed)\n }\n\n\n onMounted(() => {\n if (props.enableTyping) startTyping()\n })\n\n watchEffect(() => {\n if (!typing.value) {\n clearInterval(typeInterval.value)\n clearInterval(cursorInterval)\n }\n })\n</script>\n\n<style lang=\"scss\">\n</style>"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
|
-
const index = require("../../../../_virtual/
|
|
4
|
+
const index = require("../../../../_virtual/index.cjs");
|
|
5
5
|
const createTags = require("./create-tags.cjs");
|
|
6
6
|
const tagInput = require("./tag-input.vue2.cjs");
|
|
7
7
|
const vueTagsInput_props = require("./vue-tags-input.props.cjs");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref, shallowRef, computed, watch, onMounted, onBeforeUnmount, createElementBlock, openBlock, normalizeStyle, normalizeClass, createElementVNode, renderSlot, createCommentVNode, Fragment, renderList, createBlock, toDisplayString, withDirectives, withModifiers, vShow, withKeys, unref, nextTick } from "vue";
|
|
2
|
-
import equal from "../../../../_virtual/
|
|
2
|
+
import equal from "../../../../_virtual/index.js";
|
|
3
3
|
import { createTag, createClasses, createTags, clone } from "./create-tags.js";
|
|
4
4
|
import TagInput from "./tag-input.vue2.js";
|
|
5
5
|
import props from "./vue-tags-input.props.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
|
-
;/* empty css
|
|
4
|
+
;/* empty css */
|
|
5
5
|
const _pluginVue_exportHelper = require("../../../../_virtual/_plugin-vue_export-helper.cjs");
|
|
6
6
|
const _sfc_main = {
|
|
7
7
|
props: {
|
|
@@ -58,4 +58,4 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
58
58
|
}
|
|
59
59
|
const Loader = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["render", _sfc_render]]);
|
|
60
60
|
exports.default = Loader;
|
|
61
|
-
//# sourceMappingURL=Loader.
|
|
61
|
+
//# sourceMappingURL=Loader.vue2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Loader.vue2.cjs","sources":["../../../../../src/components/Loader/Loader.vue"],"sourcesContent":["<template>\n <div class=\"circular-loader pos-relative z-index-1 w-100 h-100 w-max-2r h-max-2r h-min-1r w-min-1r\" :class=\"{ 'circular-loader-centered': centered }\">\n <svg viewBox=\"25 25 50 50\">\n <circle class=\"circular-loader-fill\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n <circle class=\"circular-loader-circle\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n </svg>\n <div v-if=\"progress\" class=\"progress-text\">{{ progress }}</div>\n <div v-if=\"status\" class=\"uppercase t-semi w-m-10r status-text\">{{ status }}</div>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n progress: {\n type: Number,\n default: null,\n },\n status: {\n type: String,\n default: null,\n },\n centered: {\n type: Boolean,\n default: true, // По умолчанию лоадер центрирован (для обратной совместимости)\n },\n },\n};\n</script>\n\n<style>\n.circular-loader-centered {\n top: calc(50% - 1rem);\n left: calc(50% - 1rem);\n}\n\n.circular-loader svg {\n animation: rotate 2s linear infinite;\n}\n\n.circular-loader-circle {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n stroke-linecap: round;\n stroke: rgb(var(--main));\n animation: dash 1.5s ease-in-out infinite;\n}\n\n.circular-loader-fill {\n stroke-linecap: round;\n stroke: rgba(var(--black),0.2);\n}\n\n.progress-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.8rem;\n color: rgb(var(--main));;\n}\n\n.status-text {\n position: absolute;\n top: 120%;\n left: calc(50% - 5rem);\n font-size: 0.8rem;\n width: 10rem !important;\n text-align: center;\n}\n\n@keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35;\n }\n 100% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: -124;\n }\n}\n</style>"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createCommentVNode"],"mappings":";;;;;AAYA,MAAK,YAAU;AAAA,EACb,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA;;AAGf;;EA3BA,KAAA;AAAA,EAMyB,OAAM;;;EAN/B,KAAA;AAAA,EAOuB,OAAM;;;0BAN3BA,IAAAA,mBAOM,OAAA;AAAA,IAPD,OADPC,IAAAA,eAAA,CACa,0FAAwF,EAAA,4BAAuC,OAAA,UAAQ,CAAA;AAAA;8BAChJC,IAAAA,mBAGM,OAAA,EAHD,SAAQ,iBAAa;AAAA,MACxBA,IAAAA,mBAAkH,UAAA;AAAA,QAA1G,OAAM;AAAA,QAAuB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;MAC3GA,IAAAA,mBAAoH,UAAA;AAAA,QAA5G,OAAM;AAAA,QAAyB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;;IAEpG,OAAA,6BAAXF,IAAAA,mBAA+D,OAA/D,YAA+DG,IAAAA,gBAAjB,OAAA,QAAQ,GAAA,CAAA,KAN1DC,IAAAA,mBAAA,IAAA,IAAA;AAAA,IAOe,OAAA,2BAAXJ,IAAAA,mBAAkF,OAAlF,YAAkFG,IAAAA,gBAAf,OAAA,MAAM,GAAA,CAAA,KAP7EC,IAAAA,mBAAA,IAAA,IAAA;AAAA;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, toDisplayString } from "vue";
|
|
2
|
-
/* empty css
|
|
2
|
+
/* empty css */
|
|
3
3
|
import _export_sfc from "../../../../_virtual/_plugin-vue_export-helper.js";
|
|
4
4
|
const _sfc_main = {
|
|
5
5
|
props: {
|
|
@@ -58,4 +58,4 @@ const Loader = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]])
|
|
|
58
58
|
export {
|
|
59
59
|
Loader as default
|
|
60
60
|
};
|
|
61
|
-
//# sourceMappingURL=Loader.
|
|
61
|
+
//# sourceMappingURL=Loader.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loader.
|
|
1
|
+
{"version":3,"file":"Loader.vue2.js","sources":["../../../../../src/components/Loader/Loader.vue"],"sourcesContent":["<template>\n <div class=\"circular-loader pos-relative z-index-1 w-100 h-100 w-max-2r h-max-2r h-min-1r w-min-1r\" :class=\"{ 'circular-loader-centered': centered }\">\n <svg viewBox=\"25 25 50 50\">\n <circle class=\"circular-loader-fill\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n <circle class=\"circular-loader-circle\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n </svg>\n <div v-if=\"progress\" class=\"progress-text\">{{ progress }}</div>\n <div v-if=\"status\" class=\"uppercase t-semi w-m-10r status-text\">{{ status }}</div>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n progress: {\n type: Number,\n default: null,\n },\n status: {\n type: String,\n default: null,\n },\n centered: {\n type: Boolean,\n default: true, // По умолчанию лоадер центрирован (для обратной совместимости)\n },\n },\n};\n</script>\n\n<style>\n.circular-loader-centered {\n top: calc(50% - 1rem);\n left: calc(50% - 1rem);\n}\n\n.circular-loader svg {\n animation: rotate 2s linear infinite;\n}\n\n.circular-loader-circle {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n stroke-linecap: round;\n stroke: rgb(var(--main));\n animation: dash 1.5s ease-in-out infinite;\n}\n\n.circular-loader-fill {\n stroke-linecap: round;\n stroke: rgba(var(--black),0.2);\n}\n\n.progress-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.8rem;\n color: rgb(var(--main));;\n}\n\n.status-text {\n position: absolute;\n top: 120%;\n left: calc(50% - 5rem);\n font-size: 0.8rem;\n width: 10rem !important;\n text-align: center;\n}\n\n@keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35;\n }\n 100% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: -124;\n }\n}\n</style>"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createCommentVNode"],"mappings":";;;AAYA,MAAK,YAAU;AAAA,EACb,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA;;AAGf;;EA3BA,KAAA;AAAA,EAMyB,OAAM;;;EAN/B,KAAA;AAAA,EAOuB,OAAM;;;sBAN3BA,mBAOM,OAAA;AAAA,IAPD,OADPC,eAAA,CACa,0FAAwF,EAAA,4BAAuC,OAAA,UAAQ,CAAA;AAAA;8BAChJC,mBAGM,OAAA,EAHD,SAAQ,iBAAa;AAAA,MACxBA,mBAAkH,UAAA;AAAA,QAA1G,OAAM;AAAA,QAAuB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;MAC3GA,mBAAoH,UAAA;AAAA,QAA5G,OAAM;AAAA,QAAyB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;;IAEpG,OAAA,yBAAXF,mBAA+D,OAA/D,YAA+DG,gBAAjB,OAAA,QAAQ,GAAA,CAAA,KAN1DC,mBAAA,IAAA,IAAA;AAAA,IAOe,OAAA,uBAAXJ,mBAAkF,OAAlF,YAAkFG,gBAAf,OAAA,MAAM,GAAA,CAAA,KAP7EC,mBAAA,IAAA,IAAA;AAAA;;;"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const index = require("../../../../node_modules/.pnpm/@googlemaps_js-api-loader@1.16.8/node_modules/@googlemaps/js-api-loader/dist/index.cjs");
|
|
5
|
-
const Loader = require("../Loader/Loader.
|
|
5
|
+
const Loader = require("../Loader/Loader.vue2.cjs");
|
|
6
6
|
;/* empty css */
|
|
7
7
|
const _hoisted_1 = { class: "pos-relative" };
|
|
8
8
|
const _hoisted_2 = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, onMounted, watchEffect, createElementBlock, openBlock, createElementVNode, createVNode, Transition, withCtx, createBlock } from "vue";
|
|
2
2
|
import { Loader } from "../../../../node_modules/.pnpm/@googlemaps_js-api-loader@1.16.8/node_modules/@googlemaps/js-api-loader/dist/index.js";
|
|
3
|
-
import Loader$1 from "../Loader/Loader.
|
|
3
|
+
import Loader$1 from "../Loader/Loader.vue2.js";
|
|
4
4
|
/* empty css */
|
|
5
5
|
const _hoisted_1 = { class: "pos-relative" };
|
|
6
6
|
const _hoisted_2 = {
|
|
@@ -164,7 +164,7 @@ const _sfc_main = {
|
|
|
164
164
|
});
|
|
165
165
|
return (_ctx, _cache) => {
|
|
166
166
|
return vue.openBlock(), vue.createElementBlock("div", {
|
|
167
|
-
class: "photo-viewer",
|
|
167
|
+
class: "photo-viewer w-min-100",
|
|
168
168
|
onWheel: vue.withModifiers(handleWheel, ["prevent"])
|
|
169
169
|
}, [
|
|
170
170
|
vue.createElementVNode("div", {
|
|
@@ -235,6 +235,6 @@ const _sfc_main = {
|
|
|
235
235
|
};
|
|
236
236
|
}
|
|
237
237
|
};
|
|
238
|
-
const PhotoViewer = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-
|
|
238
|
+
const PhotoViewer = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-791644bb"]]);
|
|
239
239
|
exports.default = PhotoViewer;
|
|
240
240
|
//# sourceMappingURL=PhotoViewer.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhotoViewer.vue.cjs","sources":["../../../../../src/components/PhotoViewer/PhotoViewer.vue"],"sourcesContent":["<script setup>\n import { ref, computed, onMounted, onBeforeUnmount, watch } from 'vue';\n\n import IconChevronLeft from '@martyrs/src/modules/icons/navigation/IconChevronLeft.vue';\n import IconChevronRight from '@martyrs/src/modules/icons/navigation/IconChevronRight.vue';\n\n const props = defineProps({\n photoUrl: String,\n photos: Array,\n initialIndex: Number,\n show: Boolean,\n });\n\n const currentIndex = ref(0);\n const translateX = ref(0);\n const isDragging = ref(false);\n const scale = ref(1);\n const pos = ref({ x: 0, y: 0 });\n const image = ref(null);\n const thumbnailsRef = ref(null);\n\n let startX = 0, startDist = 0, startScale = 1, dragX = 0, wheelTimer, dragTimer;\n\n const photos = computed(() => props.photos?.length ? props.photos : props.photoUrl ? [props.photoUrl] : []);\n\n const sliderStyle = computed(() => ({\n transform: `translate3d(${translateX.value}px, 0, 0)`,\n transition: isDragging.value ? 'none' : 'transform 0.3s',\n backfaceVisibility: 'hidden'\n }));\n\n const imgStyle = computed(() => ({\n transform: `scale3d(${scale.value}, ${scale.value}, 1) translate3d(${pos.value.x}px, ${pos.value.y}px, 0)`,\n backfaceVisibility: 'hidden'\n }));\n\n const reset = () => {\n scale.value = 1;\n pos.value = { x: 0, y: 0 };\n };\n\n const goTo = (index) => {\n currentIndex.value = index;\n translateX.value = -index * window.innerWidth;\n reset();\n };\n\n const jumpTo = (index) => {\n isDragging.value = true;\n goTo(index);\n requestAnimationFrame(() => isDragging.value = false);\n };\n\n const scrollToThumb = (el) => {\n if (el && thumbnailsRef.value) {\n const container = thumbnailsRef.value;\n const thumb = el;\n const left = thumb.offsetLeft - container.offsetWidth / 2 + thumb.offsetWidth / 2;\n container.scrollTo({ left, behavior: 'smooth' });\n }\n };\n\n const getXY = (e) => {\n const t = e.touches?.[0] || e;\n return [t.clientX, t.clientY];\n };\n\n const constrain = () => {\n if (scale.value <= 1 || !image.value) return reset();\n \n const { naturalWidth: nw, naturalHeight: nh } = image.value;\n const [cw, ch] = [window.innerWidth, window.innerHeight];\n const r = Math.min(cw / nw, ch / nh, 1);\n \n const maxX = Math.max(0, (nw * r * scale.value - cw) / 2 / scale.value);\n const maxY = Math.max(0, (nh * r * scale.value - ch) / 2 / scale.value);\n \n pos.value.x = Math.max(-maxX, Math.min(maxX, pos.value.x));\n pos.value.y = Math.max(-maxY, Math.min(maxY, pos.value.y));\n };\n\n const zoom = (newScale, fx, fy) => {\n if (!image.value) return;\n \n newScale = Math.max(1, Math.min(3, newScale));\n const rect = image.value.getBoundingClientRect();\n const [mx, my] = [fx - rect.left - rect.width / 2, fy - rect.top - rect.height / 2];\n const change = newScale / scale.value;\n \n pos.value.x -= (mx / scale.value) * (change - 1);\n pos.value.y -= (my / scale.value) * (change - 1);\n scale.value = newScale;\n constrain();\n };\n\n const startDrag = (e) => {\n if (e.type === 'mousedown') e.preventDefault();\n isDragging.value = true;\n let [x, y] = getXY(e);\n \n const handleMove = scale.value > 1\n ? (e) => {\n if (!isDragging.value) return;\n if (e.type === 'touchmove') e.preventDefault();\n const [cx, cy] = getXY(e);\n pos.value.x += (cx - x) / scale.value;\n pos.value.y += (cy - y) / scale.value;\n constrain();\n [x, y] = [cx, cy];\n }\n : (e) => {\n if (!isDragging.value) return;\n if (e.type === 'touchmove') e.preventDefault();\n dragX = getXY(e)[0] - startX;\n translateX.value = dragX - currentIndex.value * window.innerWidth;\n };\n \n const handleEnd = () => {\n isDragging.value = false;\n if (scale.value <= 1 && Math.abs(dragX) > window.innerWidth / 4) {\n goTo(Math.max(0, Math.min(photos.value.length - 1, currentIndex.value + (dragX > 0 ? -1 : 1))));\n } else if (scale.value <= 1) {\n goTo(currentIndex.value);\n }\n dragX = 0;\n document.removeEventListener('mousemove', handleMove, { passive: true });\n document.removeEventListener('mouseup', handleEnd, { passive: true });\n document.removeEventListener('touchmove', handleMove, { passive: false });\n document.removeEventListener('touchend', handleEnd, { passive: true });\n };\n \n if (scale.value <= 1) startX = x;\n document.addEventListener('mousemove', handleMove, { passive: true });\n document.addEventListener('mouseup', handleEnd, { passive: true });\n document.addEventListener('touchmove', handleMove, { passive: false });\n document.addEventListener('touchend', handleEnd, { passive: true });\n };\n\n const handleTouchStart = (e) => {\n if (e.touches.length === 2) {\n clearTimeout(dragTimer);\n const [t1, t2] = e.touches;\n startDist = Math.hypot(t1.clientX - t2.clientX, t1.clientY - t2.clientY);\n startScale = scale.value;\n } else {\n dragTimer = setTimeout(() => startDrag(e), 50);\n }\n };\n\n const handleTouchMove = (e) => {\n if (e.touches.length === 2 && !isDragging.value) {\n clearTimeout(dragTimer);\n e.preventDefault();\n const [t1, t2] = e.touches;\n const dist = Math.hypot(t1.clientX - t2.clientX, t1.clientY - t2.clientY);\n zoom(startScale * (dist / startDist), (t1.clientX + t2.clientX) / 2, (t1.clientY + t2.clientY) / 2);\n }\n };\n\n const handleTouchEnd = () => {\n clearTimeout(dragTimer);\n startDist = 0;\n };\n\n const handleWheel = (e) => {\n clearTimeout(wheelTimer);\n wheelTimer = setTimeout(() => zoom(scale.value + (e.deltaY > 0 ? -0.1 : 0.1), e.clientX, e.clientY), 10);\n };\n\n const handleKey = (e) => {\n const dir = { ArrowLeft: -1, ArrowRight: 1 }[e.key];\n if (dir) goTo(Math.max(0, Math.min(photos.value.length - 1, currentIndex.value + dir)));\n };\n\n watch(() => props.initialIndex, (i) => i != null && jumpTo(i));\n\n onMounted(() => {\n window.addEventListener('keydown', handleKey, { passive: true });\n jumpTo(props.initialIndex || 0);\n });\n\n onBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKey);\n clearTimeout(wheelTimer);\n clearTimeout(dragTimer);\n });\n</script>\n\n<template>\n <div class=\"photo-viewer\" @wheel.prevent=\"handleWheel\">\n <div \n class=\"slider-track\" \n :style=\"sliderStyle\"\n @mousedown=\"startDrag\" \n @touchstart=\"handleTouchStart\"\n @touchmove=\"handleTouchMove\"\n @touchend=\"handleTouchEnd\"\n >\n <div \n v-for=\"(photo, index) in photos\" \n :key=\"index\"\n class=\"slide\"\n >\n <img \n :src=\"photo\" \n :style=\"index === currentIndex ? imgStyle : null\"\n :ref=\"el => index === currentIndex && (image = el)\"\n @load=\"() => index === currentIndex && reset()\" \n />\n </div>\n </div>\n \n <template \n v-if=\"photos.length > 1\"\n >\n\n <span class=\"pos-absolute pos-l-small bs-small pos-t-small radius-small pd-thin bg-white t-black t-medium\">\n {{ currentIndex + 1 }} / {{ photos.length }}\n </span>\n \n <button \n v-if=\"currentIndex > 0\" \n @click=\"goTo(currentIndex - 1)\" \n class=\"cursor-pointer hover-scale-1 bs-small pos-absolute pos-t-50 pos-l-small bg-white radius-small pd-thin\"\n >\n <IconChevronLeft fill=\"rgb(var(--black)\" class=\"i-medium\"/>\n </button>\n\n <button \n v-if=\"currentIndex < photos.length - 1\" \n @click=\"goTo(currentIndex + 1)\" \n class=\"cursor-pointer hover-scale-1 bs-small pos-absolute pos-t-50 pos-r-small bg-white radius-small pd-thin\"\n >\n <IconChevronRight fill=\"rgb(var(--black)\" class=\"i-medium\"/>\n </button>\n \n <div class=\"pos-absolute pos-b-small radius-small pd-thin bg-light thumbnails-container\">\n <div class=\"thumbnails\" ref=\"thumbnailsRef\">\n <img \n v-for=\"(photo, i) in photos\" \n :key=\"i\"\n :src=\"photo\"\n @click=\"jumpTo(i)\"\n :class=\"['thumbnail', { active: i === currentIndex }]\"\n :ref=\"el => i === currentIndex && scrollToThumb(el)\" \n />\n </div>\n </div>\n </template>\n\n </div>\n</template>\n\n<style scoped>\n.photo-viewer {\n width: 100%;\n height: 100%;\n position: relative;\n background: #fff;\n overflow: hidden;\n user-select: none;\n touch-action: none;\n}\n\n.slider-track {\n display: flex;\n height: 100%;\n cursor: grab;\n backface-visibility: hidden;\n}\n\n.slider-track:active {\n cursor: grabbing;\n}\n\n.slide {\n flex: 0 0 100%;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.slide img {\n width: 100%;\n height: 100%;\n object-fit: scale-down;\n transform-origin: center;\n pointer-events: none;\n backface-visibility: hidden;\n}\n\n.thumbnails-container {\n left: 50%;\n transform: translateX(-50%);\n max-width: 100%;\n z-index: 1;\n}\n\n.thumbnails {\n display: flex;\n gap: 0.25rem;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n.thumbnails::-webkit-scrollbar {\n display: none;\n}\n\n.thumbnail {\n width: 4rem;\n height: 4rem;\n object-fit: cover;\n cursor: pointer;\n transition: opacity 0.2s;\n border-radius: 0.25rem;\n flex-shrink: 0;\n}\n\n.thumbnail.active {\n opacity: 1;\n border: 1px solid rgb(var(--second));\n}\n\n\n@media (max-width: 768px) {\n .nav-arrow { display: none; }\n .thumbnail { width: 3rem; height: 3rem; }\n}\n</style>"],"names":["ref","computed","e","watch","onMounted","onBeforeUnmount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PhotoViewer.vue.cjs","sources":["../../../../../src/components/PhotoViewer/PhotoViewer.vue"],"sourcesContent":["<script setup>\n import { ref, computed, onMounted, onBeforeUnmount, watch } from 'vue';\n\n import IconChevronLeft from '@martyrs/src/modules/icons/navigation/IconChevronLeft.vue';\n import IconChevronRight from '@martyrs/src/modules/icons/navigation/IconChevronRight.vue';\n\n const props = defineProps({\n photoUrl: String,\n photos: Array,\n initialIndex: Number,\n show: Boolean,\n });\n\n const currentIndex = ref(0);\n const translateX = ref(0);\n const isDragging = ref(false);\n const scale = ref(1);\n const pos = ref({ x: 0, y: 0 });\n const image = ref(null);\n const thumbnailsRef = ref(null);\n\n let startX = 0, startDist = 0, startScale = 1, dragX = 0, wheelTimer, dragTimer;\n\n const photos = computed(() => props.photos?.length ? props.photos : props.photoUrl ? [props.photoUrl] : []);\n\n const sliderStyle = computed(() => ({\n transform: `translate3d(${translateX.value}px, 0, 0)`,\n transition: isDragging.value ? 'none' : 'transform 0.3s',\n backfaceVisibility: 'hidden'\n }));\n\n const imgStyle = computed(() => ({\n transform: `scale3d(${scale.value}, ${scale.value}, 1) translate3d(${pos.value.x}px, ${pos.value.y}px, 0)`,\n backfaceVisibility: 'hidden'\n }));\n\n const reset = () => {\n scale.value = 1;\n pos.value = { x: 0, y: 0 };\n };\n\n const goTo = (index) => {\n currentIndex.value = index;\n translateX.value = -index * window.innerWidth;\n reset();\n };\n\n const jumpTo = (index) => {\n isDragging.value = true;\n goTo(index);\n requestAnimationFrame(() => isDragging.value = false);\n };\n\n const scrollToThumb = (el) => {\n if (el && thumbnailsRef.value) {\n const container = thumbnailsRef.value;\n const thumb = el;\n const left = thumb.offsetLeft - container.offsetWidth / 2 + thumb.offsetWidth / 2;\n container.scrollTo({ left, behavior: 'smooth' });\n }\n };\n\n const getXY = (e) => {\n const t = e.touches?.[0] || e;\n return [t.clientX, t.clientY];\n };\n\n const constrain = () => {\n if (scale.value <= 1 || !image.value) return reset();\n \n const { naturalWidth: nw, naturalHeight: nh } = image.value;\n const [cw, ch] = [window.innerWidth, window.innerHeight];\n const r = Math.min(cw / nw, ch / nh, 1);\n \n const maxX = Math.max(0, (nw * r * scale.value - cw) / 2 / scale.value);\n const maxY = Math.max(0, (nh * r * scale.value - ch) / 2 / scale.value);\n \n pos.value.x = Math.max(-maxX, Math.min(maxX, pos.value.x));\n pos.value.y = Math.max(-maxY, Math.min(maxY, pos.value.y));\n };\n\n const zoom = (newScale, fx, fy) => {\n if (!image.value) return;\n \n newScale = Math.max(1, Math.min(3, newScale));\n const rect = image.value.getBoundingClientRect();\n const [mx, my] = [fx - rect.left - rect.width / 2, fy - rect.top - rect.height / 2];\n const change = newScale / scale.value;\n \n pos.value.x -= (mx / scale.value) * (change - 1);\n pos.value.y -= (my / scale.value) * (change - 1);\n scale.value = newScale;\n constrain();\n };\n\n const startDrag = (e) => {\n if (e.type === 'mousedown') e.preventDefault();\n isDragging.value = true;\n let [x, y] = getXY(e);\n \n const handleMove = scale.value > 1\n ? (e) => {\n if (!isDragging.value) return;\n if (e.type === 'touchmove') e.preventDefault();\n const [cx, cy] = getXY(e);\n pos.value.x += (cx - x) / scale.value;\n pos.value.y += (cy - y) / scale.value;\n constrain();\n [x, y] = [cx, cy];\n }\n : (e) => {\n if (!isDragging.value) return;\n if (e.type === 'touchmove') e.preventDefault();\n dragX = getXY(e)[0] - startX;\n translateX.value = dragX - currentIndex.value * window.innerWidth;\n };\n \n const handleEnd = () => {\n isDragging.value = false;\n if (scale.value <= 1 && Math.abs(dragX) > window.innerWidth / 4) {\n goTo(Math.max(0, Math.min(photos.value.length - 1, currentIndex.value + (dragX > 0 ? -1 : 1))));\n } else if (scale.value <= 1) {\n goTo(currentIndex.value);\n }\n dragX = 0;\n document.removeEventListener('mousemove', handleMove, { passive: true });\n document.removeEventListener('mouseup', handleEnd, { passive: true });\n document.removeEventListener('touchmove', handleMove, { passive: false });\n document.removeEventListener('touchend', handleEnd, { passive: true });\n };\n \n if (scale.value <= 1) startX = x;\n document.addEventListener('mousemove', handleMove, { passive: true });\n document.addEventListener('mouseup', handleEnd, { passive: true });\n document.addEventListener('touchmove', handleMove, { passive: false });\n document.addEventListener('touchend', handleEnd, { passive: true });\n };\n\n const handleTouchStart = (e) => {\n if (e.touches.length === 2) {\n clearTimeout(dragTimer);\n const [t1, t2] = e.touches;\n startDist = Math.hypot(t1.clientX - t2.clientX, t1.clientY - t2.clientY);\n startScale = scale.value;\n } else {\n dragTimer = setTimeout(() => startDrag(e), 50);\n }\n };\n\n const handleTouchMove = (e) => {\n if (e.touches.length === 2 && !isDragging.value) {\n clearTimeout(dragTimer);\n e.preventDefault();\n const [t1, t2] = e.touches;\n const dist = Math.hypot(t1.clientX - t2.clientX, t1.clientY - t2.clientY);\n zoom(startScale * (dist / startDist), (t1.clientX + t2.clientX) / 2, (t1.clientY + t2.clientY) / 2);\n }\n };\n\n const handleTouchEnd = () => {\n clearTimeout(dragTimer);\n startDist = 0;\n };\n\n const handleWheel = (e) => {\n clearTimeout(wheelTimer);\n wheelTimer = setTimeout(() => zoom(scale.value + (e.deltaY > 0 ? -0.1 : 0.1), e.clientX, e.clientY), 10);\n };\n\n const handleKey = (e) => {\n const dir = { ArrowLeft: -1, ArrowRight: 1 }[e.key];\n if (dir) goTo(Math.max(0, Math.min(photos.value.length - 1, currentIndex.value + dir)));\n };\n\n watch(() => props.initialIndex, (i) => i != null && jumpTo(i));\n\n onMounted(() => {\n window.addEventListener('keydown', handleKey, { passive: true });\n jumpTo(props.initialIndex || 0);\n });\n\n onBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKey);\n clearTimeout(wheelTimer);\n clearTimeout(dragTimer);\n });\n</script>\n\n<template>\n <div class=\"photo-viewer w-min-100\" @wheel.prevent=\"handleWheel\">\n <div \n class=\"slider-track\" \n :style=\"sliderStyle\"\n @mousedown=\"startDrag\" \n @touchstart=\"handleTouchStart\"\n @touchmove=\"handleTouchMove\"\n @touchend=\"handleTouchEnd\"\n >\n <div \n v-for=\"(photo, index) in photos\" \n :key=\"index\"\n class=\"slide\"\n >\n <img \n :src=\"photo\" \n :style=\"index === currentIndex ? imgStyle : null\"\n :ref=\"el => index === currentIndex && (image = el)\"\n @load=\"() => index === currentIndex && reset()\" \n />\n </div>\n </div>\n \n <template \n v-if=\"photos.length > 1\"\n >\n\n <span class=\"pos-absolute pos-l-small bs-small pos-t-small radius-small pd-thin bg-white t-black t-medium\">\n {{ currentIndex + 1 }} / {{ photos.length }}\n </span>\n \n <button \n v-if=\"currentIndex > 0\" \n @click=\"goTo(currentIndex - 1)\" \n class=\"cursor-pointer hover-scale-1 bs-small pos-absolute pos-t-50 pos-l-small bg-white radius-small pd-thin\"\n >\n <IconChevronLeft fill=\"rgb(var(--black)\" class=\"i-medium\"/>\n </button>\n\n <button \n v-if=\"currentIndex < photos.length - 1\" \n @click=\"goTo(currentIndex + 1)\" \n class=\"cursor-pointer hover-scale-1 bs-small pos-absolute pos-t-50 pos-r-small bg-white radius-small pd-thin\"\n >\n <IconChevronRight fill=\"rgb(var(--black)\" class=\"i-medium\"/>\n </button>\n \n <div class=\"pos-absolute pos-b-small radius-small pd-thin bg-light thumbnails-container\">\n <div class=\"thumbnails\" ref=\"thumbnailsRef\">\n <img \n v-for=\"(photo, i) in photos\" \n :key=\"i\"\n :src=\"photo\"\n @click=\"jumpTo(i)\"\n :class=\"['thumbnail', { active: i === currentIndex }]\"\n :ref=\"el => i === currentIndex && scrollToThumb(el)\" \n />\n </div>\n </div>\n </template>\n\n </div>\n</template>\n\n<style scoped>\n.photo-viewer {\n width: 100%;\n height: 100%;\n position: relative;\n background: #fff;\n overflow: hidden;\n user-select: none;\n touch-action: none;\n}\n\n.slider-track {\n display: flex;\n height: 100%;\n cursor: grab;\n backface-visibility: hidden;\n}\n\n.slider-track:active {\n cursor: grabbing;\n}\n\n.slide {\n flex: 0 0 100%;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.slide img {\n width: 100%;\n height: 100%;\n object-fit: scale-down;\n transform-origin: center;\n pointer-events: none;\n backface-visibility: hidden;\n}\n\n.thumbnails-container {\n left: 50%;\n transform: translateX(-50%);\n max-width: 100%;\n z-index: 1;\n}\n\n.thumbnails {\n display: flex;\n gap: 0.25rem;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n.thumbnails::-webkit-scrollbar {\n display: none;\n}\n\n.thumbnail {\n width: 4rem;\n height: 4rem;\n object-fit: cover;\n cursor: pointer;\n transition: opacity 0.2s;\n border-radius: 0.25rem;\n flex-shrink: 0;\n}\n\n.thumbnail.active {\n opacity: 1;\n border: 1px solid rgb(var(--second));\n}\n\n\n@media (max-width: 768px) {\n .nav-arrow { display: none; }\n .thumbnail { width: 3rem; height: 3rem; }\n}\n</style>"],"names":["ref","computed","e","watch","onMounted","onBeforeUnmount"],"mappings":"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"}
|
|
@@ -162,7 +162,7 @@ const _sfc_main = {
|
|
|
162
162
|
});
|
|
163
163
|
return (_ctx, _cache) => {
|
|
164
164
|
return openBlock(), createElementBlock("div", {
|
|
165
|
-
class: "photo-viewer",
|
|
165
|
+
class: "photo-viewer w-min-100",
|
|
166
166
|
onWheel: withModifiers(handleWheel, ["prevent"])
|
|
167
167
|
}, [
|
|
168
168
|
createElementVNode("div", {
|
|
@@ -233,7 +233,7 @@ const _sfc_main = {
|
|
|
233
233
|
};
|
|
234
234
|
}
|
|
235
235
|
};
|
|
236
|
-
const PhotoViewer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
236
|
+
const PhotoViewer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-791644bb"]]);
|
|
237
237
|
export {
|
|
238
238
|
PhotoViewer as default
|
|
239
239
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhotoViewer.vue.js","sources":["../../../../../src/components/PhotoViewer/PhotoViewer.vue"],"sourcesContent":["<script setup>\n import { ref, computed, onMounted, onBeforeUnmount, watch } from 'vue';\n\n import IconChevronLeft from '@martyrs/src/modules/icons/navigation/IconChevronLeft.vue';\n import IconChevronRight from '@martyrs/src/modules/icons/navigation/IconChevronRight.vue';\n\n const props = defineProps({\n photoUrl: String,\n photos: Array,\n initialIndex: Number,\n show: Boolean,\n });\n\n const currentIndex = ref(0);\n const translateX = ref(0);\n const isDragging = ref(false);\n const scale = ref(1);\n const pos = ref({ x: 0, y: 0 });\n const image = ref(null);\n const thumbnailsRef = ref(null);\n\n let startX = 0, startDist = 0, startScale = 1, dragX = 0, wheelTimer, dragTimer;\n\n const photos = computed(() => props.photos?.length ? props.photos : props.photoUrl ? [props.photoUrl] : []);\n\n const sliderStyle = computed(() => ({\n transform: `translate3d(${translateX.value}px, 0, 0)`,\n transition: isDragging.value ? 'none' : 'transform 0.3s',\n backfaceVisibility: 'hidden'\n }));\n\n const imgStyle = computed(() => ({\n transform: `scale3d(${scale.value}, ${scale.value}, 1) translate3d(${pos.value.x}px, ${pos.value.y}px, 0)`,\n backfaceVisibility: 'hidden'\n }));\n\n const reset = () => {\n scale.value = 1;\n pos.value = { x: 0, y: 0 };\n };\n\n const goTo = (index) => {\n currentIndex.value = index;\n translateX.value = -index * window.innerWidth;\n reset();\n };\n\n const jumpTo = (index) => {\n isDragging.value = true;\n goTo(index);\n requestAnimationFrame(() => isDragging.value = false);\n };\n\n const scrollToThumb = (el) => {\n if (el && thumbnailsRef.value) {\n const container = thumbnailsRef.value;\n const thumb = el;\n const left = thumb.offsetLeft - container.offsetWidth / 2 + thumb.offsetWidth / 2;\n container.scrollTo({ left, behavior: 'smooth' });\n }\n };\n\n const getXY = (e) => {\n const t = e.touches?.[0] || e;\n return [t.clientX, t.clientY];\n };\n\n const constrain = () => {\n if (scale.value <= 1 || !image.value) return reset();\n \n const { naturalWidth: nw, naturalHeight: nh } = image.value;\n const [cw, ch] = [window.innerWidth, window.innerHeight];\n const r = Math.min(cw / nw, ch / nh, 1);\n \n const maxX = Math.max(0, (nw * r * scale.value - cw) / 2 / scale.value);\n const maxY = Math.max(0, (nh * r * scale.value - ch) / 2 / scale.value);\n \n pos.value.x = Math.max(-maxX, Math.min(maxX, pos.value.x));\n pos.value.y = Math.max(-maxY, Math.min(maxY, pos.value.y));\n };\n\n const zoom = (newScale, fx, fy) => {\n if (!image.value) return;\n \n newScale = Math.max(1, Math.min(3, newScale));\n const rect = image.value.getBoundingClientRect();\n const [mx, my] = [fx - rect.left - rect.width / 2, fy - rect.top - rect.height / 2];\n const change = newScale / scale.value;\n \n pos.value.x -= (mx / scale.value) * (change - 1);\n pos.value.y -= (my / scale.value) * (change - 1);\n scale.value = newScale;\n constrain();\n };\n\n const startDrag = (e) => {\n if (e.type === 'mousedown') e.preventDefault();\n isDragging.value = true;\n let [x, y] = getXY(e);\n \n const handleMove = scale.value > 1\n ? (e) => {\n if (!isDragging.value) return;\n if (e.type === 'touchmove') e.preventDefault();\n const [cx, cy] = getXY(e);\n pos.value.x += (cx - x) / scale.value;\n pos.value.y += (cy - y) / scale.value;\n constrain();\n [x, y] = [cx, cy];\n }\n : (e) => {\n if (!isDragging.value) return;\n if (e.type === 'touchmove') e.preventDefault();\n dragX = getXY(e)[0] - startX;\n translateX.value = dragX - currentIndex.value * window.innerWidth;\n };\n \n const handleEnd = () => {\n isDragging.value = false;\n if (scale.value <= 1 && Math.abs(dragX) > window.innerWidth / 4) {\n goTo(Math.max(0, Math.min(photos.value.length - 1, currentIndex.value + (dragX > 0 ? -1 : 1))));\n } else if (scale.value <= 1) {\n goTo(currentIndex.value);\n }\n dragX = 0;\n document.removeEventListener('mousemove', handleMove, { passive: true });\n document.removeEventListener('mouseup', handleEnd, { passive: true });\n document.removeEventListener('touchmove', handleMove, { passive: false });\n document.removeEventListener('touchend', handleEnd, { passive: true });\n };\n \n if (scale.value <= 1) startX = x;\n document.addEventListener('mousemove', handleMove, { passive: true });\n document.addEventListener('mouseup', handleEnd, { passive: true });\n document.addEventListener('touchmove', handleMove, { passive: false });\n document.addEventListener('touchend', handleEnd, { passive: true });\n };\n\n const handleTouchStart = (e) => {\n if (e.touches.length === 2) {\n clearTimeout(dragTimer);\n const [t1, t2] = e.touches;\n startDist = Math.hypot(t1.clientX - t2.clientX, t1.clientY - t2.clientY);\n startScale = scale.value;\n } else {\n dragTimer = setTimeout(() => startDrag(e), 50);\n }\n };\n\n const handleTouchMove = (e) => {\n if (e.touches.length === 2 && !isDragging.value) {\n clearTimeout(dragTimer);\n e.preventDefault();\n const [t1, t2] = e.touches;\n const dist = Math.hypot(t1.clientX - t2.clientX, t1.clientY - t2.clientY);\n zoom(startScale * (dist / startDist), (t1.clientX + t2.clientX) / 2, (t1.clientY + t2.clientY) / 2);\n }\n };\n\n const handleTouchEnd = () => {\n clearTimeout(dragTimer);\n startDist = 0;\n };\n\n const handleWheel = (e) => {\n clearTimeout(wheelTimer);\n wheelTimer = setTimeout(() => zoom(scale.value + (e.deltaY > 0 ? -0.1 : 0.1), e.clientX, e.clientY), 10);\n };\n\n const handleKey = (e) => {\n const dir = { ArrowLeft: -1, ArrowRight: 1 }[e.key];\n if (dir) goTo(Math.max(0, Math.min(photos.value.length - 1, currentIndex.value + dir)));\n };\n\n watch(() => props.initialIndex, (i) => i != null && jumpTo(i));\n\n onMounted(() => {\n window.addEventListener('keydown', handleKey, { passive: true });\n jumpTo(props.initialIndex || 0);\n });\n\n onBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKey);\n clearTimeout(wheelTimer);\n clearTimeout(dragTimer);\n });\n</script>\n\n<template>\n <div class=\"photo-viewer\" @wheel.prevent=\"handleWheel\">\n <div \n class=\"slider-track\" \n :style=\"sliderStyle\"\n @mousedown=\"startDrag\" \n @touchstart=\"handleTouchStart\"\n @touchmove=\"handleTouchMove\"\n @touchend=\"handleTouchEnd\"\n >\n <div \n v-for=\"(photo, index) in photos\" \n :key=\"index\"\n class=\"slide\"\n >\n <img \n :src=\"photo\" \n :style=\"index === currentIndex ? imgStyle : null\"\n :ref=\"el => index === currentIndex && (image = el)\"\n @load=\"() => index === currentIndex && reset()\" \n />\n </div>\n </div>\n \n <template \n v-if=\"photos.length > 1\"\n >\n\n <span class=\"pos-absolute pos-l-small bs-small pos-t-small radius-small pd-thin bg-white t-black t-medium\">\n {{ currentIndex + 1 }} / {{ photos.length }}\n </span>\n \n <button \n v-if=\"currentIndex > 0\" \n @click=\"goTo(currentIndex - 1)\" \n class=\"cursor-pointer hover-scale-1 bs-small pos-absolute pos-t-50 pos-l-small bg-white radius-small pd-thin\"\n >\n <IconChevronLeft fill=\"rgb(var(--black)\" class=\"i-medium\"/>\n </button>\n\n <button \n v-if=\"currentIndex < photos.length - 1\" \n @click=\"goTo(currentIndex + 1)\" \n class=\"cursor-pointer hover-scale-1 bs-small pos-absolute pos-t-50 pos-r-small bg-white radius-small pd-thin\"\n >\n <IconChevronRight fill=\"rgb(var(--black)\" class=\"i-medium\"/>\n </button>\n \n <div class=\"pos-absolute pos-b-small radius-small pd-thin bg-light thumbnails-container\">\n <div class=\"thumbnails\" ref=\"thumbnailsRef\">\n <img \n v-for=\"(photo, i) in photos\" \n :key=\"i\"\n :src=\"photo\"\n @click=\"jumpTo(i)\"\n :class=\"['thumbnail', { active: i === currentIndex }]\"\n :ref=\"el => i === currentIndex && scrollToThumb(el)\" \n />\n </div>\n </div>\n </template>\n\n </div>\n</template>\n\n<style scoped>\n.photo-viewer {\n width: 100%;\n height: 100%;\n position: relative;\n background: #fff;\n overflow: hidden;\n user-select: none;\n touch-action: none;\n}\n\n.slider-track {\n display: flex;\n height: 100%;\n cursor: grab;\n backface-visibility: hidden;\n}\n\n.slider-track:active {\n cursor: grabbing;\n}\n\n.slide {\n flex: 0 0 100%;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.slide img {\n width: 100%;\n height: 100%;\n object-fit: scale-down;\n transform-origin: center;\n pointer-events: none;\n backface-visibility: hidden;\n}\n\n.thumbnails-container {\n left: 50%;\n transform: translateX(-50%);\n max-width: 100%;\n z-index: 1;\n}\n\n.thumbnails {\n display: flex;\n gap: 0.25rem;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n.thumbnails::-webkit-scrollbar {\n display: none;\n}\n\n.thumbnail {\n width: 4rem;\n height: 4rem;\n object-fit: cover;\n cursor: pointer;\n transition: opacity 0.2s;\n border-radius: 0.25rem;\n flex-shrink: 0;\n}\n\n.thumbnail.active {\n opacity: 1;\n border: 1px solid rgb(var(--second));\n}\n\n\n@media (max-width: 768px) {\n .nav-arrow { display: none; }\n .thumbnail { width: 3rem; height: 3rem; }\n}\n</style>"],"names":["e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PhotoViewer.vue.js","sources":["../../../../../src/components/PhotoViewer/PhotoViewer.vue"],"sourcesContent":["<script setup>\n import { ref, computed, onMounted, onBeforeUnmount, watch } from 'vue';\n\n import IconChevronLeft from '@martyrs/src/modules/icons/navigation/IconChevronLeft.vue';\n import IconChevronRight from '@martyrs/src/modules/icons/navigation/IconChevronRight.vue';\n\n const props = defineProps({\n photoUrl: String,\n photos: Array,\n initialIndex: Number,\n show: Boolean,\n });\n\n const currentIndex = ref(0);\n const translateX = ref(0);\n const isDragging = ref(false);\n const scale = ref(1);\n const pos = ref({ x: 0, y: 0 });\n const image = ref(null);\n const thumbnailsRef = ref(null);\n\n let startX = 0, startDist = 0, startScale = 1, dragX = 0, wheelTimer, dragTimer;\n\n const photos = computed(() => props.photos?.length ? props.photos : props.photoUrl ? [props.photoUrl] : []);\n\n const sliderStyle = computed(() => ({\n transform: `translate3d(${translateX.value}px, 0, 0)`,\n transition: isDragging.value ? 'none' : 'transform 0.3s',\n backfaceVisibility: 'hidden'\n }));\n\n const imgStyle = computed(() => ({\n transform: `scale3d(${scale.value}, ${scale.value}, 1) translate3d(${pos.value.x}px, ${pos.value.y}px, 0)`,\n backfaceVisibility: 'hidden'\n }));\n\n const reset = () => {\n scale.value = 1;\n pos.value = { x: 0, y: 0 };\n };\n\n const goTo = (index) => {\n currentIndex.value = index;\n translateX.value = -index * window.innerWidth;\n reset();\n };\n\n const jumpTo = (index) => {\n isDragging.value = true;\n goTo(index);\n requestAnimationFrame(() => isDragging.value = false);\n };\n\n const scrollToThumb = (el) => {\n if (el && thumbnailsRef.value) {\n const container = thumbnailsRef.value;\n const thumb = el;\n const left = thumb.offsetLeft - container.offsetWidth / 2 + thumb.offsetWidth / 2;\n container.scrollTo({ left, behavior: 'smooth' });\n }\n };\n\n const getXY = (e) => {\n const t = e.touches?.[0] || e;\n return [t.clientX, t.clientY];\n };\n\n const constrain = () => {\n if (scale.value <= 1 || !image.value) return reset();\n \n const { naturalWidth: nw, naturalHeight: nh } = image.value;\n const [cw, ch] = [window.innerWidth, window.innerHeight];\n const r = Math.min(cw / nw, ch / nh, 1);\n \n const maxX = Math.max(0, (nw * r * scale.value - cw) / 2 / scale.value);\n const maxY = Math.max(0, (nh * r * scale.value - ch) / 2 / scale.value);\n \n pos.value.x = Math.max(-maxX, Math.min(maxX, pos.value.x));\n pos.value.y = Math.max(-maxY, Math.min(maxY, pos.value.y));\n };\n\n const zoom = (newScale, fx, fy) => {\n if (!image.value) return;\n \n newScale = Math.max(1, Math.min(3, newScale));\n const rect = image.value.getBoundingClientRect();\n const [mx, my] = [fx - rect.left - rect.width / 2, fy - rect.top - rect.height / 2];\n const change = newScale / scale.value;\n \n pos.value.x -= (mx / scale.value) * (change - 1);\n pos.value.y -= (my / scale.value) * (change - 1);\n scale.value = newScale;\n constrain();\n };\n\n const startDrag = (e) => {\n if (e.type === 'mousedown') e.preventDefault();\n isDragging.value = true;\n let [x, y] = getXY(e);\n \n const handleMove = scale.value > 1\n ? (e) => {\n if (!isDragging.value) return;\n if (e.type === 'touchmove') e.preventDefault();\n const [cx, cy] = getXY(e);\n pos.value.x += (cx - x) / scale.value;\n pos.value.y += (cy - y) / scale.value;\n constrain();\n [x, y] = [cx, cy];\n }\n : (e) => {\n if (!isDragging.value) return;\n if (e.type === 'touchmove') e.preventDefault();\n dragX = getXY(e)[0] - startX;\n translateX.value = dragX - currentIndex.value * window.innerWidth;\n };\n \n const handleEnd = () => {\n isDragging.value = false;\n if (scale.value <= 1 && Math.abs(dragX) > window.innerWidth / 4) {\n goTo(Math.max(0, Math.min(photos.value.length - 1, currentIndex.value + (dragX > 0 ? -1 : 1))));\n } else if (scale.value <= 1) {\n goTo(currentIndex.value);\n }\n dragX = 0;\n document.removeEventListener('mousemove', handleMove, { passive: true });\n document.removeEventListener('mouseup', handleEnd, { passive: true });\n document.removeEventListener('touchmove', handleMove, { passive: false });\n document.removeEventListener('touchend', handleEnd, { passive: true });\n };\n \n if (scale.value <= 1) startX = x;\n document.addEventListener('mousemove', handleMove, { passive: true });\n document.addEventListener('mouseup', handleEnd, { passive: true });\n document.addEventListener('touchmove', handleMove, { passive: false });\n document.addEventListener('touchend', handleEnd, { passive: true });\n };\n\n const handleTouchStart = (e) => {\n if (e.touches.length === 2) {\n clearTimeout(dragTimer);\n const [t1, t2] = e.touches;\n startDist = Math.hypot(t1.clientX - t2.clientX, t1.clientY - t2.clientY);\n startScale = scale.value;\n } else {\n dragTimer = setTimeout(() => startDrag(e), 50);\n }\n };\n\n const handleTouchMove = (e) => {\n if (e.touches.length === 2 && !isDragging.value) {\n clearTimeout(dragTimer);\n e.preventDefault();\n const [t1, t2] = e.touches;\n const dist = Math.hypot(t1.clientX - t2.clientX, t1.clientY - t2.clientY);\n zoom(startScale * (dist / startDist), (t1.clientX + t2.clientX) / 2, (t1.clientY + t2.clientY) / 2);\n }\n };\n\n const handleTouchEnd = () => {\n clearTimeout(dragTimer);\n startDist = 0;\n };\n\n const handleWheel = (e) => {\n clearTimeout(wheelTimer);\n wheelTimer = setTimeout(() => zoom(scale.value + (e.deltaY > 0 ? -0.1 : 0.1), e.clientX, e.clientY), 10);\n };\n\n const handleKey = (e) => {\n const dir = { ArrowLeft: -1, ArrowRight: 1 }[e.key];\n if (dir) goTo(Math.max(0, Math.min(photos.value.length - 1, currentIndex.value + dir)));\n };\n\n watch(() => props.initialIndex, (i) => i != null && jumpTo(i));\n\n onMounted(() => {\n window.addEventListener('keydown', handleKey, { passive: true });\n jumpTo(props.initialIndex || 0);\n });\n\n onBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKey);\n clearTimeout(wheelTimer);\n clearTimeout(dragTimer);\n });\n</script>\n\n<template>\n <div class=\"photo-viewer w-min-100\" @wheel.prevent=\"handleWheel\">\n <div \n class=\"slider-track\" \n :style=\"sliderStyle\"\n @mousedown=\"startDrag\" \n @touchstart=\"handleTouchStart\"\n @touchmove=\"handleTouchMove\"\n @touchend=\"handleTouchEnd\"\n >\n <div \n v-for=\"(photo, index) in photos\" \n :key=\"index\"\n class=\"slide\"\n >\n <img \n :src=\"photo\" \n :style=\"index === currentIndex ? imgStyle : null\"\n :ref=\"el => index === currentIndex && (image = el)\"\n @load=\"() => index === currentIndex && reset()\" \n />\n </div>\n </div>\n \n <template \n v-if=\"photos.length > 1\"\n >\n\n <span class=\"pos-absolute pos-l-small bs-small pos-t-small radius-small pd-thin bg-white t-black t-medium\">\n {{ currentIndex + 1 }} / {{ photos.length }}\n </span>\n \n <button \n v-if=\"currentIndex > 0\" \n @click=\"goTo(currentIndex - 1)\" \n class=\"cursor-pointer hover-scale-1 bs-small pos-absolute pos-t-50 pos-l-small bg-white radius-small pd-thin\"\n >\n <IconChevronLeft fill=\"rgb(var(--black)\" class=\"i-medium\"/>\n </button>\n\n <button \n v-if=\"currentIndex < photos.length - 1\" \n @click=\"goTo(currentIndex + 1)\" \n class=\"cursor-pointer hover-scale-1 bs-small pos-absolute pos-t-50 pos-r-small bg-white radius-small pd-thin\"\n >\n <IconChevronRight fill=\"rgb(var(--black)\" class=\"i-medium\"/>\n </button>\n \n <div class=\"pos-absolute pos-b-small radius-small pd-thin bg-light thumbnails-container\">\n <div class=\"thumbnails\" ref=\"thumbnailsRef\">\n <img \n v-for=\"(photo, i) in photos\" \n :key=\"i\"\n :src=\"photo\"\n @click=\"jumpTo(i)\"\n :class=\"['thumbnail', { active: i === currentIndex }]\"\n :ref=\"el => i === currentIndex && scrollToThumb(el)\" \n />\n </div>\n </div>\n </template>\n\n </div>\n</template>\n\n<style scoped>\n.photo-viewer {\n width: 100%;\n height: 100%;\n position: relative;\n background: #fff;\n overflow: hidden;\n user-select: none;\n touch-action: none;\n}\n\n.slider-track {\n display: flex;\n height: 100%;\n cursor: grab;\n backface-visibility: hidden;\n}\n\n.slider-track:active {\n cursor: grabbing;\n}\n\n.slide {\n flex: 0 0 100%;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.slide img {\n width: 100%;\n height: 100%;\n object-fit: scale-down;\n transform-origin: center;\n pointer-events: none;\n backface-visibility: hidden;\n}\n\n.thumbnails-container {\n left: 50%;\n transform: translateX(-50%);\n max-width: 100%;\n z-index: 1;\n}\n\n.thumbnails {\n display: flex;\n gap: 0.25rem;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n.thumbnails::-webkit-scrollbar {\n display: none;\n}\n\n.thumbnail {\n width: 4rem;\n height: 4rem;\n object-fit: cover;\n cursor: pointer;\n transition: opacity 0.2s;\n border-radius: 0.25rem;\n flex-shrink: 0;\n}\n\n.thumbnail.active {\n opacity: 1;\n border: 1px solid rgb(var(--second));\n}\n\n\n@media (max-width: 768px) {\n .nav-arrow { display: none; }\n .thumbnail { width: 3rem; height: 3rem; }\n}\n</style>"],"names":["e"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
|
-
;/* empty css
|
|
4
|
+
;/* empty css */
|
|
5
5
|
const _sfc_main = {
|
|
6
6
|
__name: "Spoiler",
|
|
7
7
|
props: {
|
|
@@ -70,4 +70,4 @@ const _sfc_main = {
|
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
72
|
exports.default = _sfc_main;
|
|
73
|
-
//# sourceMappingURL=Spoiler.
|
|
73
|
+
//# sourceMappingURL=Spoiler.vue2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spoiler.vue2.cjs","sources":["../../../../../src/components/Spoiler/Spoiler.vue"],"sourcesContent":["<template>\n <div>\n <div @click=\"toggleSpoiler\" class=\"flex-v-center flex-nowrap flex\">\n <slot name=\"header\" :isOpen=\"showSpoiler\"></slot>\n </div>\n <transition\n name=\"collapse\"\n @enter=\"onEnter\"\n @after-enter=\"onAfterEnter\"\n @leave=\"onLeave\"\n >\n <div v-show=\"showSpoiler\" class=\"spoiler\" ref=\"spoilerContent\">\n <slot name=\"content\"></slot>\n </div>\n </transition>\n </div>\n</template>\n<script setup>\nimport { ref, onMounted } from 'vue';\n\nconst props = defineProps({\n status: {\n type: Boolean,\n default: false\n }\n});\n\nconst showSpoiler = ref(false);\nconst spoilerContent = ref(null);\n\nonMounted(() => {\n if (props.status) {\n showSpoiler.value = props.status;\n }\n});\n\nconst toggleSpoiler = () => {\n showSpoiler.value = !showSpoiler.value;\n};\n\n// Анимация открытия\nconst onEnter = (el) => {\n el.style.height = '0';\n void el.offsetHeight; // force reflow\n el.style.height = el.scrollHeight + 'px';\n};\n\nconst onAfterEnter = (el) => {\n el.style.height = 'auto';\n};\n\n// Анимация закрытия\nconst onLeave = (el) => {\n el.style.height = el.scrollHeight + 'px';\n void el.offsetHeight; // force reflow\n el.style.height = '0';\n};\n\ndefineExpose({\n showSpoiler\n});\n</script>\n<style lang=\"scss\">\n.spoiler {\n overflow: hidden;\n transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n</style>"],"names":["ref","onMounted"],"mappings":";;;;;;;;;;;;;AAoBA,UAAM,QAAQ;AAOd,UAAM,cAAcA,IAAAA,IAAI,KAAK;AAC7B,UAAM,iBAAiBA,IAAAA,IAAI,IAAI;AAE/BC,QAAAA,UAAU,MAAM;AACd,UAAI,MAAM,QAAQ;AAChB,oBAAY,QAAQ,MAAM;AAAA,MAC5B;AAAA,IACF,CAAC;AAED,UAAM,gBAAgB,MAAM;AAC1B,kBAAY,QAAQ,CAAC,YAAY;AAAA,IACnC;AAGA,UAAM,UAAU,CAAC,OAAO;AACtB,SAAG,MAAM,SAAS;AAClB,WAAK,GAAG;AACR,SAAG,MAAM,SAAS,GAAG,eAAe;AAAA,IACtC;AAEA,UAAM,eAAe,CAAC,OAAO;AAC3B,SAAG,MAAM,SAAS;AAAA,IACpB;AAGA,UAAM,UAAU,CAAC,OAAO;AACtB,SAAG,MAAM,SAAS,GAAG,eAAe;AACpC,WAAK,GAAG;AACR,SAAG,MAAM,SAAS;AAAA,IACpB;AAEA,aAAa;AAAA,MACX;AAAA,IACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|