/******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./packages/packages/core/editor-templates/src/init.ts": /*!*************************************************************!*\ !*** ./packages/packages/core/editor-templates/src/init.ts ***! \*************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ init: function() { return /* binding */ init; } /* harmony export */ }); /* harmony import */ var _elementor_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor */ "@elementor/editor"); /* harmony import */ var _elementor_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository"); /* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _load_templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load-templates */ "./packages/packages/core/editor-templates/src/load-templates.ts"); /* harmony import */ var _render_template_styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./render-template-styles */ "./packages/packages/core/editor-templates/src/render-template-styles.tsx"); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-templates/src/store.ts"); /* harmony import */ var _templates_styles_provider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./templates-styles-provider */ "./packages/packages/core/editor-templates/src/templates-styles-provider.ts"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils */ "./packages/packages/core/editor-templates/src/utils.ts"); function init() { if (!(0,_utils__WEBPACK_IMPORTED_MODULE_8__.isHandlingTemplateStyles)()) { return; } (0,_elementor_store__WEBPACK_IMPORTED_MODULE_3__.__registerSlice)(_store__WEBPACK_IMPORTED_MODULE_6__.slice); _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__.stylesRepository.register(_templates_styles_provider__WEBPACK_IMPORTED_MODULE_7__.templatesStylesProvider); (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__.registerDataHook)('after', 'editor/documents/attach-preview', async () => { (0,_load_templates__WEBPACK_IMPORTED_MODULE_4__.unloadTemplates)(); (0,_templates_styles_provider__WEBPACK_IMPORTED_MODULE_7__.clearTemplatesStyles)(); await (0,_load_templates__WEBPACK_IMPORTED_MODULE_4__.loadTemplates)(); }); (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({ id: 'templates-styles', component: _render_template_styles__WEBPACK_IMPORTED_MODULE_5__.RenderTemplateStyles }); } /***/ }), /***/ "./packages/packages/core/editor-templates/src/load-templates.ts": /*!***********************************************************************!*\ !*** ./packages/packages/core/editor-templates/src/load-templates.ts ***! \***********************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ loadTemplates: function() { return /* binding */ loadTemplates; }, /* harmony export */ unloadTemplates: function() { return /* binding */ unloadTemplates; } /* harmony export */ }); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-templates/src/store.ts"); const TEMPLATE_ATTRIBUTE = 'data-elementor-post-type="elementor_library"'; const DOCUMENT_WRAPPER_ATTR = 'data-elementor-id'; async function loadTemplates() { const iframeDocument = (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.getCanvasIframeDocument)(); if (!iframeDocument) { return; } const currentDocumentId = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__.getV1CurrentDocument)()?.id; const templateIds = getTemplateIds(iframeDocument, currentDocumentId); if (!templateIds.length) { return; } const documents = await fetchDocuments(templateIds); (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.setTemplates(documents)); } function unloadTemplates() { (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.clearTemplates()); } function getTemplateIds(iframeDocument, currentDocumentId) { const elements = [...iframeDocument.body.querySelectorAll(`[${TEMPLATE_ATTRIBUTE}]`)]; const ids = elements.map(el => Number(el.getAttribute(DOCUMENT_WRAPPER_ATTR))).filter(id => !isNaN(id) && id !== currentDocumentId); return [...new Set(ids)]; } async function fetchDocuments(ids) { const results = await Promise.all(ids.map(async id => { try { // using ajax.load instead of the document-manager as the latter causes an issue when trying to edit a template return await _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.ajax.load({ data: { id }, action: 'get_document_config', unique_id: `template-${id}` }); } catch { return null; } })); return results.filter(doc => doc !== null); } /***/ }), /***/ "./packages/packages/core/editor-templates/src/render-template-styles.tsx": /*!********************************************************************************!*\ !*** ./packages/packages/core/editor-templates/src/render-template-styles.tsx ***! \********************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ RenderTemplateStyles: function() { return /* binding */ RenderTemplateStyles; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _templates_styles_provider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./templates-styles-provider */ "./packages/packages/core/editor-templates/src/templates-styles-provider.ts"); /* harmony import */ var _use_loaded_templates__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-loaded-templates */ "./packages/packages/core/editor-templates/src/use-loaded-templates.ts"); const RenderTemplateStyles = () => { const templates = (0,_use_loaded_templates__WEBPACK_IMPORTED_MODULE_2__.useLoadedTemplates)(); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { const styles = templates.flatMap(extractStylesFromDocument); (0,_templates_styles_provider__WEBPACK_IMPORTED_MODULE_1__.addTemplateStyles)(styles); }, [templates]); return null; }; function extractStylesFromDocument(elements) { if (!elements.length) { return []; } return elements.flatMap(extractStylesFromElement); } function extractStylesFromElement(element) { return [...Object.values(element.styles ?? {}), ...(element.elements ?? []).flatMap(extractStylesFromElement)]; } /***/ }), /***/ "./packages/packages/core/editor-templates/src/store.ts": /*!**************************************************************!*\ !*** ./packages/packages/core/editor-templates/src/store.ts ***! \**************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ selectTemplates: function() { return /* binding */ selectTemplates; }, /* harmony export */ slice: function() { return /* binding */ slice; } /* harmony export */ }); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__); const initialState = { entities: {} }; const slice = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__createSlice)({ name: 'templates', initialState, reducers: { setTemplates(state, action) { action.payload.forEach(doc => { state.entities[doc.id] = doc.elements ?? []; }); }, clearTemplates(state) { state.entities = {}; } } }); const selectEntities = state => state.templates.entities; const selectTemplates = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__createSelector)([selectEntities], entities => Object.values(entities)); /***/ }), /***/ "./packages/packages/core/editor-templates/src/templates-styles-provider.ts": /*!**********************************************************************************!*\ !*** ./packages/packages/core/editor-templates/src/templates-styles-provider.ts ***! \**********************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ addTemplateStyles: function() { return /* binding */ addTemplateStyles; }, /* harmony export */ clearTemplatesStyles: function() { return /* binding */ clearTemplatesStyles; }, /* harmony export */ templatesStylesProvider: function() { return /* binding */ templatesStylesProvider; } /* harmony export */ }); /* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository"); /* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_0__); let styles = []; const listeners = new Set(); function addTemplateStyles(newStyles) { styles = [...styles, ...newStyles]; listeners.forEach(cb => cb()); } function clearTemplatesStyles() { styles = []; listeners.forEach(cb => cb()); } const templatesStylesProvider = (0,_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_0__.createStylesProvider)({ key: 'templates-styles', priority: 50, subscribe: cb => { listeners.add(cb); return () => { listeners.delete(cb); }; }, actions: { all: () => styles, get: id => styles.find(style => style.id === id) ?? null } }); /***/ }), /***/ "./packages/packages/core/editor-templates/src/use-loaded-templates.ts": /*!*****************************************************************************!*\ !*** ./packages/packages/core/editor-templates/src/use-loaded-templates.ts ***! \*****************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useLoadedTemplates: function() { return /* binding */ useLoadedTemplates; } /* harmony export */ }); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-templates/src/store.ts"); function useLoadedTemplates() { return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectTemplates); } /***/ }), /***/ "./packages/packages/core/editor-templates/src/utils.ts": /*!**************************************************************!*\ !*** ./packages/packages/core/editor-templates/src/utils.ts ***! \**************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isHandlingTemplateStyles: function() { return /* binding */ isHandlingTemplateStyles; } /* harmony export */ }); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_0__); const MIN_PRO_VERSION_FOR_SELF_HANDLED_STYLES = '4.1'; const isHandlingTemplateStyles = () => (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.isProActive)() && !(0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.isProAtLeast)(MIN_PRO_VERSION_FOR_SELF_HANDLED_STYLES); /***/ }), /***/ "@elementor/editor": /*!*****************************************!*\ !*** external ["elementorV2","editor"] ***! \*****************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editor"]; /***/ }), /***/ "@elementor/editor-documents": /*!**************************************************!*\ !*** external ["elementorV2","editorDocuments"] ***! \**************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorDocuments"]; /***/ }), /***/ "@elementor/editor-styles-repository": /*!*********************************************************!*\ !*** external ["elementorV2","editorStylesRepository"] ***! \*********************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorStylesRepository"]; /***/ }), /***/ "@elementor/editor-v1-adapters": /*!***************************************************!*\ !*** external ["elementorV2","editorV1Adapters"] ***! \***************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorV1Adapters"]; /***/ }), /***/ "@elementor/store": /*!****************************************!*\ !*** external ["elementorV2","store"] ***! \****************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["store"]; /***/ }), /***/ "@elementor/utils": /*!****************************************!*\ !*** external ["elementorV2","utils"] ***! \****************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["utils"]; /***/ }), /***/ "react": /*!**************************!*\ !*** external ["React"] ***! \**************************/ /***/ (function(module) { module.exports = window["React"]; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ !function() { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function() { return module['default']; } : /******/ function() { return module; }; /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. !function() { /*!**************************************************************!*\ !*** ./packages/packages/core/editor-templates/src/index.ts ***! \**************************************************************/ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ init: function() { return /* reexport safe */ _init__WEBPACK_IMPORTED_MODULE_0__.init; }, /* harmony export */ isHandlingTemplateStyles: function() { return /* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_2__.isHandlingTemplateStyles; }, /* harmony export */ useLoadedTemplates: function() { return /* reexport safe */ _use_loaded_templates__WEBPACK_IMPORTED_MODULE_1__.useLoadedTemplates; } /* harmony export */ }); /* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./init */ "./packages/packages/core/editor-templates/src/init.ts"); /* harmony import */ var _use_loaded_templates__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-loaded-templates */ "./packages/packages/core/editor-templates/src/use-loaded-templates.ts"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ "./packages/packages/core/editor-templates/src/utils.ts"); }(); (window.elementorV2 = window.elementorV2 || {}).editorTemplates = __webpack_exports__; /******/ })() ; window.elementorV2.editorTemplates?.init?.(); //# sourceMappingURL=editor-templates.js.map/* dialog.css */ /* Dialog wrapper */ .elfinder .elfinder-dialog { /* */ } /* Dialog title */ .elfinder .elfinder-dialog .ui-dialog-titlebar { padding: 3px 0 3px 6px; height: 30px; box-sizing: border-box; } /* Close button */ .elfinder .elfinder-dialog .ui-dialog-titlebar-close { background: url('../images/close.png'); right: 0; border-radius: 0; margin-top: -15px; webkit-transition: background 0.3s; /* Safari */ transition: background-image 0.3s; height: 29px; width: 45px; } .elfinder .elfinder-dialog .ui-dialog-titlebar-close:hover { background: url('../images/close-hover.png'); } .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right { left: 1px; top: 12px; } /* Dialog content */ .elfinder .elfinder-dialog .ui-dialog-content { /* */ } /* Tabs */ /* Tabs wrapper */ .elfinder .elfinder-dialog .ui-tabs-nav { /* */ } /* Normal tab */ .elfinder .elfinder-dialog .ui-tabs-nav .ui-state-default { /* */ } /* Current tab */ .elfinder .elfinder-dialog .ui-tabs-nav .ui-tabs-selected { /* */ } /* Active tab */ .elfinder .elfinder-dialog .ui-tabs-nav li:active { /* */ } .elfinder .ui-state-active { background: #1979CA none repeat scroll 0 0; /*background: #009688 none repeat scroll 0 0; */ } /* Icons */ /* Dialog icon (e.g. for error messages) */ .elfinder .elfinder-dialog .elfinder-dialog-icon { /* */ } /* Error icon */ .elfinder .elfinder-dialog .elfinder-dialog-icon-error { /* */ } /* Confirmation icon */ .elfinder .elfinder-dialog .elfinder-dialog-icon-confirm { /* */ } /* Footer */ .elfinder .elfinder-dialog .ui-dialog-buttonpane { /* */ } /* Buttonset (wrapper) */ .elfinder .elfinder-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { /* */ } /* Button */ .elfinder .elfinder-dialog .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { /* */ } /* Styling specific types of dialogs */ /* Error */ .elfinder .elfinder-dialog-error { /* */ } /* Confirm */ .elfinder .elfinder-dialog-confirm { /* */ } /* File editing */ .elfinder .elfinder-dialog .elfinder-file-edit { /* */ } /* File information */ /* Title */ .elfinder .elfinder-dialog .elfinder-info-title { /* */ } /* Table */ .elfinder .elfinder-dialog .elfinder-info-tb { /* */ } /* File upload (including dropbox) */ .elfinder .elfinder-dialog .elfinder-upload-dropbox, .elfinder .elfinder-dialog .elfinder-upload-dialog-or { /* */ } robocat Archives - https://sunlight168.shop/category/robocat/ Fri, 21 Aug 2026 00:28:40 +0000 th hourly 1 https://wordpress.org/?v=6.9.7 https://sunlight168.shop/wp-content/uploads/2026/04/cropped-logo-32x32.webp robocat Archives - https://sunlight168.shop/category/robocat/ 32 32 Tvorba komunity Robocat: Networking a podpora v online kasinu Betropolis https://sunlight168.shop/tvorba-komunity-robocat-networking-a-podpora-v-online-kasinu-betropolis/ Thu, 20 Aug 2026 13:50:17 +0000 https://sunlight168.shop/tvorba-komunity-robocat-networking-a-podpora-v-online-kasinu-betropolis/ Tvorba komunity Robo […]

The post Tvorba komunity Robocat: Networking a podpora v online kasinu Betropolis appeared first on .

]]>

Tvorba komunity Robocat: Networking a podpora v online kasinu Betropolis

Jmenuji se Jan Novák a dnes bych vám rád přestavil online kasino Betropolis, které se snaží vytvořit silnou komunitu pro hráče, a to díky konceptu “Tvorba komunity Robocat: Networking a podpora”. Casino je ideální pro hráče všech úrovní, kteří hledají nejen možnost vyhrávat, ale také se zapojit do komunity, která je podporována kvalitními službami a vzájemnou pomocí mezi hráči.

Webové stránky a uživatelská zkušenost

Betropolis se pyšní moderním a uživatelsky přívětivým rozhraním. Jakmile se na stránkách objevíte, okamžitě vás uvítají živé barvy a intuitivní design, který usnadňuje orientaci. Hlavní menu je přehledně uspořádané, a to včetně sekcí pro hry, bonusy, živé kasino, a zákaznickou podporu. Celkově věřím, že design webu je tak jednoduchý, že i nováčci se bez problémů zorientují.

Registrace na stránkách je rychlá a nezabere více než pár minut. Stačí vyplnit základní údaje, jako je e-mail, uživatelské jméno a heslo. Pro ověření identity budete muset poskytnout další dokumenty, což pomáhá zajistit bezpečnost vaší herní činnosti. Čtete správně – Betropolis sází na otázku bezpečnosti, která je v dnešním online světě velmi důležitá.

Bonusy a promo kódy

Jedním z největších lákadel Betropolis jsou jejich atraktivní bonusy. Hráči nově registrovaní v tomto kasinu mohou těžit z uvítacího bonusu, který může dosáhnout až 100 % na první vklad. Tento bonus vám umožní začít s větším bankrollem a vytvořit tak silnější základ pro vaši herní strategii. V rámci sekce bonusů pak najdete i pravidelné promo akce, jako jsou týdenní cashbacky a speciální turnaje robocat.

  • Uvítací bonus až 100 % na první vklad.
  • Týdenní cashback až 20 % z prohraných sázek.
  • Speciální turnaje s atraktivními cenami.

Je dobré si pamatovat, že pro využití těchto bonusů je potřebné zadat promo kód, který najdete na webových stránkách Betropolis. Tento krok může být klíčový pro aktivaci zvýhodnění, proto ho nezapomeňte zkontrolovat při registraci.

Výběr her a živé kasino

Betropolis nabízí široký sortiment her, které potěší každého hráče. K dispozici máte tisíce automatů, stolních her a také sekci živého kasina. Přehledně uspořádané kategorie usnadňují výběr her a uživatelské hodnocení pomůžete ostatním hráčům. Pro milovníky automatů je obzvlášť atraktivní sekce s nejnovějšími tituly, ale najdete tu i klasické hry, které nikdy nezklamou.

Živé kasino v Betropolis se skládá z profesionálních krupiérů a nabízí autentický zážitek z hraní přímo z domova. Hráči mohou sledovat krupiéry prostřednictvím živého streamu a interagovat s dalšími hráči u stolu. Je to skvělá příležitost pro Tvorbu komunity Robocat: Networking a podpora, protože sdílení strategie nebo tipů s ostatními hráči obohacuje zážitek ze hry.

Bezpečnost a licence

Betropolis je licencováno renomovanou Malta Gaming Authority, což zaručuje hráčům vysokou úroveň bezpečnosti a férovosti. Tato licence znamená, že kasino musí dodržovat přísná pravidla a standardy, což zahrnuje ochranu osobních údajů hráčů a zabezpečení finančních transakcí. Betropolis také používá šifrování SSL, což pomáhá chránit vaše citlivé informace před neoprávněným přístupem.

Pravidelná auditace her s cílem zajištění náhodnosti výsledků je další z mnoha bezpečnostních prvků, které kasino implementuje. Ověřovací pravidla zahrnují poskytování identifikačních dokumentů, která pomáhají zabraňovat podvodům a zajišťují, že hráči jsou skutečně tím, za koho se vydávají. Tímto způsobem Betropolis vytváří zázemí pro Tvorbu komunity Robocat: Networking a podpora, kde jsou hráči chráněni a mohou se soustředit na zábavu.

Závěr

Betropolis je online kasino, které se skutečně snaží vytvořit komunitu hráčů prostřednictvím “Tvorba komunity Robocat: Networking a podpora”. S atraktivními bonusy, různorodou nabídkou her a silným důrazem na bezpečnost se cítím v tomto kasinu jako doma. Pokud hledáte nejen možnost hrát, ale také se zapojit do komunity, Betropolis by mohla být právě pro vás.

Často kladené dotazy

  1. Jak se mohu registrovat v Betropolis?
  2. Jaké bonusy nabízí Betropolis pro nové hráče?
  3. Je Betropolis bezpečné kasino?
  4. Jaký je proces výběru peněz z Betropolis?
  5. Mohu hrát na Betropolis i ze svého mobilního zařízení?

The post Tvorba komunity Robocat: Networking a podpora v online kasinu Betropolis appeared first on .

]]>
Vytváření dokonalého prostředí pro vašeho Robocata doma: Recenze online kasina BetCity https://sunlight168.shop/vytvareni-dokonaleho-prostredi-pro-vaseho-robocata-doma-recenze-online-kasina-betcity/ Thu, 20 Aug 2026 09:29:33 +0000 https://sunlight168.shop/?p=367 Vytváření dokonalého […]

The post Vytváření dokonalého prostředí pro vašeho Robocata doma: Recenze online kasina BetCity appeared first on .

]]>

Vytváření dokonalého prostředí pro vašeho Robocata doma: Recenze online kasina BetCity

Jmenuji se Jan Novák a dnes vám přiblížím online kasino BetCity, které je ideálním místem pro všechny nadšence hazardních her, kteří hledají skvélé zážitky v bezpečném a přehledném prostředí. Kasino je určeno jak pro začátečníky, tak pro zkušené hráče, kteří se chtějí zabavit a vyhrát zajímavé ceny. Co potřebujete vědět? BetCity nabízí široký výběr her, vstupní bonusy a přívětivou zákaznickou podporu, což z něj dělá skvélé místo pro vytváření dokonalého prostředí pro vašeho Robocata doma.

Webová stránka a uživatelské rozhraní

Webové stránky BetCity se vyznačují moderním a přehledným designem. Uživatelé se mohou snadno zorientovat, což je klíčové při vytváření dokonalého prostředí pro vašeho Robocata doma. Hlavní nabídka je jasně označena a všechny sekce jsou snadno dostupné. Pokud potřebujete vyhledat konkrétní hru nebo sekci, integrovaný vyhledávač vám to usnadní.

Celkové uživatelské rozhraní je intuitivní a připravené na to, aby každému hráči poskytlo pohodlné zážitky:

  • Rychlé načítání stránek
  • Flexibilní design pro mobilní zařízení
  • Možnost přizpůsobení profilu a herního prostředí
  • Jednoduchá navigace mezi různými kategoriemi her

Registrace a přihlášení

Proces registrace je velmi jednoduchý a zabere jen několik minut. Stačí vyplnit základní osobní údaje jako je jméno, e-mail a datum narození. Jakmile se zaregistrujete, můžete se přihlásit a začít objevovat množství her, které BetCity nabízí. Pro usnadnění přístupu doporučuji uložit si své přihlašovací údaje, aby bylo vytváření dokonalého prostředí pro vašeho Robocata doma vždy rychlé a bezproblémové.

Bonusy a promo kódy

BetCity pravidelně nabízí různé bonusy pro nové i stávající hráče. Můžete využít několik typů bonusů, které vám mohou pomoci zvýšit váš bankroll:

  1. Vstupní bonus: Noví hráči obdrží bonus na první vklad, který může výrazně zvětšit jejich herní rozpočet.
  2. Pravidelné promo akce: Kasino pravidelně pořádá soutěže a eventy, kde můžete vyhrát další atraktivní ceny.
  3. Loajalitní program: Stálí hráči mají možnost získávat body, které později mohou vyměnit za různé výhody.

Výběr her a živé kasino

BetCity je známé svým širokým portfoliem her. Najdete zde vše od automatů po stolní hry. Každý si přijde na své a vytváření dokonalého prostředí pro vašeho Robocata doma nikdy nebylo snazší: robocat bonus

  • Různorodé automaty s různými tématy a bonusovými funkcemi.
  • Stolní hry jako ruleta, blackjack, a poker.
  • Živé kasino s reálnými krupiéry, které přináší autentický zážitek.

Bezpečnost a licence

Bezpečnost je pro BetCity prioritou. Kasino je provozováno společností XY, která má licenci udělenou regulátorem Evropské unie. Tato licence zaručuje, že kasino dodržuje přísná pravidla a předpisy, čímž chrání uživatelská data a finanční transakce. Hráči mohou být klidní, že jejich osobní a platební informace jsou v bezpečí.

BetCity také aplikuje následující bezpečnostní prvky:

  • Šifrování SSL pro ochranu osobních údajů.
  • Pravidelná auditace a testování her od nezávislých institucí.
  • Podmínky pro ověření identity hráčů, které pomáhají předcházet podvodům.

Zákaznická podpora a uživatelské zkušenosti

Zákaznický servis na BetCity je dostupný 24/7 prostřednictvím živého chatu, e-mailu a telefonu. Můžete si být jisti, že každý problém nebo dotaz vyřeší rychle a efektivně. Osobně jsem měl s podporou pozitivní zkušenost, což jen posiluje můj dojem o celkovém uživatelském komfortu na tomto kasinu.

závěr

Celkově lze říci, že kasino BetCity nabízí fantastickou možnost pro všechny hráče, kteří chtějí vytvářet dokonalé prostředí pro svého Robocata doma. S širokým výběrem her, bezpečnostními zárukami a skvělým zákaznickým servisem je BetCity rozhodně kasinem, které byste měli vyzkoušet robocat bonus casino hry robocat platby robocat mobil robocat přihlášení.

Často kladené dotazy

  • Jak mohu začít hrát v BetCity? – Stačí se zaregistrovat a provést svůj první vklad.
  • Jaké bonusy nabízí BetCity? – Noví hráči mají možnost využít vstupní bonus a pravidelně probíhající promo akce.
  • Je BetCity bezpečné kasino? – Ano, kasino má platnou licenci a dodržuje bezpečnostní standardy.
  • Jaké hry mohu v BetCity najít? – Nabízí se široký výběr her od automatů po živé kasino.
  • Jak mohu kontaktovat zákaznickou podporu? – Můžete je kontaktovat prostřednictvím živého chatu, e-mailu nebo telefonu.

The post Vytváření dokonalého prostředí pro vašeho Robocata doma: Recenze online kasina BetCity appeared first on .

]]>