@ozdao/martyrs 0.2.567 → 0.2.569
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/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +3 -3
- package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
- package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
- package/dist/martyrs/src/components/Loader/{Loader.vue.js → Loader.vue2.js} +2 -2
- 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/Select/{Select.vue.js → Select.vue2.js} +2 -2
- package/dist/martyrs/src/components/Select/Select.vue2.js.map +1 -0
- package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue2.js → SelectMulti.vue.js} +2 -2
- package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js.map +1 -0
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +1 -1
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/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/ProfileEditProfile.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +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/PopupDateSelector.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +8 -7
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +3 -3
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +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 +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +2 -2
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +2 -2
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js +4 -4
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +25 -38
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/products.client.js +15 -21
- package/dist/martyrs/src/modules/products/products.client.js.map +1 -1
- package/dist/martyrs/src/modules/products/router/products.router.js +0 -34
- package/dist/martyrs/src/modules/products/router/products.router.js.map +1 -1
- package/dist/martyrs/src/modules/products/store/products.js +0 -15
- package/dist/martyrs/src/modules/products/store/products.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/RentsEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
- package/dist/products.server.js +1 -130
- package/dist/style.css +0 -23
- package/package.json +1 -1
- package/src/modules/core/views/components/layouts/Client.vue +12 -6
- package/src/modules/music/components/layouts/MusicBottomPlayer.vue +1 -3
- package/src/modules/products/components/sections/SectionProduct.vue +2 -9
- package/src/modules/products/controllers/products.controller.js +0 -51
- package/src/modules/products/experiments/product-recommendation/README.md +156 -0
- package/src/modules/products/experiments/product-recommendation/controllers/recommendation.controller.js +59 -0
- package/src/modules/products/experiments/product-recommendation/router/recommendation.router.js +43 -0
- package/src/modules/products/experiments/product-recommendation/routes/recommendation.routes.js +10 -0
- package/src/modules/products/experiments/product-recommendation/store/recommendation.store.js +38 -0
- package/src/modules/products/products.client.js +0 -6
- package/src/modules/products/products.router.js +0 -29
- package/src/modules/products/router/products.router.js +0 -28
- package/src/modules/products/routes/products.routes.js +0 -2
- package/src/modules/products/store/products.js +0 -16
- package/dist/martyrs/src/components/Button/Button.vue2.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/Select/Select.vue.js.map +0 -1
- package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Shader/Shader.vue.js +0 -2
- package/dist/martyrs/src/components/Shader/Shader.vue.js.map +0 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.js +0 -106
- package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.js.map +0 -1
- package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.js +0 -120
- package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.js.map +0 -1
- /package/src/modules/products/{components/sections → experiments/product-recommendation/components}/HeroRecommendation.vue +0 -0
- /package/src/modules/products/{components/pages → experiments/product-recommendation/components}/ProductRecommmendation.vue +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Button.vue2.js","sources":["../../../../../src/components/Button/Button.vue"],"sourcesContent":["<script setup>\nimport { ref } from 'vue'\n\nimport Loader from '@martyrs/src/components/Loader/Loader.vue'\n\nimport IconCheckmark from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\nconst props = defineProps({\n submit: {\n type: Function,\n default: async () => { console.log('Button click.') }\n },\n text: {\n type: Object,\n default: () => ({\n success: null,\n error: null\n })\n },\n counter: {\n type: Object\n },\n callback: {\n type: Function,\n default: async () => { console.log('Button callback.') }\n },\n callbackDelay: {\n type: Number,\n default: 750\n },\n showSucces: {\n type: Boolean,\n default: true\n },\n showLoader: {\n type: Boolean,\n default: true\n },\n validation: {\n type: Boolean,\n default: false\n },\n})\n\nconst emits = defineEmits(['error'])\n\nconst button = ref(null)\nconst error = ref(null)\nconst loading = ref(false)\nconst finished = ref(false)\n\nasync function Submit() {\n console.log('click')\n \n button.value.style['pointer-events'] = 'none'\n error.value = null\n loading.value = true\n\n // Функция для сброса состояния кнопки\n const resetButton = () => {\n if (button.value) {\n button.value.style.pointerEvents = 'auto'\n loading.value = false\n finished.value = false\n error.value = null\n }\n }\n\n try {\n await props.submit()\n\n button.value.classList.replace('bg-main', 'bg-second')\n loading.value = false\n\n // Используем функцию сброса состояния кнопки здесь\n if (props.showSucces) { \n finished.value = true\n setTimeout(() => {\n resetButton()\n button.value.classList.replace('bg-second', 'bg-main')\n }, 500)\n } else {\n resetButton()\n button.value.classList.replace('bg-second', 'bg-main')\n }\n\n // Если есть callback, мы также установим таймер для его вызова\n if (props.callback) setTimeout(() => props.callback(), props.callbackDelay)\n\n } catch (err) {\n console.error('=== BUTTON ERROR ===', err)\n emits('error', err)\n // Если возникла ошибка, мы изменяем стили и устанавливаем сообщение об ошибке\n button.value.classList.replace('bg-main', 'bg-fourth-nano')\n loading.value = false\n error.value = true\n \n // После задержки снова сбрасываем состояние кнопки\n setTimeout(() => {\n resetButton()\n // Так как класс кнопки был изменен, вернем его в исходное состояние\n button.value.classList.replace('bg-fourth-nano', 'bg-main')\n }, 1330)\n }\n}\n</script>\n\n<template>\n <button \n @click.stop=\"Submit\"\n :disabled=\"validation\"\n ref=\"button\"\n\t\tclass=\"button\"\n :class=\"{ 'button--disabled': loading || validation }\"\n >\n <span class=\"button-content\" :class=\"{ 'hidden': loading || error || finished }\">\n <slot></slot>\n </span>\n\n <span class=\"button-loader\" :class=\"{ 'active': loading && showLoader }\">\n <Loader class=\"\"/>\n </span>\n\n <span class=\"button-success\" :class=\"{ 'active': finished && showSucces }\">\n <template v-if=\"text.success\">{{ text.success }}</template>\n <IconCheckmark v-else class=\"i-regular\" />\n </span>\n\n <span class=\"button-error\" :class=\"{ 'active': error }\">\n <template v-if=\"text.error\">{{ text.error }}</template>\n <IconCross v-else class=\"i-regular\" />\n </span>\n \n <!-- Counter -->\n <div v-if=\"counter\" class=\"button-counter font-second flex flex-center\">\n <span>{{ counter }}</span>\n </div>\n </button>\n</template>\n\n<style lang=\"scss\">\nbutton[disabled] {\n opacity: 0.75 !important;\n pointer-events: none !important;\n cursor: default !important;\n color: rgba(var(--dark), 0.33) !important;\n background: rgba(var(--light), 1) !important;\n}\n\na.button {\n text-box: trim-both cap alphabetic;\n}\n\n.button {\n position: relative;\n display: flex;\n padding: var(--small);\n border-radius: var(--small);\n text-box: trim-both cap alphabetic;\n transform: scale(1);\n opacity: 1;\n align-items: center;\n justify-content: center;\n color: black;\n text-align: center;\n font-size: 1rem;\n letter-spacing: 5%;\n transition: all 0.33s ease;\n\n &:hover {\n cursor: pointer;\n opacity: 0.9;\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n &-small {\n padding: 0.75rem;\n border-radius: 0.5rem;\n height: fit-content;\n }\n\n .button-counter {\n position: absolute;\n right: -8px;\n bottom: -8px;\n background: yellow;\n height: 16px;\n border-radius: 16px;\n width: 16px;\n font-weight: 500;\n text-align: center;\n line-height: 16px;\n font-size: 10px;\n }\n}\n\n.button-content {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: opacity 0.3s ease;\n}\n\n\n.button-loader {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n}\n\n.button-success {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n}\n\n.button-error {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n}\n\n.active {\n opacity: 1;\n}\n\n.hidden {\n opacity: 0;\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,UAAM,QAAQ;AAqCd,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,IAAI;AACvB,UAAM,QAAQ,IAAI,IAAI;AACtB,UAAM,UAAU,IAAI,KAAK;AACzB,UAAM,WAAW,IAAI,KAAK;AAE1B,mBAAe,SAAS;AACtB,cAAQ,IAAI,OAAO;AAEnB,aAAO,MAAM,MAAM,gBAAgB,IAAI;AACvC,YAAM,QAAQ;AACd,cAAQ,QAAQ;AAGhB,YAAM,cAAc,MAAM;AACxB,YAAI,OAAO,OAAO;AAChB,iBAAO,MAAM,MAAM,gBAAgB;AACnC,kBAAQ,QAAQ;AAChB,mBAAS,QAAQ;AACjB,gBAAM,QAAQ;AAAA,QAChB;AAAA,MACF;AAEA,UAAI;AACF,cAAM,MAAM,OAAM;AAElB,eAAO,MAAM,UAAU,QAAQ,WAAW,WAAW;AACrD,gBAAQ,QAAQ;AAGhB,YAAI,MAAM,YAAY;AACpB,mBAAS,QAAQ;AACjB,qBAAW,MAAM;AACf,wBAAW;AACX,mBAAO,MAAM,UAAU,QAAQ,aAAa,SAAS;AAAA,UACvD,GAAG,GAAG;AAAA,QACR,OAAO;AACL,sBAAW;AACX,iBAAO,MAAM,UAAU,QAAQ,aAAa,SAAS;AAAA,QACvD;AAGA,YAAI,MAAM,SAAU,YAAW,MAAM,MAAM,SAAQ,GAAI,MAAM,aAAa;AAAA,MAE5E,SAAS,KAAK;AACZ,gBAAQ,MAAM,wBAAwB,GAAG;AACzC,cAAM,SAAS,GAAG;AAElB,eAAO,MAAM,UAAU,QAAQ,WAAW,gBAAgB;AAC1D,gBAAQ,QAAQ;AAChB,cAAM,QAAQ;AAGd,mBAAW,MAAM;AACf,sBAAW;AAEX,iBAAO,MAAM,UAAU,QAAQ,kBAAkB,SAAS;AAAA,QAC5D,GAAG,IAAI;AAAA,MACT;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Loader.vue.js","sources":["../../../../../src/components/Loader/Loader.vue"],"sourcesContent":["<template>\n <div class=\"circular-loader pos-relative z-index-1 w-100 h-100 w-max-2r h-max-2r\" :class=\"{ 'circular-loader-centered': centered }\">\n <svg viewBox=\"25 25 50 50\">\n <circle class=\"circular-loader-fill\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n <circle class=\"circular-loader-circle\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-width=\"4\" stroke-miterlimit=\"10\" />\n </svg>\n <div v-if=\"progress\" class=\"progress-text\">{{ progress }}</div>\n <div v-if=\"status\" class=\"uppercase t-semi w-m-10r status-text\">{{ status }}</div>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n progress: {\n type: Number,\n default: null,\n },\n status: {\n type: String,\n default: null,\n },\n centered: {\n type: Boolean,\n default: false\n },\n },\n};\n</script>\n\n<style>\n.circular-loader-centered {\n top: calc(50% - 1rem);\n left: calc(50% - 1rem);\n}\n\n.circular-loader svg {\n animation: rotate 2s linear infinite;\n}\n\n.circular-loader-circle {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n stroke-linecap: round;\n stroke: rgb(var(--main));\n animation: dash 1.5s ease-in-out infinite;\n}\n\n.circular-loader-fill {\n stroke-linecap: round;\n stroke: rgba(var(--black),0.2);\n}\n\n.progress-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.8rem;\n color: rgb(var(--main));;\n}\n\n.status-text {\n position: absolute;\n top: 120%;\n left: calc(50% - 5rem);\n font-size: 0.8rem;\n width: 10rem !important;\n text-align: center;\n}\n\n@keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35;\n }\n 100% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: -124;\n }\n}\n</style>"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createCommentVNode"],"mappings":";;;AAYA,MAAK,YAAU;AAAA,EACb,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;;AAGf;;EA3BA,KAAA;AAAA,EAMyB,OAAM;;;EAN/B,KAAA;AAAA,EAOuB,OAAM;;;sBAN3BA,mBAOM,OAAA;AAAA,IAPD,OADPC,eAAA,CACa,wEAAsE,EAAA,4BAAuC,OAAA,UAAQ,CAAA;AAAA;8BAC9HC,mBAGM,OAAA,EAHD,SAAQ,iBAAa;AAAA,MACxBA,mBAAkH,UAAA;AAAA,QAA1G,OAAM;AAAA,QAAuB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;MAC3GA,mBAAoH,UAAA;AAAA,QAA5G,OAAM;AAAA,QAAyB,IAAG;AAAA,QAAK,IAAG;AAAA,QAAK,GAAE;AAAA,QAAK,MAAK;AAAA,QAAO,gBAAa;AAAA,QAAI,qBAAkB;AAAA;;IAEpG,OAAA,yBAAXF,mBAA+D,OAA/D,YAA+DG,gBAAjB,OAAA,QAAQ,GAAA,CAAA,KAN1DC,mBAAA,IAAA,IAAA;AAAA,IAOe,OAAA,uBAAXJ,mBAAkF,OAAlF,YAAkFG,gBAAf,OAAA,MAAM,GAAA,CAAA,KAP7EC,mBAAA,IAAA,IAAA;AAAA;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Select.vue.js","sources":["../../../../../src/components/Select/Select.vue"],"sourcesContent":["<template>\n <!-- Input Wrapper -->\n <div \n ref=\"fieldWrapper\"\n tabindex=\"0\"\n @click.stop=\"toggleMenu\" \n v-click-outside=\"clickedOutside\" \n :class=\"$attrs.class\" \n class=\"cursor-pointer field-wrapper flex-v-center flex-nowrap flex pos-relative\"\n >\n <!-- Label -->\n <span v-if=\"label\" class=\"t-transp mn-r-small\">{{label}}</span>\n \n <!-- Input -->\n <span>\n {{ optionsSelected ? (optionsSelected.name || optionsSelected[props.value] || optionsSelected) : placeholder }}\n </span>\n <!-- Dropdown menu -->\n <transition mode=\"out-in\" name=\"TransitionTranslateY\">\n <ul \n v-show=\"showMenu\" \n class=\"bs-black pos-absolute pos-t-100 pos-l-0 z-index-5 pd-small radius-small bg-white mn-t-thin w-100\"\n style=\"min-width: max-content;\"\n >\n <li @click.stop=\"selectOption(option)\" v-for=\"option in optionsListed\" class=\"radius-thin hover-bg-light pd-thin text-box-trim\">\n <span v-if=\"option\" class=\"w-100\">\n {{ option.name || option[props.value] || option }}\n </span>\n </li>\n </ul>\n </transition>\n </div>\n <!-- Validation -->\n <transition mode=\"out-in\" name=\"fade\">\n <div v-if=\"validation\" class=\"mn-t-thin invalid-feedback\">\n * {{validation.message}}\n </div>\n </transition>\n</template>\n<script setup>\nimport { ref, computed, watch, nextTick } from 'vue'\nimport clickOutside from '../FieldPhone/click-outside.js';\nlet vClickOutside = clickOutside\nconst emit = defineEmits([\n 'update:select', \n 'focus', \n 'blur'\n])\nconst props = defineProps({\n label: String,\n placeholder: { type: String, default: 'Please select an item' },\n select: [String, Object],\n property: String,\n value: String,\n options: { type: Array, default: () => [] },\n validation: Boolean,\n})\nconst showMenu = ref(false)\nconst fieldWrapper = ref(null)\nconst optionsSelected = ref(\n props.property \n ? findObjectByValue(props.select, props.property, props.options) \n : props.select\n)\nconst optionsListed = computed(() => {\n return props.select \n ? props.options.filter(option => option !== props.select) \n : props.options\n})\nwatch(() => props.select, (newSelect) => {\n optionsSelected.value = \n props.property \n ? findObjectByValue(props.select, props.property, props.options) \n : props.select;\n});\nconst toggleMenu = async () => {\n showMenu.value = !showMenu.value\n \n if (showMenu.value) {\n await nextTick()\n fieldWrapper.value?.focus()\n emit('focus')\n } else {\n emit('blur')\n }\n}\nfunction clickedOutside () {\n showMenu.value = false\n}\nconst selectOption = option => {\n optionsSelected.value = option\n \n toggleMenu()\n if (props.property) { \n emit('update:select', optionsSelected.value[props.property])\n } else {\n emit('update:select', optionsSelected.value)\n }\n}\nfunction findObjectByValue (value, property, objects) {\n for (const object of objects) {\n if (object[property] === value || object === value) {\n return object;\n }\n }\n return null;\n}\n</script>\n<style lang=\"scss\" scoped>\n li {\n list-style-type: none;\n }\n ul li {\n line-height: 2;\n }\n .field-wrapper:focus {\n outline: none;\n }\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,QAAI,gBAAgB;AACpB,UAAM,OAAO;AAKb,UAAM,QAAQ;AASd,UAAM,WAAW,IAAI,KAAK;AAC1B,UAAM,eAAe,IAAI,IAAI;AAC7B,UAAM,kBAAkB;AAAA,MACtB,MAAM,WACJ,kBAAkB,MAAM,QAAQ,MAAM,UAAU,MAAM,OAAO,IAC7D,MAAM;AAAA,IACV;AACA,UAAM,gBAAgB,SAAS,MAAM;AACnC,aAAO,MAAM,SACX,MAAM,QAAQ,OAAO,YAAU,WAAW,MAAM,MAAM,IACtD,MAAM;AAAA,IACV,CAAC;AACD,UAAM,MAAM,MAAM,QAAQ,CAAC,cAAc;AACvC,sBAAgB,QAChB,MAAM,WACJ,kBAAkB,MAAM,QAAQ,MAAM,UAAU,MAAM,OAAO,IAC7D,MAAM;AAAA,IACV,CAAC;AACD,UAAM,aAAa,YAAY;AAC7B,eAAS,QAAQ,CAAC,SAAS;AAE3B,UAAI,SAAS,OAAO;AAClB,cAAM,SAAQ;AACd,qBAAa,OAAO,MAAK;AACzB,aAAK,OAAO;AAAA,MACd,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,IACF;AACA,aAAS,iBAAkB;AACzB,eAAS,QAAQ;AAAA,IACnB;AACA,UAAM,eAAe,YAAU;AAC7B,sBAAgB,QAAQ;AAExB,iBAAU;AACV,UAAI,MAAM,UAAU;AAClB,aAAK,iBAAiB,gBAAgB,MAAM,MAAM,QAAQ,CAAC;AAAA,MAC7D,OAAO;AACL,aAAK,iBAAiB,gBAAgB,KAAK;AAAA,MAC7C;AAAA,IACF;AACA,aAAS,kBAAmB,OAAO,UAAU,SAAS;AACpD,iBAAW,UAAU,SAAS;AAC5B,YAAI,OAAO,QAAQ,MAAM,SAAS,WAAW,OAAO;AAClD,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectMulti.vue2.js","sources":["../../../../../src/components/SelectMulti/SelectMulti.vue"],"sourcesContent":["<template>\n <div\n ref=\"multiselect\"\n :tabindex=\"searchable ? -1 : tabindex\"\n :class=\"{\n 'multiselect--active': isOpen,\n 'multiselect--disabled': disabled,\n 'multiselect--above': isAbove,\n 'multiselect--has-options-group': hasOptionGroup\n }\"\n @focus=\"activate\"\n @blur=\"searchable ? false : deactivate\"\n @keydown.self.down.prevent=\"pointerForward\"\n @keydown.self.up.prevent=\"pointerBackward\"\n @keypress.enter.tab.stop.self=\"addPointerElement\"\n @keyup.esc=\"deactivate\"\n class=\"multiselect flex flex-v-center\"\n role=\"combobox\"\n :aria-owns=\"`listbox-${id}`\">\n \n <slot name=\"caret\" :toggle>\n <div @mousedown.prevent.stop=\"toggle\" class=\"multiselect__select\"></div>\n </slot>\n \n <slot name=\"clear\" :search />\n \n <div ref=\"tags\" class=\"multiselect__tags\">\n <slot\n name=\"selection\"\n :search\n :remove=\"removeElement\"\n :values=\"visibleValues\"\n :is-open=\"isOpen\">\n <div class=\"multiselect__tags-wrap\" v-show=\"visibleValues.length > 0\">\n <template v-for=\"(option, index) of visibleValues\" :key=\"index\">\n <slot name=\"tag\" :option :search :remove=\"removeElement\">\n <span class=\"multiselect__tag\">\n <span v-text=\"getOptionLabel(option)\" />\n <i \n tabindex=\"1\" \n @keypress.enter.prevent=\"removeElement(option)\"\n @mousedown.prevent=\"removeElement(option)\" \n class=\"multiselect__tag-icon\" />\n </span>\n </slot>\n </template>\n </div>\n <template v-if=\"internalValue?.length > limit\">\n <slot name=\"limit\">\n <strong class=\"multiselect__strong\" v-text=\"limitText(internalValue.length - limit)\" />\n </slot>\n </template>\n </slot>\n <transition name=\"multiselect__loading\">\n <slot name=\"loading\">\n <div v-show=\"loading\" class=\"multiselect__spinner\" />\n </slot>\n </transition>\n <input\n ref=\"searchInput\"\n v-if=\"searchable\"\n :name\n :id\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n :placeholder\n :style=\"inputStyle\"\n :value=\"search\"\n :disabled\n :tabindex\n @input=\"updateSearch($event.target.value)\"\n @focus.prevent=\"activate\"\n @blur.prevent=\"deactivate\"\n @keyup.esc=\"deactivate\"\n @keydown.down.prevent=\"pointerForward\"\n @keydown.up.prevent=\"pointerBackward\"\n @keypress.enter.prevent.stop.self=\"addPointerElement\"\n @keydown.delete.stop=\"removeLastElement\"\n class=\"multiselect__input\"\n :aria-controls=\"`listbox-${id}`\" />\n <span\n v-if=\"isSingleLabelVisible\"\n class=\"multiselect__single\"\n @mousedown.prevent=\"toggle\">\n <slot name=\"singleLabel\" :option=\"singleValue\">\n {{ currentOptionLabel }}\n </slot>\n </span>\n <span\n v-if=\"isPlaceholderVisible\"\n class=\"multiselect__placeholder\"\n @mousedown.prevent=\"toggle\">\n <slot name=\"placeholder\">\n {{ placeholder }}\n </slot>\n </span>\n </div>\n \n <transition name=\"multiselect\">\n <div\n class=\"multiselect__content-wrapper\"\n v-show=\"isOpen\"\n @focus=\"activate\"\n tabindex=\"-1\"\n @mousedown.prevent\n :style=\"{ maxHeight: `${optimizedHeight}px` }\"\n ref=\"list\">\n <ul class=\"multiselect__content\" :style=\"contentStyle\" role=\"listbox\" :id=\"`listbox-${id}`\">\n <slot name=\"beforeList\" />\n <li v-if=\"multiple && max === internalValue.length\">\n <span class=\"multiselect__option\">\n <slot name=\"maxElements\">\n Maximum of {{ max }} options selected. First remove a selected option to select another.\n </slot>\n </span>\n </li>\n <template v-if=\"!max || internalValue.length < max\">\n <li \n class=\"multiselect__element\"\n v-for=\"(option, index) of filteredOptions\"\n :key=\"index\"\n :id=\"`${id}-${index}`\"\n :role=\"!(option?.$isLabel || option?.$isDisabled) ? 'option' : null\">\n <span\n v-if=\"!(option?.$isLabel || option?.$isDisabled)\"\n :class=\"optionHighlight(index, option)\"\n @click.stop=\"select(option)\"\n @mouseenter.self=\"pointerSet(index)\"\n :data-select=\"option?.isTag ? tagPlaceholder : selectLabelText\"\n :data-selected=\"selectedLabelText\"\n :data-deselect=\"deselectLabelText\"\n class=\"multiselect__option\">\n <slot name=\"option\" :option :search :index>\n <span>{{ getOptionLabel(option) }}</span>\n </slot>\n </span>\n <span\n v-if=\"option?.$isLabel || option?.$isDisabled\"\n :data-select=\"groupSelect && selectGroupLabelText\"\n :data-deselect=\"groupSelect && deselectGroupLabelText\"\n :class=\"groupHighlight(index, option)\"\n @mouseenter.self=\"groupSelect && pointerSet(index)\"\n @mousedown.prevent=\"selectGroup(option)\"\n class=\"multiselect__option\">\n <slot name=\"option\" :option :search :index>\n <span>{{ getOptionLabel(option) }}</span>\n </slot>\n </span>\n </li>\n </template>\n <li v-show=\"showNoResults && filteredOptions.length === 0 && search && !loading\">\n <span class=\"multiselect__option\">\n <slot name=\"noResult\" :search>\n No elements found. Consider changing the search query.\n </slot>\n </span>\n </li>\n <li v-show=\"showNoOptions && (options.length === 0 || (hasOptionGroup && filteredOptions.length === 0)) && !search && !loading\">\n <span class=\"multiselect__option\">\n <slot name=\"noOptions\">List is empty.</slot>\n </span>\n </li>\n <slot name=\"afterList\" />\n </ul>\n </div>\n </transition>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch, onMounted, nextTick } from 'vue'\n\n// Props\nconst props = defineProps({\n modelValue: { type: null, default: () => [] },\n options: { type: Array, required: true },\n multiple: { type: Boolean, default: false },\n trackBy: String,\n label: String,\n searchable: { type: Boolean, default: true },\n clearOnSelect: { type: Boolean, default: true },\n hideSelected: { type: Boolean, default: false },\n placeholder: { type: String, default: 'Select option' },\n allowEmpty: { type: Boolean, default: true },\n resetAfter: { type: Boolean, default: false },\n closeOnSelect: { type: Boolean, default: true },\n customLabel: {\n type: Function,\n default: (option, label) => {\n if (!option && option !== 0) return ''\n return label ? option[label] : option\n }\n },\n taggable: { type: Boolean, default: false },\n tagPlaceholder: { type: String, default: 'Press enter to create a tag' },\n tagPosition: { type: String, default: 'top' },\n max: { type: [Number, Boolean], default: false },\n id: { default: null },\n optionsLimit: { type: Number, default: 1000 },\n groupValues: String,\n groupLabel: String,\n groupSelect: { type: Boolean, default: false },\n blockKeys: { type: Array, default: () => [] },\n preserveSearch: { type: Boolean, default: false },\n preselectFirst: { type: Boolean, default: false },\n preventAutofocus: { type: Boolean, default: false },\n internalSearch: { type: Boolean, default: true },\n name: { type: String, default: '' },\n selectLabel: { type: String, default: 'Press enter to select' },\n selectGroupLabel: { type: String, default: 'Press enter to select group' },\n selectedLabel: { type: String, default: 'Selected' },\n deselectLabel: { type: String, default: 'Press enter to remove' },\n deselectGroupLabel: { type: String, default: 'Press enter to deselect group' },\n showLabels: { type: Boolean, default: true },\n limit: { type: Number, default: 99999 },\n maxHeight: { type: Number, default: 300 },\n limitText: { type: Function, default: count => `and ${count} more` },\n loading: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n openDirection: { type: String, default: '' },\n showNoOptions: { type: Boolean, default: true },\n showNoResults: { type: Boolean, default: true },\n tabindex: { type: Number, default: 0 },\n showPointer: { type: Boolean, default: true },\n optionHeight: { type: Number, default: 40 }\n})\n\n// Emits\nconst emit = defineEmits(['open', 'search-change', 'close', 'select', 'update:modelValue', 'remove', 'tag'])\n\n// Refs\nconst multiselect = ref(null)\nconst searchInput = ref(null)\nconst list = ref(null)\nconst tags = ref(null)\n\n// State\nconst search = ref('')\nconst isOpen = ref(false)\nconst preferredOpenDirection = ref('below')\nconst optimizedHeight = ref(props.maxHeight)\nconst pointer = ref(0)\nconst pointerDirty = ref(false)\n\n// Helper functions\nconst isEmpty = opt => {\n if (opt === 0) return false\n if (Array.isArray(opt) && opt.length === 0) return true\n return !opt\n}\n\nconst includes = (str, query) => {\n if (str === undefined) str = 'undefined'\n if (str === null) str = 'null'\n if (str === false) str = 'false'\n return str.toString().toLowerCase().indexOf(query.trim()) !== -1\n}\n\nconst filterOptions = (options, search, label, customLabel) => {\n return search \n ? options.filter(option => includes(customLabel(option, label), search))\n .sort((a, b) => customLabel(a, label).length - customLabel(b, label).length)\n : options\n}\n\nconst flattenOptions = (values, label) => options =>\n options.reduce((prev, curr) => {\n if (curr[values]?.length) {\n prev.push({ $groupLabel: curr[label], $isLabel: true })\n return prev.concat(curr[values])\n }\n return prev\n }, [])\n\nconst stripGroups = options => options.filter(option => !option.$isLabel)\n\nconst filterGroups = (search, label, values, groupLabel, customLabel) => groups =>\n groups.map(group => {\n if (!group[values]) {\n console.warn(`Options passed to vue-multiselect do not contain groups, despite the config.`)\n return []\n }\n const groupOptions = filterOptions(group[values], search, label, customLabel)\n return groupOptions.length ? { [groupLabel]: group[groupLabel], [values]: groupOptions } : []\n })\n\nconst flow = (...fns) => x => fns.reduce((v, f) => f(v), x)\n\n// Computed\nconst internalValue = computed(() => {\n const val = props.modelValue\n return val || val === 0 ? (Array.isArray(val) ? val : [val]) : []\n})\n\nconst filteredOptions = computed(() => {\n const searchVal = search.value || ''\n const normalizedSearch = searchVal.toLowerCase().trim()\n let options = props.options.concat()\n\n if (props.internalSearch) {\n options = props.groupValues \n ? filterAndFlat(options, normalizedSearch, props.label)\n : filterOptions(options, normalizedSearch, props.label, props.customLabel)\n } else {\n options = props.groupValues \n ? flattenOptions(props.groupValues, props.groupLabel)(options) \n : options\n }\n\n options = props.hideSelected ? options.filter(o => !isSelected(o)) : options\n\n if (props.taggable && normalizedSearch.length && !isExistingOption(normalizedSearch)) {\n if (props.tagPosition === 'bottom') {\n options.push({ isTag: true, label: searchVal })\n } else {\n options.unshift({ isTag: true, label: searchVal })\n }\n }\n\n return options.slice(0, props.optionsLimit)\n})\n\nconst valueKeys = computed(() => \n props.trackBy ? internalValue.value.map(el => el[props.trackBy]) : internalValue.value\n)\n\nconst optionKeys = computed(() => {\n const options = props.groupValues ? flatAndStrip(props.options) : props.options\n return options.map(el => props.customLabel(el, props.label).toString().toLowerCase())\n})\n\nconst currentOptionLabel = computed(() =>\n props.multiple \n ? (props.searchable ? '' : props.placeholder)\n : internalValue.value.length \n ? getOptionLabel(internalValue.value[0])\n : props.searchable ? '' : props.placeholder\n)\n\nconst hasOptionGroup = computed(() => props.groupValues && props.groupLabel && props.groupSelect)\n\nconst isSingleLabelVisible = computed(() =>\n (singleValue.value || singleValue.value === 0) &&\n (!isOpen.value || !props.searchable) &&\n !visibleValues.value.length\n)\n\nconst isPlaceholderVisible = computed(() =>\n !internalValue.value.length && (!props.searchable || !isOpen.value)\n)\n\nconst visibleValues = computed(() =>\n props.multiple ? internalValue.value.slice(0, props.limit) : []\n)\n\nconst singleValue = computed(() => internalValue.value[0])\n\nconst deselectLabelText = computed(() => props.showLabels ? props.deselectLabel : '')\nconst deselectGroupLabelText = computed(() => props.showLabels ? props.deselectGroupLabel : '')\nconst selectLabelText = computed(() => props.showLabels ? props.selectLabel : '')\nconst selectGroupLabelText = computed(() => props.showLabels ? props.selectGroupLabel : '')\nconst selectedLabelText = computed(() => props.showLabels ? props.selectedLabel : '')\n\nconst inputStyle = computed(() => {\n if (props.searchable || (props.multiple && props.modelValue?.length)) {\n return isOpen.value\n ? { width: '100%' }\n : { width: '0', position: 'absolute', padding: '0' }\n }\n return ''\n})\n\nconst contentStyle = computed(() => \n props.options.length ? { display: 'inline-block' } : { display: 'block' }\n)\n\nconst isAbove = computed(() => {\n if (['above', 'top'].includes(props.openDirection)) return true\n if (['below', 'bottom'].includes(props.openDirection)) return false\n return preferredOpenDirection.value === 'above'\n})\n\nconst pointerPosition = computed(() => pointer.value * props.optionHeight)\nconst visibleElements = computed(() => optimizedHeight.value / props.optionHeight)\n\n// Methods\nconst filterAndFlat = (options, search, label) =>\n flow(\n filterGroups(search, label, props.groupValues, props.groupLabel, props.customLabel),\n flattenOptions(props.groupValues, props.groupLabel)\n )(options)\n\nconst flatAndStrip = options =>\n flow(\n flattenOptions(props.groupValues, props.groupLabel),\n stripGroups\n )(options)\n\nconst updateSearch = query => {\n search.value = query\n}\n\nconst isExistingOption = query => \n props.options ? optionKeys.value.indexOf(query) > -1 : false\n\nconst isSelected = option => {\n const opt = props.trackBy ? option[props.trackBy] : option\n return valueKeys.value.indexOf(opt) > -1\n}\n\nconst isOptionDisabled = option => !!option?.$isDisabled\n\nconst getOptionLabel = option => {\n if (isEmpty(option)) return ''\n if (option.isTag) return option.label\n if (option.$isLabel) return option.$groupLabel\n const label = props.customLabel(option, props.label)\n return isEmpty(label) ? '' : label\n}\n\nconst select = (option, key) => {\n if (option.$isLabel && props.groupSelect) {\n selectGroup(option)\n return\n }\n if (props.blockKeys.indexOf(key) !== -1 || props.disabled || option.$isDisabled || option.$isLabel) return\n if (props.max && props.multiple && internalValue.value.length === props.max) return\n if (key === 'Tab' && !pointerDirty.value) return\n \n if (option.isTag) {\n emit('tag', option.label, props.id)\n search.value = ''\n if (props.closeOnSelect && !props.multiple) deactivate()\n } else {\n if (isSelected(option)) {\n if (key !== 'Tab') removeElement(option)\n return\n }\n\n emit('update:modelValue', props.multiple ? internalValue.value.concat([option]) : option)\n emit('select', option, props.id)\n\n if (props.clearOnSelect) search.value = ''\n }\n \n if (props.closeOnSelect) deactivate()\n}\n\nconst selectGroup = selectedGroup => {\n const group = props.options.find(option => \n option[props.groupLabel] === selectedGroup.$groupLabel\n )\n if (!group) return\n\n if (wholeGroupSelected(group)) {\n emit('remove', group[props.groupValues], props.id)\n const newValue = internalValue.value.filter(option => \n group[props.groupValues].indexOf(option) === -1\n )\n emit('update:modelValue', newValue)\n } else {\n let optionsToAdd = group[props.groupValues].filter(option => \n !(isOptionDisabled(option) || isSelected(option))\n )\n if (props.max) optionsToAdd.splice(props.max - internalValue.value.length)\n \n emit('select', optionsToAdd, props.id)\n emit('update:modelValue', internalValue.value.concat(optionsToAdd))\n }\n\n if (props.closeOnSelect) deactivate()\n}\n\nconst wholeGroupSelected = group =>\n group[props.groupValues].every(option => isSelected(option) || isOptionDisabled(option))\n\nconst wholeGroupDisabled = group =>\n group[props.groupValues].every(isOptionDisabled)\n\nconst removeElement = (option, shouldClose = true) => {\n if (props.disabled || option?.$isDisabled) return\n if (!props.allowEmpty && internalValue.value.length <= 1) {\n deactivate()\n return\n }\n\n const index = typeof option === 'object' \n ? valueKeys.value.indexOf(option[props.trackBy])\n : valueKeys.value.indexOf(option)\n\n const newValue = props.multiple\n ? internalValue.value.slice(0, index).concat(internalValue.value.slice(index + 1))\n : null\n\n emit('update:modelValue', newValue)\n emit('remove', option, props.id)\n\n if (props.closeOnSelect && shouldClose) deactivate()\n}\n\nconst removeLastElement = () => {\n if (props.blockKeys.indexOf('Delete') !== -1) return\n if (search.value.length === 0 && Array.isArray(internalValue.value) && internalValue.value.length) {\n removeElement(internalValue.value[internalValue.value.length - 1], false)\n }\n}\n\nconst activate = () => {\n if (isOpen.value || props.disabled) return\n\n adjustPosition()\n if (props.groupValues && pointer.value === 0 && filteredOptions.value.length) {\n pointer.value = 1\n }\n\n isOpen.value = true\n if (props.searchable) {\n if (!props.preserveSearch) search.value = ''\n if (!props.preventAutofocus) nextTick(() => searchInput.value?.focus())\n } else if (!props.preventAutofocus) {\n multiselect.value?.focus()\n }\n emit('open', props.id)\n}\n\nconst deactivate = () => {\n if (!isOpen.value) return\n\n isOpen.value = false\n if (props.searchable) {\n searchInput.value?.blur()\n } else {\n multiselect.value?.blur()\n }\n if (!props.preserveSearch) search.value = ''\n emit('close', getValue(), props.id)\n}\n\nconst toggle = () => {\n isOpen.value ? deactivate() : activate()\n}\n\nconst adjustPosition = () => {\n if (typeof window === 'undefined') return\n\n const spaceAbove = multiselect.value.getBoundingClientRect().top\n const spaceBelow = window.innerHeight - multiselect.value.getBoundingClientRect().bottom\n const hasEnoughSpaceBelow = spaceBelow > props.maxHeight\n\n if (hasEnoughSpaceBelow || spaceBelow > spaceAbove || ['below', 'bottom'].includes(props.openDirection)) {\n preferredOpenDirection.value = 'below'\n optimizedHeight.value = Math.min(spaceBelow - 40, props.maxHeight)\n } else {\n preferredOpenDirection.value = 'above'\n optimizedHeight.value = Math.min(spaceAbove - 40, props.maxHeight)\n }\n}\n\nconst getValue = () => \n props.multiple ? internalValue.value : internalValue.value.length === 0 ? null : internalValue.value[0]\n\n// Pointer methods\nconst optionHighlight = (index, option) => ({\n 'multiselect__option--highlight': index === pointer.value && props.showPointer,\n 'multiselect__option--selected': isSelected(option)\n})\n\nconst groupHighlight = (index, selectedGroup) => {\n if (!props.groupSelect) {\n return ['multiselect__option--disabled', { 'multiselect__option--group': selectedGroup.$isLabel }]\n }\n const group = props.options.find(option => \n option[props.groupLabel] === selectedGroup.$groupLabel\n )\n return group && !wholeGroupDisabled(group)\n ? ['multiselect__option--group', \n { 'multiselect__option--highlight': index === pointer.value && props.showPointer },\n { 'multiselect__option--group-selected': wholeGroupSelected(group) }]\n : 'multiselect__option--disabled'\n}\n\nconst addPointerElement = ({ key } = 'Enter') => {\n if (filteredOptions.value.length > 0) {\n select(filteredOptions.value[pointer.value], key)\n }\n pointerReset()\n}\n\nconst pointerForward = () => {\n if (pointer.value < filteredOptions.value.length - 1) {\n pointer.value++\n if (list.value.scrollTop <= pointerPosition.value - (visibleElements.value - 1) * props.optionHeight) {\n list.value.scrollTop = pointerPosition.value - (visibleElements.value - 1) * props.optionHeight\n }\n if (filteredOptions.value[pointer.value]?.$isLabel && !props.groupSelect) pointerForward()\n }\n pointerDirty.value = true\n}\n\nconst pointerBackward = () => {\n if (pointer.value > 0) {\n pointer.value--\n if (list.value.scrollTop >= pointerPosition.value) {\n list.value.scrollTop = pointerPosition.value\n }\n if (filteredOptions.value[pointer.value]?.$isLabel && !props.groupSelect) pointerBackward()\n } else {\n if (filteredOptions.value[pointer.value]?.$isLabel && !props.groupSelect) pointerForward()\n }\n pointerDirty.value = true\n}\n\nconst pointerReset = () => {\n if (!props.closeOnSelect) return\n pointer.value = 0\n if (list.value) list.value.scrollTop = 0\n}\n\nconst pointerAdjust = () => {\n if (pointer.value >= filteredOptions.value.length - 1) {\n pointer.value = filteredOptions.value.length ? filteredOptions.value.length - 1 : 0\n }\n if (filteredOptions.value.length > 0 && filteredOptions.value[pointer.value]?.$isLabel && !props.groupSelect) {\n pointerForward()\n }\n}\n\nconst pointerSet = index => {\n pointer.value = index\n pointerDirty.value = true\n}\n\n// Watchers\nwatch(() => internalValue.value, () => {\n if (props.resetAfter && internalValue.value.length) {\n search.value = ''\n emit('update:modelValue', props.multiple ? [] : null)\n }\n}, { deep: true })\n\nwatch(search, () => emit('search-change', search.value))\n\nwatch(filteredOptions, () => pointerAdjust())\n\nwatch(isOpen, () => pointerDirty.value = false)\n\nwatch(pointer, () => {\n searchInput.value?.setAttribute('aria-activedescendant', `${props.id}-${pointer.value}`)\n})\n\n// Lifecycle\nonMounted(() => {\n if (!props.multiple && props.max) {\n console.warn('[Vue-Multiselect warn]: Max prop should not be used when prop Multiple equals false.')\n }\n if (props.preselectFirst && !internalValue.value.length && props.options.length) {\n select(filteredOptions.value[0])\n }\n})\n</script>\n\n<style>\nfieldset[disabled] .multiselect {\n pointer-events: none;\n}\n\n.multiselect__spinner {\n position: absolute;\n right: 1px;\n top: 1px;\n width: 40px;\n height: 38px;\n background: #fff;\n display: block;\n}\n\n.multiselect__spinner::before,\n.multiselect__spinner::after {\n position: absolute;\n content: \"\";\n top: 50%;\n left: 50%;\n margin: -8px 0 0 -8px;\n width: 16px;\n height: 16px;\n border-radius: 100%;\n border-color: #41b883 transparent transparent;\n border-style: solid;\n border-width: 2px;\n box-shadow: 0 0 0 1px transparent;\n}\n\n.multiselect__spinner::before {\n animation: spinning 2.4s cubic-bezier(0.41, 0.26, 0.2, 0.62);\n animation-iteration-count: infinite;\n}\n\n.multiselect__spinner::after {\n animation: spinning 2.4s cubic-bezier(0.51, 0.09, 0.21, 0.8);\n animation-iteration-count: infinite;\n}\n\n.multiselect__loading-enter-active,\n.multiselect__loading-leave-active {\n transition: opacity 0.4s ease-in-out;\n opacity: 1;\n}\n\n.multiselect__loading-enter,\n.multiselect__loading-leave-active {\n opacity: 0;\n}\n\n.multiselect,\n.multiselect__input,\n.multiselect__single {\n font-family: inherit;\n touch-action: manipulation;\n}\n\n.multiselect {\n display: block;\n position: relative;\n width: 100%;\n min-height: 40px;\n}\n\n.multiselect * {\n box-sizing: border-box;\n}\n\n.multiselect:focus {\n outline: none;\n}\n\n.multiselect--disabled {\n background: #ededed;\n pointer-events: none;\n opacity: 0.6;\n}\n\n.multiselect--active {\n z-index: 50;\n}\n\n.multiselect--active:not(.multiselect--above) .multiselect__current,\n.multiselect--active:not(.multiselect--above) .multiselect__input,\n.multiselect--active:not(.multiselect--above) .multiselect__tags {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.multiselect--active .multiselect__select {\n transform: rotateZ(180deg);\n}\n\n.multiselect--above.multiselect--active .multiselect__current,\n.multiselect--above.multiselect--active .multiselect__input,\n.multiselect--above.multiselect--active .multiselect__tags {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.multiselect__input,\n.multiselect__single,\n.multiselect__placeholder {\n position: relative;\n display: inline-block;\n min-height: 20px;\n line-height: 20px;\n border: none;\n width: calc(100%);\n height: inherit;\n box-sizing: border-box;\n vertical-align: top;\n display: flex;\n align-items: center;\n}\n\n.multiselect__input::placeholder {\n color: #35495e;\n}\n\n.multiselect__tag ~ .multiselect__input,\n.multiselect__tag ~ .multiselect__single {\n width: auto;\n}\n\n.multiselect__input:hover,\n.multiselect__single:hover {\n border-color: #cfcfcf;\n}\n\n.multiselect__input:focus,\n.multiselect__single:focus {\n border-color: #a8a8a8;\n outline: none;\n}\n\n.multiselect__tags-wrap {\n display: inline;\n}\n\n.multiselect__tags {\n display: block;\n height: inherit;\n}\n\n.multiselect__tag {\n position: relative;\n display: inline-block;\n padding: 4px 26px 4px 10px;\n border-radius: 5px;\n margin-right: 10px;\n color: #fff;\n line-height: 1;\n background: #41b883;\n margin-bottom: 5px;\n white-space: nowrap;\n overflow: hidden;\n max-width: 100%;\n text-overflow: ellipsis;\n}\n\n.multiselect__tag-icon {\n cursor: pointer;\n margin-left: 7px;\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n font-weight: 700;\n font-style: initial;\n width: 22px;\n text-align: center;\n line-height: 22px;\n transition: all 0.2s ease;\n border-radius: 5px;\n}\n\n.multiselect__tag-icon::after {\n content: \"×\";\n color: #266d4d;\n font-size: 14px;\n}\n\n.multiselect__tag-icon:focus::after,\n.multiselect__tag-icon:hover::after {\n color: white;\n}\n\n.multiselect__current {\n line-height: 16px;\n min-height: 40px;\n box-sizing: border-box;\n display: block;\n overflow: hidden;\n padding: 8px 12px 0;\n padding-right: 30px;\n white-space: nowrap;\n margin: 0;\n text-decoration: none;\n border-radius: 5px;\n border: 1px solid #e8e8e8;\n cursor: pointer;\n}\n\n.multiselect__select {\n line-height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n position: center;\n position: absolute;\n box-sizing: border-box;\n width: 40px;\n height: 38px;\n right: 1px;\n top: calc(50% - 19px);\n padding: 4px 8px;\n margin: 0;\n text-decoration: none;\n text-align: center;\n cursor: pointer;\n transition: transform 0.2s ease;\n}\n\n.multiselect__select::before {\n position: relative;\n color: #999;\n margin-top: 4px;\n border-style: solid;\n border-width: 5px 5px 0 5px;\n border-color: #999 transparent transparent transparent;\n content: \"\";\n}\n\n.multiselect--active .multiselect__placeholder {\n display: none;\n}\n\n.multiselect__content-wrapper {\n position: absolute;\n display: block;\n background: #fff;\n width: 100%;\n max-height: 240px;\n height: min-content;\n overflow: auto;\n left: 0;\n border-top: none;\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n z-index: 50;\n -webkit-overflow-scrolling: touch;\n}\n\n.multiselect__content {\n list-style: none;\n display: inline-block;\n padding: 0;\n margin: 0;\n min-width: 100%;\n vertical-align: top;\n}\n\n.multiselect--above .multiselect__content-wrapper {\n bottom: 100%;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n border-bottom: none;\n border-top: 1px solid #e8e8e8;\n}\n\n.multiselect__content::-webkit-scrollbar {\n display: none;\n}\n\n.multiselect__element {\n display: block;\n}\n\n.multiselect__option {\n display: block;\n padding: 12px;\n min-height: 40px;\n line-height: 16px;\n text-decoration: none;\n text-transform: none;\n vertical-align: middle;\n position: relative;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.multiselect__option::after {\n top: 0;\n right: 0;\n position: absolute;\n line-height: 40px;\n padding-right: 12px;\n padding-left: 20px;\n font-size: 13px;\n}\n\n.multiselect__option--highlight {\n background: rgba(var(--main), 0.1);\n outline: none;\n}\n\n.multiselect__option--highlight::after {\n content: attr(data-select);\n}\n\n.multiselect__option--selected {\n background: #f3f3f3;\n color: #35495e;\n font-weight: bold;\n}\n\n.multiselect__option--selected::after {\n content: attr(data-selected);\n color: silver;\n background: inherit;\n}\n\n.multiselect__option--selected.multiselect__option--highlight {\n background: rgba(var(--red), 0.1);\n}\n\n.multiselect__option--selected.multiselect__option--highlight::after {\n content: attr(data-deselect);\n}\n\n.multiselect--disabled .multiselect__current,\n.multiselect--disabled .multiselect__select {\n background: #ededed;\n color: #a6a6a6;\n}\n\n.multiselect__option--disabled {\n background: #ededed !important;\n color: #a6a6a6 !important;\n cursor: text;\n pointer-events: none;\n}\n\n.multiselect__option--group {\n background: #ededed;\n color: #35495e;\n}\n\n.multiselect__option--group.multiselect__option--highlight {\n background: #35495e;\n color: #fff;\n}\n\n.multiselect__option--group.multiselect__option--highlight::after {\n background: #35495e;\n}\n\n.multiselect__option--disabled.multiselect__option--highlight {\n background: #dedede;\n}\n\n.multiselect__option--group-selected.multiselect__option--highlight {\n background: #ff6a6a;\n color: #fff;\n}\n\n.multiselect__option--group-selected.multiselect__option--highlight::after {\n background: #ff6a6a;\n content: attr(data-deselect);\n color: #fff;\n}\n\n.multiselect-enter-active,\n.multiselect-leave-active {\n transition: all 0.15s ease;\n}\n\n.multiselect-enter,\n.multiselect-leave-active {\n opacity: 0;\n}\n\n.multiselect__strong {\n margin-bottom: 8px;\n line-height: 20px;\n display: inline-block;\n vertical-align: top;\n}\n\n*[dir=\"rtl\"] .multiselect {\n text-align: right;\n}\n\n*[dir=\"rtl\"] .multiselect__select {\n right: auto;\n left: 1px;\n}\n\n*[dir=\"rtl\"] .multiselect__tags {\n padding: 8px 8px 0 40px;\n}\n\n*[dir=\"rtl\"] .multiselect__content {\n text-align: right;\n}\n\n*[dir=\"rtl\"] .multiselect__option::after {\n right: auto;\n left: 0;\n}\n\n*[dir=\"rtl\"] .multiselect__clear {\n right: auto;\n left: 12px;\n}\n\n*[dir=\"rtl\"] .multiselect__spinner {\n right: auto;\n left: 1px;\n}\n\n@keyframes spinning {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(2turn);\n }\n}\n</style>"],"names":["search"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Shader.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { ref, watchEffect, onMounted, createElementBlock, openBlock, createBlock, createCommentVNode, createVNode, unref, isRef } from "vue";
|
|
2
|
-
import { useRouter } from "vue-router";
|
|
3
|
-
import { useI18n } from "vue-i18n";
|
|
4
|
-
import Loader from "../../../../components/Loader/Loader.vue.js";
|
|
5
|
-
/* empty css */
|
|
6
|
-
import _sfc_main$1 from "../../../../components/FieldBig/FieldBig.vue.js";
|
|
7
|
-
import _sfc_main$2 from "../sections/SectionProduct.vue.js";
|
|
8
|
-
import "../../../../components/Shader/Shader.vue.js";
|
|
9
|
-
import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
|
|
10
|
-
import { actions, state } from "../../store/products.js";
|
|
11
|
-
/* empty css */
|
|
12
|
-
/* empty css */
|
|
13
|
-
const _hoisted_1 = {
|
|
14
|
-
id: "product-recommendation",
|
|
15
|
-
class: "h-min-100 pd-thin t-white bg-black"
|
|
16
|
-
};
|
|
17
|
-
const _hoisted_2 = {
|
|
18
|
-
key: 1,
|
|
19
|
-
class: "section"
|
|
20
|
-
};
|
|
21
|
-
const _hoisted_3 = {
|
|
22
|
-
key: 0,
|
|
23
|
-
class: "mn-b-thin"
|
|
24
|
-
};
|
|
25
|
-
const _sfc_main = {
|
|
26
|
-
__name: "ProductRecommmendation",
|
|
27
|
-
setup(__props) {
|
|
28
|
-
const router = useRouter();
|
|
29
|
-
const loading = ref(true);
|
|
30
|
-
const showInput = ref(false);
|
|
31
|
-
const loadingTexts = ref([
|
|
32
|
-
"Loading all we know about the buds",
|
|
33
|
-
"Processing the cannabis universe",
|
|
34
|
-
"Creating a strain of knowledge",
|
|
35
|
-
"Harvesting taste insights"
|
|
36
|
-
]);
|
|
37
|
-
const text = {
|
|
38
|
-
messages: {
|
|
39
|
-
en: {
|
|
40
|
-
TITLE: "Increase Your High,<br><b class='t-white'>Powered by AI Budtender</b>",
|
|
41
|
-
DESCRIPTION: "AI's got your chill, bro. We're picking out the most cosmic weed strains based on your desired vibe:",
|
|
42
|
-
placeholder: "Describe your desired high, bro...",
|
|
43
|
-
action: "Transmit →"
|
|
44
|
-
},
|
|
45
|
-
ru: {
|
|
46
|
-
TITLE: "Персональный Накур,<br><b class='t-white'>Напрямую от AI</b>",
|
|
47
|
-
DESCRIPTION: "AI на страже твоего релакса, бро. Мы подбираем самые космические сорта травы, исходя из твоего желаемого настроения:",
|
|
48
|
-
placeholder: "Опиши свой желамый хай, bro...",
|
|
49
|
-
action: "Передать →"
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
const { t } = useI18n(text);
|
|
54
|
-
const loadingText = ref(loadingTexts.value[0]);
|
|
55
|
-
let mood = ref(router.currentRoute.value.query.mood || t("Recommend me something"));
|
|
56
|
-
watchEffect(async () => {
|
|
57
|
-
mood.value = router.currentRoute.value.query.mood || t("Recommend me something");
|
|
58
|
-
loading.value = true;
|
|
59
|
-
await actions.submitMood(mood.value);
|
|
60
|
-
loading.value = false;
|
|
61
|
-
});
|
|
62
|
-
onMounted(async () => {
|
|
63
|
-
});
|
|
64
|
-
setInterval(() => {
|
|
65
|
-
const index = loadingTexts.value.indexOf(loadingText.value);
|
|
66
|
-
loadingText.value = loadingTexts.value[(index + 1) % loadingTexts.value.length];
|
|
67
|
-
}, 2e3);
|
|
68
|
-
let inputValue = ref(router.currentRoute.value.query.mood || t("Recommend me something"));
|
|
69
|
-
function submitInput() {
|
|
70
|
-
router.push({ name: "Product Recommmendation", query: { mood: inputValue.value } });
|
|
71
|
-
}
|
|
72
|
-
return (_ctx, _cache) => {
|
|
73
|
-
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
74
|
-
loading.value ? (openBlock(), createBlock(Loader, {
|
|
75
|
-
key: 0,
|
|
76
|
-
status: loadingText.value,
|
|
77
|
-
class: "pos-fixed"
|
|
78
|
-
}, null, 8, ["status"])) : createCommentVNode("", true),
|
|
79
|
-
!loading.value && !showInput.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
80
|
-
!loading.value ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
81
|
-
createVNode(_sfc_main$1, {
|
|
82
|
-
input: unref(inputValue),
|
|
83
|
-
loopTyping: false,
|
|
84
|
-
enableTyping: false,
|
|
85
|
-
placeholder: unref(t)("placeholder"),
|
|
86
|
-
action: unref(t)("action"),
|
|
87
|
-
"onUpdate:input": _cache[0] || (_cache[0] = ($event) => isRef(inputValue) ? inputValue.value = $event : inputValue = $event),
|
|
88
|
-
onAction: submitInput,
|
|
89
|
-
class: "t-white bg-dark-transp-50 w-100"
|
|
90
|
-
}, null, 8, ["input", "placeholder", "action"])
|
|
91
|
-
])) : createCommentVNode("", true),
|
|
92
|
-
createVNode(_sfc_main$2, {
|
|
93
|
-
product: state.current,
|
|
94
|
-
recommendation: state.current.recommendation,
|
|
95
|
-
class: "bg-dark-transp-50 pd-big radius-medium"
|
|
96
|
-
}, null, 8, ["product", "recommendation"])
|
|
97
|
-
])) : createCommentVNode("", true)
|
|
98
|
-
]);
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
const ProductRecommendation = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-ea639d49"]]);
|
|
103
|
-
export {
|
|
104
|
-
ProductRecommendation as default
|
|
105
|
-
};
|
|
106
|
-
//# sourceMappingURL=ProductRecommmendation.vue.js.map
|
package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProductRecommmendation.vue.js","sources":["../../../../../../../src/modules/products/components/pages/ProductRecommmendation.vue"],"sourcesContent":["<template>\n <div id=\"product-recommendation\" class=\"h-min-100 pd-thin t-white bg-black\">\n <Loader v-if=\"loading\" :status=\"loadingText\" class=\"pos-fixed\"/>\n\n <div v-if=\"!loading && !showInput\" class=\"section\">\n\n <div v-if=\"!loading\" class=\"mn-b-thin\">\n <FieldBig \n :input=\"inputValue\" \n :loopTyping=\"false\"\n :enableTyping=\"false\"\n :placeholder=\"t('placeholder')\"\n :action=\"t('action')\"\n @update:input=\"inputValue = $event\"\n @action=\"submitInput\"\n class=\"t-white bg-dark-transp-50 w-100\"\n />\n </div>\n\n <SectionProduct \n :product=\"products.state.current\" \n :recommendation=\"products.state.current.recommendation\" \n class=\"bg-dark-transp-50 pd-big radius-medium\"\n />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, onMounted, watchEffect } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport Loader from '@martyrs/src/components/Loader/Loader.vue'\nimport Breadcrumbs from '@martyrs/src/components/Breadcrumbs/Breadcrumbs.vue'\nimport FieldBig from \"@martyrs/src/components/FieldBig/FieldBig.vue\";\nimport SectionProduct from '@martyrs/src/modules/products/components/sections/SectionProduct.vue'\nimport HeroRecommendation from '@martyrs/src/modules/products/components/sections/HeroRecommendation.vue'\n\nimport * as products from '@martyrs/src/modules/products/store/products.js';\n\nconst router = useRouter()\nconst loading = ref(true)\nconst showInput = ref(false)\nconst loadingTexts = ref([\n \"Loading all we know about the buds\",\n \"Processing the cannabis universe\",\n \"Creating a strain of knowledge\",\n \"Harvesting taste insights\",\n])\n\nconst text = {\n messages: {\n en: {\n TITLE: \"Increase Your High,<br><b class='t-white'>Powered by AI Budtender</b>\",\n DESCRIPTION: \"AI's got your chill, bro. We're picking out the most cosmic weed strains based on your desired vibe:\",\n placeholder: 'Describe your desired high, bro...',\n action: \"Transmit →\",\n },\n ru: {\n TITLE: \"Персональный Накур,<br><b class='t-white'>Напрямую от AI</b>\",\n DESCRIPTION: \"AI на страже твоего релакса, бро. Мы подбираем самые космические сорта травы, исходя из твоего желаемого настроения:\",\n placeholder: 'Опиши свой желамый хай, bro...',\n action: \"Передать →\",\n }\n }\n}\n\nconst { t } = useI18n(text)\n\nconst loadingText = ref(loadingTexts.value[0])\n\nlet mood = ref(router.currentRoute.value.query.mood || t('Recommend me something'))\n\nwatchEffect(async () => {\n mood.value = router.currentRoute.value.query.mood || t('Recommend me something')\n loading.value = true\n await products.actions.submitMood(mood.value)\n loading.value = false\n})\n\nonMounted(async () => {\n // await products.actions.submitMood(mood.value)\n // loading.value = false\n})\n\nsetInterval(() => {\n const index = loadingTexts.value.indexOf(loadingText.value)\n loadingText.value = loadingTexts.value[(index + 1) % loadingTexts.value.length]\n}, 2000)\n\nlet inputValue = ref(router.currentRoute.value.query.mood || t('Recommend me something'))\n\nfunction submitInput() {\n router.push({ name: 'Product Recommmendation', query: { mood: inputValue.value } })\n}\n\n\nfunction tryAgain() {\n loading.value = true\n showInput.value = true\n}\n\nfunction hideInput() {\n showInput.value = false\n}\n</script>\n\n<style scoped>\n/* Add your styles here */\n</style>\n"],"names":["products.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,UAAM,SAAS,UAAS;AACxB,UAAM,UAAU,IAAI,IAAI;AACxB,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,eAAe,IAAI;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAED,UAAM,OAAO;AAAA,MACT,UAAU;AAAA,QACN,IAAI;AAAA,UACA,OAAO;AAAA,UACP,aAAa;AAAA,UACb,aAAa;AAAA,UACb,QAAQ;AAAA,QACpB;AAAA,QACQ,IAAI;AAAA,UACA,OAAO;AAAA,UACP,aAAa;AAAA,UACb,aAAa;AAAA,UACb,QAAQ;AAAA,QACpB;AAAA,MACA;AAAA,IACA;AAEA,UAAM,EAAE,EAAC,IAAK,QAAQ,IAAI;AAE1B,UAAM,cAAc,IAAI,aAAa,MAAM,CAAC,CAAC;AAE7C,QAAI,OAAO,IAAI,OAAO,aAAa,MAAM,MAAM,QAAQ,EAAE,wBAAwB,CAAC;AAElF,gBAAY,YAAY;AACpB,WAAK,QAAQ,OAAO,aAAa,MAAM,MAAM,QAAQ,EAAE,wBAAwB;AAC/E,cAAQ,QAAQ;AAChB,YAAMA,QAAiB,WAAW,KAAK,KAAK;AAC5C,cAAQ,QAAQ;AAAA,IACpB,CAAC;AAED,cAAU,YAAY;AAAA,IAGtB,CAAC;AAED,gBAAY,MAAM;AACd,YAAM,QAAQ,aAAa,MAAM,QAAQ,YAAY,KAAK;AAC1D,kBAAY,QAAQ,aAAa,OAAO,QAAQ,KAAK,aAAa,MAAM,MAAM;AAAA,IAClF,GAAG,GAAI;AAEP,QAAI,aAAa,IAAI,OAAO,aAAa,MAAM,MAAM,QAAQ,EAAE,wBAAwB,CAAC;AAExF,aAAS,cAAc;AACnB,aAAO,KAAK,EAAE,MAAM,2BAA2B,OAAO,EAAE,MAAM,WAAW,QAAO,CAAE;AAAA,IACtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { ref, createElementBlock, openBlock, createElementVNode, createVNode, unref, isRef, Fragment, renderList, withModifiers, toDisplayString } from "vue";
|
|
2
|
-
import _sfc_main$1 from "../../../../components/FieldBig/FieldBig.vue.js";
|
|
3
|
-
import "../../../../components/Shader/Shader.vue.js";
|
|
4
|
-
import { useRouter } from "vue-router";
|
|
5
|
-
import { useI18n } from "vue-i18n";
|
|
6
|
-
/* empty css */
|
|
7
|
-
const _hoisted_1 = { class: "pd-big bg-black t-white pos-relative o-hidden" };
|
|
8
|
-
const _hoisted_2 = { class: "flex-column flex-center flex t-center pos-relative z-index-1" };
|
|
9
|
-
const _hoisted_3 = ["innerHTML"];
|
|
10
|
-
const _hoisted_4 = ["innerHTML"];
|
|
11
|
-
const _hoisted_5 = ["innerHTML"];
|
|
12
|
-
const _hoisted_6 = {
|
|
13
|
-
style: { "max-width": "50rem" },
|
|
14
|
-
class: "w-100 h-max gap-thin cols-6"
|
|
15
|
-
};
|
|
16
|
-
const _hoisted_7 = ["onClick"];
|
|
17
|
-
const _hoisted_8 = ["src"];
|
|
18
|
-
const _hoisted_9 = { class: "t-white" };
|
|
19
|
-
const _sfc_main = {
|
|
20
|
-
__name: "HeroRecommendation",
|
|
21
|
-
setup(__props) {
|
|
22
|
-
const router = useRouter();
|
|
23
|
-
const text = {
|
|
24
|
-
messages: {
|
|
25
|
-
"en": {
|
|
26
|
-
"title": "Increase Your High <br><b class='t-main'>Boosted by AI Budtender</b>",
|
|
27
|
-
"description": "Just tell us what you're want, and Weeder will find your ideal match.",
|
|
28
|
-
"placeholderTexts": [
|
|
29
|
-
"Lowest THC, please!",
|
|
30
|
-
"Something with banana flavors?",
|
|
31
|
-
"I'm in the mood for trippy vibes."
|
|
32
|
-
],
|
|
33
|
-
"subdescription": "AI Curated Recommendations for Your Mood:",
|
|
34
|
-
"presets": {
|
|
35
|
-
"sleep": "sleep",
|
|
36
|
-
"creative": "creative",
|
|
37
|
-
"giggly": "giggly",
|
|
38
|
-
"libido": "libido",
|
|
39
|
-
"trippy": "trippy",
|
|
40
|
-
"euphoric": "euphoric"
|
|
41
|
-
},
|
|
42
|
-
"placeholder": "Tell us what you're after...",
|
|
43
|
-
"action": "Transmit"
|
|
44
|
-
},
|
|
45
|
-
"ru": {
|
|
46
|
-
"title": "Персональный Накур,<br><b class='t-main'>Напрямую от AI</b>",
|
|
47
|
-
"description": "AI на страже твоего релакса, бро. Мы подбираем самые космические товары с учетом твоего желаемого настроения:",
|
|
48
|
-
"placeholderTexts": [
|
|
49
|
-
"Я хочу самый низкий THC",
|
|
50
|
-
"Я хочу чего-нибудь бананового",
|
|
51
|
-
"Я хочу курнуть хейза"
|
|
52
|
-
],
|
|
53
|
-
"presets": {
|
|
54
|
-
"sleep": "сон",
|
|
55
|
-
"creative": "креатив",
|
|
56
|
-
"giggly": "смех",
|
|
57
|
-
"libido": "либидо",
|
|
58
|
-
"trippy": "трип",
|
|
59
|
-
"euphoric": "кайф"
|
|
60
|
-
},
|
|
61
|
-
"subdescription": "Или выберите тег, и наш AI направит тебя к самым крутым вариантам:",
|
|
62
|
-
"placeholder": "Опиши свой желаемый хай, bro...",
|
|
63
|
-
"action": "Передать"
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
const { t, rt } = useI18n(text);
|
|
68
|
-
let mood = ref("");
|
|
69
|
-
const presets = ["sleep", "creative", "giggly", "libido", "trippy", "euphoric"];
|
|
70
|
-
return (_ctx, _cache) => {
|
|
71
|
-
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
72
|
-
createElementVNode("div", _hoisted_2, [
|
|
73
|
-
createElementVNode("h1", {
|
|
74
|
-
class: "mn-b-semi",
|
|
75
|
-
innerHTML: unref(t)("title")
|
|
76
|
-
}, null, 8, _hoisted_3),
|
|
77
|
-
createElementVNode("p", {
|
|
78
|
-
class: "mn-b-big p-medium t-transp",
|
|
79
|
-
innerHTML: unref(t)("description")
|
|
80
|
-
}, null, 8, _hoisted_4),
|
|
81
|
-
createVNode(_sfc_main$1, {
|
|
82
|
-
input: unref(mood),
|
|
83
|
-
typingSpeed: 100,
|
|
84
|
-
loopTyping: true,
|
|
85
|
-
enableTyping: true,
|
|
86
|
-
placeholder: unref(t)("placeholder"),
|
|
87
|
-
action: unref(t)("action"),
|
|
88
|
-
"onUpdate:input": _cache[0] || (_cache[0] = ($event) => isRef(mood) ? mood.value = $event : mood = $event),
|
|
89
|
-
onAction: _cache[1] || (_cache[1] = ($event) => unref(router).push({ name: "Product Recommmendation", query: { mood: unref(mood) } })),
|
|
90
|
-
class: "mn-b-big pd-big bg-dark-transp-50 bg-blur-thin w-100 w-max-40r"
|
|
91
|
-
}, null, 8, ["input", "placeholder", "action"]),
|
|
92
|
-
createElementVNode("p", {
|
|
93
|
-
class: "w-m-60r t-transp mn-b-semi p-regular",
|
|
94
|
-
innerHTML: unref(t)("subdescription")
|
|
95
|
-
}, null, 8, _hoisted_5),
|
|
96
|
-
createElementVNode("div", _hoisted_6, [
|
|
97
|
-
(openBlock(), createElementBlock(Fragment, null, renderList(presets, (preset, index) => {
|
|
98
|
-
return createElementVNode("button", {
|
|
99
|
-
key: preset,
|
|
100
|
-
onClick: withModifiers(($event) => unref(router).push({ name: "ProductRecommmendation", query: { mood: preset } }), ["stop"]),
|
|
101
|
-
class: "uppercase pd-thin t-medium flex-center flex-column flex-nowrap flex bg-dark-transp-50 bg-blur-thin radius-semi cursor-pointer transition-elastic hover-easeInOut-1"
|
|
102
|
-
}, [
|
|
103
|
-
createElementVNode("img", {
|
|
104
|
-
loading: "lazy",
|
|
105
|
-
src: (_ctx.FILE_SERVER_URL || "") + "/icons/moods/" + preset + ".svg",
|
|
106
|
-
class: "w-100"
|
|
107
|
-
}, null, 8, _hoisted_8),
|
|
108
|
-
createElementVNode("span", _hoisted_9, toDisplayString(unref(t)(`presets.` + preset)), 1)
|
|
109
|
-
], 8, _hoisted_7);
|
|
110
|
-
}), 64))
|
|
111
|
-
])
|
|
112
|
-
])
|
|
113
|
-
]);
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
export {
|
|
118
|
-
_sfc_main as default
|
|
119
|
-
};
|
|
120
|
-
//# sourceMappingURL=HeroRecommendation.vue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HeroRecommendation.vue.js","sources":["../../../../../../../src/modules/products/components/sections/HeroRecommendation.vue"],"sourcesContent":["<script setup>\n\timport { ref, onMounted } from 'vue'\n\n\timport FieldBig from \"@martyrs/src/components/FieldBig/FieldBig.vue\";\n\timport Shader from \"@martyrs/src/components/Shader/Shader.vue\";\n\n\timport { useRouter } from 'vue-router'\n\timport { useI18n } from 'vue-i18n'\n\n\timport * as products from '@martyrs/src/modules/products/store/products.js';\n\n\tconst router = useRouter()\n\n\tconst text = {\n messages: {\n \"en\": {\n\t\t \"title\": \"Increase Your High <br><b class='t-main'>Boosted by AI Budtender</b>\",\n\t\t \"description\": \"Just tell us what you're want, and Weeder will find your ideal match.\",\n\t\t \"placeholderTexts\": [\n\t\t \t'Lowest THC, please!',\n\t\t \t'Something with banana flavors?',\n\t\t \t\"I'm in the mood for trippy vibes.\"\n\t\t ],\n\t\t \"subdescription\": \"AI Curated Recommendations for Your Mood:\",\n\t\t \"presets\": {\n\t\t \"sleep\": \"sleep\",\n\t\t \"creative\": \"creative\",\n\t\t \"giggly\": \"giggly\",\n\t\t \"libido\": \"libido\",\n\t\t \"trippy\": \"trippy\",\n\t\t \"euphoric\": \"euphoric\"\n\t\t },\n\t\t \"placeholder\": \"Tell us what you're after...\",\n\t\t \"action\": \"Transmit\"\n\t\t },\n\t\t \"ru\": {\n\t\t \"title\": \"Персональный Накур,<br><b class='t-main'>Напрямую от AI</b>\",\n\t\t \"description\": \"AI на страже твоего релакса, бро. Мы подбираем самые космические товары с учетом твоего желаемого настроения:\",\n\t\t \"placeholderTexts\": [\n\t\t \t'Я хочу самый низкий THC',\n\t\t \t'Я хочу чего-нибудь бананового',\n\t\t \t'Я хочу курнуть хейза'\n\t\t ],\n\t\t \t \"presets\": {\n\t\t \"sleep\": \"сон\",\n\t\t \"creative\": \"креатив\",\n\t\t \"giggly\": \"смех\",\n\t\t \"libido\": \"либидо\",\n\t\t \"trippy\": \"трип\",\n\t\t \"euphoric\": \"кайф\"\n\t\t },\n\t\t \"subdescription\": \"Или выберите тег, и наш AI направит тебя к самым крутым вариантам:\",\n\t\t \"placeholder\": \"Опиши свой желаемый хай, bro...\",\n\t\t \"action\": \"Передать\"\n\t\t }\n\t\t}\t\n\t}\n\n\tconst { t, rt } = useI18n(text)\n\n\tlet mood = ref('')\n\n\tconst presets = ['sleep','creative','giggly','libido','trippy','euphoric'];\n\n\tasync function submitMood(presetMood = null) {\n\t\tconst moodToSend = presetMood || mood.value;\n\t\tawait products.actions.submitMood(moodToSend);\n\t}\n\n\t\n</script>\n\n<template>\n\t<div \n\t\tclass=\"pd-big bg-black t-white pos-relative o-hidden \"\n\t>\n\t\t<div class=\"flex-column flex-center flex t-center pos-relative z-index-1\">\n\t\t\t\n\t\t\t<h1 \n\t\t\t\tclass=\"mn-b-semi\" \n\t\t\t\tv-html=\"t('title')\"\n\t\t\t/>\n\n\t\t\t<p \n\t\t\t\tclass=\"mn-b-big p-medium t-transp\" \n\t\t\t\tv-html=\"t('description')\"\n\t\t\t/>\n\t\t\t\n\t\t\t<FieldBig \n\t\t\t\t:input=\"mood\" \n\t\t :typingSpeed=\"100\"\n\t\t :loopTyping=\"true\"\n\t\t :enableTyping=\"true\"\n\t\t :placeholder=\"t('placeholder')\"\n\t\t :action=\"t('action')\"\n\t\t @update:input=\"mood = $event\"\n\t\t @action=\"router.push({name: 'Product Recommmendation', query: {mood: mood}})\"\n\t\t\t\tclass=\"mn-b-big pd-big bg-dark-transp-50 bg-blur-thin w-100 w-max-40r\"\n\t\t\t/>\n\n\t\t\t<p \n\t\t\t\tclass=\"w-m-60r t-transp mn-b-semi p-regular\" \n\t\t\t\tv-html=\"t('subdescription')\"\n\t\t\t/>\n\n\t\t\t<div style=\"max-width: 50rem;\" class=\"w-100 h-max gap-thin cols-6\">\n\n\t\t\t\t<button \n\t\t\t\t\tv-for=\"(preset,index) in presets\" \n\t\t\t\t\t:key=\"preset\" \n\t\t\t\t\t@click.stop=\"router.push({name: 'ProductRecommmendation', query: {mood: preset}})\"\n\t\t\t\t\tclass=\"\n\t\t\t\t\t\tuppercase \n\t\t\t\t\t\tpd-thin\n\t\t\t\t\t\tt-medium\n\t\t\t\t\t\tflex-center\n\t\t\t\t\t\tflex-column\n\t\t\t\t\t\tflex-nowrap\n\t\t\t\t\t\tflex\n\t\t\t\t\t\tbg-dark-transp-50 \n\t\t\t\t\t\tbg-blur-thin\n\t\t\t\t\t\tradius-semi\n\t\t\t\t\t\tcursor-pointer\n\t\t\t\t\t\ttransition-elastic\n\t\t\t\t\t\thover-easeInOut-1 \n\t\t\t\t\t\"\n\t\t\t\t>\n\t\t\t\t\t<img loading=\"lazy\" \n\t\t\t\t\t\t:src=\"(FILE_SERVER_URL || '') + '/icons/moods/' + preset + '.svg'\" \n\t\t\t\t\t\tclass=\"w-100\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<span class=\"t-white\"> \n\t\t\t\t\t\t{{ t(`presets.` + preset) }}\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\n\t\t\t</div>\n\n\t\t</div>\n\n\t\t<!-- <Shader class=\"w-100 h-100 flex flex-center pos-absolute pos-t-0 pos-r-0 z-index-0\"/> -->\n\n <!-- <div class=\"w-100 h-100 flex flex-center pos-absolute pos-t-0 pos-r-0 z-index-0\">\n \t <img src=\"/spiral.webp\" loading=\"lazy\" alt=\"\" class=\"spiral\"/>\n </div> -->\n\n\t</div>\n</template>\n\n<style style=\"scoped\">\n.spiral {\n object-fit: cover;\n width: 100rem;\n height: 100rem;\n position: absolute;\n top: 50%;\n left: 50%;\n opacity: 0.066;\n transform: translate(-50%, -50%) rotate(0deg);\n transform-origin: center center;\n animation: spin 5s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: translate(-50%, -50%) rotate(0deg);\n }\n 100% {\n transform: translate(-50%, -50%) rotate(360deg);\n }\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAWC,UAAM,SAAS,UAAS;AAExB,UAAM,OAAO;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,UACN,SAAS;AAAA,UACT,eAAe;AAAA,UACf,oBAAoB;AAAA,YACnB;AAAA,YACA;AAAA,YACA;AAAA,UACP;AAAA,UACM,kBAAkB;AAAA,UAClB,WAAW;AAAA,YACT,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,YAAY;AAAA,UACpB;AAAA,UACM,eAAe;AAAA,UACf,UAAU;AAAA,QAChB;AAAA,QACI,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,eAAe;AAAA,UACf,oBAAoB;AAAA,YACnB;AAAA,YACA;AAAA,YACA;AAAA,UACP;AAAA,UACO,WAAW;AAAA,YACV,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,YAAY;AAAA,UACpB;AAAA,UACM,kBAAkB;AAAA,UAClB,eAAe;AAAA,UACf,UAAU;AAAA,QAChB;AAAA,MACA;AAAA,IACA;AAEC,UAAM,EAAE,GAAG,GAAE,IAAK,QAAQ,IAAI;AAE9B,QAAI,OAAO,IAAI,EAAE;AAEjB,UAAM,UAAU,CAAC,SAAQ,YAAW,UAAS,UAAS,UAAS,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
File without changes
|