{"version":3,"file":"hobbii-product-1db18957.min.js","sources":["../frontend/components/CartActions/ButtonAddToCart.vue","../frontend/shared/components/Icons/IconInfo.vue","../frontend/components/CartActions/CartErrorModal.vue","../frontend/shared/components/Icons/IconCart.vue","../frontend/components/CartActions/CartActions.vue","../frontend/shared/utils/tracking.ts","../frontend/shared/constants/campaignTypes.js","../frontend/shared/components/patterns/PatternDownload.vue","../frontend/components/QuantitySelector/QuantityBasicSelector.vue","../frontend/components/QuantitySelector/QuantityBulkSelector.vue","../frontend/shared/composables/useProductMeta.js","../frontend/shared/instances/quantity-selector.js","../frontend/entrypoints/product.js","../frontend/shared/instances/pattern-download-button.js","../frontend/shared/instances/cart-button.js"],"sourcesContent":["\n .custom-label]:wv-hidden group flex h-[62px] w-full cursor-pointer items-center justify-center rounded-lg bg-pink text-center text-lg font-bold text-white transition-all duration-300 ease-in-out hover:bg-pink-darker md:h-[52px] md:text-base\"\n @click=\"$emit('click')\"\n >\n \n {{\n t('product.quantity.button_cart')\n }}\n \n\n\n\n","\n \n \n \n \n \n \n\n","\n .modal__dialog]:bg-pink\"\n :classes=\"{\n body: 'h-[100px] flex items-center justify-center gap-2',\n header: 'b-0'\n }\"\n close-by-swipe-header\n @on-close=\"cartErrorMessage = null\"\n >\n \n \n \n \n {{ cartErrorMessage }}\n \n \n \n\n\n\n","\n \n \n \n\n","\n \n \n >\n \n \n \n \n \n \n \n \n \n \n {{ t('cart.webview_patterns_block') }}\n \n \n \n \n \n\n\n\n\n\n","import { sha256 } from 'js-sha256';\n\ninterface UserEventDefinitions {\n generic_user_event: {\n action: string;\n category: string;\n label?: string;\n value?: string | number;\n [key: string]: unknown;\n };\n download_pattern: {\n action: string;\n category: string;\n label: string;\n item_id: string | number;\n [key: string]: unknown;\n };\n}\n\ntype EventNames = keyof UserEventDefinitions;\n\ntype TrackUserEvent = (\n event: T,\n data: UserEventDefinitions[T]\n) => void;\n\nconst trackUserEvent: TrackUserEvent = (event, data) => {\n window.dataLayer.push({\n event,\n user_event_data: data\n });\n};\n\n// We use the algorithm sha256 for encoding according to Meta Pixel documentation\n// https://developers.facebook.com/docs/meta-pixel/advanced/advanced-matching/\n// https://developers.google.com/google-ads/api/docs/conversions/enhanced-conversions/web#prepare-data\nconst hashUserData = (value: string) => {\n return sha256(value);\n};\n\nexport { trackUserEvent, hashUserData };\n","export const campaignType = {\n HOBBII: 'hobbii'\n};\n","\n .custom-label]:wv-hidden md:mt-0md:h-[72px] group mt-4 flex h-[82px] w-full cursor-pointer flex-col items-center justify-center rounded-lg bg-pink text-center text-lg font-bold text-white transition-all duration-300 ease-in-out hover:bg-pink-darker md:text-base\"\n @click=\"startDownload\"\n >\n {{\n t('patterns.download.download_pattern')\n }}\n {{\n t('patterns.download.already_purchased')\n }}\n \n\n .custom-label]:wv-hidden group flex h-[62px] w-full cursor-pointer items-center justify-center rounded-lg bg-primary text-center text-lg font-bold text-white transition-all duration-300 ease-in-out hover:bg-primary-600 md:h-[52px] md:text-base\"\n @click=\"handleDownloadButtonClick\"\n >\n {{ t('patterns.download.download_pattern') }}\n {{ t('patterns.download.free') }}\n \n\n \n \n \n \n {{ productName }}\n \n {{ t('patterns.download.signup_get_free') }}\n \n \n {{ t('patterns.download.modal_description1') }}\n \n \n {{ t('patterns.download.modal_description2') }}\n \n \n {{ t('patterns.download.modal_description3') }}\n \n\n \n \n \n {{ t('patterns.download.name') }}\n \n \n \n \n {{ t('patterns.download.email') }}\n \n \n \n \n {{ t('global_errors.form_validation.invalid_email') }}\n \n \n \n \n \n \n \n {{ t('patterns.download.signup') }}\n \n \n \n {{ t('patterns.download.tos_link_description') }}\n {{ t('patterns.download.tos_link_text') }}\n \n \n {{ t('patterns.download.already_signed_up') }}\n {{ t('patterns.download.download_pattern_here') }}\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n {{ t('patterns.download.success_title') }}\n \n \n \n \n {{ t('patterns.download.success_content.sentence1') }}\n \n \n {{ t('patterns.download.success_content.sentence2') }}\n \n \n \n {{ t('patterns.download.success_content.sentence3') }}\n \n \n \n {{\n t('patterns.download.countdown', {\n countdown: countdownValue\n })\n }}\n \n \n {{ t('patterns.download.download_pattern_here') }}\n \n \n \n \n \n \n {{ t('patterns.download.success_close') }}\n \n \n \n \n \n \n\n\n\n","\n \n {{ t('product.quantity.entry_qty') }}\n \n \n\n\n\n","\n \n \n {{\n t('product.quantity.pcs', quantityStore.quantity)\n }}\n {{ t('product.quantity.text_select_quantity') }}\n\n \n {{\n t('product.quantity.text_save_up_to', {\n value: highestDiscountItemPct\n })\n }}\n {{\n t('product.quantity.text_save', { value: selectedBulkDiscountPct })\n }}\n \n \n\n \n \n {{ modalTitle }}\n \n {{ tag }}\n {{ shortDescription }}\n \n \n \n {{ modalTitle }}\n \n \n \n \n\n \n \n {{ t('product.quantity.entry_qty') }}\n \n \n {{ t('product.quantity.text_discount') }}\n \n \n {{ t('product.quantity.text_discount_each') }}\n \n \n {{ t('product.quantity.text_label_yousave') }}\n \n \n\n \n \n \n {{ t('product.quantity.pcs', bulk.quantity) }}\n \n \n {{\n t('product.quantity.text_save', {\n value: bulk.discount_percentage\n })\n }}\n \n {{ formattedPrice(bulk.price_unit) }}\n {{ getDiscountFormatted(bulk) }}-\n \n \n\n \n \n\n 0\"\n :prefix=\"t('product.quantity.text_total_price')\"\n :sales-price=\"salesPrice\"\n :regular-price=\"regularPrice\"\n >\n \n\n \n \n \n \n {{ t('product.quantity.text_select_quantity') }}\n \n \n \n\n \n \n\n\n\n","import { useI18n } from 'vue-i18n';\n\nexport const useProductMeta = (meta = {}, alreadyTranslated) => {\n const { t } = useI18n();\n let yarnWeight = '';\n let patternType = '';\n let yarnComposition = '';\n let subtitle = '';\n let designers = '';\n\n const isAPattern = meta.entity_type === 'pattern';\n\n const getHighlight = () => {\n if (isAPattern) {\n return patternType;\n } else {\n return yarnWeight;\n }\n };\n\n const getShortDescription = () => {\n if (isAPattern) {\n return designers || subtitle;\n } else {\n return subtitle || yarnComposition;\n }\n };\n\n const setYarnWeight = () => {\n const yarnWeightCategory = meta?.yarn_weight_category;\n\n if (yarnWeightCategory) {\n if (alreadyTranslated) {\n yarnWeight = yarnWeightCategory;\n } else {\n yarnWeight = t(`product.yarn_weight.${yarnWeightCategory}`);\n }\n }\n };\n\n const setPatternMeta = () => {\n if (isAPattern) {\n if (meta.designer) {\n designers = Array.isArray(meta.designer)\n ? meta.designer.join(', ')\n : meta.designer;\n }\n\n if (meta.pattern_kind) {\n patternType = Array.isArray(meta.pattern_kind)\n ? meta.pattern_kind.join(', ')\n : meta.pattern_kind;\n }\n }\n };\n\n const setProductMeta = () => {\n if (!isAPattern) {\n yarnComposition = meta.yarn_composition;\n subtitle = meta.subtitle;\n }\n };\n\n setYarnWeight();\n setPatternMeta();\n setProductMeta();\n\n return {\n yarnWeight,\n patternType,\n yarnComposition,\n subtitle,\n designers,\n getHighlight,\n getShortDescription\n };\n};\n","import GlobalKeyDownDirective from '@/shared/directives/globalKeyDown';\nimport QuantityBasicSelector from '@/components/QuantitySelector/QuantityBasicSelector.vue';\nimport QuantityBulkSelector from '@/components/QuantitySelector/QuantityBulkSelector.vue';\n\nimport { useProductQuantitiesStore } from '@/shared/pinia/modules/product-quantities';\nimport { useProductOptionsStore } from '@/shared/pinia/modules/product-options';\nimport { setupI18n } from '@/shared/utils/i18n';\n\nexport const initQuantitySelector = async (createApp, mountSelector) => {\n const script = document.getElementById(mountSelector);\n\n if (!script) return;\n\n // extract and convert data\n const price = Number(script.dataset.price);\n const compareAtPrice = Number(script.dataset.compareAtPrice ?? null);\n const hasDifferentPrices = script.dataset.hasDifferentPrices === 'true';\n\n const isOnSale = compareAtPrice > price;\n const hasBulkDiscountsConfig = !!script.dataset.discounts;\n const useBulkDiscounts = !isOnSale && hasBulkDiscountsConfig;\n\n const bulkDiscounts = useBulkDiscounts\n ? JSON.parse(script.dataset.discounts).map((b) => {\n // calculate the discounted price\n const discountAmount = (price * b.discount_percentage) / 100;\n\n // TODO: Avoid mutating this, there must be a better way...\n return {\n ...b,\n price_before: price,\n price_unit: price - discountAmount\n };\n })\n : [];\n\n const quantityStore = useProductQuantitiesStore();\n const optionsStore = useProductOptionsStore();\n\n quantityStore.setBulkDiscounts(bulkDiscounts);\n\n const quantityComponent = useBulkDiscounts\n ? QuantityBulkSelector\n : QuantityBasicSelector;\n const defaultValue = useBulkDiscounts ? 0 : 1;\n\n const vueApp = createApp(quantityComponent);\n\n quantityStore.quantity = defaultValue;\n optionsStore.haveDifferentPrices = hasDifferentPrices;\n\n const i18n = await setupI18n(window.Shopify.locale);\n\n vueApp.use(window.hobbiiStore);\n\n vueApp\n .use(i18n)\n .directive('global-keydown', GlobalKeyDownDirective)\n .mount(`#${mountSelector}`);\n\n // TODO update stock\n};\n","import { createApp } from 'vue';\nimport { initCartActions } from '@/shared/instances/cart-button.js';\nimport { initHobbiiStarter } from '@/shared/instances/hobbii-starter';\nimport { initPatternDownload } from '@/shared/instances/pattern-download-button.js';\nimport { initQuantitySelector } from '@/shared/instances/quantity-selector.js';\n\nimport { useProductStore } from '@/shared/pinia/modules/product.js';\nimport { getProductDataFromHTML } from '@/shared/utils/product.js';\n\nimport { initTabCounters } from './shared/product-tab-counters.js';\nimport { initProductInfoTabs } from './shared/product-info-tabs.js';\nimport { setReadMoreListeners } from './shared/read-more.js';\nimport {\n initGalleryOptions,\n initDropdownOptions,\n initSingleOption\n} from './shared/product-options.js';\nimport { entityTypes } from '@/shared/constants/product.js';\n\nconst optionsMountId = 'product-options';\nconst cartActionsMountId = 'product-cart-actions';\nconst quantityPickerMountId = 'product-quantity-selector';\n\n// set option selector\nconst initOptionsSelector = () => {\n const elem = document.getElementById(optionsMountId);\n\n const type = JSON.parse(elem.dataset.optionKind);\n\n switch (type?.layout) {\n case 'gallery':\n initGalleryOptions(createApp, optionsMountId);\n break;\n case 'dropdown':\n initDropdownOptions(createApp, optionsMountId);\n break;\n default: {\n initSingleOption(optionsMountId);\n }\n }\n};\n\nconst initProductPageApps = async () => {\n const { productId, variantId, legacyId, entityType, productMainImageUrl } =\n getProductDataFromHTML();\n\n const productStore = useProductStore();\n\n if (entityType) {\n productStore.entityType = entityType;\n }\n if (productId) {\n productStore.productId = productId;\n }\n if (variantId) {\n productStore.variantId = variantId;\n }\n if (legacyId) {\n productStore.legacyId = legacyId;\n }\n\n if (productMainImageUrl) {\n productStore.mainImageUrl = productMainImageUrl;\n }\n\n if (productStore.entityType == entityTypes.PATTERN) {\n const { isFreePattern } = getProductDataFromHTML();\n if (isFreePattern === 'true') {\n productStore.purchasable = false;\n }\n }\n\n // TODO Check store\n // TODO set cart item preview / modal\n // TODO set Q&A\n // TODO set photo gallery\n\n // TODO perhaps use hide / show on the product page instead of this\n if (productStore.isPattern) {\n initPatternDownload(createApp, 'pattern-download-button');\n } else {\n initOptionsSelector();\n }\n\n initCartActions(createApp, cartActionsMountId);\n initQuantitySelector(createApp, quantityPickerMountId);\n initProductInfoTabs();\n initTabCounters();\n\n setReadMoreListeners();\n};\n\ninitHobbiiStarter();\ninitProductPageApps();\n","import PatternDownload from '../components/patterns/PatternDownload.vue';\nimport GlobalKeyDownDirective from '../directives/globalKeyDown.js';\nimport { getProductDataFromHTML } from '@/shared/utils/product.js';\nimport { useProductStore } from '../pinia/modules/product.js';\nimport { setupI18n } from '@/shared/utils/i18n';\n\nexport const initPatternDownload = async (createApp, mountId) => {\n const mountElement = document.getElementById(mountId);\n\n if (!mountElement) {\n console.error(`Element with id: \"${mountId}\" not found.`);\n return;\n }\n\n const { productName, legacyId } = getProductDataFromHTML();\n const { productSku, freePattern } = mountElement.dataset;\n\n if (!productName || !productSku || !freePattern) return;\n\n const i18n = await setupI18n(window.Shopify.locale);\n\n const productStore = useProductStore();\n productStore.legacyId = legacyId;\n\n createApp(PatternDownload, {\n productName,\n productSku,\n patternPurchasable: freePattern === 'false'\n })\n .use(i18n)\n .directive('global-keydown', GlobalKeyDownDirective)\n .mount(`#${mountId}`);\n};\n","import GlobalKeyDownDirective from '../../shared/directives/globalKeyDown';\nimport CartActions from '../../components/CartActions/CartActions.vue';\nimport { setupI18n } from '@/shared/utils/i18n';\n\nexport const initCartActions = async (createApp, mountId) => {\n if (!document.getElementById(mountId)) {\n console.error(`Element with id: \"${mountId}\" not found.`);\n return;\n }\n\n const i18n = await setupI18n(window.Shopify.locale);\n\n const vueApp = createApp(CartActions);\n vueApp.use(window.hobbiiStore);\n\n vueApp\n .use(i18n)\n .directive('global-keydown', GlobalKeyDownDirective)\n .mount(`#${mountId}`);\n};\n"],"names":["t","useTranslations","props","__props","addToCartBtn","ref","classes","computed","disabled","adding","isWebview","_hoisted_1","xmlns","width","height","_hoisted_3","fill","strokeLinecap","strokeLinejoin","createBaseVNode","d","_sfc_render","_ctx","_cache","cartErrorModal","cartErrorMessage","__expose","display","errorMessage","value","_a","openModal","cartStore","useCartStore","webviewStore","useWebviewStore","productStore","useProductStore","quantityStore","useProductQuantitiesStore","optionsStore","useProductOptionsStore","flyingItem","selectedQuantity","quantity","isOptionSelected","isQuantitySelected","isPurchasable","purchasable","isAdding","isProduct","productInStock","isPattern","onAddToCartClick","__async","this","addToCart","err","_b","message","window","Hobbii","errorMessages","unknownErrorOccurred","showQuantityModal","showOptionsModal","trackUserEvent","event","data","dataLayer","push","user_event_data","hashUserData","sha256","campaignType","emarsysUUIDKey","downloadPattern","userStore","useUserStore","showPatternDownloadModal","showThankYouModal","countdownValue","customerEmail","customerName","patternDownloadUrl","emailIsValid","formIsValid","onBeforeMount","contactUUID","sessionStorage","getItem","isLogged","setCookie","productSku","getCookie","setUpPatternDownloadTracking","priceBlock","document","querySelector","hidden","startCountdown","startDownload","watch","newVal","category","action","label","productName","alreadySubscribedDownload","legacyId","location","href","patternPurchasable","item_id","handleDownloadButtonClick","openDownloadModal","closeDownloadModal","validateEmailInput","e","type","isEmailValid","onNewsletterSignupFormSubmit","patternDownloadSignupForm","firstNameInput","emailInput","setItem","v5","customer_name_hash","customer_email_hash","currency_code","Shopify","currency","active","submit","setAsSignedUp","seconds","onDone","countdownInterval","setInterval","clearInterval","get","set","updateQuantity","formattedPrice","useConfigStore","qty","entityType","metaSubtitle","metaYarnComposition","metaYarnWeight","getProductDataFromHTML","setInitialPriceFromDOM","getHighlight","getShortDescription","meta","alreadyTranslated","useI18n","yarnWeight","patternType","yarnComposition","subtitle","designers","isAPattern","entity_type","yarnWeightCategory","yarn_weight_category","designer","Array","isArray","join","pattern_kind","yarn_composition","useProductMeta","tag","shortDescription","inStock","activeOption","defaultItem","price_before","price","before","price_unit","initial_unit","bulkDiscounts","getDiscountFormatted","item","discount","isNaN","modalTitle","selectedVariant","title","closestQuantityItem","selectedBulkDiscount","selectedBulkDiscountPct","bulk","discount_percentage","highestDiscountItemPct","highestDiscountItem","salesPrice","regularPrice","image","consolidatedImageUrl","mainImageUrl","fallbackImageUrl","submitQuantityAndClose","initQuantitySelector","createApp","mountSelector","exports","script","getElementById","Number","dataset","compareAtPrice","hasDifferentPrices","isOnSale","hasBulkDiscountsConfig","discounts","useBulkDiscounts","JSON","parse","map","b","discountAmount","__spreadProps","setBulkDiscounts","defaultValue","vueApp","QuantityBulkSelector","QuantityBasicSelector","haveDifferentPrices","i18n","setupI18n","locale","use","hobbiiStore","directive","GlobalKeyDownDirective","mount","optionsMountId","productId","variantId","productMainImageUrl","entityTypes","PATTERN","isFreePattern","mountId","mountElement","console","error","freePattern","PatternDownload","elem","optionKind","layout","initGalleryOptions","initDropdownOptions","initSingleOption","CartActions","initCartActions"],"mappings":"ihEAoBM,MAAAA,GAAQC,IAERC,EAAQC,EAeRC,EAAeC,EAAI,MAEnBC,EAAUC,GAAS,IAAM,CAC7BL,EAAMM,SAAW,iCAAmC,iBACpDN,EAAMO,OACF,gGACA,GACJP,EAAMO,QAAUP,EAAMQ,UAAY,YAAc,wdC1C9CC,GAAkC,CAClCC,MAAM,6BACNC,YACAC,kCAQIC,GAAA,GANU,IAAA,CAACC,KAAA,OAAsBC,sBAAuBC,eAAe,0BAKjEC,EAAA,OAAA,CAAAC,EAAA,oBAFa,OAAA,CACnBJ,KAAsX,iaAV5XK,SAAAC,EAAAC,4KC6BI,MAAAC,EAAiBnB,EAA4B,MAC7CoB,EAAmBpB,EAAmB,aAO/BqB,EAAA,CACXC,QANeC,UACfH,EAAiBI,MAAQD,EACzB,OAAAE,EAAAN,EAAeK,QAAOC,EAAAC,WAAA,uaCjCpBpB,GAAkC,CAClCC,MAAM,6BACNC,YACAC,kCAKEC,GAAA,GAFmB,OAAA,CACnBC,KAA2a,ydAR/a,SAAAM,EAAAC,yTC+CI,MAAAvB,GAAQC,IAER+B,EAAYC,IACZC,EAAeC,IACfC,EAAeC,IACfC,EAAgBC,IAChBC,EAAeC,KAEfC,EAAarC,EAAkC,MAC/CmB,EAAiBnB,EAAkC,MAEnDsC,EAAmBpC,GAAS,IAAM+B,EAAcM,WAChDC,EAAmBtC,GAAS,IAAMiC,EAAaK,mBAC/CC,EAAqBvC,GAAS,IAAMoC,EAAiBd,MAAQ,IAC7DkB,EAAgBxC,GAAS,IAAM6B,EAAaY,cAE5CC,EAAW1C,GAAS,IAAMyB,EAAUvB,SACpCC,EAAYH,GAAS,IAAM2B,EAAaxB,YACxCwC,EAAY3C,GAAS,IAAM6B,EAAac,YACxCC,EAAiB5C,GAAS,IAAMiC,EAAaW,iBAC7CC,EAAY7C,GAAS,IAAM6B,EAAagB,YAExCC,EAAmB,IAAYC,EAAAC,KAAA,MAAA,oBAC/B,GAACV,EAAiBhB,MACY,GACtBiB,EAAmBjB,MAGzB,UACIG,EAAUwB,kBACTC,GACP,OAAAC,EAAAlC,EAAeK,QAAO6B,EAAA/B,QACnB,YAAc8B,GAAkBA,EAAcE,UAC7C,OAAA7B,EAAO8B,OAAAC,iBAAQC,cAAcC,sBAEnC,MATAzB,EAAc0B,mBAAoB,OAFlCxB,EAAayB,kBAAmB,CAYlC,qvBC1DIC,GAAiC,CAACC,EAAOC,KAC7CR,OAAOS,UAAUC,KAAK,CACpBH,QACAI,gBAAiBH,GAClB,EAMGI,GAAgB3C,GACb4C,EAAAA,OAAO5C,GCrCH6C,GACH,wzECuPJC,GAAiB,6HAvBjB,MAAA3E,GAAQC,IAERC,EAAQC,EAMRiC,EAAeC,KACf3B,UAAEA,EAAAkE,gBAAWA,GAAoBzC,IACjC0C,EAAYC,KAEZC,EAA2B1E,GAAI,GAC/B2E,EAAoB3E,GAAI,GACxB4E,EAAiB5E,EAAI,GAErB6E,EAAgB7E,EAAI,IACpB8E,EAAe9E,EAAI,IACnB+E,EAAqB/E,EAAmB,MACxCgF,EAAehF,EAAoB,MAEnCiF,EAAc/E,GAAS,IAAM8E,EAAaxD,OAASsD,EAAatD,QAItE0D,GAAc,IAAYjC,EAAAC,KAAA,MAAA,YAExB,GADmB6B,EAAAvD,YAmBrB,WAA+D,OAAAyB,EAAAC,KAAA,MAAA,YACzD,IAAAiC,EAAcC,eAAeC,QAAQf,IAQzC,OAPIE,EAAUc,aAEFH,GAoIFI,GAAA,oBAAqB,IAAK,WA/HvBxD,EAAagD,mBACxBlF,EAAM2F,WACNL,EACAM,GAAU,gBAEd,GAAA,CAjCmCC,GAC7BX,EAAmBvD,MAAO,CAC5BO,EAAaY,aAAc,EACrB,MAAAgD,EACJC,SAASC,cAA2B,sBAClCF,IACFA,EAAWG,QAAS,EAExB,CAIE,4CADAV,eAAeC,QAAQ,oBAyJzBV,EAAkBnD,OAAQ,EAC1BuE,EAAe,EAAGC,GArJlB,MAmBIC,EAAAvB,GAA2BwB,IAC/BrC,GAAe,qBAAsB,CACnCsC,SAAU,2BAA2B9B,KACrC+B,OAAQF,EAAS,aAAe,cAChCG,MAAOxG,EAAMyG,aACd,IAGH,MAAMC,EAA4B,KAChC1C,GAAe,qBAAsB,CACnCsC,SAAU,2BAA2B9B,KACrC+B,OAAQ,kCACRC,MAAOxG,EAAMyG,uBAMXN,EAAgB,KACfjB,EAAmBvD,QAEpBnB,EACckE,EAAAQ,EAAmBvD,MAAOO,EAAayE,WAEvDC,SAASC,KAAO3B,EAAmBvD,WAIrCqC,GAAe,mBAAoB,CACjCsC,SAAUtG,EAAM8G,mBAAqB,eAAiB,eACtDP,OAAQ,mBACRC,MAAOxG,EAAMyG,YACbM,QAAS7E,EAAayE,UAAY,KACnC,EAGGK,EAA4B,KAC5BxG,GAuFsC,MAAnCoF,GAAU,4BAnFjB,EAGIqB,EAAoB,KACxBpC,EAAyBlD,OAAQ,CAAA,EAG7BuF,EAAqB,KACzBrC,EAAyBlD,OAAQ,CAAA,EAG7BwF,EAAsBC,IAEX,UAAXA,EAAEC,OAA2C,IAAvBlC,EAAaxD,QAKlCqD,EAAcrD,MAER2F,GAAatC,EAAcrD,OACpCwD,EAAaxD,OAAQ,EAErBwD,EAAaxD,OAAQ,EAJrBwD,EAAaxD,MAAQ,KAKvB,EAGI4F,EAA+B,IAAYnE,EAAAC,KAAA,MAAA,YAC/C,MAAMmE,EAA4BzB,SAASC,cACzC,4CAGF,IAAKwB,EAA2B,OAEhC,MAAMC,EACJD,EAA0BxB,cACxB,qCAEE0B,EAAaF,EAA0BxB,cAC3C,gCAGEyB,IAAgBA,EAAe9F,MAAQsD,EAAatD,OACpD+F,IACFA,EAAW/F,MAAQqD,EAAcrD,MAClB4D,eAAAoC,QACblD,GAEAmD,EAAGF,EAAW/F,MAAO,0CAIV4D,eAAAoC,QACb,aACA,2CAGF3D,GAAe,qBAAsB,CACnCsC,SAAU,aACVC,OAAQ,0BACRsB,oBACE,MAAAJ,OAAA,EAAAA,EAAgB9F,QAAS2C,GAAamD,EAAe9F,OACvDmG,qBAAqB,MAAAJ,OAAA,EAAAA,EAAY/F,QAAS2C,GAAaoD,EAAW/F,OAClEoG,cAAerE,OAAOsE,QAAQC,SAASC,SAGzClE,GAAe,qBAAsB,CACnCsC,SAAU,2BAA2B9B,KACrC+B,OAAQ,oBACRC,MAAOxG,EAAMyG,cAGfe,EAA0BW,QAAO,IAGnC,SAASC,IACG1C,GAAA,oBAAqB,IAAK,IACtC,CAeM,MAAAQ,EAAiB,CAACmC,EAAiBC,KACvCvD,EAAepD,MAAQ0G,EAEjB,MAAAE,EAAoBC,aAAY,KACrBzD,EAAApD,QAEc,IAAzBoD,EAAepD,QACjB8G,cAAcF,GAEVD,OAGN,GACC,IAAI,grICjaH,MAAAxI,GAAQC,IAERqC,EAAgBC,IAChBV,EAAQtB,EAAS,CACrBqI,IAAM,IACGtG,EAAcM,SAEvB,GAAAiG,CAAIhH,GACFS,EAAcwG,eAAejH,EAC9B,8pBC+HG,MAAA7B,GAAQC,IAeRmC,EAAeC,IACfL,EAAYC,IACZO,EAAeC,KACfH,EAAgBC,KAChBwG,eAAEA,GAAmBC,KAErBC,EAAM5I,EAAI,GACVmB,EAAiBnB,EAAkC,MAEnDmD,EAAY,IAAYF,EAAAC,KAAA,MAAA,oBACxB,IACYjB,EAAAwG,eAAeG,EAAIpH,OACjCS,EAAc0B,mBAAoB,QAC5BhC,EAAUwB,kBACTC,GACP,OAAAC,EAAAlC,EAAeK,QAAO6B,EAAA/B,QACnB,YAAc8B,GAAkBA,EAAcE,UAC7C,OAAA7B,EAAO8B,OAAAC,iBAAQC,cAAcC,sBAEnC,CAAA,KAGI4C,YACJA,EAAAuC,WACAA,EAAAC,aACAA,EAAAC,oBACAA,EAAAC,eACAA,GAOEC,KAEJ/D,GAAc,KACZnD,EAAamH,wBAAuB,IAGhC,MAAAC,aAAEA,EAAcC,oBAAAA,GC5MQ,EAACC,EAAO,CAAE,EAAEC,KAClC,MAAA3J,EAAEA,GAAM4J,IACd,IAAIC,EAAa,GACbC,EAAc,GACdC,EAAkB,GAClBC,EAAW,GACXC,EAAY,GAEV,MAAAC,EAAkC,YAArBR,EAAKS,YAyDjB,MAvCe,MACpB,MAAMC,EAA2B,MAANV,OAAM,EAAAA,EAAAW,qBAE7BD,IAEaP,EADXF,EACWS,EAEApK,EAAE,uBAAuBoK,KAEzC,KAIGF,IACER,EAAKY,WACKL,EAAAM,MAAMC,QAAQd,EAAKY,UAC3BZ,EAAKY,SAASG,KAAK,MACnBf,EAAKY,UAGPZ,EAAKgB,eACOZ,EAAAS,MAAMC,QAAQd,EAAKgB,cAC7BhB,EAAKgB,aAAaD,KAAK,MACvBf,EAAKgB,eAMRR,IACHH,EAAkBL,EAAKiB,iBACvBX,EAAWN,EAAKM,UAQb,CACLH,aACAC,cACAC,kBACAC,WACAC,YACAT,aA7DmB,IACfU,EACKJ,EAEAD,EA0DTJ,oBAtD0B,IACtBS,EACKD,GAAaD,EAEbA,GAAYD,EAmDzB,EDmI8Ca,CAC5C,CACET,YAAajB,EACbmB,qBAAsBhB,EACtBsB,iBAAkBvB,EAClBY,SAAUb,IAEZ,GAGI0B,EAAMrB,IACNsB,EAAmBrB,IAEnBsB,EAAUxK,GACd,WAAO,SAAE,OAAAuB,EAAaU,EAAAwI,mBAA+C,EAAAlJ,EAAAiJ,QAAA,IAEjElI,EAAmBtC,GAAkB,IAAMiC,EAAaK,mBAGxDoI,EAAc1K,GAAiC,KAC5C,CACLqC,SAAU,EACVsI,aAAc9I,EAAa+I,MAAMC,aAAU,EAC3CC,WAAYjJ,EAAa+I,MAAMG,mBAAgB,MAI7CC,EAAgBhL,GAAmC,IAChD,CAAC0K,EAAYpJ,SAAUS,EAAciJ,iBAIxCC,GAAwBC,IAC5B,MAAMC,EACJD,EAAKP,aAAgBO,EAAK7I,SAAY6I,EAAKJ,WAAcI,EAAK7I,SAG5D,OAAA+I,MAAMD,KAAcA,EAAiB,GAElC3C,EAAe2C,EAAQ,EAG1BE,GAAarL,GAAS,KAC1B,MAAMsL,EACJrJ,EAAawI,aAEf,aAAIa,WAAiBC,OACZ,GAAGnF,OAAiBkF,EAAgBC,QAEtCnF,CAAA,IAGHoF,GAAsBxL,GAC1B,WAAM,OAAA,OAAAuB,EAAAQ,EAAc0J,qBAAqB/C,EAAIpH,UAAUoJ,EAAYpJ,KAAA,IAG/DoK,GAA0B1L,GAC9B,KACQ,MAAA2L,EACU,IAAdjD,EAAIpH,MACAoJ,EAAYpJ,MACZS,EAAc0J,qBAAqB/C,EAAIpH,OAE7C,OAAa,MAANqK,OAAM,EAAAA,EAAAC,mBAAA,IAIXC,GAAyB7L,GAAS,KACtC,MAAM2L,EAAO5J,EAAc+J,oBAC3B,OAAOH,GAAQA,EAAKC,mBAAA,IAGhBG,GAAa/L,GAAS,IAC1BwL,GAAoBlK,OAASkK,GAAoBlK,MAAMwJ,WACnDtC,EAAegD,GAAoBlK,MAAMwJ,WAAapC,EAAIpH,OAC1D,KAGA0K,GAAehM,GAAS,IAC5BwL,GAAoBlK,OAASkK,GAAoBlK,MAAMqJ,aACnDnC,EAAegD,GAAoBlK,MAAMqJ,aAAejC,EAAIpH,OAC5D,KAGA2K,GAAQjM,GAAoC,aAG5C,OAAA,OAAAuB,EAAAU,EAAawI,mBAGZ,EAAAlJ,EAAA2K,uBACHrK,EAAasK,eACb,OAAAhJ,EAAAE,OAAOC,aAAQ,EAAAH,EAAAiJ,iBAAA,IAIb5K,GAAY,KAChBO,EAAc0B,mBAAoB,EAClCiF,EAAIpH,MAAQS,EAAcM,QAAA,EAGtBgK,GAAyB,KAC7BtK,EAAc0B,mBAAoB,EACpB1B,EAAAwG,eAAeG,EAAIpH,MAAK,qyFE7S3BgL,GAAuB,CAAOC,EAAWC,IAAkBzJ,EAAA0J,EAAA,MAAA,kBAChE,MAAAC,EAAShH,SAASiH,eAAeH,GAEvC,IAAKE,EAAQ,OAGb,MAAM9B,EAAQgC,OAAOF,EAAOG,QAAQjC,OAC9BkC,EAAiBF,OAAO,OAAArL,EAAAmL,EAAOG,QAAQC,kBAAkB,MACzDC,EAA2D,SAAtCL,EAAOG,QAAQE,mBAEpCC,EAAWF,EAAiBlC,EAC5BqC,IAA2BP,EAAOG,QAAQK,UAC1CC,GAAoBH,GAAYC,EAEhCjC,EAAgBmC,EAClBC,KAAKC,MAAMX,EAAOG,QAAQK,WAAWI,KAAKC,IAElC,MAAAC,EAAkB5C,EAAQ2C,EAAE3B,oBAAuB,IAGzD,wBAAO6B,wHACFF,GADE,CAEL5C,aAAcC,EACdE,WAAYF,EAAQ4C,GAC9B,IAEM,GAEEzL,EAAgBC,IAChBC,EAAeC,KAErBH,EAAc2L,iBAAiB1C,GAEzB,MAGA2C,EAAeR,EAAmB,EAAI,EAEtCS,EAASrB,EALWY,EACtBU,GACAC,IAKJ/L,EAAcM,SAAWsL,EACzB1L,EAAa8L,oBAAsBhB,EAEnC,MAAMiB,QAAaC,GAAU5K,OAAOsE,QAAQuG,QAErCN,EAAAO,IAAI9K,OAAO+K,aAGfR,EAAAO,IAAIH,GACJK,UAAU,iBAAkBC,GAC5BC,MAAM,IAAI/B,IAGf,IC1CMgC,GAAiB,uBAuBiBzL,EAAA0J,EAAA,MAAA,YACtC,MAAMgC,UAAEA,EAAWC,UAAAA,EAAApI,SAAWA,aAAUqC,EAAYgG,oBAAAA,GAClD5F,KAEIlH,EAAeC,IAmBjB,GAjBA6G,IACF9G,EAAa8G,WAAaA,GAExB8F,IACF5M,EAAa4M,UAAYA,GAEvBC,IACF7M,EAAa6M,UAAYA,GAEvBpI,IACFzE,EAAayE,SAAWA,GAGtBqI,IACF9M,EAAasK,aAAewC,GAG1B9M,EAAa8G,YAAciG,GAAYC,QAAS,CAC5C,MAAAC,cAAEA,GAAkB/F,KACJ,SAAlB+F,IACFjN,EAAaY,aAAc,EAE9B,CChEgC,IAAO8J,EAAWwC,EDwE/ClN,EAAagB,WCxEuB0J,EDyElBA,ECzE6BwC,EDyElB,0BCzE8BhM,EAAA0J,EAAA,MAAA,YACzD,MAAAuC,EAAetJ,SAASiH,eAAeoC,GAE7C,IAAKC,EAEH,YADQC,QAAAC,MAAM,qBAAqBH,iBAIrC,MAAM3I,YAAEA,EAAAE,SAAaA,GAAayC,MAC5BzD,WAAEA,EAAA6J,YAAYA,GAAgBH,EAAanC,QAEjD,IAAKzG,IAAgBd,IAAe6J,EAAa,OAEjD,MAAMnB,QAAaC,GAAU5K,OAAOsE,QAAQuG,QAEvBpM,IACRwE,SAAWA,EAExBiG,EAAU6C,GAAiB,CACzBhJ,cACAd,aACAmB,mBAAoC,UAAhB0I,IAEnBhB,IAAIH,GACJK,UAAU,iBAAkBC,GAC5BC,MAAM,IAAIQ,IACf,KDR4B,MACpB,MAAAM,EAAO3J,SAASiH,eAAe6B,IAE/BxH,EAAOoG,KAAKC,MAAMgC,EAAKxC,QAAQyC,YAErC,aAAQtI,WAAMuI,QACZ,IAAK,UACHC,GAAmBjD,EAAWiC,IAC9B,MACF,IAAK,WACHiB,GAAoBlD,EAAWiC,IAC/B,MACF,QACEkB,GAAiBlB,IAEpB,KEnC4B,EAAOjC,EAAWwC,KAAYhM,EAAA0J,EAAA,MAAA,YAC3D,IAAK/G,SAASiH,eAAeoC,GAE3B,YADQE,QAAAC,MAAM,qBAAqBH,iBAIrC,MAAMf,QAAaC,GAAU5K,OAAOsE,QAAQuG,QAEtCN,EAASrB,EAAUoD,IAClB/B,EAAAO,IAAI9K,OAAO+K,aAGfR,EAAAO,IAAIH,GACJK,UAAU,iBAAkBC,GAC5BC,MAAM,IAAIQ,IACf,GAAA,EFiEEa,CAAgBrD,EAhES,wBAiEzBD,GAAqBC,EAhEO,2CAqE9B,GAGqB"}
\n {{ t('patterns.download.success_content.sentence1') }}\n
\n {{ t('patterns.download.success_content.sentence2') }}\n
\n {{ t('patterns.download.success_content.sentence3') }}\n