/******/ (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 {
/* */
}
The post Tipy pro odpovědné hraní na 20bet: Podrobná recenze online kasina appeared first on .
]]>Jmenuji se Jakub Novák a v tomto článku se s vámi podělím o své zkušenosti s online kasinem 20bet. Tento moderní online operátor je vhodný pro všechny hráče, kteří hledají širokou nabídku her a bezpečné prostředí pro zábavu. V následujících odstavcích se zaměříme na důležité aspekty, které hráči potřebují vědět, a nabídneme vám také tipy pro odpovědné hraní na 20bet.
20bet je online kasino, které bylo založeno v roce 2020 a rychle si získalo popularitu mezi hráči v České republice. Zaměřuje se na širokou nabídku her včetně automatů, stolních her a živého kasina. Webové stránky jsou přehledné a snadno ovladatelné, což zajišťuje skvělou uživatelskou zkušenost. Registrovat se můžete během několika minut, což je ideální pro ty, kteří chtějí co nejdříve začít hrát. Předtím však nezapomeňte zvážit tipy pro odpovědné hraní na 20bet.
Registrace na 20bet je velmi jednoduchá a rychlá. Stačí navštívit jejich webové stránky a kliknout na tlačítko pro registraci. Poté budete vyzváni k vyplnění základních údajů jako je jméno, e-mail a telefonní číslo. Po úspěšném vyplnění formuláře obdržíte ověřovací e-mail, který musíte potvrdit. Přihlášení do vašeho hráčského účtu je stejně snadné a stačí zadat vaše přihlašovací údaje. Pamatujte však na tipy pro odpovědné hraní na 20bet, abyste udrželi kontrolu nad svým hraním.
20bet nabízí různorodé bonusy pro nové i stávající hráče. Noví hráči mohou využít uvítací bonus, který zahrnuje zvýšení prvního vkladu až do výše 100 %. Stávající hráči mají možnost účastnit se pravidelných promo akcí a turnajů. Vždy doporučuji zkontrolovat aktuální nabídky a promo kódy, které mohou zvýšit vaše šance na výhru. Nezapomeňte však, že využívání bonusů by mělo být vždy v rámci tipů pro odpovědné hraní na 20bet.
Na 20bet najdete širokou škálu her, včetně více než 2000 automatů, stolních her jako je blackjack, ruleta a pokr. Kromě toho nabízí také živé kasino, kde si můžete užít interakci s živými krupiéry. Mezi nejoblíbenější automaty patří tituly jako Book of Dead a Starburst. Hráči mohou snadno filtrovati hry podle kategorií a oblíbenosti. Tento rozmanitý výběr her zaručuje, že si každý hráč najde to své. Nikdy však nezapomínejte na tipy pro odpovědné hraní na 20bet a nastavte si limity pro hraní.
20bet je provozováno společností TechSolutions Group N.V., která má licenci na hazardní hry vydanou Curaçao eGaming. Tato licence znamená, že kasino dodržuje příslušné zákony a normy v oblasti online hazardních her, což hráčům poskytuje dodatečnou úroveň důvěry. Bezpečnostní funkce zahrnují šifrování dat SSL, což chrání vaše osobní a finanční informace. Vždy se doporučuje provést proces ověření totožnosti, což zvyšuje úroveň bezpečnosti a odpovědného hraní. Nezapomínejte, že dodržování tipů pro odpovědné hraní na 20bet je klíčovým krokem k zajištění bezpečnosti vašeho hraní.
Na 20bet můžete provádět vklady a výběry pomocí široké škály platebních metod, včetně bankovních karet, e-walletů a kryptoměn. Proces vkladu je okamžitý, zatímco výběry mohou trvat od několika hodin až po několik pracovních dnů v závislosti na zvolené metodě. Důležité je také mít na paměti, že kasino vyžaduje ověření totožnosti před prvním výběrem, což je standardní postup. Hráči obvykle hodnotí 20bet jako pohodlné místo pro hraní s rychlým a efektivním zákaznickým servisem. Při hraní nezapomeňte na tipy pro odpovědné hraní na 20bet, aby vaše zkušenosti byly co nejlepší.
20bet je vynikající volbou pro hráče hledající spolehlivé online kasino se širokou nabídkou her, lákavými bonusy a bezpečným herním prostředím. S přehledným rozhraním, rychlou registrací a kvalitní zákaznickou podporou je hraní zde velmi pohodlné. Nezapomeňte však vždy uplatňovat tipy pro odpovědné hraní na 20bet, abyste si zajistili příjemné a bezpečné herní zážitky online casino.
The post Tipy pro odpovědné hraní na 20bet: Podrobná recenze online kasina appeared first on .
]]>The post Průzkum nejoblíbenějších sázkových trhů na 20bet appeared first on .
]]>Jmenuji se Jakub Novák a dnes se s vámi podělím o své zkušenosti a názory na online kasino 20bet. Tento casino je ideálním místem pro všechny, kteří hledají širokou škálu sázkových trhů a zábavu na jednom místě. 20bet je uživatelsky přívětivé a nabízí skvělé bonusy, což ho činí atraktivním pro nové hráče i zkušené sázkaře. V tomto článku se podrobněji podíváme na všechny aspekty 20bet a co byste měli vědět, než se k němu připojíte.
Webová stránka 20bet je moderní a intuitivní. Design je čistý a přehledný, což hráčům usnadňuje navigaci. Hlavní nabídka obsahuje všechny důležité sekce, jako jsou kasino, sportovní sázení, nabídky a podpora. Registrace na 20bet je také jednoduchá a rychlá. Zde je návod, jak se zaregistrovat:
Po dokončení registrace můžete okamžitě začít hrát a využívat všechny funkce, které 20bet nabízí.
20bet se vyznačuje atraktivními bonusovými nabídkami, které lákají nové hráče. Hráči mohou využít uvítací bonus, který obvykle zahrnuje bonus na první vklad až do určité částky. Dále jsou zde také pravidelné promo akce, jako jsou bonusy za vklad, cashback a roztočení zdarma na vybraných automatech. Je dobré také sledovat promo kód, který může přinést dodatečné výhody. Před využitím jakékoliv nabídky si však vždy přečtěte podmínky, abyste věděli o požadavcích na protočení a dalších pravidlech.
Na 20bet máte k dispozici široký výběr her, od klasických slotů po moderní jackpotové automaty. V kategorii slotů najdete hry od předních poskytovatelů softwaru, jako jsou Microgaming a NetEnt. Kromě kasinových her nabízí 20bet také živé kasino, které přináší autentický zážitek ze hry se skutečnými dealery. Sázení na živé hry přidává na vzrušení a interaktivitě. Zde jsou některé z nejpopulárnějších her, které můžete vyzkoušet: 20bet
20bet skutečně nabízí širokou škálu her, takže si zde najdete své oblíbené.
V dnešní době se mobilní hraní stává stále populárnějším. 20bet je plně optimalizované pro mobilní zařízení, které umožňují hráčům sázet kdykoliv a kdekoliv. Stránka je responzivní, což znamená, že se přizpůsobí rozměrům vašeho zařízení. Kromě toho, 20bet také nabízí aplikaci pro Android a iOS, která umožňuje hráčům snadno přistupovat ke svým oblíbeným hrám a sázkám. Výhody mobilní verze zahrnují:
Bezpečnost hráčů je na 20bet prioritou. Kasino je řízeno společností Rabidi NV, která je licencována vládou Curacaa. Tato licence garantuje, že kasino dodržuje přísné předpisy o fair play a ochraně hráčů. Co to znamená pro hráče? Hráči mohou mít jistotu, že jejich osobní a finanční údaje jsou chráněny šifrováním a že všechny hry jsou spravedlivé. 20bet také využívá několik bezpečnostních funkcí, včetně:
Po prozkoumání nejoblíbenějších sázkových trhů na 20bet jsem si jistý, že toto kasino má co nabídnout. Jeho uživatelsky přívětivá platforma, široký výběr her, atraktivní bonusy a důraz na bezpečnost je skvělou volbou pro sázkaře všech úrovní. Ať už jste nováček nebo zkušený hráč, 20bet vám zajistí zábavný a bezpečný zážitek z hraní.
The post Průzkum nejoblíbenějších sázkových trhů na 20bet appeared first on .
]]>The post Průzkum nejoblíbenějších sázkových trhů na 20bet appeared first on .
]]>Jmenuji se Jakub Novák a dnes se s vámi podělím o své zkušenosti a názory na online kasino 20bet. Tento casino je ideálním místem pro všechny, kteří hledají širokou škálu sázkových trhů a zábavu na jednom místě. 20bet je uživatelsky přívětivé a nabízí skvělé bonusy, což ho činí atraktivním pro nové hráče i zkušené sázkaře. V tomto článku se podrobněji podíváme na všechny aspekty 20bet a co byste měli vědět, než se k němu připojíte.
Webová stránka 20bet je moderní a intuitivní. Design je čistý a přehledný, což hráčům usnadňuje navigaci. Hlavní nabídka obsahuje všechny důležité sekce, jako jsou kasino, sportovní sázení, nabídky a podpora. Registrace na 20bet je také jednoduchá a rychlá. Zde je návod, jak se zaregistrovat:
Po dokončení registrace můžete okamžitě začít hrát a využívat všechny funkce, které 20bet nabízí.
20bet se vyznačuje atraktivními bonusovými nabídkami, které lákají nové hráče. Hráči mohou využít uvítací bonus, který obvykle zahrnuje bonus na první vklad až do určité částky. Dále jsou zde také pravidelné promo akce, jako jsou bonusy za vklad, cashback a roztočení zdarma na vybraných automatech. Je dobré také sledovat promo kód, který může přinést dodatečné výhody. Před využitím jakékoliv nabídky si však vždy přečtěte podmínky, abyste věděli o požadavcích na protočení a dalších pravidlech.
Na 20bet máte k dispozici široký výběr her, od klasických slotů po moderní jackpotové automaty. V kategorii slotů najdete hry od předních poskytovatelů softwaru, jako jsou Microgaming a NetEnt. Kromě kasinových her nabízí 20bet také živé kasino, které přináší autentický zážitek ze hry se skutečnými dealery. Sázení na živé hry přidává na vzrušení a interaktivitě. Zde jsou některé z nejpopulárnějších her, které můžete vyzkoušet: 20bet
20bet skutečně nabízí širokou škálu her, takže si zde najdete své oblíbené.
V dnešní době se mobilní hraní stává stále populárnějším. 20bet je plně optimalizované pro mobilní zařízení, které umožňují hráčům sázet kdykoliv a kdekoliv. Stránka je responzivní, což znamená, že se přizpůsobí rozměrům vašeho zařízení. Kromě toho, 20bet také nabízí aplikaci pro Android a iOS, která umožňuje hráčům snadno přistupovat ke svým oblíbeným hrám a sázkám. Výhody mobilní verze zahrnují:
Bezpečnost hráčů je na 20bet prioritou. Kasino je řízeno společností Rabidi NV, která je licencována vládou Curacaa. Tato licence garantuje, že kasino dodržuje přísné předpisy o fair play a ochraně hráčů. Co to znamená pro hráče? Hráči mohou mít jistotu, že jejich osobní a finanční údaje jsou chráněny šifrováním a že všechny hry jsou spravedlivé. 20bet také využívá několik bezpečnostních funkcí, včetně:
Po prozkoumání nejoblíbenějších sázkových trhů na 20bet jsem si jistý, že toto kasino má co nabídnout. Jeho uživatelsky přívětivá platforma, široký výběr her, atraktivní bonusy a důraz na bezpečnost je skvělou volbou pro sázkaře všech úrovní. Ať už jste nováček nebo zkušený hráč, 20bet vám zajistí zábavný a bezpečný zážitek z hraní.
The post Průzkum nejoblíbenějších sázkových trhů na 20bet appeared first on .
]]>The post Betting Trends in 2023: Insights from 20bet appeared first on .
]]>Jmenuji se Jan Novák a dnes vám přináším podrobnou recenzi online kasina 20bet. Tento poskytovatel sázek se stal velmi populární mezi hráči, kteří hledají širokou škálu her, atraktivní bonusy a pohodlné uživatelské rozhraní. V tomto článku se podíváme na to, co tento brand nabízí, pro koho je vhodný, a co o něm potřebujete vědět, abyste mohli dělat informovaná rozhodnutí při vašich sázkách.
Webová stránka 20bet je moderně navržená a intuitivní, což znamená, že i nováčci se v ní snadno zorientují. Hlavní menu umožňuje rychlý přístup k mnoha sekcím, včetně sportovních sázek, kasino her a živých dealerů. Při registraci je potřeba vyplnit pár základních informací, jako je jméno, e-mail a datum narození. Jakmile je registrace dokončena, můžete se snadno přihlásit pomocí zvolených přihlašovacích údajů a okamžitě začít hrát.
20bet nabízí atraktivní uvítací bonus pro nové hráče, který může výrazně zvýšit váš počáteční bankroll. Kromě toho existují i pravidelné akce a promo kódy, které lze využít pro další výhody. Mezi hlavní typy bonusů patří:
Výběr her na 20bet je rozmanitý a zahrnuje tisíce různých titulů. Najdete zde jak video automaty, tak nejmodernější živé kasinové hry se skutečnými dealery. Mezi populární sloty patří tituly od známých poskytovatelů jako jsou NetEnt, Microgaming a Play’n GO. Navíc můžete hrát i živé kasinové hry, jako jsou blackjack, ruleta nebo baccarat, což přidává na autentické atmosféře. To vše činí 20bet ideálním pro hráče různých preferencí a úrovní zkušeností 20bet.
Pro hráče, kteří preferují hry na mobilních zařízeních, je k dispozici jak mobilní verze, tak i aplikace 20bet. Mobilní verze nabízí stejnou škálu her a funkcí, jakou najdete na desktopové verzi. Stačí se jednoduše přihlásit do svého účtu prostřednictvím mobilního prohlížeče. Aplikace je dostupná pro zařízení se systémem iOS a Android. Výhody mobilní verze zahrnují:
Bezpečnost je na 20bet prvním místem, což je jasně patrné z jejich licencování. 20bet operuje pod licencí, kterou vydává Malta Gaming Authority (MGA). Tato licence zajišťuje, že kasino dodržuje přísné regulace a standardy, což znamená, že vaše osobní a finanční údaje jsou pečlivě chráněny. 20bet se také zavazuje k zodpovědnému hraní, což zahrnuje možnost nastavení limitů nebo úplného vyloučení se z her. Bezpečnostní funkce zahrnují:
Když shrneme vše, co jsme probrali, 20bet se ukazuje jako silný konkurent na trhu online her v roce 2023. S širokým výběrem her, atraktivními bonusy a bezpečnostními standardy je jasné, proč se tato platforma stala populární mezi hráči. Pokud hledáte moderní kasino, které nabízí pestrou škálu her a vynikající zákaznickou podporu, určitě doporučuji vyzkoušet 20bet.
The post Betting Trends in 2023: Insights from 20bet appeared first on .
]]>The post Technologie a Sázení: Propojení s 20bet Zážitkem appeared first on .
]]>Jmenuji se Jakub Novák a dnes se podíváme na fascinující spojení technologií a celkového zážitku ze sázení na platformě 20bet. Tento online kasino nabízí širokou škálu her, atraktivní bonusy a moderní uživatelské prostředí, které je ideální pro nováčky i zkušené hráče. V tomto článku se zaměřím na důležité aspekty, které byste měli znát, abyste mohli plně vychutnat 20bet betting experience.
Webové stránky 20bet jsou navrženy s ohledem na uživatelskou přívětivost a moderní design. Hlavní navigace je intuitivní, což usnadňuje orientaci v různých sekcích kasina. Registrace je jednoduchý proces, který trvá jen několik minut. Následujte tyto kroky:
Po úspěšné registraci se můžete přihlásit do svého účtu a začít objevovat všechny úžasné funkce, které 20bet nabízí. Je dobré mít na paměti, že pro maximální zážitek z 20bet betting experience je potřeba ověřit svůj účet.
Na 20bet se uživatelé mohou těšit na řadu atraktivních bonusů, které zlepšují celkový zážitek. Noví hráči mají možnost využít uvítací bonus, který obvykle zahrnuje zvýhodněný první vklad. Tento bonus může být až do výše 100 % prvního vkladu. Čas od času jsou také dostupné promo kódy, které mohou přidat další hodnotu na váš účet. Kromě toho se konají různé týdenní a měsíční akce, které nabízí bezplatné sázky či bonusy na vklad. Všechny tyto bonusy zpevňují 20bet betting experience a činí platformu ještě atraktivnější.
Když mluvíme o výběru her, 20bet nezklame. Nabízí širokou škálu her, včetně populárních automatů, stolních her a živého kasina. Mezi hlavní kategorie patří: 20bet
Co se týče uživatelského rozhraní, to je čisté a moderní, přičemž všechny sekce jsou snadno přístupné. Mobilní verze webu je optimalizovaná, a pokud byste raději používali aplikaci, 20bet také nabízí aplikaci ke stažení na vaše zařízení. Tato mobilní verze zahrnuje všechny funkce, které najdete na desktopové verzi, což je skvélé pro zajištění plynulého zážitku.
Co se týče bezpečnosti, 20bet funguje pod licencí Curacao, která je respektována v oblasti online hazardu. Tato licence zajišťuje, že kasino musí dodržovat jisté standardy, a tím chránit hráče. Mezi výhody patří:
Aktivní zákaznická podpora, dostupná téměř 24 hodin denně, dále zvyšuje úroveň důvěry, kterou hráči mívají. To je klíčové pro pozitivní 20bet betting experience.
Vklady a výběry na 20bet jsou rychlé a dostupné prostřednictvím několika metod. Hráči mohou využít tradiční platební metody, jako jsou kreditní a debetní karty, bankovní převody nebo elektronické peněženky jako Skrill a Neteller. Vklady jsou okamžité, zatímco výběry mohou trvat různě dlouho v závislosti na zvolené metodě. Základní informace o vkladech a výběrech jsou následující:
Před provedením prvního výběru je nezbytné ověřit svou totožnost, což zahrnuje předložení dokladu totožnosti a potvrzení o adrese. Tento proces pomáhá zajistit transparentnost a bezpečnost při sázení.
Když narazíte na problém, podpora hráčů je na 20bet k dispozici prostřednictvím různých kanálů, jako jsou live chat, e-mail a telefon. Rychlost reakcí je velmi dobrá a zkušenosti mnoha hráčů jsou pozitivní, co se týče řešení problémů. V kombinaci s uživatelsky přívětivým rozhraním a širokým výběrem her dává 20bet hráčům vše, co potřebují pro zajištění zábavy a uspokojení ve světě online sázení. 20bet betting experience tak vychází vstříc očekáváním jak nováčků, tak zkušenějších sázkařů.
20bet je výjimečná platforma, která spojuje technologie se skvělou nabídkou her a výhodnými bonusy. Bezpečnost a pohodlí, které nabízí, v kombinaci s intuitivním uživatelským rozhraním, činí z 20bet ideální volbu pro každého, kdo hledá kvalitní zážitek ze sázení. Nezáleží na tom, zda jste spíše milovníkem automatů, nebo preferujete stolní hry – 20bet betting experience je tu pro vás v plné síle.
The post Technologie a Sázení: Propojení s 20bet Zážitkem appeared first on .
]]>