@ozdao/martyrs 0.2.571 → 0.2.572
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/dayjs.min.js +1 -1
- package/dist/_virtual/weekOfYear.js +1 -1
- package/dist/builder.js +1194 -45
- package/dist/{main-BFvlam0J.js → main-BfEQkhXS.js} +1173 -1191
- package/dist/martyrs/dist/{main-BFvlam0J.js → main-BfEQkhXS.js} +94 -112
- package/dist/martyrs/dist/main-BfEQkhXS.js.map +1 -0
- package/dist/martyrs/dist/{web-CH5wzMHy.js → web-BqTV9va1.js} +3 -3
- package/dist/martyrs/dist/{web-CH5wzMHy.js.map → web-BqTV9va1.js.map} +1 -1
- package/dist/martyrs/node_modules/.pnpm/{@capacitor_core@7.0.1 → @capacitor_core@7.4.4}/node_modules/@capacitor/core/dist/index.js +2 -1
- package/dist/martyrs/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js.map +1 -0
- package/dist/martyrs/node_modules/.pnpm/{@capacitor_preferences@7.0.0_@capacitor_core@7.0.1 → @capacitor_preferences@7.0.2_@capacitor_core@7.4.4}/node_modules/@capacitor/preferences/dist/esm/index.js +1 -1
- package/dist/martyrs/node_modules/.pnpm/{@capacitor_preferences@7.0.0_@capacitor_core@7.0.1 → @capacitor_preferences@7.0.2_@capacitor_core@7.4.4}/node_modules/@capacitor/preferences/dist/esm/index.js.map +1 -1
- package/dist/martyrs/node_modules/.pnpm/{@capacitor_preferences@7.0.0_@capacitor_core@7.0.1 → @capacitor_preferences@7.0.2_@capacitor_core@7.4.4}/node_modules/@capacitor/preferences/dist/esm/web.js +1 -1
- package/dist/martyrs/node_modules/.pnpm/{@capacitor_preferences@7.0.0_@capacitor_core@7.0.1 → @capacitor_preferences@7.0.2_@capacitor_core@7.4.4}/node_modules/@capacitor/preferences/dist/esm/web.js.map +1 -1
- package/dist/{node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_ → martyrs}/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js +1 -1
- package/dist/martyrs/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js.map +1 -0
- package/dist/martyrs/node_modules/@vue/shared/dist/shared.esm-bundler.js.map +1 -0
- package/dist/{node_modules/.pnpm/dayjs@1.11.13 → martyrs}/node_modules/dayjs/dayjs.min.js +1 -1
- package/dist/martyrs/node_modules/dayjs/dayjs.min.js.map +1 -0
- package/dist/{node_modules/.pnpm/dayjs@1.11.13 → martyrs}/node_modules/dayjs/plugin/weekOfYear.js +1 -1
- package/dist/martyrs/node_modules/dayjs/plugin/weekOfYear.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.js +5 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/rng.js +15 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/rng.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.js +17 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.js +13 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.js +8 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.js.map +1 -0
- package/dist/martyrs/src/components/Block/Block.vue.js +2 -2
- package/dist/martyrs/src/components/Block/Block.vue.js.map +1 -1
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js +1 -1
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js.map +1 -1
- package/dist/martyrs/src/components/Button/Button.vue2.js +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue2.js +6 -6
- package/dist/martyrs/src/components/Calendar/Calendar.vue2.js.map +1 -1
- package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js +2 -2
- package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js.map +1 -1
- package/dist/martyrs/src/components/Chips/Chips.vue.js +2 -2
- package/dist/martyrs/src/components/Countdown/Countdown.vue.js +5 -5
- package/dist/martyrs/src/components/Countdown/Countdown.vue.js.map +1 -1
- package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js +4 -4
- package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js.map +1 -1
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.js.map +1 -0
- package/dist/martyrs/src/components/EditImages/{EditImages.vue.js → EditImages.vue2.js} +3 -3
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +4 -4
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +2 -2
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js +1 -1
- package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js +1 -1
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js.map +1 -1
- package/dist/martyrs/src/components/Loader/{Loader.vue.js → Loader.vue2.js} +3 -3
- package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +1 -0
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js +1 -1
- package/dist/martyrs/src/components/Media/Media.vue.js +1 -1
- package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Menu/MenuItem.vue.js +2 -2
- package/dist/martyrs/src/components/Menu/MenuItem.vue.js.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/Radio/Radio.vue.js +1 -1
- package/dist/martyrs/src/components/Radio/Radio.vue.js.map +1 -1
- package/dist/martyrs/src/components/Select/Select.vue.js +2 -2
- package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -1
- package/dist/martyrs/src/components/Table/Table.vue.js +3 -3
- package/dist/martyrs/src/components/Table/Table.vue.js.map +1 -1
- package/dist/martyrs/src/components/Text/Text.vue.js +1 -1
- package/dist/martyrs/src/components/Text/Text.vue.js.map +1 -1
- package/dist/martyrs/src/components/Tooltip/{Tooltip.vue.js → Tooltip.vue2.js} +2 -2
- package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.js.map +1 -0
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +4 -4
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +1 -1
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +4 -4
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/blocks/ProfileCard.vue.js +4 -4
- package/dist/martyrs/src/modules/auth/views/components/blocks/ProfileCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +8 -8
- 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.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js.map +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/ResetPassword.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +3 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js +3 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +7 -7
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js +1 -1
- package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js +4 -4
- package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +5 -5
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js +1 -1
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js +2 -2
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/Activity.vue.js +7 -7
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/FooterBlogpost.vue.js +4 -4
- package/dist/martyrs/src/modules/community/components/blocks/FooterBlogpost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +10 -10
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +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.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/sections/Comment.vue.js +3 -3
- package/dist/martyrs/src/modules/community/components/sections/Comment.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/sections/Comments.vue.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Audio.vue.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Audio.vue.js.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Textarea.vue2.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Textarea.vue2.js.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Video.vue.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Video.vue.js.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/classes/core.app.js +2 -1
- package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/BlockSorting.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/blocks/BlockSorting.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +10 -10
- package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/HelpCard.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/blocks/HelpCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/elements/ButtonDate.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/elements/ButtonDate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/elements/PhotoStack.vue.js +3 -3
- package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js +25 -5
- package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +4 -4
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/BottomNavigationBar.vue.js +11 -11
- package/dist/martyrs/src/modules/core/views/components/partials/BottomNavigationBar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/CitySelection.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/CitySelection.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/Footer.vue.js +16 -16
- package/dist/martyrs/src/modules/core/views/components/partials/Footer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +7 -7
- package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/LocationSelection.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/LocationSelection.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +24 -24
- package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +3 -3
- package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/Sidebar.vue.js +7 -7
- package/dist/martyrs/src/modules/core/views/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/{Filters.vue.js → Filters.vue2.js} +2 -2
- package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +1 -0
- package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/Walkthrough.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterCheckbox.vue2.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterCheckbox.vue2.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterDateRange.vue2.js +3 -3
- package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterDateRange.vue2.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterRange.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterRange.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/store/core.store.js +29 -47
- package/dist/martyrs/src/modules/core/views/store/core.store.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +21 -2
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +5 -5
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEventShort.vue.js +3 -3
- package/dist/martyrs/src/modules/events/components/blocks/CardEventShort.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +3 -3
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +19 -19
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +8 -8
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +5 -5
- package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.js.map +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.js +2 -2
- package/dist/martyrs/src/modules/events/components/sections/List.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.js.map +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js +4 -4
- package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/navigation/IconSort.vue.js +4 -4
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +7 -7
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +3 -3
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +2 -2
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +11 -11
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +6 -6
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js +5 -5
- package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +2 -2
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.js +2 -2
- package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js +3 -3
- package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionOverview.vue.js +2 -2
- package/dist/martyrs/src/modules/landing/components/sections/SectionOverview.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionRoadmap.vue.js +3 -3
- package/dist/martyrs/src/modules/landing/components/sections/SectionRoadmap.vue.js.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +6 -6
- package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +4 -4
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +5 -5
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js +4 -4
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +5 -5
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +5 -5
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +8 -8
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +5 -5
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +7 -7
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +13 -13
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +24 -24
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +8 -8
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +10 -13
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +9 -9
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +27 -27
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +17 -17
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +27 -27
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +8 -8
- package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/music.client.js +6 -6
- package/dist/martyrs/src/modules/music/music.client.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/blocks/NotificationItem.vue.js +2 -2
- package/dist/martyrs/src/modules/notifications/components/blocks/NotificationItem.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.js +2 -2
- package/dist/martyrs/src/modules/notifications/store/notifications.store.js +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.js +9 -9
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +5 -5
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js +9 -9
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +5 -5
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/StatusHistory.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/StatusHistory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +17 -17
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +4 -4
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/AskToLogin.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/AskToLogin.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/components/sections/Succes.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/store/shopcart.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Contacts.vue.js +8 -8
- package/dist/martyrs/src/modules/organizations/components/blocks/Contacts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Rating.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +7 -7
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +4 -4
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +3 -3
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.js +5 -5
- package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +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/CardPosition.vue.js +4 -4
- package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +5 -5
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +5 -5
- package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Price.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/elements/Price.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/elements/THC.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +4 -4
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +7 -7
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +7 -7
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +12 -12
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +4 -4
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +6 -6
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +9 -9
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +6 -6
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/blocks/CardRent.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/blocks/CardRent.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/DateLabel.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js +2 -2
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js +8 -8
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttHeaderCell.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttHeaderCell.vue.js.map +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.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +6 -6
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/reports/components/pages/BackofficeReports.vue.js +3 -3
- package/dist/martyrs/src/modules/reports/components/pages/BackofficeReports.vue.js.map +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +5 -5
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +3 -3
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +6 -6
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +3 -3
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +5 -5
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js +5 -5
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js.map +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +5 -5
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +4 -4
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js +12 -12
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js.map +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/elements/ConnectMetamask.vue.js +4 -4
- package/dist/martyrs/src/modules/wallet/views/components/elements/ConnectMetamask.vue.js.map +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +24 -24
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +1 -1
- package/dist/style.css +194 -202
- package/dist/{web-CH5wzMHy.js → web-BqTV9va1.js} +1 -1
- package/package.json +6 -8
- package/src/builder/modes/ssr.prod.js +1 -0
- package/src/builder/modes/ssr.rspack.dev.js +13 -6
- package/src/builder/rspack/rspack.config.base.js +7 -0
- package/src/builder/rspack/rspack.config.ssr.client.js +19 -44
- package/src/builder/templates/page.js +21 -0
- package/src/components/Block/Block.vue +1 -1
- package/src/components/BottomSheet/BottomSheet.vue +1 -1
- package/src/components/Calendar/Calendar.vue +5 -5
- package/src/components/Checkbox/Checkbox.vue +2 -2
- package/src/components/Chips/Chips.vue +2 -2
- package/src/components/Completion/Completion.vue +2 -2
- package/src/components/Countdown/Countdown.vue +5 -5
- package/src/components/DatePicker/DatePicker.vue +4 -4
- package/src/components/EditImages/EditImages.vue +1 -1
- package/src/components/Feed/Feed.old.vue +1 -1
- package/src/components/Feed/Feed.vue +1 -1
- package/src/components/FieldBig/FieldBig.vue +2 -2
- package/src/components/FieldPhone/FieldPhone.vue +1 -1
- package/src/components/FieldTags/BlockTags.vue +1 -1
- package/src/components/Loader/Loader.vue +1 -1
- package/src/components/Menu/MenuItem.vue +2 -2
- package/src/components/PhotoViewer/PhotoViewer.vue +1 -1
- package/src/components/Radio/Radio.vue +1 -1
- package/src/components/Select/Select.vue +1 -1
- package/src/components/Table/Table.vue +2 -2
- package/src/components/Text/Text.vue +1 -1
- package/src/components/UploadImage/UploadImage.vue +2 -2
- package/src/components/UploadImageMultiple/UploadImageMultiple.vue +3 -3
- package/src/configurator/components/layouts/layoutConfigurator.vue +1 -1
- package/src/configurator/components/pages/Styles.vue +2 -2
- package/src/jit/.claude/settings.local.json +10 -0
- package/src/jit/CLAUDE.md +387 -0
- package/src/jit/core.js +274 -0
- package/src/jit/extractor.js +140 -0
- package/src/jit/index.js +19 -0
- package/src/jit/loader.js +46 -0
- package/src/jit/plugin.js +209 -0
- package/src/jit/rules.js +474 -0
- package/src/jit/variants.js +128 -0
- package/src/modules/auth/views/components/blocks/CardUser.vue +2 -2
- package/src/modules/auth/views/components/blocks/ProfileCard.vue +4 -4
- package/src/modules/auth/views/components/layouts/Auth.vue +1 -1
- package/src/modules/auth/views/components/pages/EnterPassword.vue +2 -2
- package/src/modules/auth/views/components/pages/Profile.vue +5 -5
- package/src/modules/auth/views/components/pages/ProfileBlogposts.vue +1 -1
- package/src/modules/auth/views/components/pages/ProfileEditAccount.vue +2 -2
- package/src/modules/auth/views/components/pages/ResetPassword.vue +1 -1
- package/src/modules/auth/views/components/pages/SignIn.vue +3 -3
- package/src/modules/auth/views/components/pages/SignUp.vue +1 -1
- package/src/modules/auth/views/components/pages/UserDashboard.vue +3 -3
- package/src/modules/auth/views/components/sections/FeaturedUsers.vue +1 -1
- package/src/modules/auth/views/components/sections/ProfileCompletion.vue +2 -2
- package/src/modules/auth/views/components/sections/ProfileEditCredentials.vue +7 -7
- package/src/modules/auth/views/components/sections/SliderFeatures.vue +1 -1
- package/src/modules/backoffice/components/admin/Backcalls.vue +1 -1
- package/src/modules/backoffice/components/admin/FastOrders.vue +1 -1
- package/src/modules/backoffice/components/admin/ProductEdit.vue +2 -2
- package/src/modules/backoffice/components/admin/UserEdit.vue +1 -1
- package/src/modules/backoffice/components/admin/Users.vue +2 -2
- package/src/modules/backoffice/components/pages/Dashboard.vue +4 -4
- package/src/modules/backoffice/components/partials/Sidebar.vue +5 -5
- package/src/modules/chats/components/blocks/ChatMessage.vue +1 -1
- package/src/modules/chats/components/sections/ChatWindow.vue +2 -2
- package/src/modules/community/components/blocks/Activity.vue +7 -7
- package/src/modules/community/components/blocks/CardBlogpost.vue +1 -1
- package/src/modules/community/components/blocks/FooterBlogpost.vue +4 -4
- package/src/modules/community/components/layouts/Community.vue +10 -10
- package/src/modules/community/components/pages/CreateBlogPost.vue +1 -1
- package/src/modules/community/components/pages/Posts.vue +2 -2
- package/src/modules/community/components/sections/Comment.vue +2 -2
- package/src/modules/constructor/components/elements/Audio.vue +1 -1
- package/src/modules/constructor/components/elements/Caption.vue +1 -1
- package/src/modules/constructor/components/elements/Embed.vue +1 -1
- package/src/modules/constructor/components/elements/Textarea.vue +1 -1
- package/src/modules/constructor/components/elements/Video.vue +1 -1
- package/src/modules/core/views/classes/core.app.js +2 -1
- package/src/modules/core/views/components/blocks/BlockSorting.vue +2 -2
- package/src/modules/core/views/components/blocks/CardFooter.vue +4 -4
- package/src/modules/core/views/components/blocks/CardHeader.vue +7 -7
- package/src/modules/core/views/components/blocks/HelpCard.vue +1 -1
- package/src/modules/core/views/components/blocks/PopupAuth.vue +1 -1
- package/src/modules/core/views/components/elements/ButtonDate.vue +1 -1
- package/src/modules/core/views/components/elements/PhotoStack.vue +3 -3
- package/src/modules/core/views/components/layouts/App.vue +28 -4
- package/src/modules/core/views/components/layouts/Client.vue +4 -4
- package/src/modules/core/views/components/partials/BottomNavigationBar.vue +15 -15
- package/src/modules/core/views/components/partials/CitySelection.vue +1 -1
- package/src/modules/core/views/components/partials/Footer.centered.vue +17 -17
- package/src/modules/core/views/components/partials/Footer.vue +18 -18
- package/src/modules/core/views/components/partials/Header.vue +10 -11
- package/src/modules/core/views/components/partials/LocationSelection.vue +1 -1
- package/src/modules/core/views/components/partials/Navigation.vue +20 -19
- package/src/modules/core/views/components/partials/NavigationBar.vue +3 -3
- package/src/modules/core/views/components/partials/Sidebar.vue +6 -6
- package/src/modules/core/views/components/sections/SectionPageTitle.vue +2 -2
- package/src/modules/core/views/components/sections/filters/FilterCheckbox.vue +1 -1
- package/src/modules/core/views/components/sections/filters/FilterDateRange.vue +2 -2
- package/src/modules/core/views/components/sections/filters/FilterPrice.vue +2 -2
- package/src/modules/core/views/components/sections/filters/FilterRange.vue +2 -2
- package/src/modules/core/views/store/core.store.js +36 -60
- package/src/modules/core/views/utils/vue-app-renderer.js +31 -1
- package/src/modules/events/components/blocks/CardEvent.vue +6 -6
- package/src/modules/events/components/blocks/CardEventShort.vue +3 -3
- package/src/modules/events/components/pages/EditEvent.vue +1 -1
- package/src/modules/events/components/pages/EditEventTickets.vue +18 -18
- package/src/modules/events/components/pages/Event.vue +5 -5
- package/src/modules/events/components/pages/Events.vue +2 -2
- package/src/modules/events/components/pages/EventsBackoffice.vue +2 -2
- package/src/modules/events/components/sections/EditTickets.vue +5 -5
- package/src/modules/events/components/sections/EventsHot.vue +2 -2
- package/src/modules/events/components/sections/List.vue +1 -1
- package/src/modules/events/components/sections/SelectDate.vue +1 -1
- package/src/modules/gallery/components/pages/Gallery.vue +1 -1
- package/src/modules/gallery/components/sections/BackofficeGallery.vue +1 -1
- package/src/modules/governance/reactcode/src/components/CreateInitiativeForm.tsx +14 -14
- package/src/modules/governance/reactcode/src/components/CreateMilestoneForm.tsx +13 -13
- package/src/modules/governance/reactcode/src/components/EmptyState.tsx +2 -2
- package/src/modules/governance/reactcode/src/components/InitiativeCard.tsx +1 -1
- package/src/modules/governance/reactcode/src/components/LinkedEntityCard.tsx +1 -1
- package/src/modules/governance/reactcode/src/components/MilestoneCard.tsx +2 -2
- package/src/modules/governance/reactcode/src/components/ProductRepositories.tsx +6 -6
- package/src/modules/governance/reactcode/src/components/ProductSummary.tsx +18 -18
- package/src/modules/governance/reactcode/src/components/ProductTeam.tsx +7 -7
- package/src/modules/governance/reactcode/src/components/ProposeTaskForm.tsx +9 -9
- package/src/modules/governance/reactcode/src/components/TaskAssignForm.tsx +4 -4
- package/src/modules/governance/reactcode/src/components/TaskCard.tsx +1 -1
- package/src/modules/governance/reactcode/src/components/TaskStatusBadge.tsx +1 -1
- package/src/modules/governance/reactcode/src/components/VoteForm.tsx +6 -6
- package/src/modules/governance/reactcode/src/components/VotingCard.tsx +2 -2
- package/src/modules/governance/reactcode/src/components/VotingResults.tsx +15 -15
- package/src/modules/governance/reactcode/src/pages/InitiativeDetailPage.tsx +41 -41
- package/src/modules/governance/reactcode/src/pages/InitiativeMilestonesPage.tsx +8 -8
- package/src/modules/governance/reactcode/src/pages/InitiativesListPage.tsx +6 -6
- package/src/modules/governance/reactcode/src/pages/MilestoneDetailPage.tsx +9 -9
- package/src/modules/governance/reactcode/src/pages/RoadmapPage.tsx +14 -14
- package/src/modules/governance/reactcode/src/pages/TaskDetailPage.tsx +44 -44
- package/src/modules/governance/reactcode/src/pages/VotingDetailPage.tsx +8 -8
- package/src/modules/governance/reactcode/src/pages/VotingsListPage.tsx +3 -3
- package/src/modules/governance/reactcode-2/App.tsx +28 -0
- package/src/modules/governance/reactcode-2/README.md +20 -0
- package/src/modules/governance/reactcode-2/components/Charts.tsx +58 -0
- package/src/modules/governance/reactcode-2/components/Layout.tsx +457 -0
- package/src/modules/governance/reactcode-2/components/TaskPage.tsx +325 -0
- package/src/modules/governance/reactcode-2/components/VoteBadge.tsx +27 -0
- package/src/modules/governance/reactcode-2/components/VotingsFeedPage.tsx +328 -0
- package/src/modules/governance/reactcode-2/constants.ts +154 -0
- package/src/modules/governance/reactcode-2/index.html +70 -0
- package/src/modules/governance/reactcode-2/index.tsx +15 -0
- package/src/modules/governance/reactcode-2/metadata.json +5 -0
- package/src/modules/governance/reactcode-2/package.json +23 -0
- package/src/modules/governance/reactcode-2/pnpm-lock.yaml +1410 -0
- package/src/modules/governance/reactcode-2/tsconfig.json +29 -0
- package/src/modules/governance/reactcode-2/types.ts +48 -0
- package/src/modules/governance/reactcode-2/vite.config.ts +23 -0
- package/src/modules/governance/views/components/blocks/CardInitiativeItem.vue +10 -10
- package/src/modules/governance/views/components/blocks/CardMilestoneItem.vue +15 -15
- package/src/modules/governance/views/components/blocks/CardTaskItem.vue +9 -9
- package/src/modules/governance/views/components/blocks/CardVotingItem.vue +11 -11
- package/src/modules/governance/views/components/layouts/Governance.vue +1 -1
- package/src/modules/governance/views/components/pages/Governance.vue +3 -3
- package/src/modules/governance/views/components/pages/Initiative.vue +112 -112
- package/src/modules/governance/views/components/pages/InitiativeMilestones.vue +31 -31
- package/src/modules/governance/views/components/pages/Initiatives.vue +20 -22
- package/src/modules/governance/views/components/pages/Milestone.vue +25 -25
- package/src/modules/governance/views/components/pages/Roadmap.vue +47 -47
- package/src/modules/governance/views/components/pages/Task.vue +106 -106
- package/src/modules/governance/views/components/pages/Tasks.vue +16 -16
- package/src/modules/governance/views/components/pages/Voting.vue +23 -23
- package/src/modules/governance/views/components/pages/Votings.vue +7 -7
- package/src/modules/governance/views/components/partials/EmptyState.vue +3 -3
- package/src/modules/governance/views/components/partials/LinkedEntityCard.vue +11 -11
- package/src/modules/governance/views/components/partials/TaskStatusBadge.vue +4 -4
- package/src/modules/governance/views/components/partials/VoteForm.vue +14 -14
- package/src/modules/governance/views/components/partials/VotingResults.vue +22 -22
- package/src/modules/icons/components/IconSearchPopup.vue +3 -3
- package/src/modules/icons/entities/IconCash.vue +23 -0
- package/src/modules/icons/navigation/IconSort.vue +4 -4
- package/src/modules/icons/pages/IconsPage.vue +7 -7
- package/src/modules/inventory/components/forms/AdjustmentForm.vue +3 -3
- package/src/modules/inventory/components/forms/HistoryView.vue +1 -1
- package/src/modules/inventory/components/forms/StockAlertsForm.vue +1 -1
- package/src/modules/inventory/components/pages/Inventory.vue +10 -10
- package/src/modules/inventory/components/pages/InventoryEdit.vue +6 -6
- package/src/modules/landing/components/blocks/MapBlock.vue +2 -2
- package/src/modules/landing/components/sections/Examples.vue +1 -1
- package/src/modules/landing/components/sections/InstagramSection.vue +1 -1
- package/src/modules/landing/components/sections/SectionEarn.vue +4 -4
- package/src/modules/landing/components/sections/SectionFeature.vue +1 -1
- package/src/modules/landing/components/sections/SectionFocus.vue +2 -2
- package/src/modules/landing/components/sections/SectionGuide.vue +2 -2
- package/src/modules/landing/components/sections/SectionHeroToken.vue +1 -1
- package/src/modules/landing/components/sections/SectionHeroVideo.vue +2 -2
- package/src/modules/landing/components/sections/SectionJoinUs.vue +2 -2
- package/src/modules/landing/components/sections/SectionMobileApp.vue +3 -3
- package/src/modules/landing/components/sections/SectionOverview.vue +2 -2
- package/src/modules/landing/components/sections/SectionRoadmap.vue +2 -2
- package/src/modules/marketplace/views/components/layouts/Marketplace.vue +8 -8
- package/src/modules/marketplace/views/components/pages/Marketplace.vue +5 -5
- package/src/modules/marketplace/views/components/sections/SectionMenu.vue +2 -2
- package/src/modules/music/components/SidebarMusic.vue +11 -11
- package/src/modules/music/components/blocks/ActionButtons.vue +2 -2
- package/src/modules/music/components/cards/AlbumCard.vue +4 -4
- package/src/modules/music/components/cards/ArtistCard.vue +3 -8
- package/src/modules/music/components/cards/ArtistCardSmall.vue +2 -2
- package/src/modules/music/components/cards/PlaylistCard.vue +4 -4
- package/src/modules/music/components/cards/TrackListCard.vue +5 -5
- package/src/modules/music/components/forms/AlbumForm.vue +8 -8
- package/src/modules/music/components/forms/ArtistForm.vue +4 -4
- package/src/modules/music/components/forms/PlaylistForm.vue +7 -7
- package/src/modules/music/components/forms/SearchForm.vue +1 -1
- package/src/modules/music/components/forms/TrackForm.vue +13 -13
- package/src/modules/music/components/pages/Album.vue +22 -22
- package/src/modules/music/components/pages/Artist.vue +7 -7
- package/src/modules/music/components/pages/MusicHome.vue +13 -18
- package/src/modules/music/components/pages/MusicLibrary.vue +9 -9
- package/src/modules/music/components/pages/Playlist.vue +25 -25
- package/src/modules/music/components/pages/SearchResults.vue +15 -15
- package/src/modules/music/components/pages/Track.vue +25 -25
- package/src/modules/music/components/player/FullscreenPlayer.vue +5 -5
- package/src/modules/notifications/components/blocks/NotificationItem.vue +1 -1
- package/src/modules/notifications/components/elements/NotificationBadge.vue +1 -1
- package/src/modules/orders/components/blocks/CardApplication.vue +1 -1
- package/src/modules/orders/components/blocks/CardCustomer.vue +1 -1
- package/src/modules/orders/components/blocks/CardOrder.vue +9 -9
- package/src/modules/orders/components/blocks/CardOrderBackoffice.vue +5 -5
- package/src/modules/orders/components/blocks/CardOrderItem.vue +9 -9
- package/src/modules/orders/components/blocks/CardOrderUser.vue +3 -3
- package/src/modules/orders/components/blocks/CardOrderVar1.vue +4 -4
- package/src/modules/orders/components/blocks/StatusHistory.vue +3 -3
- package/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue +1 -1
- package/src/modules/orders/components/elements/PriceTotal.vue +3 -3
- package/src/modules/orders/components/forms/FormApplicationDetails.vue +2 -2
- package/src/modules/orders/components/forms/FormCustomerDetails.vue +3 -3
- package/src/modules/orders/components/pages/Favorites.vue +1 -1
- package/src/modules/orders/components/pages/OrderBackoffice.vue +15 -15
- package/src/modules/orders/components/pages/OrderCreate.vue +2 -2
- package/src/modules/orders/components/pages/OrderCreateBackoffice.vue +4 -4
- package/src/modules/orders/components/pages/Orders_refact.vue +3 -3
- package/src/modules/orders/components/partials/ShopCart.vue +2 -2
- package/src/modules/orders/components/sections/ApplicationDetails.vue +2 -2
- package/src/modules/orders/components/sections/AskToLogin.vue +1 -1
- package/src/modules/orders/components/sections/CustomerDetails.vue +2 -2
- package/src/modules/orders/components/sections/Succes.vue +4 -4
- package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -1
- package/src/modules/organizations/components/blocks/CardOrganization.vue +4 -4
- package/src/modules/organizations/components/blocks/Contacts.vue +8 -8
- package/src/modules/organizations/components/blocks/Rating.vue +1 -1
- package/src/modules/organizations/components/forms/AddExistingMembersForm.vue +3 -3
- package/src/modules/organizations/components/forms/DepartmentForm.vue +1 -1
- package/src/modules/organizations/components/forms/InviteForm.vue +1 -1
- package/src/modules/organizations/components/pages/Department.vue +2 -2
- package/src/modules/organizations/components/pages/DepartmentEdit.vue +1 -1
- package/src/modules/organizations/components/pages/Members.vue +1 -1
- package/src/modules/organizations/components/pages/Organization.new.vue +8 -8
- package/src/modules/organizations/components/pages/Organization.vue +6 -6
- package/src/modules/organizations/components/pages/OrganizationDocuments.vue +2 -2
- package/src/modules/organizations/components/pages/Organizations.vue +3 -3
- package/src/modules/organizations/components/sections/Documents.vue +2 -2
- package/src/modules/organizations/components/sections/MembersAdd.vue +1 -1
- package/src/modules/organizations/components/sections/Unit.vue +1 -1
- package/src/modules/pages/views/components/blocks/CardPage.vue +2 -2
- package/src/modules/pages/views/components/pages/Page.vue +5 -5
- package/src/modules/products/components/blocks/CardCategory.vue +1 -1
- package/src/modules/products/components/blocks/CardPosition.vue +4 -4
- package/src/modules/products/components/blocks/CardProduct.vue +3 -3
- package/src/modules/products/components/blocks/ProductDiscounts.vue +3 -3
- package/src/modules/products/components/blocks/ProductImages.vue +2 -2
- package/src/modules/products/components/blocks/ProductVariants.vue +2 -2
- package/src/modules/products/components/elements/Image360.vue +2 -2
- package/src/modules/products/components/elements/Price.vue +2 -2
- package/src/modules/products/components/elements/QuantitySelector.vue +3 -3
- package/src/modules/products/components/elements/THC.vue +1 -1
- package/src/modules/products/components/forms/ReorderSettingsForm.vue +1 -1
- package/src/modules/products/components/forms/StockAuditForm.vue +2 -2
- package/src/modules/products/components/forms/StockHistoryView.vue +1 -1
- package/src/modules/products/components/pages/Categories.vue +1 -1
- package/src/modules/products/components/pages/CategoryEdit.vue +2 -2
- package/src/modules/products/components/pages/Product.vue +6 -6
- package/src/modules/products/components/pages/ProductEdit.vue +6 -6
- package/src/modules/products/components/pages/Products.vue +11 -11
- package/src/modules/products/components/sections/EditAttributes.vue +4 -4
- package/src/modules/products/components/sections/EditCategories.vue +1 -1
- package/src/modules/products/components/sections/EditDiscounts.vue +6 -6
- package/src/modules/products/components/sections/EditRecommended.vue +1 -1
- package/src/modules/products/components/sections/EditVariants.vue +8 -8
- package/src/modules/products/components/sections/FilterProducts.vue +3 -3
- package/src/modules/products/components/sections/ProductConfigurator.vue +2 -2
- package/src/modules/products/components/sections/ProductInformationSection.vue +10 -10
- package/src/modules/products/components/sections/ProductsRecommended.vue +2 -2
- package/src/modules/products/components/sections/SectionProduct.vue +7 -7
- package/src/modules/products/experiments/product-recommendation/components/HeroRecommendation.vue +3 -3
- package/src/modules/rents/views/components/blocks/CardRent.vue +1 -1
- package/src/modules/rents/views/components/pages/Gant/DateLabel.vue +1 -1
- package/src/modules/rents/views/components/pages/Gant/GanttBar.vue +2 -2
- package/src/modules/rents/views/components/pages/Gant/GanttChart.vue +8 -8
- package/src/modules/rents/views/components/pages/Gant/GanttHeaderCell.vue +1 -1
- package/src/modules/rents/views/components/pages/Rents.vue +1 -1
- package/src/modules/rents/views/components/pages/RentsEdit.vue +6 -6
- package/src/modules/reports/components/pages/BackofficeReports.vue +3 -3
- package/src/modules/reports/components/sections/FormReport.vue +1 -1
- package/src/modules/spots/components/blocks/CardSpot.vue +4 -4
- package/src/modules/spots/components/blocks/SpotMemberModify.vue +1 -1
- package/src/modules/spots/components/layouts/Spots.vue +2 -2
- package/src/modules/spots/components/pages/Spot.vue +5 -5
- package/src/modules/spots/components/pages/SpotEdit.vue +2 -2
- package/src/modules/spots/components/pages/Spots.vue +3 -3
- package/src/modules/spots/components/sections/MapSection.vue +1 -1
- package/src/modules/spots/components/sections/WorktimeEdit.vue +4 -4
- package/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue +5 -5
- package/src/modules/wallet/views/components/blocks/CardDeposit.vue +5 -5
- package/src/modules/wallet/views/components/blocks/CashDeposit.vue +2 -2
- package/src/modules/wallet/views/components/blocks/CryptoDeposit.vue +4 -4
- package/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue +11 -11
- package/src/modules/wallet/views/components/elements/ConnectMetamask.vue +4 -4
- package/src/modules/wallet/views/components/pages/Wallet.vue +22 -22
- package/src/styles/config.scss +193 -507
- package/src/styles/layout.scss +81 -1
- package/src/styles/reset.scss +2 -0
- package/src/styles/theme.scss +1 -8
- package/dist/martyrs/dist/main-BFvlam0J.js.map +0 -1
- package/dist/martyrs/node_modules/.pnpm/@capacitor_core@7.0.1/node_modules/@capacitor/core/dist/index.js.map +0 -1
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +0 -1
- package/dist/martyrs/src/components/Loader/Loader.vue.js.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
- package/dist/martyrs/src/components/Tooltip/Tooltip.vue.js.map +0 -1
- package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue.js.map +0 -1
- package/dist/node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js.map +0 -1
- package/dist/node_modules/.pnpm/@vue_shared@3.5.13/node_modules/@vue/shared/dist/shared.esm-bundler.js.map +0 -1
- package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js.map +0 -1
- package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/weekOfYear.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js +0 -6
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js +0 -15
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js +0 -11
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js +0 -20
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js.map +0 -1
- package/src/modules/LAYOUT.MD +0 -767
- package/src/modules/STYLES.MD +0 -298
- package/src/modules/inventory/inventory.router.js +0 -72
- package/src/modules/products/products.router.js +0 -299
- package/src/styles/base/all.scss +0 -233
- package/src/styles/base/backgrounds.scss +0 -70
- package/src/styles/base/borders.scss +0 -407
- package/src/styles/base/scrolling.scss +0 -137
- package/src/styles/base/shadow_transitions_hover_refactor.scss +0 -158
- package/src/styles/base/transitions.scss +0 -109
- package/src/styles/responsive.scss +0 -152
- package/src/styles/typography.scss +0 -161
- /package/dist/{node_modules/.pnpm/@vue_shared@3.5.13 → martyrs}/node_modules/@vue/shared/dist/shared.esm-bundler.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Comment.vue.js","sources":["../../../../../../../src/modules/community/components/sections/Comment.vue"],"sourcesContent":["<template>\n <div class=\"comment-wrapper\">\n <div class=\"comment-content \">\n <CardHeader \n class=\"mn-b-thin mn-b-thin w-100\"\n :entity=\"comment\"\n :entityType=\"'comment'\"\n :user=\"owner\"\n :owner=\"{target: comment.owner, type: 'user'}\" \n :creator=\"{target: comment.owner, type: 'user'}\"\n :date=\"comment.createdAt\"\n />\n <div class=\"pd-t-zero\">\n <p class=\"p-regular\">{{ comment.content }}</p>\n </div>\n <div class=\"mn-t-thin flex-v-center flex-nowrap flex gap-small\">\n <button \n v-if=\"totalReplies > 0\" \n @click=\"toggleChildren\"\n class=\"t-
|
|
1
|
+
{"version":3,"file":"Comment.vue.js","sources":["../../../../../../../src/modules/community/components/sections/Comment.vue"],"sourcesContent":["<template>\n <div class=\"comment-wrapper\">\n <div class=\"comment-content \">\n <CardHeader \n class=\"mn-b-thin mn-b-thin w-100\"\n :entity=\"comment\"\n :entityType=\"'comment'\"\n :user=\"owner\"\n :owner=\"{target: comment.owner, type: 'user'}\" \n :creator=\"{target: comment.owner, type: 'user'}\"\n :date=\"comment.createdAt\"\n />\n <div class=\"pd-t-zero\">\n <p class=\"p-regular\">{{ comment.content }}</p>\n </div>\n <div class=\"mn-t-thin flex-v-center flex-nowrap flex gap-small\">\n <button \n v-if=\"totalReplies > 0\" \n @click=\"toggleChildren\"\n class=\"t-grey cursor-pointer fw-medium font-second\"\n >\n {{ isExpanded ? 'Hide' : totalReplies + (totalReplies === 1 ? ' reply' : ' replies') }} \n </button>\n <button \n v-if=\"owner\" \n class=\"font-second cursor-pointer t-transp fw-medium\" \n @click=\"showReplyForm = true\"\n > \n Reply\n </button>\n </div>\n <div v-if=\"showReplyForm\" class=\"mn-t-small bg-white pd-thin radius-regular\">\n <textarea class=\"w-100\" v-model=\"replyContent\"></textarea>\n <div class=\"mn-l-auto gap-thin flex-nowrap flex\">\n <button class=\"bg-grey-transp-25 pd-r-regular pd-l-regular pd-thin button\" @click=\"showReplyForm = false\">Cancel</button>\n <button class=\"bg-main pd-r-regular pd-l-regular pd-thin button\" @click=\"submitReply\">Send</button>\n </div>\n </div>\n </div>\n\n <transition name=\"collapse\">\n <div v-if=\"isExpanded && comment.children && comment.children.length\" class=\"mn-t-regular comment-children\">\n <div\n v-for=\"(childComment, index) in comment.children\"\n :key=\"childComment._id\"\n class=\"child-wrapper\"\n >\n <!-- Кликабельная область с линией -->\n <div \n @click=\"toggleChildren\" \n @mouseenter=\"highlightLevel($event, true)\"\n @mouseleave=\"highlightLevel($event, false)\"\n class=\"tree-line cursor-pointer\"\n :class=\"{ 'last-child': index === comment.children.length - 1 }\"\n ></div>\n \n <Comment\n :comment=\"childComment\"\n :target=\"target\"\n :owner=\"owner\"\n @reply=\"handleReply\"\n @load-more=\"handleLoadMore\"\n class=\"child-comment mn-b-regular\"\n />\n </div>\n </div>\n </transition>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\nimport Comment from './Comment.vue';\nimport CardHeader from '@martyrs/src/modules/core/views/components/blocks/CardHeader.vue'\n\nconst props = defineProps({\n comment: {\n type: Object,\n required: true\n },\n target: {\n type: String,\n required: true\n },\n owner: {\n type: String,\n required: true\n }\n});\n\nconst emit = defineEmits(['reply', 'load-more']);\n\nconst showReplyForm = ref(false);\nconst replyContent = ref('');\nconst isExpanded = ref(shouldBeExpanded(props.comment.depth))\n\n\nconst childrenContainer = ref(null)\n\nfunction highlightLevel(event, state) {\n const wrapper = event.currentTarget?.parentElement?.parentElement;\n if (!wrapper) return;\n\n const lines = wrapper.querySelectorAll(':scope > .child-wrapper > .tree-line');\n lines.forEach(line => line.classList.toggle('hovered', state));\n} \n\nfunction shouldBeExpanded(depth) {\n return depth % 3 < 2\n}\n\nconst totalReplies = computed(() => {\n function countReplies(comment) {\n if (!comment.children || comment.children.length === 0) {\n return 0\n }\n return comment.children.length + comment.children.reduce((sum, child) => sum + countReplies(child), 0)\n }\n return countReplies(props.comment)\n})\n\nconst toggleChildren = () => {\n isExpanded.value = !isExpanded.value\n}\n\nconst submitReply = () => {\n emit('reply', props.comment._id, replyContent.value);\n replyContent.value = '';\n showReplyForm.value = false;\n};\n\nconst handleReply = (parentId, content) => {\n emit('reply', parentId, content);\n};\n\nconst handleLoadMore = (commentId, depth) => {\n emit('load-more', commentId, depth);\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.comment-children {\n margin-top: 1rem;\n}\n\n.child-wrapper {\n position: relative;\n}\n\n.child-comment {\n padding-left: 1.5rem;\n}\n\n.tree-line {\n position: absolute;\n left: calc(-1rem + 2px);\n top: -1rem;\n width: 2rem;\n height: calc(100% + 2rem);\n}\n\n.tree-line::before {\n content: '';\n position: absolute;\n left: 1rem;\n top: 0;\n width: 2px;\n height: 100%;\n border-left: 1px solid rgba(var(--grey), 1);\n transition: background 0.2s ease;\n}\n\n.tree-line::after {\n content: '';\n position: absolute;\n left: 1rem;\n top: 2rem;\n width: 1rem;\n height: 2px;\n border-bottom: 1px solid rgba(var(--grey), 1);\n transition: background 0.2s ease;\n\n}\n\n.child-wrapper {\n &:last-child {\n .tree-line::after {\n display: none;\n }\n }\n}\n\n.tree-line.last-child::before {\n height: 2rem;\n border-bottom-left-radius: 0.5rem;\n border-left: 1px solid rgba(var(--grey), 1);\n border-bottom: 1px solid rgba(var(--grey), 1);\n background: none;\n width: 1rem;\n}\n\n\n.tree-line.hovered::before,\n.tree-line.hovered::after {\n border-color: rgba(var(--second), 1);\n}\n\n.tree-line.last-child.hovered::before {\n border-color: rgba(var(--second), 1);\n}\n\n/* Анимация */\n.collapse-enter-active,\n.collapse-leave-active {\n transition: all 0.3s ease;\n}\n\n.collapse-enter-from {\n opacity: 0;\n transform: translateY(-0.5rem);\n}\n\n.collapse-leave-to {\n opacity: 0;\n transform: translateY(-0.5rem);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2EA,UAAM,QAAQ;AAed,UAAM,OAAO;AAEb,UAAM,gBAAgB,IAAI,KAAK;AAC/B,UAAM,eAAe,IAAI,EAAE;AAC3B,UAAM,aAAa,IAAI,iBAAiB,MAAM,QAAQ,KAAK,CAAC;AAGlC,QAAI,IAAI;AAElC,aAAS,eAAe,OAAO,OAAO;AACpC,YAAM,UAAU,MAAM,eAAe,eAAe;AACpD,UAAI,CAAC,QAAS;AAEd,YAAM,QAAQ,QAAQ,iBAAiB,sCAAsC;AAC7E,YAAM,QAAQ,UAAQ,KAAK,UAAU,OAAO,WAAW,KAAK,CAAC;AAAA,IAC/D;AAEA,aAAS,iBAAiB,OAAO;AAC/B,aAAO,QAAQ,IAAI;AAAA,IACrB;AAEA,UAAM,eAAe,SAAS,MAAM;AAClC,eAAS,aAAa,SAAS;AAC7B,YAAI,CAAC,QAAQ,YAAY,QAAQ,SAAS,WAAW,GAAG;AACtD,iBAAO;AAAA,QACT;AACA,eAAO,QAAQ,SAAS,SAAS,QAAQ,SAAS,OAAO,CAAC,KAAK,UAAU,MAAM,aAAa,KAAK,GAAG,CAAC;AAAA,MACvG;AACA,aAAO,aAAa,MAAM,OAAO;AAAA,IACnC,CAAC;AAED,UAAM,iBAAiB,MAAM;AAC3B,iBAAW,QAAQ,CAAC,WAAW;AAAA,IACjC;AAEA,UAAM,cAAc,MAAM;AACxB,WAAK,SAAS,MAAM,QAAQ,KAAK,aAAa,KAAK;AACnD,mBAAa,QAAQ;AACrB,oBAAc,QAAQ;AAAA,IACxB;AAEA,UAAM,cAAc,CAAC,UAAU,YAAY;AACzC,WAAK,SAAS,UAAU,OAAO;AAAA,IACjC;AAEA,UAAM,iBAAiB,CAAC,WAAW,UAAU;AAC3C,WAAK,aAAa,WAAW,KAAK;AAAA,IACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getCurrentInstance, ref, onMounted, createElementBlock, openBlock, createElementVNode, toDisplayString, withModifiers, withDirectives, vModelText, Fragment, renderList, createBlock } from "vue";
|
|
2
2
|
import { useRoute } from "vue-router";
|
|
3
|
-
import { Preferences } from "../../../../../node_modules/.pnpm/@capacitor_preferences@7.0.
|
|
3
|
+
import { Preferences } from "../../../../../node_modules/.pnpm/@capacitor_preferences@7.0.2_@capacitor_core@7.4.4/node_modules/@capacitor/preferences/dist/esm/index.js";
|
|
4
4
|
import Comment from "./Comment.vue.js";
|
|
5
5
|
import $axios from "../../../core/views/utils/axios-instance.js";
|
|
6
6
|
const _hoisted_1 = { id: "comments" };
|
|
@@ -50,7 +50,7 @@ const _sfc_main = {
|
|
|
50
50
|
onFileChange: onComponentSave,
|
|
51
51
|
type: "audio",
|
|
52
52
|
placeholder: "Upload video",
|
|
53
|
-
class: "w-100 br-
|
|
53
|
+
class: "w-100 br-1px br-black-transp-10 pd-medium radius-small mn-b-thin"
|
|
54
54
|
}, null, 8, ["field"])
|
|
55
55
|
]))
|
|
56
56
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Audio.vue.js","sources":["../../../../../../../src/modules/constructor/components/elements/Audio.vue"],"sourcesContent":["<template>\n <div \n class=\"mn-b-thin w-100 radius-medium\"\n >\n \n <div v-if=\"prop.content\" class=\"flex-center flex\">\n <audio controls class=\"w-100 h-max-30r\">\n <source :src=\"prop.content\" type=\"video/mp4\">\n Your browser does not support the video tag.\n </audio>\n </div>\n\n <div\n v-else\n >\n <Upload \n v-model:field=\"audioUrl\"\n @file-change=\"onComponentSave\"\n type=\"audio\" \n :placeholder=\"'Upload video'\" \n class=\"\n w-100\n
|
|
1
|
+
{"version":3,"file":"Audio.vue.js","sources":["../../../../../../../src/modules/constructor/components/elements/Audio.vue"],"sourcesContent":["<template>\n <div \n class=\"mn-b-thin w-100 radius-medium\"\n >\n \n <div v-if=\"prop.content\" class=\"flex-center flex\">\n <audio controls class=\"w-100 h-max-30r\">\n <source :src=\"prop.content\" type=\"video/mp4\">\n Your browser does not support the video tag.\n </audio>\n </div>\n\n <div\n v-else\n >\n <Upload \n v-model:field=\"audioUrl\"\n @file-change=\"onComponentSave\"\n type=\"audio\" \n :placeholder=\"'Upload video'\" \n class=\"\n w-100\n \n br-1px\n br-black-transp-10\n pd-medium\n radius-small\n mn-b-thin\n \"\n />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\n\nimport Upload from '@martyrs/src/components/Upload/Upload.vue'\n\nconst audioUrl = ref(null);\nconst fileInput = ref(null);\n\nconst props = defineProps([\n 'label',\n 'value',\n 'prop'\n]);\n\nconst emit = defineEmits(['input', 'updateBlock']);\n\nfunction updateBlock(updatedBlock) {\n const index = post.value.content.findIndex(block => block === updatedBlock);\n if (index !== -1) {\n post.value.content.splice(index, 1, updatedBlock);\n }\n}\n\n\nfunction onComponentSave(url) {\n audioUrl.value = url\n\n if (audioUrl.value ) {\n emit('input', audioUrl.value);\n emit('updateBlock', props.prop, { content: audioUrl.value });\n } else {\n alert('Invalid embed code or source not allowed.');\n }\n}\n\n</script>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,WAAW,IAAI,IAAI;AACP,QAAI,IAAI;AAE1B,UAAM,QAAQ;AAMd,UAAM,OAAO;AAUb,aAAS,gBAAgB,KAAK;AAC5B,eAAS,QAAQ;AAEjB,UAAI,SAAS,OAAQ;AACnB,aAAK,SAAS,SAAS,KAAK;AAC5B,aAAK,eAAe,MAAM,MAAM,EAAE,SAAS,SAAS,OAAO;AAAA,MAC7D,OAAO;AACL,cAAM,2CAA2C;AAAA,MACnD;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -60,7 +60,7 @@ const _sfc_main = {
|
|
|
60
60
|
"onUpdate:field": _cache[0] || (_cache[0] = ($event) => embedCode.value = $event),
|
|
61
61
|
type: "textarea",
|
|
62
62
|
placeholder: "Paste your embed code here",
|
|
63
|
-
class: "w-100 br-
|
|
63
|
+
class: "w-100 br-1px br-black-transp-10 pd-medium radius-small mn-b-thin"
|
|
64
64
|
}, null, 8, ["field"]),
|
|
65
65
|
createElementVNode("div", { class: "flex-v-center flex-nowrap flex gap-small" }, [
|
|
66
66
|
_cache[2] || (_cache[2] = createElementVNode("p", { class: "p-small t-left" }, "Embeds from Youtube, Facebook, Instagram, Twitter, Tiktok, Soundcloud, Vimeo, Reddit, Linkedin, Medium, Spotify and Soundcloud are allowed.", -1)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Embed.vue.js","sources":["../../../../../../../src/modules/constructor/components/elements/Embed.vue"],"sourcesContent":["<template>\n <div \n class=\"w-100 h-max-40r pd-medium bg-white radius-medium pos-relative\">\n \n <div \n v-if=\"prop.content\" \n v-html=\"prop.content\" \n class=\"flex-center constructor-iframe flex pos-relative\"\n />\n \n <div\n class=\"\" \n v-else\n >\n <Field \n v-model:field=\"embedCode\"\n type=\"textarea\" \n :placeholder=\"'Paste your embed code here'\" \n class=\"\n w-100\n
|
|
1
|
+
{"version":3,"file":"Embed.vue.js","sources":["../../../../../../../src/modules/constructor/components/elements/Embed.vue"],"sourcesContent":["<template>\n <div \n class=\"w-100 h-max-40r pd-medium bg-white radius-medium pos-relative\">\n \n <div \n v-if=\"prop.content\" \n v-html=\"prop.content\" \n class=\"flex-center constructor-iframe flex pos-relative\"\n />\n \n <div\n class=\"\" \n v-else\n >\n <Field \n v-model:field=\"embedCode\"\n type=\"textarea\" \n :placeholder=\"'Paste your embed code here'\" \n class=\"\n w-100\n \n br-1px\n br-black-transp-10\n pd-medium\n radius-small\n mn-b-thin\n \"\n />\n <div class=\"flex-v-center flex-nowrap flex gap-small\">\n \n <p class=\"p-small t-left\">Embeds from Youtube, Facebook, Instagram, Twitter, Tiktok, Soundcloud, Vimeo, Reddit, Linkedin, Medium, Spotify and Soundcloud are allowed.</p>\n <button \n @click=\"onComponentClick\"\n class=\"button-small bg-second t-white button\"\n >\n <span>Save</span>\n </button>\n </div>\n </div>\n <!-- <button v-if=\"prop.content\" @click=\"editEmbedCode\">Edit Embed Code</button> -->\n </div>\n</template>\n\n<style lang=\"scss\">\n.constructor-iframe {\n iframe { \n width: 100% !important;\n height: 100% !important;\n position: relative !important;\n }\n}\n</style>\n\n\n<script setup>\nimport { ref,onMounted } from 'vue';\n\nimport Field from '@martyrs/src/components/Field/Field.vue'\n\nconst embedCode = ref(null);\n\nconst props = defineProps([\n 'label',\n 'value',\n 'prop'\n]);\n\nconst emit = defineEmits(['input', 'updateBlock']);\n\nfunction isValidEmbedCode(code) {\n const allowedSources = [\n /youtube\\.com/,\n /facebook\\.com/,\n /instagram\\.com/,\n /twitter\\.com/,\n /tiktok\\.com/,\n /soundcloud\\.com/,\n /vimeo\\.com/,\n /reddit\\.com/,\n /linkedin\\.com/,\n /medium\\.com/,\n /spotify\\.com/,\n ];\n return allowedSources.some(pattern => pattern.test(code));\n}\n\nonMounted(() => {\n if (props.prop.content?.includes('instagram.com') && window.instgrm) {\n window.instgrm.Embeds.process();\n }\n});\n\n\nfunction onComponentClick() {\n\n if (embedCode.value && isValidEmbedCode(embedCode.value)) {\n emit('input', embedCode.value);\n emit('updateBlock', props.prop, { content: embedCode.value });\n } else {\n alert('Invalid embed code or source not allowed.');\n }\n}\n\nfunction editEmbedCode() {\n let embedInput = prompt('Edit embed code:', prop.content);\n if (embedInput && isValidEmbedCode(embedInput)) {\n embedCode.value = embedInput;\n emit('input', embedCode.value);\n emit('updateBlock', props.prop, { content: embedCode.value });\n } else {\n alert('Invalid embed code or source not allowed.');\n }\n}\n</script>\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AA2DA,UAAM,YAAY,IAAI,IAAI;AAE1B,UAAM,QAAQ;AAMd,UAAM,OAAO;AAEb,aAAS,iBAAiB,MAAM;AAC9B,YAAM,iBAAiB;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AACE,aAAO,eAAe,KAAK,aAAW,QAAQ,KAAK,IAAI,CAAC;AAAA,IAC1D;AAEA,cAAU,MAAM;AACd,UAAI,MAAM,KAAK,SAAS,SAAS,eAAe,KAAK,OAAO,SAAS;AACnE,eAAO,QAAQ,OAAO,QAAO;AAAA,MAC/B;AAAA,IACF,CAAC;AAGD,aAAS,mBAAmB;AAE1B,UAAI,UAAU,SAAS,iBAAiB,UAAU,KAAK,GAAG;AACxD,aAAK,SAAS,UAAU,KAAK;AAC7B,aAAK,eAAe,MAAM,MAAM,EAAE,SAAS,UAAU,OAAO;AAAA,MAC9D,OAAO;AACL,cAAM,2CAA2C;AAAA,MACnD;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -245,7 +245,7 @@ const _sfc_main = {
|
|
|
245
245
|
onKeydown: handleKeyDown,
|
|
246
246
|
tabindex: "0",
|
|
247
247
|
class: normalizeClass(["editable-div mn-b-thin", {
|
|
248
|
-
"t-main
|
|
248
|
+
"t-main fw-semi": __props.prop.type === "Link",
|
|
249
249
|
"h3": __props.prop.type === "H2"
|
|
250
250
|
}])
|
|
251
251
|
}, null, 34),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.vue2.js","sources":["../../../../../../../src/modules/constructor/components/elements/Textarea.vue"],"sourcesContent":["<template>\n <div>\n <div \n ref=\"editableDiv\"\n :contenteditable=\"true\"\n @input=\"handleInput\"\n @paste=\"handlePaste\"\n @keydown=\"handleKeyDown\"\n tabindex=\"0\"\n class=\"editable-div mn-b-thin\"\n :class=\"{\n 't-main t-semi': prop.type === 'Link',\n 'h3': prop.type === 'H2'\n }\"\n />\n <div v-if=\"isTextSelected\" class=\"formatting-bar\">\n <button @click=\"applyFormat('bold')\" title=\"Bold\"><b>B</b></button>\n <button @click=\"applyFormat('italic')\" title=\"Italic\"><i>I</i></button>\n <button @click=\"applyFormat('underline')\" title=\"Underline\"><u>U</u></button>\n <button @click=\"applyFormat('strikeThrough')\" title=\"Strikethrough\"><s>S</s></button>\n <button @click=\"createLink\" title=\"Insert Link\">🔗</button>\n <button @click=\"applyFormat('unlink')\" title=\"Remove Link\">⛓️💥</button>\n <button @click=\"applyFormat('justifyLeft')\" title=\"Align Left\">↲</button>\n <button @click=\"applyFormat('justifyCenter')\" title=\"Align Center\">↔</button>\n <button @click=\"applyFormat('justifyRight')\" title=\"Align Right\">↳</button>\n <button @click=\"applyFormat('insertUnorderedList')\" title=\"Bulleted List\">•</button>\n <button @click=\"applyFormat('insertOrderedList')\" title=\"Numbered List\">1.</button>\n <button @click=\"clearFormatting\" title=\"Clear Formatting\">🧹</button>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, onMounted, nextTick, onUpdated, onUnmounted, watch } from 'vue'\nimport DOMPurify from 'isomorphic-dompurify'\n\nconst sanitizeConfig = {\n ALLOWED_TAGS: ['b', 'i', 'u', 's', 'a', 'ul', 'ol', 'li', 'img', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'table', 'thead','tr','th'],\n ALLOWED_ATTR: ['href', 'target', 'src', 'alt'],\n ALLOWED_STYLES: ['text-align']\n}\n\nconst props = defineProps({\n modelValue: {\n type: String,\n default: ''\n },\n prop: {\n type: Object,\n required: true\n },\n component: Object,\n placeholder: String,\n index: Number,\n setFocus: Boolean\n})\n\nconst emit = defineEmits([\n 'update:modelValue', \n 'deleteBlock', \n 'updateBlock', \n 'addBlock'\n])\n\nconst editableDiv = ref(null)\nconst isTextSelected = ref(false)\nconst currentContent = ref('')\n\n// Обновляем содержимое при монтировании\nonMounted(() => {\n if (editableDiv.value) {\n if (props.modelValue) {\n editableDiv.value.innerHTML = props.modelValue\n currentContent.value = props.modelValue\n }\n }\n\n document.addEventListener('selectionchange', handleSelectionChange)\n \n if (props.setFocus) {\n nextTick(() => focus())\n }\n})\n\n// // Отслеживаем изменения в modelValue и обновляем DOM, если они есть\n// watch(() => props.modelValue, (newValue) => {\n// if (editableDiv.value && newValue !== currentContent.value) {\n// editableDiv.value.innerHTML = newValue || ''\n// currentContent.value = newValue\n// }\n// }, { immediate: true })\n\nconst handleInput = (event) => {\n const sanitizedContent = sanitizeHTML(event.target.innerHTML)\n currentContent.value = sanitizedContent\n emit('update:modelValue', sanitizedContent)\n}\n// Улучшенная функция для извлечения нужных элементов из DOM-структуры\nconst extractUsefulContent = (node) => {\n const result = [];\n \n // Функция для определения, содержит ли узел только один из нужных нам тегов\n const containsOnlySingleImportantTag = (node) => {\n const importantElements = node.querySelectorAll('p, h1, h2, h3, h4, h5, h6, img');\n \n // Если найден только один важный элемент и нет текста непосредственно в узле\n if (importantElements.length === 1 && !Array.from(node.childNodes).some(child => \n child.nodeType === Node.TEXT_NODE && child.textContent.trim()\n )) {\n // Убедимся, что этот элемент не содержит других важных элементов\n return !importantElements[0].querySelector('p, h1, h2, h3, h4, h5, h6, img');\n }\n \n return false;\n };\n \n // Рекурсивно просматривает дерево и извлекает только нужные элементы\n const processNode = (node) => {\n // Если это текстовый узел с непустым содержимым\n if (node.nodeType === Node.TEXT_NODE) {\n if (node.textContent.trim()) {\n // Создаем p-элемент для текста без родителя\n const p = document.createElement('p');\n p.textContent = node.textContent;\n result.push(p);\n }\n return;\n }\n \n // Если это не элемент, пропускаем\n if (node.nodeType !== Node.ELEMENT_NODE) return;\n \n // Проверяем, что это один из нужных тегов\n const tagName = node.nodeName.toLowerCase();\n \n if (['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img'].includes(tagName)) {\n // Если это нужный тег - добавляем в результат\n result.push(node.cloneNode(true));\n } else if (containsOnlySingleImportantTag(node)) {\n // Если div содержит только один важный элемент, добавляем этот элемент\n const importantElement = node.querySelector('p, h1, h2, h3, h4, h5, h6, img');\n result.push(importantElement.cloneNode(true));\n } else {\n // Если это div или другой контейнер - проходим по его дочерним узлам\n Array.from(node.childNodes).forEach(child => {\n processNode(child);\n });\n }\n };\n \n processNode(node);\n return result;\n};\n\nconst handlePaste = (event) => {\n event.preventDefault();\n const clipboardData = event.clipboardData || window.clipboardData;\n let pastedData = clipboardData.getData('text/html') || clipboardData.getData('text/plain');\n \n console.log('Raw pasted data:', pastedData);\n \n // Предварительная очистка через функцию sanitizeHTML\n const sanitizedContent = sanitizeHTML(pastedData);\n \n console.log('Sanitized content:', sanitizedContent);\n \n // Парсим очищенный HTML\n const parser = new DOMParser();\n const doc = parser.parseFromString(sanitizedContent, 'text/html');\n \n // Извлекаем полезное содержимое\n const extractedElements = extractUsefulContent(doc.body);\n \n console.log('Extracted elements:', extractedElements.map(el => el.outerHTML));\n \n if (extractedElements.length > 0) {\n // Вставляем каждый элемент как отдельный блок\n extractedElements.forEach((element, idx) => {\n const tagName = element.nodeName.toLowerCase();\n \n // Определяем тип блока в зависимости от тега\n let blockType = 'Textarea';\n let blockContent = '';\n \n if (tagName === 'img') {\n blockType = 'ImageUpload';\n // Для изображений сохраняем только src атрибут\n blockContent = element.getAttribute('src');\n } else if (tagName.match(/h[1-6]/)) {\n blockType = 'H2'; // Используем H2 для всех заголовков, или можно настроить по-разному\n blockContent = element.innerHTML;\n } else {\n // Для p и других текстовых элементов\n blockContent = element.innerHTML;\n }\n \n if (idx === 0) {\n // Первый блок обновляем текущий\n document.execCommand('insertHTML', false, element.innerHTML);\n handleInput({ target: editableDiv.value });\n } else {\n // Остальные добавляем как новые блоки\n emit('addBlock', blockType, blockContent, props.index + idx);\n }\n });\n } else {\n // Если после очистки ничего не осталось, вставляем как обычный текст\n const plainText = clipboardData.getData('text/plain');\n if (plainText.trim()) {\n // document.execCommand('insertText', false, plainText);\n handleInput({ target: editableDiv.value });\n }\n }\n};\n\n\n// Обновленная функция для обработки вставки и создания блоков\nconst handleBlockCreation = (element, index) => {\n const tagName = element.nodeName.toLowerCase();\n \n let blockType = 'Textarea';\n let blockContent = '';\n \n if (tagName === 'img') {\n blockType = 'ImageUpload';\n blockContent = element.getAttribute('src');\n } else if (tagName.match(/h[1-6]/)) {\n blockType = tagName.toUpperCase(); // H2, H3, etc.\n blockContent = element.innerHTML;\n } else {\n blockContent = element.innerHTML;\n }\n \n if (index === 0) {\n // Первый блок обновляем текущий\n document.execCommand('insertHTML', false, element.outerHTML);\n handleInput({ target: editableDiv.value });\n } else {\n // Остальные добавляем как новые блоки\n emit('addBlock', blockType, blockContent, props.index + index);\n }\n};\n\nconst handleKeyDown = (event) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n const selection = window.getSelection()\n const range = selection.getRangeAt(0)\n const newBlockContent = extractContentAfterCursor(range)\n \n const sanitizedContent = sanitizeHTML(editableDiv.value.innerHTML)\n currentContent.value = sanitizedContent\n \n emit('update:modelValue', sanitizedContent)\n emit('addBlock', 'Textarea', newBlockContent, props.index + 1)\n } else if (event.key === 'Backspace' && editableDiv.value.innerHTML.trim() === \"\") {\n event.preventDefault()\n emit('deleteBlock', props.prop, { setCaretToEnd: true })\n }\n}\n\nconst extractContentAfterCursor = (range) => {\n const container = range.startContainer\n const cursorOffset = range.startOffset\n\n if (container.nodeType === Node.TEXT_NODE) {\n const textAfterCursor = container.textContent.slice(cursorOffset)\n container.textContent = container.textContent.slice(0, cursorOffset)\n return textAfterCursor\n } else if (container.nodeType === Node.ELEMENT_NODE) {\n const tempDiv = document.createElement('div')\n const childNodes = Array.from(container.childNodes)\n let foundCursor = false\n \n childNodes.forEach((node, index) => {\n if (index === cursorOffset) foundCursor = true\n if (foundCursor) tempDiv.appendChild(node.cloneNode(true))\n })\n \n while (container.childNodes[cursorOffset]) {\n container.removeChild(container.childNodes[cursorOffset])\n }\n \n return tempDiv.innerHTML\n }\n return ''\n}\n\nconst handleSelectionChange = () => {\n if (document.activeElement === editableDiv.value) {\n const selection = window.getSelection()\n isTextSelected.value = selection.rangeCount > 0 && selection.toString().length > 0\n } else {\n isTextSelected.value = false\n }\n}\n\nconst focus = (options = {}) => {\n nextTick(() => {\n editableDiv.value.focus()\n \n const shouldSetCaretToEnd = options.setCaretToEnd || (props.prop && props.prop.setCaretToEnd)\n if (props.setFocus === true && !shouldSetCaretToEnd) {\n const range = document.createRange()\n range.setStart(editableDiv.value, 0)\n range.collapse(true)\n const selection = window.getSelection()\n selection.removeAllRanges()\n selection.addRange(range)\n } else {\n setCaretToEnd(editableDiv.value)\n }\n \n emit('updateBlock', props.prop, { setFocus: false, setCaretToEnd: false })\n })\n}\n\nconst sanitizeHTML = (html) => {\n return DOMPurify.sanitize(html, sanitizeConfig)\n}\n\nconst setCaretToEnd = (element) => {\n const range = document.createRange()\n const selection = window.getSelection()\n range.selectNodeContents(element)\n range.collapse(false)\n selection.removeAllRanges()\n selection.addRange(range)\n}\n\nconst applyFormat = (format) => {\n document.execCommand(format, false, null)\n handleInput({ target: editableDiv.value })\n}\n\nconst createLink = () => {\n const url = prompt('Enter the URL:')\n if (url) {\n document.execCommand('createLink', false, url)\n handleInput({ target: editableDiv.value })\n }\n}\n\nconst clearFormatting = () => {\n const selection = window.getSelection()\n if (selection.rangeCount > 0) {\n const range = selection.getRangeAt(0)\n const selectedContent = range.cloneContents()\n const div = document.createElement('div')\n div.appendChild(selectedContent)\n const plainText = div.innerText\n document.execCommand('insertText', false, plainText)\n handleInput({ target: editableDiv.value })\n }\n}\n\nonUpdated(() => {\n if (props.setFocus) {\n nextTick(() => focus())\n }\n})\n\nonUnmounted(() => {\n document.removeEventListener('selectionchange', handleSelectionChange)\n})\n</script>\n\n<style lang=\"scss\">\n.editable-div {\n width: 100%;\n min-height: 1rem;\n background-color: transparent;\n outline: none;\n white-space: pre-wrap;\n word-wrap: break-word;\n \n &:empty::before {\n content: attr(placeholder);\n color: #999;\n }\n \n &:focus {\n border: 0;\n }\n}\n\n.formatting-bar {\n display: flex;\n gap: 5px;\n margin-top: 5px;\n padding: 5px;\n background-color: #f5f5f5;\n border-radius: 4px;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n \n button {\n padding: 4px 8px;\n background-color: white;\n border: 1px solid #ddd;\n border-radius: 3px;\n cursor: pointer;\n font-size: 14px;\n min-width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n \n &:hover {\n background-color: #e0e0e0;\n }\n \n &:active {\n background-color: #d0d0d0;\n }\n }\n}\n</style>"],"names":["node"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Textarea.vue2.js","sources":["../../../../../../../src/modules/constructor/components/elements/Textarea.vue"],"sourcesContent":["<template>\n <div>\n <div \n ref=\"editableDiv\"\n :contenteditable=\"true\"\n @input=\"handleInput\"\n @paste=\"handlePaste\"\n @keydown=\"handleKeyDown\"\n tabindex=\"0\"\n class=\"editable-div mn-b-thin\"\n :class=\"{\n 't-main fw-semi': prop.type === 'Link',\n 'h3': prop.type === 'H2'\n }\"\n />\n <div v-if=\"isTextSelected\" class=\"formatting-bar\">\n <button @click=\"applyFormat('bold')\" title=\"Bold\"><b>B</b></button>\n <button @click=\"applyFormat('italic')\" title=\"Italic\"><i>I</i></button>\n <button @click=\"applyFormat('underline')\" title=\"Underline\"><u>U</u></button>\n <button @click=\"applyFormat('strikeThrough')\" title=\"Strikethrough\"><s>S</s></button>\n <button @click=\"createLink\" title=\"Insert Link\">🔗</button>\n <button @click=\"applyFormat('unlink')\" title=\"Remove Link\">⛓️💥</button>\n <button @click=\"applyFormat('justifyLeft')\" title=\"Align Left\">↲</button>\n <button @click=\"applyFormat('justifyCenter')\" title=\"Align Center\">↔</button>\n <button @click=\"applyFormat('justifyRight')\" title=\"Align Right\">↳</button>\n <button @click=\"applyFormat('insertUnorderedList')\" title=\"Bulleted List\">•</button>\n <button @click=\"applyFormat('insertOrderedList')\" title=\"Numbered List\">1.</button>\n <button @click=\"clearFormatting\" title=\"Clear Formatting\">🧹</button>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, onMounted, nextTick, onUpdated, onUnmounted, watch } from 'vue'\nimport DOMPurify from 'isomorphic-dompurify'\n\nconst sanitizeConfig = {\n ALLOWED_TAGS: ['b', 'i', 'u', 's', 'a', 'ul', 'ol', 'li', 'img', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'table', 'thead','tr','th'],\n ALLOWED_ATTR: ['href', 'target', 'src', 'alt'],\n ALLOWED_STYLES: ['text-align']\n}\n\nconst props = defineProps({\n modelValue: {\n type: String,\n default: ''\n },\n prop: {\n type: Object,\n required: true\n },\n component: Object,\n placeholder: String,\n index: Number,\n setFocus: Boolean\n})\n\nconst emit = defineEmits([\n 'update:modelValue', \n 'deleteBlock', \n 'updateBlock', \n 'addBlock'\n])\n\nconst editableDiv = ref(null)\nconst isTextSelected = ref(false)\nconst currentContent = ref('')\n\n// Обновляем содержимое при монтировании\nonMounted(() => {\n if (editableDiv.value) {\n if (props.modelValue) {\n editableDiv.value.innerHTML = props.modelValue\n currentContent.value = props.modelValue\n }\n }\n\n document.addEventListener('selectionchange', handleSelectionChange)\n \n if (props.setFocus) {\n nextTick(() => focus())\n }\n})\n\n// // Отслеживаем изменения в modelValue и обновляем DOM, если они есть\n// watch(() => props.modelValue, (newValue) => {\n// if (editableDiv.value && newValue !== currentContent.value) {\n// editableDiv.value.innerHTML = newValue || ''\n// currentContent.value = newValue\n// }\n// }, { immediate: true })\n\nconst handleInput = (event) => {\n const sanitizedContent = sanitizeHTML(event.target.innerHTML)\n currentContent.value = sanitizedContent\n emit('update:modelValue', sanitizedContent)\n}\n// Улучшенная функция для извлечения нужных элементов из DOM-структуры\nconst extractUsefulContent = (node) => {\n const result = [];\n \n // Функция для определения, содержит ли узел только один из нужных нам тегов\n const containsOnlySingleImportantTag = (node) => {\n const importantElements = node.querySelectorAll('p, h1, h2, h3, h4, h5, h6, img');\n \n // Если найден только один важный элемент и нет текста непосредственно в узле\n if (importantElements.length === 1 && !Array.from(node.childNodes).some(child => \n child.nodeType === Node.TEXT_NODE && child.textContent.trim()\n )) {\n // Убедимся, что этот элемент не содержит других важных элементов\n return !importantElements[0].querySelector('p, h1, h2, h3, h4, h5, h6, img');\n }\n \n return false;\n };\n \n // Рекурсивно просматривает дерево и извлекает только нужные элементы\n const processNode = (node) => {\n // Если это текстовый узел с непустым содержимым\n if (node.nodeType === Node.TEXT_NODE) {\n if (node.textContent.trim()) {\n // Создаем p-элемент для текста без родителя\n const p = document.createElement('p');\n p.textContent = node.textContent;\n result.push(p);\n }\n return;\n }\n \n // Если это не элемент, пропускаем\n if (node.nodeType !== Node.ELEMENT_NODE) return;\n \n // Проверяем, что это один из нужных тегов\n const tagName = node.nodeName.toLowerCase();\n \n if (['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img'].includes(tagName)) {\n // Если это нужный тег - добавляем в результат\n result.push(node.cloneNode(true));\n } else if (containsOnlySingleImportantTag(node)) {\n // Если div содержит только один важный элемент, добавляем этот элемент\n const importantElement = node.querySelector('p, h1, h2, h3, h4, h5, h6, img');\n result.push(importantElement.cloneNode(true));\n } else {\n // Если это div или другой контейнер - проходим по его дочерним узлам\n Array.from(node.childNodes).forEach(child => {\n processNode(child);\n });\n }\n };\n \n processNode(node);\n return result;\n};\n\nconst handlePaste = (event) => {\n event.preventDefault();\n const clipboardData = event.clipboardData || window.clipboardData;\n let pastedData = clipboardData.getData('text/html') || clipboardData.getData('text/plain');\n \n console.log('Raw pasted data:', pastedData);\n \n // Предварительная очистка через функцию sanitizeHTML\n const sanitizedContent = sanitizeHTML(pastedData);\n \n console.log('Sanitized content:', sanitizedContent);\n \n // Парсим очищенный HTML\n const parser = new DOMParser();\n const doc = parser.parseFromString(sanitizedContent, 'text/html');\n \n // Извлекаем полезное содержимое\n const extractedElements = extractUsefulContent(doc.body);\n \n console.log('Extracted elements:', extractedElements.map(el => el.outerHTML));\n \n if (extractedElements.length > 0) {\n // Вставляем каждый элемент как отдельный блок\n extractedElements.forEach((element, idx) => {\n const tagName = element.nodeName.toLowerCase();\n \n // Определяем тип блока в зависимости от тега\n let blockType = 'Textarea';\n let blockContent = '';\n \n if (tagName === 'img') {\n blockType = 'ImageUpload';\n // Для изображений сохраняем только src атрибут\n blockContent = element.getAttribute('src');\n } else if (tagName.match(/h[1-6]/)) {\n blockType = 'H2'; // Используем H2 для всех заголовков, или можно настроить по-разному\n blockContent = element.innerHTML;\n } else {\n // Для p и других текстовых элементов\n blockContent = element.innerHTML;\n }\n \n if (idx === 0) {\n // Первый блок обновляем текущий\n document.execCommand('insertHTML', false, element.innerHTML);\n handleInput({ target: editableDiv.value });\n } else {\n // Остальные добавляем как новые блоки\n emit('addBlock', blockType, blockContent, props.index + idx);\n }\n });\n } else {\n // Если после очистки ничего не осталось, вставляем как обычный текст\n const plainText = clipboardData.getData('text/plain');\n if (plainText.trim()) {\n // document.execCommand('insertText', false, plainText);\n handleInput({ target: editableDiv.value });\n }\n }\n};\n\n\n// Обновленная функция для обработки вставки и создания блоков\nconst handleBlockCreation = (element, index) => {\n const tagName = element.nodeName.toLowerCase();\n \n let blockType = 'Textarea';\n let blockContent = '';\n \n if (tagName === 'img') {\n blockType = 'ImageUpload';\n blockContent = element.getAttribute('src');\n } else if (tagName.match(/h[1-6]/)) {\n blockType = tagName.toUpperCase(); // H2, H3, etc.\n blockContent = element.innerHTML;\n } else {\n blockContent = element.innerHTML;\n }\n \n if (index === 0) {\n // Первый блок обновляем текущий\n document.execCommand('insertHTML', false, element.outerHTML);\n handleInput({ target: editableDiv.value });\n } else {\n // Остальные добавляем как новые блоки\n emit('addBlock', blockType, blockContent, props.index + index);\n }\n};\n\nconst handleKeyDown = (event) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n const selection = window.getSelection()\n const range = selection.getRangeAt(0)\n const newBlockContent = extractContentAfterCursor(range)\n \n const sanitizedContent = sanitizeHTML(editableDiv.value.innerHTML)\n currentContent.value = sanitizedContent\n \n emit('update:modelValue', sanitizedContent)\n emit('addBlock', 'Textarea', newBlockContent, props.index + 1)\n } else if (event.key === 'Backspace' && editableDiv.value.innerHTML.trim() === \"\") {\n event.preventDefault()\n emit('deleteBlock', props.prop, { setCaretToEnd: true })\n }\n}\n\nconst extractContentAfterCursor = (range) => {\n const container = range.startContainer\n const cursorOffset = range.startOffset\n\n if (container.nodeType === Node.TEXT_NODE) {\n const textAfterCursor = container.textContent.slice(cursorOffset)\n container.textContent = container.textContent.slice(0, cursorOffset)\n return textAfterCursor\n } else if (container.nodeType === Node.ELEMENT_NODE) {\n const tempDiv = document.createElement('div')\n const childNodes = Array.from(container.childNodes)\n let foundCursor = false\n \n childNodes.forEach((node, index) => {\n if (index === cursorOffset) foundCursor = true\n if (foundCursor) tempDiv.appendChild(node.cloneNode(true))\n })\n \n while (container.childNodes[cursorOffset]) {\n container.removeChild(container.childNodes[cursorOffset])\n }\n \n return tempDiv.innerHTML\n }\n return ''\n}\n\nconst handleSelectionChange = () => {\n if (document.activeElement === editableDiv.value) {\n const selection = window.getSelection()\n isTextSelected.value = selection.rangeCount > 0 && selection.toString().length > 0\n } else {\n isTextSelected.value = false\n }\n}\n\nconst focus = (options = {}) => {\n nextTick(() => {\n editableDiv.value.focus()\n \n const shouldSetCaretToEnd = options.setCaretToEnd || (props.prop && props.prop.setCaretToEnd)\n if (props.setFocus === true && !shouldSetCaretToEnd) {\n const range = document.createRange()\n range.setStart(editableDiv.value, 0)\n range.collapse(true)\n const selection = window.getSelection()\n selection.removeAllRanges()\n selection.addRange(range)\n } else {\n setCaretToEnd(editableDiv.value)\n }\n \n emit('updateBlock', props.prop, { setFocus: false, setCaretToEnd: false })\n })\n}\n\nconst sanitizeHTML = (html) => {\n return DOMPurify.sanitize(html, sanitizeConfig)\n}\n\nconst setCaretToEnd = (element) => {\n const range = document.createRange()\n const selection = window.getSelection()\n range.selectNodeContents(element)\n range.collapse(false)\n selection.removeAllRanges()\n selection.addRange(range)\n}\n\nconst applyFormat = (format) => {\n document.execCommand(format, false, null)\n handleInput({ target: editableDiv.value })\n}\n\nconst createLink = () => {\n const url = prompt('Enter the URL:')\n if (url) {\n document.execCommand('createLink', false, url)\n handleInput({ target: editableDiv.value })\n }\n}\n\nconst clearFormatting = () => {\n const selection = window.getSelection()\n if (selection.rangeCount > 0) {\n const range = selection.getRangeAt(0)\n const selectedContent = range.cloneContents()\n const div = document.createElement('div')\n div.appendChild(selectedContent)\n const plainText = div.innerText\n document.execCommand('insertText', false, plainText)\n handleInput({ target: editableDiv.value })\n }\n}\n\nonUpdated(() => {\n if (props.setFocus) {\n nextTick(() => focus())\n }\n})\n\nonUnmounted(() => {\n document.removeEventListener('selectionchange', handleSelectionChange)\n})\n</script>\n\n<style lang=\"scss\">\n.editable-div {\n width: 100%;\n min-height: 1rem;\n background-color: transparent;\n outline: none;\n white-space: pre-wrap;\n word-wrap: break-word;\n \n &:empty::before {\n content: attr(placeholder);\n color: #999;\n }\n \n &:focus {\n border: 0;\n }\n}\n\n.formatting-bar {\n display: flex;\n gap: 5px;\n margin-top: 5px;\n padding: 5px;\n background-color: #f5f5f5;\n border-radius: 4px;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n \n button {\n padding: 4px 8px;\n background-color: white;\n border: 1px solid #ddd;\n border-radius: 3px;\n cursor: pointer;\n font-size: 14px;\n min-width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n \n &:hover {\n background-color: #e0e0e0;\n }\n \n &:active {\n background-color: #d0d0d0;\n }\n }\n}\n</style>"],"names":["node"],"mappings":"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"}
|
|
@@ -50,7 +50,7 @@ const _sfc_main = {
|
|
|
50
50
|
onFileChange: onComponentSave,
|
|
51
51
|
type: "file",
|
|
52
52
|
placeholder: "Enter embed code",
|
|
53
|
-
class: "w-100 br-
|
|
53
|
+
class: "w-100 br-1px br-black-transp-10 pd-medium radius-small mn-b-thin"
|
|
54
54
|
}, null, 8, ["field"])
|
|
55
55
|
]))
|
|
56
56
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Video.vue.js","sources":["../../../../../../../src/modules/constructor/components/elements/Video.vue"],"sourcesContent":["<template>\n <div \n class=\"mn-b-thin w-100 pd-medium bg-black t-white radius-medium\"\n >\n \n <div v-if=\"prop.content\" class=\"flex-center flex\">\n <audio controls class=\"w-100 h-max-30r\">\n <source :src=\"prop.content\" type=\"audio/mp3\">\n Your browser does not support the audio tag.\n </audio>\n </div>\n\n <div\n v-else\n >\n <Upload \n v-model:field=\"videoUrl\"\n @file-change=\"onComponentSave\"\n type=\"file\" \n :placeholder=\"'Enter embed code'\" \n class=\"\n w-100\n
|
|
1
|
+
{"version":3,"file":"Video.vue.js","sources":["../../../../../../../src/modules/constructor/components/elements/Video.vue"],"sourcesContent":["<template>\n <div \n class=\"mn-b-thin w-100 pd-medium bg-black t-white radius-medium\"\n >\n \n <div v-if=\"prop.content\" class=\"flex-center flex\">\n <audio controls class=\"w-100 h-max-30r\">\n <source :src=\"prop.content\" type=\"audio/mp3\">\n Your browser does not support the audio tag.\n </audio>\n </div>\n\n <div\n v-else\n >\n <Upload \n v-model:field=\"videoUrl\"\n @file-change=\"onComponentSave\"\n type=\"file\" \n :placeholder=\"'Enter embed code'\" \n class=\"\n w-100\n \n br-1px\n br-black-transp-10\n pd-medium\n radius-small\n mn-b-thin\n \"\n />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\n\nimport Upload from '@martyrs/src/components/Upload/Upload.vue'\n\nconst videoUrl = ref(null);\nconst fileInput = ref(null);\n\nconst props = defineProps([\n 'label',\n 'value',\n 'prop'\n]);\n\nconst emit = defineEmits(['input', 'updateBlock']);\n\nfunction updateBlock(updatedBlock) {\n const index = post.value.content.findIndex(block => block === updatedBlock);\n if (index !== -1) {\n post.value.content.splice(index, 1, updatedBlock);\n }\n}\n\n\nfunction onComponentSave(url) {\n videoUrl.value = url\n\n if (videoUrl.value ) {\n emit('input', videoUrl.value);\n emit('updateBlock', props.prop, { content: videoUrl.value });\n } else {\n alert('Invalid embed code or source not allowed.');\n }\n}\n\n</script>\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,WAAW,IAAI,IAAI;AACP,QAAI,IAAI;AAE1B,UAAM,QAAQ;AAMd,UAAM,OAAO;AAUb,aAAS,gBAAgB,KAAK;AAC5B,eAAS,QAAQ;AAEjB,UAAI,SAAS,OAAQ;AACnB,aAAK,SAAS,SAAS,KAAK;AAC5B,aAAK,eAAe,MAAM,MAAM,EAAE,SAAS,SAAS,OAAO;AAAA,MAC7D,OAAO;AACL,cAAM,2CAA2C;AAAA,MACnD;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -6,7 +6,7 @@ import _sfc_main$6 from "../elements/Card.vue.js";
|
|
|
6
6
|
import _sfc_main$3 from "../elements/Audio.vue.js";
|
|
7
7
|
import _sfc_main$2 from "../elements/Video.vue.js";
|
|
8
8
|
import _sfc_main$1 from "../../../../components/Draggable/Draggable.vue.js";
|
|
9
|
-
import v4 from "
|
|
9
|
+
import v4 from "../../../../../node_modules/uuid/dist/esm-browser/v4.js";
|
|
10
10
|
const _hoisted_1 = ["data-index"];
|
|
11
11
|
const _hoisted_2 = ["onMouseover"];
|
|
12
12
|
const _hoisted_3 = {
|
|
@@ -172,7 +172,7 @@ function createUniversalApp({
|
|
|
172
172
|
}
|
|
173
173
|
initialize();
|
|
174
174
|
}
|
|
175
|
-
async function renderApp({ url, cookies, languages, ssrContext }) {
|
|
175
|
+
async function renderApp({ url, cookies, headers, languages, ssrContext }) {
|
|
176
176
|
const { app, router, store, i18n, meta, moduleManager: moduleManager2 } = await createApp$1();
|
|
177
177
|
if (typeof window === "undefined") {
|
|
178
178
|
const { setSSRStore } = await import("../store/core.store.js");
|
|
@@ -203,6 +203,7 @@ function createUniversalApp({
|
|
|
203
203
|
const result = await appRenderer.render({
|
|
204
204
|
url,
|
|
205
205
|
cookies,
|
|
206
|
+
headers,
|
|
206
207
|
createApp: () => ({ app, router, store, i18n, meta }),
|
|
207
208
|
ssrContext
|
|
208
209
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.app.js","sources":["../../../../../../../src/modules/core/views/classes/core.app.js"],"sourcesContent":["// client-factory.js - фабрика для создания клиентского приложения\nimport { nextTick, createApp as createVueApp, createSSRApp as createVueSSRApp } from 'vue';\nimport { createHead } from '@unhead/vue';\n\nexport function createUniversalApp({\n getConfig,\n getRouter,\n getLocales,\n getStore,\n getHooks = {}\n}) {\n // Lazy imports to avoid circular dependencies\n const getLayoutApp = () => import('../components/layouts/App.vue').then(m => m.default);\n const getModuleRegistry = () => import('./module.manager.js').then(m => m.moduleManager);\n const getWebsockets = () => import('./ws.manager.js').then(m => m.default);\n const getAppRenderer = () => import('../utils/vue-app-renderer.js');\n \n // Асинхронная инициализация для избежания циклических зависимостей\n async function initializeApp() {\n // [LOADING 14] Starting initializeApp\n performance.mark('loading-14-start');\n console.log('[LOADING 14] Starting application initialization...');\n\n // Создаем конфигурацию\n const config = await getConfig();\n const hooks = getHooks;\n\n // [LOADING 15] Loading core dependencies\n performance.mark('loading-15-start');\n console.log('[LOADING 15] Loading core dependencies via Promise.all...');\n\n const [layoutApp, moduleManager, wsManager, appRenderer] = await Promise.all([\n getLayoutApp(),\n getModuleRegistry(),\n getWebsockets(),\n getAppRenderer()\n ]);\n\n performance.mark('loading-15-end');\n performance.measure('loading-15', 'loading-15-start', 'loading-15-end');\n const measure15 = performance.getEntriesByName('loading-15')[0];\n console.log(`[LOADING 15] Core dependencies loaded in ${measure15?.duration?.toFixed(2)}ms`);\n \n // Core module is always loaded - no need to register in moduleManager\n\n // [LOADING 16] Registering modules in registry\n performance.mark('loading-16-start');\n console.log('[LOADING 16] Registering modules in registry...');\n\n // Регистрация модулей из config\n Object.entries(config.modules).forEach(([name, module]) => {\n if (module.loader) {\n moduleManager.register(name, {\n loader: module.loader,\n routes: module.routes || [],\n priority: module.priority || 'normal',\n critical: module.critical || false,\n dependencies: module.dependencies || [],\n preload: module.preload || false\n });\n }\n });\n\n performance.mark('loading-16-end');\n performance.measure('loading-16', 'loading-16-start', 'loading-16-end');\n const measure16 = performance.getEntriesByName('loading-16')[0];\n console.log(`[LOADING 16] Modules registered in ${measure16?.duration?.toFixed(2)}ms`);\n \n // Основная функция создания приложения\n function createApp() {\n const store = getStore();\n const app = process.env.MOBILE_APP \n ? createVueApp(layoutApp, config) \n : createVueSSRApp(layoutApp, config);\n \n const meta = createHead();\n const i18n = getLocales();\n \n const context = {\n app,\n store,\n router: null,\n config,\n };\n \n // Создаем роутер с контекстом\n const router = getRouter(context);\n context.router = router;\n\n // Регистрируем заглушки для роутов, которые требуют другие модули\n // Когда Organizations/Backoffice/Auth загрузятся, они заменят эти заглушки\n const stubComponent = { template: '<router-view />' };\n\n router.addRoute('Home', {\n path: 'backoffice',\n name: 'Backoffice Root',\n children: [],\n component: stubComponent,\n meta: {\n sidebar_width_hidden: 'w-0',\n }\n });\n\n router.addRoute('Home', {\n path: 'organizations/:_id',\n name: 'OrganizationRoot',\n children: [],\n component: stubComponent\n });\n\n router.addRoute('Home', {\n path: 'users/:_id',\n name: 'User Profile Root',\n children: [],\n component: stubComponent\n });\n \n // No critical modules - everything loads on demand\n \n // Router guard для загрузки модулей ДО навигации (только на клиенте)\n if (typeof window !== 'undefined') {\n router.beforeEach(async (to, from) => {\n // Получаем оригинальный путь ДО fallback редиректа на 404\n // Это критически важно для SSR гидратации вложенных роутов!\n const target = to.redirectedFrom || to;\n \n // Используем оригинальный путь для определения нужных модулей\n const requiredModules = moduleManager.getModulesForRoute(target.path);\n \n // Проверяем, какие модули еще не загружены\n const modulesToLoad = requiredModules.filter(m => !moduleManager.initialized.has(m.name));\n \n if (modulesToLoad.length > 0) {\n // Логируем если это редирект с 404 (для отладки)\n if (to.redirectedFrom) {\n console.log('[Router] Loading modules for redirected path:', target.path, 'modules:', modulesToLoad.map(m => m.name));\n }\n\n // [LOADING 18] Loading modules for route\n performance.mark('loading-18-start');\n console.log(`[LOADING 18] Loading ${modulesToLoad.length} modules for route...`);\n\n // Загружаем и инициализируем модули\n for (const module of modulesToLoad) {\n try {\n await moduleManager.load(module.name, context);\n await moduleManager.initialize(module.name, context);\n } catch (error) {\n console.error(`Failed to load module ${module.name}:`, error);\n }\n }\n\n performance.mark('loading-18-end');\n performance.measure('loading-18', 'loading-18-start', 'loading-18-end');\n const measure18 = performance.getEntriesByName('loading-18')[0];\n console.log(`[LOADING 18] Modules loaded for route in ${measure18?.duration?.toFixed(2)}ms`);\n\n // После загрузки модулей и регистрации их роутов,\n // возвращаем объект с оригинальным путем и replace: true\n // Это заставит роутер заново резолвить маршрут с новыми роутами\n return { path: target.fullPath, replace: true };\n }\n });\n }\n\n router.beforeResolve(async (to, from) => {\n store.core.state.loading = false;\n })\n \n // Error handler для lazy loaded chunks\n if (typeof window !== 'undefined') {\n window.addEventListener('error', (e) => {\n if (e.message && e.message.includes('Loading chunk')) {\n console.error('Chunk loading failed:', e);\n // Можно показать уведомление пользователю\n // или попытаться перезагрузить\n }\n });\n }\n \n // Инициализация в правильном порядке\n const initialize = async () => {\n // Хук ДО инициализации\n if (hooks.beforeInitialize) {\n await hooks.beforeInitialize(context);\n }\n // [LOADING 17] Initializing Core module\n performance.mark('loading-17-start');\n console.log('[LOADING 17] Initializing Core module...');\n\n // Core module must ALWAYS be initialized\n const ModuleCore = await import('../../core.client.js');\n await ModuleCore.default.initialize(app, store, router, config);\n\n performance.mark('loading-17-end');\n performance.measure('loading-17', 'loading-17-start', 'loading-17-end');\n const measure17 = performance.getEntriesByName('loading-17')[0];\n console.log(`[LOADING 17] Core module initialized in ${measure17?.duration?.toFixed(2)}ms`);\n\n // 2. WebSocket (отложим после гидратации, только если включен)\n const useWebsocket = config.globals?.websocket !== false; // по умолчанию false\n\n if (useWebsocket && typeof window !== 'undefined') {\n // Откладываем инициализацию WebSocket после гидратации\n requestIdleCallback(() => {\n wsManager.initialize({\n wsUrl: process.env.WSS_URL || undefined,\n maxReconnectAttempts: 5,\n reconnectDelay: 3000,\n pingInterval: 30000,\n });\n });\n }\n\n // 3. Предзагрузка важных модулей в фоне\n if (typeof window !== 'undefined') {\n requestIdleCallback(() => {\n moduleManager.preloadModules(context);\n });\n }\n \n // 5. Подключаем Vue плагины\n app.use(router).use(i18n).use(meta);\n \n // 6. Монтируем приложение\n if (process.env.MOBILE_APP) {\n app.mount('#app');\n }\n\n // Хук ПОСЛЕ инициализации\n if (hooks.afterInitialize) {\n await hooks.afterInitialize(context);\n }\n\n // [LOADING 19] Application initialization completed\n performance.mark('loading-19-end');\n performance.measure('loading-19', 'loading-14-start', 'loading-19-end');\n const measure19 = performance.getEntriesByName('loading-19')[0];\n console.log(`[LOADING 19] Application initialization completed in ${measure19?.duration?.toFixed(2)}ms`);\n\n return {\n app,\n router,\n store,\n i18n,\n meta,\n moduleManager,\n config,\n };\n };\n \n // Возвращаем промис для SSR\n if (!process.env.MOBILE_APP) {\n return initialize();\n }\n \n // Для SPA инициализируем сразу\n initialize();\n }\n \n // FOR SSR / SERVER ENTRY\n async function renderApp({ url, cookies, languages, ssrContext }) {\n const { app, router, store, i18n, meta, moduleManager } = await createApp();\n \n // Set SSR store for useStore calls\n if (typeof window === 'undefined') {\n const { setSSRStore } = await import('../store/core.store.js');\n await setSSRStore(store);\n }\n \n const context = {\n app,\n store,\n router,\n config,\n ssr: true,\n };\n\n // [LOADING 20] SSR renderApp starting and loading modules\n performance.mark('loading-20-start');\n console.log('[LOADING 20] SSR renderApp starting and loading modules...');\n\n // Для SSR загружаем модули для текущего маршрута\n const requiredModules = moduleManager.getModulesForRoute(url);\n\n // Собираем имена модулей которые нужны для текущего роута\n const currentRouteModules = [];\n\n // Загружаем необходимые модули для SSR\n for (const module of requiredModules) {\n await moduleManager.load(module.name, context);\n await moduleManager.initialize(module.name, context);\n currentRouteModules.push(module.name);\n }\n\n performance.mark('loading-20-end');\n performance.measure('loading-20', 'loading-20-start', 'loading-20-end');\n const measure20 = performance.getEntriesByName('loading-20')[0];\n console.log(`[LOADING 20] SSR modules loaded in ${measure20?.duration?.toFixed(2)}ms`);\n \n // После загрузки модулей и регистрации роутов, выполняем навигацию\n await router.push(url);\n await router.isReady();\n \n const result = await appRenderer.render({\n url,\n cookies,\n createApp: () => ({ app, router, store, i18n, meta }),\n ssrContext\n });\n \n if (ssrContext?.modules) {\n result.usedModules = Array.from(ssrContext.modules);\n }\n \n // Передаем только модули текущего роута (без критических)\n result.loadedModules = currentRouteModules;\n\n // [LOADING 21] SSR render completed\n performance.mark('loading-21-end');\n performance.measure('loading-21', 'loading-20-start', 'loading-21-end');\n const measure21 = performance.getEntriesByName('loading-21')[0];\n console.log(`[LOADING 21] SSR render completed in ${measure21?.duration?.toFixed(2)}ms`);\n\n // Clean up for next SSR request\n if (typeof window === 'undefined') {\n moduleManager.initialized.clear();\n moduleManager.modules.clear();\n moduleManager.loadingPromises.clear();\n\n const { clearSSRStore } = await import('../store/core.store.js');\n await clearSSRStore();\n }\n\n return result;\n }\n \n // FOR SPA\n if (typeof window !== 'undefined' && process.env.MOBILE_APP) {\n createApp();\n }\n \n // FOR SSR / CLIENT ENTRY\n if (typeof window !== 'undefined' && !process.env.MOBILE_APP) {\n // Используем renderAndMountApp для правильной гидратации со state\n appRenderer.renderAndMountApp({ createApp, hooks }).then(({ app, router, store, moduleManager }) => {\n // Хук ПОСЛЕ гидратации\n if (hooks.afterHydration) {\n hooks.afterHydration({ app, router, store, moduleManager });\n }\n \n // Модули уже загружены в renderAndMountApp, просто ставим маркер\n if (typeof window !== 'undefined') {\n window.performance.mark('client-ready');\n }\n }).catch(error => {\n console.error('Hydration failed:', error);\n });\n }\n \n return { createApp, renderApp };\n }\n \n // Возвращаем промис, который резолвится с функциями\n return initializeApp();\n}"],"names":["createApp","createVueApp","createVueSSRApp","moduleManager"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.app.js","sources":["../../../../../../../src/modules/core/views/classes/core.app.js"],"sourcesContent":["// client-factory.js - фабрика для создания клиентского приложения\nimport { nextTick, createApp as createVueApp, createSSRApp as createVueSSRApp } from 'vue';\nimport { createHead } from '@unhead/vue';\n\nexport function createUniversalApp({\n getConfig,\n getRouter,\n getLocales,\n getStore,\n getHooks = {}\n}) {\n // Lazy imports to avoid circular dependencies\n const getLayoutApp = () => import('../components/layouts/App.vue').then(m => m.default);\n const getModuleRegistry = () => import('./module.manager.js').then(m => m.moduleManager);\n const getWebsockets = () => import('./ws.manager.js').then(m => m.default);\n const getAppRenderer = () => import('../utils/vue-app-renderer.js');\n \n // Асинхронная инициализация для избежания циклических зависимостей\n async function initializeApp() {\n // [LOADING 14] Starting initializeApp\n performance.mark('loading-14-start');\n console.log('[LOADING 14] Starting application initialization...');\n\n // Создаем конфигурацию\n const config = await getConfig();\n const hooks = getHooks;\n\n // [LOADING 15] Loading core dependencies\n performance.mark('loading-15-start');\n console.log('[LOADING 15] Loading core dependencies via Promise.all...');\n\n const [layoutApp, moduleManager, wsManager, appRenderer] = await Promise.all([\n getLayoutApp(),\n getModuleRegistry(),\n getWebsockets(),\n getAppRenderer()\n ]);\n\n performance.mark('loading-15-end');\n performance.measure('loading-15', 'loading-15-start', 'loading-15-end');\n const measure15 = performance.getEntriesByName('loading-15')[0];\n console.log(`[LOADING 15] Core dependencies loaded in ${measure15?.duration?.toFixed(2)}ms`);\n \n // Core module is always loaded - no need to register in moduleManager\n\n // [LOADING 16] Registering modules in registry\n performance.mark('loading-16-start');\n console.log('[LOADING 16] Registering modules in registry...');\n\n // Регистрация модулей из config\n Object.entries(config.modules).forEach(([name, module]) => {\n if (module.loader) {\n moduleManager.register(name, {\n loader: module.loader,\n routes: module.routes || [],\n priority: module.priority || 'normal',\n critical: module.critical || false,\n dependencies: module.dependencies || [],\n preload: module.preload || false\n });\n }\n });\n\n performance.mark('loading-16-end');\n performance.measure('loading-16', 'loading-16-start', 'loading-16-end');\n const measure16 = performance.getEntriesByName('loading-16')[0];\n console.log(`[LOADING 16] Modules registered in ${measure16?.duration?.toFixed(2)}ms`);\n \n // Основная функция создания приложения\n function createApp() {\n const store = getStore();\n const app = process.env.MOBILE_APP \n ? createVueApp(layoutApp, config) \n : createVueSSRApp(layoutApp, config);\n \n const meta = createHead();\n const i18n = getLocales();\n \n const context = {\n app,\n store,\n router: null,\n config,\n };\n \n // Создаем роутер с контекстом\n const router = getRouter(context);\n context.router = router;\n\n // Регистрируем заглушки для роутов, которые требуют другие модули\n // Когда Organizations/Backoffice/Auth загрузятся, они заменят эти заглушки\n const stubComponent = { template: '<router-view />' };\n\n router.addRoute('Home', {\n path: 'backoffice',\n name: 'Backoffice Root',\n children: [],\n component: stubComponent,\n meta: {\n sidebar_width_hidden: 'w-0',\n }\n });\n\n router.addRoute('Home', {\n path: 'organizations/:_id',\n name: 'OrganizationRoot',\n children: [],\n component: stubComponent\n });\n\n router.addRoute('Home', {\n path: 'users/:_id',\n name: 'User Profile Root',\n children: [],\n component: stubComponent\n });\n \n // No critical modules - everything loads on demand\n \n // Router guard для загрузки модулей ДО навигации (только на клиенте)\n if (typeof window !== 'undefined') {\n router.beforeEach(async (to, from) => {\n // Получаем оригинальный путь ДО fallback редиректа на 404\n // Это критически важно для SSR гидратации вложенных роутов!\n const target = to.redirectedFrom || to;\n \n // Используем оригинальный путь для определения нужных модулей\n const requiredModules = moduleManager.getModulesForRoute(target.path);\n \n // Проверяем, какие модули еще не загружены\n const modulesToLoad = requiredModules.filter(m => !moduleManager.initialized.has(m.name));\n \n if (modulesToLoad.length > 0) {\n // Логируем если это редирект с 404 (для отладки)\n if (to.redirectedFrom) {\n console.log('[Router] Loading modules for redirected path:', target.path, 'modules:', modulesToLoad.map(m => m.name));\n }\n\n // [LOADING 18] Loading modules for route\n performance.mark('loading-18-start');\n console.log(`[LOADING 18] Loading ${modulesToLoad.length} modules for route...`);\n\n // Загружаем и инициализируем модули\n for (const module of modulesToLoad) {\n try {\n await moduleManager.load(module.name, context);\n await moduleManager.initialize(module.name, context);\n } catch (error) {\n console.error(`Failed to load module ${module.name}:`, error);\n }\n }\n\n performance.mark('loading-18-end');\n performance.measure('loading-18', 'loading-18-start', 'loading-18-end');\n const measure18 = performance.getEntriesByName('loading-18')[0];\n console.log(`[LOADING 18] Modules loaded for route in ${measure18?.duration?.toFixed(2)}ms`);\n\n // После загрузки модулей и регистрации их роутов,\n // возвращаем объект с оригинальным путем и replace: true\n // Это заставит роутер заново резолвить маршрут с новыми роутами\n return { path: target.fullPath, replace: true };\n }\n });\n }\n\n router.beforeResolve(async (to, from) => {\n store.core.state.loading = false;\n })\n \n // Error handler для lazy loaded chunks\n if (typeof window !== 'undefined') {\n window.addEventListener('error', (e) => {\n if (e.message && e.message.includes('Loading chunk')) {\n console.error('Chunk loading failed:', e);\n // Можно показать уведомление пользователю\n // или попытаться перезагрузить\n }\n });\n }\n \n // Инициализация в правильном порядке\n const initialize = async () => {\n // Хук ДО инициализации\n if (hooks.beforeInitialize) {\n await hooks.beforeInitialize(context);\n }\n // [LOADING 17] Initializing Core module\n performance.mark('loading-17-start');\n console.log('[LOADING 17] Initializing Core module...');\n\n // Core module must ALWAYS be initialized\n const ModuleCore = await import('../../core.client.js');\n await ModuleCore.default.initialize(app, store, router, config);\n\n performance.mark('loading-17-end');\n performance.measure('loading-17', 'loading-17-start', 'loading-17-end');\n const measure17 = performance.getEntriesByName('loading-17')[0];\n console.log(`[LOADING 17] Core module initialized in ${measure17?.duration?.toFixed(2)}ms`);\n\n // 2. WebSocket (отложим после гидратации, только если включен)\n const useWebsocket = config.globals?.websocket !== false; // по умолчанию false\n\n if (useWebsocket && typeof window !== 'undefined') {\n // Откладываем инициализацию WebSocket после гидратации\n requestIdleCallback(() => {\n wsManager.initialize({\n wsUrl: process.env.WSS_URL || undefined,\n maxReconnectAttempts: 5,\n reconnectDelay: 3000,\n pingInterval: 30000,\n });\n });\n }\n\n // 3. Предзагрузка важных модулей в фоне\n if (typeof window !== 'undefined') {\n requestIdleCallback(() => {\n moduleManager.preloadModules(context);\n });\n }\n \n // 5. Подключаем Vue плагины\n app.use(router).use(i18n).use(meta);\n \n // 6. Монтируем приложение\n if (process.env.MOBILE_APP) {\n app.mount('#app');\n }\n\n // Хук ПОСЛЕ инициализации\n if (hooks.afterInitialize) {\n await hooks.afterInitialize(context);\n }\n\n // [LOADING 19] Application initialization completed\n performance.mark('loading-19-end');\n performance.measure('loading-19', 'loading-14-start', 'loading-19-end');\n const measure19 = performance.getEntriesByName('loading-19')[0];\n console.log(`[LOADING 19] Application initialization completed in ${measure19?.duration?.toFixed(2)}ms`);\n\n return {\n app,\n router,\n store,\n i18n,\n meta,\n moduleManager,\n config,\n };\n };\n \n // Возвращаем промис для SSR\n if (!process.env.MOBILE_APP) {\n return initialize();\n }\n \n // Для SPA инициализируем сразу\n initialize();\n }\n \n // FOR SSR / SERVER ENTRY\n async function renderApp({ url, cookies, headers, languages, ssrContext }) {\n const { app, router, store, i18n, meta, moduleManager } = await createApp();\n \n // Set SSR store for useStore calls\n if (typeof window === 'undefined') {\n const { setSSRStore } = await import('../store/core.store.js');\n await setSSRStore(store);\n }\n \n const context = {\n app,\n store,\n router,\n config,\n ssr: true,\n };\n\n // [LOADING 20] SSR renderApp starting and loading modules\n performance.mark('loading-20-start');\n console.log('[LOADING 20] SSR renderApp starting and loading modules...');\n\n // Для SSR загружаем модули для текущего маршрута\n const requiredModules = moduleManager.getModulesForRoute(url);\n\n // Собираем имена модулей которые нужны для текущего роута\n const currentRouteModules = [];\n\n // Загружаем необходимые модули для SSR\n for (const module of requiredModules) {\n await moduleManager.load(module.name, context);\n await moduleManager.initialize(module.name, context);\n currentRouteModules.push(module.name);\n }\n\n performance.mark('loading-20-end');\n performance.measure('loading-20', 'loading-20-start', 'loading-20-end');\n const measure20 = performance.getEntriesByName('loading-20')[0];\n console.log(`[LOADING 20] SSR modules loaded in ${measure20?.duration?.toFixed(2)}ms`);\n \n // После загрузки модулей и регистрации роутов, выполняем навигацию\n await router.push(url);\n await router.isReady();\n \n const result = await appRenderer.render({\n url,\n cookies,\n headers,\n createApp: () => ({ app, router, store, i18n, meta }),\n ssrContext\n });\n \n if (ssrContext?.modules) {\n result.usedModules = Array.from(ssrContext.modules);\n }\n \n // Передаем только модули текущего роута (без критических)\n result.loadedModules = currentRouteModules;\n\n // [LOADING 21] SSR render completed\n performance.mark('loading-21-end');\n performance.measure('loading-21', 'loading-20-start', 'loading-21-end');\n const measure21 = performance.getEntriesByName('loading-21')[0];\n console.log(`[LOADING 21] SSR render completed in ${measure21?.duration?.toFixed(2)}ms`);\n\n // Clean up for next SSR request\n if (typeof window === 'undefined') {\n moduleManager.initialized.clear();\n moduleManager.modules.clear();\n moduleManager.loadingPromises.clear();\n\n const { clearSSRStore } = await import('../store/core.store.js');\n await clearSSRStore();\n }\n\n return result;\n }\n \n // FOR SPA\n if (typeof window !== 'undefined' && process.env.MOBILE_APP) {\n createApp();\n }\n \n // FOR SSR / CLIENT ENTRY\n if (typeof window !== 'undefined' && !process.env.MOBILE_APP) {\n // Используем renderAndMountApp для правильной гидратации со state\n appRenderer.renderAndMountApp({ createApp, hooks }).then(({ app, router, store, moduleManager }) => {\n // Хук ПОСЛЕ гидратации\n if (hooks.afterHydration) {\n hooks.afterHydration({ app, router, store, moduleManager });\n }\n \n // Модули уже загружены в renderAndMountApp, просто ставим маркер\n if (typeof window !== 'undefined') {\n window.performance.mark('client-ready');\n }\n }).catch(error => {\n console.error('Hydration failed:', error);\n });\n }\n \n return { createApp, renderApp };\n }\n \n // Возвращаем промис, который резолвится с функциями\n return initializeApp();\n}"],"names":["createApp","createVueApp","createVueSSRApp","moduleManager"],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ const _sfc_main = {
|
|
|
51
51
|
onClick: _cache[1] || (_cache[1] = withModifiers(() => order.value = "asc", ["stop"])),
|
|
52
52
|
class: normalizeClass([{
|
|
53
53
|
"bg-white t-black": order.value === "asc"
|
|
54
|
-
}, "radius-semi flex-center w-100 uppercase p-small flex-nowrap flex gap-thin pd-thin br-
|
|
54
|
+
}, "radius-semi flex-center w-100 uppercase p-small flex-nowrap flex gap-thin pd-thin br-1px br-grey-transp-25 w-100"])
|
|
55
55
|
}, [
|
|
56
56
|
createVNode(_sfc_main$2, {
|
|
57
57
|
order: "asc",
|
|
@@ -64,7 +64,7 @@ const _sfc_main = {
|
|
|
64
64
|
onClick: _cache[2] || (_cache[2] = withModifiers(() => order.value = "desc", ["stop"])),
|
|
65
65
|
class: normalizeClass([{
|
|
66
66
|
"bg-white t-black": order.value === "desc"
|
|
67
|
-
}, "radius-semi flex-center w-100 uppercase p-small flex-nowrap flex gap-thin pd-thin br-
|
|
67
|
+
}, "radius-semi flex-center w-100 uppercase p-small flex-nowrap flex gap-thin pd-thin br-1px br-grey-transp-25 w-100"])
|
|
68
68
|
}, [
|
|
69
69
|
createVNode(_sfc_main$2, {
|
|
70
70
|
order: "desc",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockSorting.vue.js","sources":["../../../../../../../../src/modules/core/views/components/blocks/BlockSorting.vue"],"sourcesContent":["<script setup>\nimport { ref } from 'vue';\n\nimport Radio from \"@martyrs/src/components/Radio/Radio.vue\";\n\nimport ButtonSort from '@martyrs/src/modules/core/views/components/elements/ButtonSort.vue'\nimport IconSort from '@martyrs/src/modules/icons/navigation/IconSort.vue'\n\nconst props = defineProps({\n title: {\n type: String,\n default: 'Sorting Options'\n },\n options: {\n type: Array,\n default: [{\n label: 'Date',\n value: 'createdAt'\n },{\n label: 'Popularity',\n value: 'popularity'\n },{\n label: 'Creator',\n value: 'creator'\n }]\n }\n});\n\nconst param = defineModel('param')\nconst order = defineModel('order')\n</script>\n\n<template>\n <div class=\"w-100 o-hidden\">\n <h4 class=\"mn-b-thin\">{{title}}</h4>\n\n <Radio \n v-for=\"option in options\"\n v-model:radio=\"param\"\n :label=\"option.label\"\n :value=\"option.value\"\n class=\"w-100 mn-b-thin\"\n />\n\n <div class=\"w-100 flex-nowrap flex gap-micro\">\n <button \n @click.stop=\"() => order = 'asc'\"\n :class=\"{\n 'bg-white t-black': order === 'asc'\n }\"\n class=\"radius-semi flex-center w-100 uppercase p-small flex-nowrap flex gap-thin pd-thin br-
|
|
1
|
+
{"version":3,"file":"BlockSorting.vue.js","sources":["../../../../../../../../src/modules/core/views/components/blocks/BlockSorting.vue"],"sourcesContent":["<script setup>\nimport { ref } from 'vue';\n\nimport Radio from \"@martyrs/src/components/Radio/Radio.vue\";\n\nimport ButtonSort from '@martyrs/src/modules/core/views/components/elements/ButtonSort.vue'\nimport IconSort from '@martyrs/src/modules/icons/navigation/IconSort.vue'\n\nconst props = defineProps({\n title: {\n type: String,\n default: 'Sorting Options'\n },\n options: {\n type: Array,\n default: [{\n label: 'Date',\n value: 'createdAt'\n },{\n label: 'Popularity',\n value: 'popularity'\n },{\n label: 'Creator',\n value: 'creator'\n }]\n }\n});\n\nconst param = defineModel('param')\nconst order = defineModel('order')\n</script>\n\n<template>\n <div class=\"w-100 o-hidden\">\n <h4 class=\"mn-b-thin\">{{title}}</h4>\n\n <Radio \n v-for=\"option in options\"\n v-model:radio=\"param\"\n :label=\"option.label\"\n :value=\"option.value\"\n class=\"w-100 mn-b-thin\"\n />\n\n <div class=\"w-100 flex-nowrap flex gap-micro\">\n <button \n @click.stop=\"() => order = 'asc'\"\n :class=\"{\n 'bg-white t-black': order === 'asc'\n }\"\n class=\"radius-semi flex-center w-100 uppercase p-small flex-nowrap flex gap-thin pd-thin br-1px br-grey-transp-25 w-100\"\n >\n <IconSort\n :order=\"'asc'\"\n :fill=\"order === 'asc' ? 'rgb(var(--black))' : 'rgb(var(--white))'\"\n class=\"i-small\"\n />\n Ascending\n </button>\n\n <button \n @click.stop=\"() => order = 'desc'\"\n :class=\"{\n 'bg-white t-black': order === 'desc'\n }\"\n class=\"radius-semi flex-center w-100 uppercase p-small flex-nowrap flex gap-thin pd-thin br-1px br-grey-transp-25 w-100\"\n >\n <IconSort\n :order=\"'desc'\"\n :fill=\"order === 'desc' ? 'rgb(var(--black))' : 'rgb(var(--white))'\"\n class=\"i-small\"\n />\n Descending\n </button>\n </div>\n </div>\n</template>\n"],"names":["_useModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,UAAM,QAAQA,SAAW,SAAC,OAAO;AACjC,UAAM,QAAQA,SAAW,SAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { resolveComponent, createElementBlock, createCommentVNode, openBlock, createElementVNode, createBlock, withModifiers, resolveDynamicComponent, toDisplayString, withCtx, createTextVNode, Fragment, renderList, normalizeClass } from "vue";
|
|
2
2
|
import { useRouter } from "vue-router";
|
|
3
|
-
import _sfc_main$1 from "../../../../../components/Tooltip/Tooltip.
|
|
4
|
-
import _sfc_main$3 from "../../../../../components/Dropdown/Dropdown.
|
|
3
|
+
import _sfc_main$1 from "../../../../../components/Tooltip/Tooltip.vue2.js";
|
|
4
|
+
import _sfc_main$3 from "../../../../../components/Dropdown/Dropdown.vue2.js";
|
|
5
5
|
import PlaceholderUserpic from "../../../../icons/placeholders/PlaceholderUserpic.vue.js";
|
|
6
6
|
import PlaceholderOrganizationPic from "../../../../icons/placeholders/PlaceholderOrganizationPic.vue.js";
|
|
7
7
|
import _sfc_main$4 from "../../../../icons/navigation/IconEllipsis.vue.js";
|
|
8
8
|
import _sfc_main$5 from "../../../../reports/components/sections/FormReport.vue.js";
|
|
9
|
-
/* empty css
|
|
9
|
+
/* empty css */
|
|
10
10
|
/* empty css */
|
|
11
11
|
import _sfc_main$2 from "../elements/PhotoStack.vue.js";
|
|
12
12
|
const _hoisted_1 = {
|
|
13
13
|
key: 0,
|
|
14
14
|
class: "pd-b-zero"
|
|
15
15
|
};
|
|
16
|
-
const _hoisted_2 = { class: "w-100 flex-v-center flex-
|
|
16
|
+
const _hoisted_2 = { class: "w-100 flex-v-center flex-justify-start flex" };
|
|
17
17
|
const _hoisted_3 = { class: "w-100 gap-thin p-regular t-nowrap flex-nowrap flex-v-center flex" };
|
|
18
18
|
const _hoisted_4 = ["src"];
|
|
19
19
|
const _hoisted_5 = {
|
|
20
20
|
key: 2,
|
|
21
|
-
class: "gap-thin flex flex-nowrap
|
|
21
|
+
class: "gap-thin flex flex-nowrap fw-medium w-100 pos-relative"
|
|
22
22
|
};
|
|
23
23
|
const _hoisted_6 = { key: 0 };
|
|
24
24
|
const _hoisted_7 = { key: 2 };
|
|
@@ -104,7 +104,7 @@ const _sfc_main = {
|
|
|
104
104
|
_id: __props.owner.target._id
|
|
105
105
|
}
|
|
106
106
|
}), ["stop"])),
|
|
107
|
-
class: "cursor-pointer w-max
|
|
107
|
+
class: "cursor-pointer w-max truncate"
|
|
108
108
|
}, toDisplayString(__props.owner.target?.profile?.name || __props.creator.target?.username || "Anonymous"), 1),
|
|
109
109
|
!__props.creator.hidden && __props.owner.target?.profile?.name !== __props.creator.target?.profile?.name ? (openBlock(), createElementBlock("span", _hoisted_6, "·")) : createCommentVNode("", true),
|
|
110
110
|
!__props.creator.hidden && __props.owner.target?.profile?.name !== __props.creator.target?.profile?.name ? (openBlock(), createElementBlock("span", {
|
|
@@ -115,7 +115,7 @@ const _sfc_main = {
|
|
|
115
115
|
_id: __props.creator.target?._id
|
|
116
116
|
}
|
|
117
117
|
}), ["stop"])),
|
|
118
|
-
class: "cursor-pointer w-max
|
|
118
|
+
class: "cursor-pointer w-max truncate"
|
|
119
119
|
}, [
|
|
120
120
|
createElementVNode("div", null, "by " + toDisplayString(__props.creator.target?.profile?.name || __props.creator.target?.username || "Anonymous"), 1)
|
|
121
121
|
])) : createCommentVNode("", true),
|
|
@@ -158,7 +158,7 @@ const _sfc_main = {
|
|
|
158
158
|
class: "w-100"
|
|
159
159
|
}, {
|
|
160
160
|
default: withCtx(() => _cache[4] || (_cache[4] = [
|
|
161
|
-
createElementVNode("button", { class: "w-100 bg-black br-
|
|
161
|
+
createElementVNode("button", { class: "w-100 bg-black br-1px br-white-transp-20 t-white button-small button" }, " Report ", -1)
|
|
162
162
|
])),
|
|
163
163
|
_: 1
|
|
164
164
|
}, 8, ["user", "type", "target"])) : createCommentVNode("", true),
|
|
@@ -167,7 +167,7 @@ const _sfc_main = {
|
|
|
167
167
|
action.to ? (openBlock(), createBlock(_component_router_link, {
|
|
168
168
|
key: action.to,
|
|
169
169
|
to: action.to,
|
|
170
|
-
class: normalizeClass(action.class || "w-100 bg-black br-
|
|
170
|
+
class: normalizeClass(action.class || "w-100 bg-black br-1px br-white-transp-20 t-white button-small button")
|
|
171
171
|
}, {
|
|
172
172
|
default: withCtx(() => [
|
|
173
173
|
createTextVNode(toDisplayString(action.label), 1)
|
|
@@ -177,7 +177,7 @@ const _sfc_main = {
|
|
|
177
177
|
action.method ? (openBlock(), createElementBlock("button", {
|
|
178
178
|
key: 1,
|
|
179
179
|
onClick: action.method,
|
|
180
|
-
class: normalizeClass(action.class || "w-100 bg-black br-
|
|
180
|
+
class: normalizeClass(action.class || "w-100 bg-black br-1px br-white-transp-20 t-white button-small button")
|
|
181
181
|
}, toDisplayString(action.label), 11, _hoisted_13)) : createCommentVNode("", true)
|
|
182
182
|
], 64);
|
|
183
183
|
}), 256)) : createCommentVNode("", true)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardHeader.vue.js","sources":["../../../../../../../../src/modules/core/views/components/blocks/CardHeader.vue"],"sourcesContent":["<template>\n\t<header \n\t\tv-if=\"owner\" \n\t\tclass=\"pd-b-zero \"\n\t>\n\t\t<div \n\t\t\tclass=\"w-100 flex-v-center flex-
|
|
1
|
+
{"version":3,"file":"CardHeader.vue.js","sources":["../../../../../../../../src/modules/core/views/components/blocks/CardHeader.vue"],"sourcesContent":["<template>\n\t<header \n\t\tv-if=\"owner\" \n\t\tclass=\"pd-b-zero \"\n\t>\n\t\t<div \n\t\t\tclass=\"w-100 flex-v-center flex-justify-start flex\"\n\t\t>\n\n\t\t\t<div\n\t\t\t\tclass=\"w-100 gap-thin p-regular t-nowrap flex-nowrap flex-v-center flex\"\n\t\t\t>\n\t\t\t\t<img loading=\"lazy\" \n\t\t\t\t\tv-if=\"owner.target?.profile?.photo?.length > 0 && type !== 'short'\" \n\t\t\t\t\t:src=\"(FILE_SERVER_URL || '') + owner.target.profile.photo\" \n\t\t\t\t\tclass=\"radius-medium bg-white flex-child-default object-fit-cover i-medium\" \n\n\t\t\t\t\t@click.stop=\"$router.push({\n\t\t\t\t\t\tname: owner.type === 'user' ? 'User Profile' : 'Organization', \n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t_id: owner.target._id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\" \n\t\t\t\t/>\n\t\t\t\t<component\n\t\t\t\t\tv-if=\"!owner.target?.profile?.photo && type !== 'short'\"\n\t\t\t\t\t:is=\"owner.type === 'user' ? PlaceholderUserpic : PlaceholderOrganizationPic\"\n\t\t\t\t\tclass=\"radius-medium flex-child-default cursor-pointer i-medium\"\n\n\t\t\t\t\t@click.stop=\"$router.push({\n\t\t\t\t\t\tname: owner.type === 'user' ? 'User Profile' : 'Organization', \n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t_id: owner.target._id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\" \n\t\t\t\t/>\n\n\t\t\t\t<div \n\t\t\t\t\tv-if=\"type !== 'short'\"\n\t\t\t\t\tclass=\"gap-thin flex flex-nowrap fw-medium w-100 pos-relative\"\n\t\t\t\t>\n\t\t\t\t\t<span \n\t\t\t\t\t\t@click.stop=\"$router.push({\n\t\t\t\t\t\t\tname: owner.type === 'user' ? 'User Profile' : 'Organization', \n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\t_id: owner.target._id\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\" \n\t\t\t\t\t\tclass=\"cursor-pointer w-max truncate\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{owner.target?.profile?.name || creator.target?.username || 'Anonymous'}}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<span v-if=\"!creator.hidden && owner.target?.profile?.name !== creator.target?.profile?.name\">·</span> \n\n\t\t\t\t\t<span\n\t\t\t\t\t\tv-if=\"!creator.hidden && owner.target?.profile?.name !== creator.target?.profile?.name\"\n\t\t\t\t\t\t@click.stop=\"$router.push({\n\t\t\t\t\t\t\tname: 'User Profile', \n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\t_id: creator.target?._id\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\" \n\t\t\t\t\t\tclass=\"cursor-pointer w-max truncate\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div>by {{creator.target?.profile?.name || creator.target?.username || 'Anonymous'}}</div>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<span v-if=\"date\">·</span> \n\n\t\t\t\t\t<span v-if=\"date\" class=\"pos-relative w-max\">\n\t\t\t\t\t\t<Tooltip v-if=\"date\" :text=\"formatDate(date)\">\n\t\t\t\t\t \t\t{{getTimeElapsed(date)}}\n\t\t\t\t\t \t</Tooltip>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<span v-if=\"dateFormatted\">·</span>\n\n\t\t\t\t\t<span v-if=\"dateFormatted\"> {{dateFormatted}}</span>\n\t\t\t\t</div>\n\t\t\t\t\n\n\t\t\t\t<!-- Participaters avatar -->\n\t\t\t\t<div class=\"d-block mn-l-auto flex-nowrap flex flex-v-center\">\n\t\t\t\t\t<PhotoStack\n\t\t\t\t\t\tv-if=\"members\"\n\t\t\t\t\t\t:number=\"members\"\n\t\t\t \t:photos=\"membersPhotos\" \n\t\t\t />\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Report -->\n\t\t\t\t<Dropdown \n\t\t\t\t\tv-if=\"type !== 'short' && user && (user !== creator.target?._id || (actions && actions.length > 0))\"\n\t\t\t\t\t:label=\"{ component: IconEllipsis, class: 't-transp i-regular' }\"\n\t\t\t\t\t:align=\"'right'\"\n\t\t\t\t\tclass=\"cursor-pointer z-index-2\"\n\t\t\t\t>\n\t\t\t\t\t<section \n\t\t\t\t\t\tclass=\"bg-black flex-column flex gap-thin pd-thin radius-small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormReport \n\t\t\t\t\t\t\tv-if=\"user !== creator.target?._id\"\n\t\t\t\t\t\t\t:user=\"user\"\n\t\t\t\t\t\t\t:type=\"entityType\" \n\t\t\t\t\t\t\t:target=\"entity._id\" \n\t\t\t\t\t\t\t:text=\"'Report'\" \n\t\t\t\t\t\t\tclass=\"w-100\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button \n\t\t\t\t\t\t\t\tclass=\"w-100 bg-black br-1px br-white-transp-20 t-white button-small button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tReport\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</FormReport>\n\n\t\t\t\t\t\t<template \n\t\t\t v-for=\"action in actions\" \n\t\t\t v-if=\"actions && actions.length > 0\"\n\t\t\t >\n\t\t\t <router-link\n\t\t\t v-if=\"action.to\"\n\t\t\t :key=\"action.to\"\n\t\t\t :to=\"action.to\"\n\t\t\t :class=\"action.class || 'w-100 bg-black br-1px br-white-transp-20 t-white button-small button'\"\n\t\t\t >\n\t\t\t {{ action.label }}\n\t\t\t </router-link>\n\n\t\t\t <button\n\t\t\t v-if=\"action.method\"\n\t\t\t @click=\"action.method\"\n\t\t\t :class=\"action.class || 'w-100 bg-black br-1px br-white-transp-20 t-white button-small button'\"\n\t\t\t >\n\t\t\t {{ action.label }}\n\t\t\t </button>\n\t\t\t </template>\n\t\t\t\t\t</section>\n\t\t </Dropdown>\t\n\t\t\t</div>\n\t\t</div>\n\t</header>\n</template>\n\n\n<script setup=\"props\">\n\timport { computed,ref } from 'vue'\n\n\timport { useRouter } from 'vue-router'\n\n\timport Tooltip from '@martyrs/src/components/Tooltip/Tooltip.vue'\n\timport Dropdown from \"@martyrs/src/components/Dropdown/Dropdown.vue\";\n\n\timport PlaceholderUserpic from '@martyrs/src/modules/icons/placeholders/PlaceholderUserpic.vue'\n\timport PlaceholderOrganizationPic from '@martyrs/src/modules/icons/placeholders/PlaceholderOrganizationPic.vue'\n\timport IconEllipsis from '@martyrs/src/modules/icons/navigation/IconEllipsis.vue'\n\n\timport FormReport from '@martyrs/src/modules/reports/components/sections/FormReport.vue' \n\timport ButtonToggleMembership from '@martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue'\n\n\timport PhotoStack from \"@martyrs/src/modules/core/views/components/elements/PhotoStack.vue\"\n\n\n\tconst props = defineProps([\n\t\t'user',\n\t\t'entity',\n\t\t'entityType',\n\t\t'date',\n\t\t'dateFormatted',\n\t\t'owner',\n\t\t'creator',\n\t\t'members',\n\t\t'membersPhotos',\n\t\t'type',\n\t\t'actions'\n\t])\n\n\tconst router = useRouter()\n\n\tfunction getTimeElapsed(timestamp) {\n\t const now = new Date();\n\t const createdAt = new Date(timestamp);\n\t const timeDiff = Math.abs(now - createdAt);\n\t const seconds = Math.floor(timeDiff / 1000);\n\t const minutes = Math.floor(seconds / 60);\n\t const hours = Math.floor(minutes / 60);\n\t const days = Math.floor(hours / 24);\n\t const weeks = Math.floor(days / 7);\n\t \n\t if (weeks > 0) {\n\t return `${weeks} week${weeks > 1 ? 's' : ''} ago`;\n\t } else if (days > 0) {\n\t return `${days} day${days > 1 ? 's' : ''} ago`;\n\t } else if (hours > 0) {\n\t return `${hours} hour${hours > 1 ? 's' : ''} ago`;\n\t } else if (minutes > 0) {\n\t return `${minutes} minute${minutes > 1 ? 's' : ''} ago`;\n\t } else {\n\t return 'Just now';\n\t }\n\t}\n\n</script>\n\n<style lang=\"scss\">\n</style>\n\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiLgB,cAAS;AAExB,aAAS,eAAe,WAAW;AACjC,YAAM,MAAM,oBAAI,KAAI;AACpB,YAAM,YAAY,IAAI,KAAK,SAAS;AACpC,YAAM,WAAW,KAAK,IAAI,MAAM,SAAS;AACzC,YAAM,UAAU,KAAK,MAAM,WAAW,GAAI;AAC1C,YAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,YAAM,QAAQ,KAAK,MAAM,UAAU,EAAE;AACrC,YAAM,OAAO,KAAK,MAAM,QAAQ,EAAE;AAClC,YAAM,QAAQ,KAAK,MAAM,OAAO,CAAC;AAEjC,UAAI,QAAQ,GAAG;AACb,eAAO,GAAG,KAAK,QAAQ,QAAQ,IAAI,MAAM,EAAE;AAAA,MAC7C,WAAW,OAAO,GAAG;AACnB,eAAO,GAAG,IAAI,OAAO,OAAO,IAAI,MAAM,EAAE;AAAA,MAC1C,WAAW,QAAQ,GAAG;AACpB,eAAO,GAAG,KAAK,QAAQ,QAAQ,IAAI,MAAM,EAAE;AAAA,MAC7C,WAAW,UAAU,GAAG;AACtB,eAAO,GAAG,OAAO,UAAU,UAAU,IAAI,MAAM,EAAE;AAAA,MACnD,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -26,13 +26,13 @@ const _sfc_main = {
|
|
|
26
26
|
class: "help-icon mn-b-thin",
|
|
27
27
|
style: { "font-size": "2rem" }
|
|
28
28
|
}, "💬", -1),
|
|
29
|
-
createElementVNode("div", { class: "help-title
|
|
29
|
+
createElementVNode("div", { class: "help-title fw-medium mn-b-micro" }, "Need help?", -1),
|
|
30
30
|
createElementVNode("div", { class: "help-subtitle t-small t-transp" }, "24/7 online support", -1)
|
|
31
31
|
]), 8, _hoisted_1)) : createCommentVNode("", true);
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
};
|
|
35
|
-
const HelpCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
35
|
+
const HelpCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-cdb417ab"]]);
|
|
36
36
|
export {
|
|
37
37
|
HelpCard as default
|
|
38
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HelpCard.vue.js","sources":["../../../../../../../../src/modules/core/views/components/blocks/HelpCard.vue"],"sourcesContent":["<template>\n <a\n v-if=\"supportUrl\"\n :href=\"supportUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"help-card pd-small mn-small radius-small bg-light cursor-pointer\"\n >\n <div class=\"help-icon mn-b-thin\" style=\"font-size: 2rem;\">💬</div>\n <div class=\"help-title
|
|
1
|
+
{"version":3,"file":"HelpCard.vue.js","sources":["../../../../../../../../src/modules/core/views/components/blocks/HelpCard.vue"],"sourcesContent":["<template>\n <a\n v-if=\"supportUrl\"\n :href=\"supportUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"help-card pd-small mn-small radius-small bg-light cursor-pointer\"\n >\n <div class=\"help-icon mn-b-thin\" style=\"font-size: 2rem;\">💬</div>\n <div class=\"help-title fw-medium mn-b-micro\">Need help?</div>\n <div class=\"help-subtitle t-small t-transp\">24/7 online support</div>\n </a>\n</template>\n\n<script setup>\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\nimport { computed } from 'vue';\n\nconst store = useStore()\n\ndefineProps({\n theme: {\n type: String,\n default: 'light'\n }\n});\n\nconst supportUrl = computed(() => store.core.state.config?.app?.support?.url);\n</script>\n\n<style scoped>\n.help-card {\n margin-top: auto;\n text-decoration: none;\n color: inherit;\n display: block;\n transition: opacity 0.2s ease;\n}\n\n.help-card:hover {\n opacity: 0.8;\n}\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAkBA,UAAM,QAAQ,SAAQ;AAStB,UAAM,aAAa,SAAS,MAAM,MAAM,KAAK,MAAM,QAAQ,KAAK,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;"}
|