We Offer Free Shipping Worldwide.
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
1 / 9
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll
15% OFF

Reiyu GuiGui Futanari Sex Doll | Official VTuber Anime Doll

$678.30 $798.00
0 sold
Qty

What Is the MRL × Reiyu GuiGui Futanari Sex Doll?

The MRL × Reiyu GuiGui futanari sex doll is an officially licensed, limited-edition figure based on VTuber @reiyuguigui. It is 66cm tall, weighs 3.9kg, and is made from 100% medical-grade silicone. As a dual-anatomy futa sex doll, it features both a fully sculpted phallus (13cm) and a penetrable vaginal channel (14cm). It ships free to all 50 US states in discreet, unbranded packaging.

You know that feeling. It's midnight, Reiyu's stream is live, and she's doing that thing — giggling at her own punchline before she's even finished delivering it.

You're in chat firing off "LMAO" while she's practically crying laughing.

And somewhere in the back of your mind, a thought lands quietly: I wish she was just here.

Here's the deal: that wish just became real.

MRL has officially partnered with VTuber reiyuguigui to bring you the first-ever futanari sex doll based on Reiyu herself — the Poltergeisha Gamer, Gyaru Ghost who exists in the space between life and death, feminine and masculine, streamer and legend.

This is 100% official. 100% limited. Made from medical-grade silicone. This page covers everything — the design, the specs, the materials, and why once this batch is gone, it's gone for good.

The MRL × Reiyu GuiGui futanari sex doll is a 66cm, 3.9kg officially licensed figure built from 100% medical-grade silicone. This isn't just another futa sex doll — it's a precision-engineered tribute to one of streaming's most beloved VTuber characters, made to MRL's highest production standard. As a dual-anatomy anime sex doll based on an active VTuber, Reiyu's figure features her iconic two-tone pink-and-blue gradient hair, her signature Gyaru Geisha uniform, and — true to her futanari character identity — a fully realized anatomical design that no other product on the market can replicate.

What's the bottom line? This is the only time this doll will ever be made. First run, limited batch, official authorization. When it's gone, it's gone.

Anime Ghost Girl Built for the In-Between

Reiyu's creator designed her to live at the edge of life and death — and at the edge of feminine and masculine. The pink-and-blue gradient hair is intentional: pink for life and femininity, blue for death and masculinity. Reiyu straddles both. This doll makes that visible in three dimensions.

  • Hair: Two-tone gradient — soft rose pink into powder blue, with photoluminescent tips that glow gently in the dark. Styled in Reiyu's characteristic loose anime-art wave.
  • Face: Wide expressive eyes, subtle blush, and her signature teardrop mole at the corner of her right eye, half-hidden beneath a tiny sakura sticker.
  • Hands: Here's the detail only real ghostlings clock immediately — two fingernails on her right hand are trimmed short. That's the gamer girl easter egg. This is what marks it as genuinely her.
  • Outfit: White snap-button uniform shirt (fully removable), red plaid micro-skirt, oversized bow tie, black over-the-knee thigh-highs. All real fabric. Compatible with some other 3.0 anime sex doll series clothing.

What Makes This a True Futa Sex Doll

Reiyu's futanari identity is core to who she is — she exists between states. MRL's engineers built that duality directly into the physical design. Neither feature was added as an afterthought.

The Phallus: 13 cm length, 10 cm circumference. Cast from MRL's premium silicone blend with visible vein detail, a well-defined glans, and a base that sits flush with the pelvis. Firm with natural elasticity — holds shape, responds to pressure, rebounds without deforming.

The Vaginal Channel: 14 cm deep. Internally textured with graduated ridges, a constriction zone at approximately 8 cm, and a soft terminus. Inner wall uses MRL's standard premium channel architecture.

Both features are rendered in the same uninterrupted medical-grade silicone as the full body. No joins, no seams. The alloy skeleton enables stable posing in any position without joint loosening over time.

Why Medical-Grade Silicone — How It Compares to TPE

Most sex dolls use TPE — thermoplastic elastomer. TPE is porous, absorbs bacteria, retains odors, and degrades faster. This anime sex doll uses 100% medical-grade silicone. Here's what that actually means:

  • Non-porous: Full sterilization with mild soap and warm water. Bacteria cannot absorb into the material.
  • Zero odor: No chemical off-gassing. Zero smell out of the box, zero smell after extended use.
  • Thermal responsive: She warms up. Silicone absorbs and holds body heat. This changes the experience in ways that are difficult to describe without trying.
  • Long-term durable: Resists tearing, retains texture over years, won't yellow or crack with age.

Care: Rinse with warm water + antibacterial soap after use. Pat dry. Dust lightly with cornstarch baby powder to restore satin texture. Store flat. Avoid sustained direct heat. Water-based lubricant ONLY.

Who This Is For

Here's who the MRL × Reiyu futanari sex doll is built for:

  • Ghostlings & Reiyu fans: You've watched Reiyu's streams. You're in her Discord. You know what the short fingernails mean. This doll is the ultimate piece of official merch for the real community.
  • Futanari & futa anime collectors: You collect high-quality anime figure-adjacent pieces. You've been looking for a futa sex doll that has genuine character depth. This is it.
  • Anime & ACG enthusiasts: You love anime ghost girl aesthetics, gyaru characters, and dual-anatomy designs.
  • MRL brand customers: You know the material quality. This is MRL's most elaborate collab to date.
  • Adult collectors (limited edition): You understand limited editions. You want this before the mold retires.

Why You Can Trust This Doll

This is a VTuber sex doll built through a real creative partnership — with strict adherence to material safety and privacy. Here's why collectors trust MRL:

🧬 Medical SiliconeSame material class as surgical implants. Non-porous, fully sterilizable, phthalate-free.
🎌 100% OfficialDesign created using @reiyuguigui's official character sheets with direct creator approval.
🏭 Xhentaidoll GuaranteeEvery unit passes a 7-point QC inspection before shipping. 30-day replacement guarantee.
📦 Discreet ShippingShips in unbranded packaging. No product references anywhere on box. 100% privacy.

A Real Creative Partnership

This is a VTuber sex doll built through a real creative partnership — not a knock-off, not a fan interpretation. MRL worked directly with Reiyu's team using official character references, with direct approval from @reiyuguigui herself.

  • 🔮 The glow-reactive hair tips trace to her Poltergeisha aesthetic.
  • ⚥ The dual anatomy reflects her explicitly futanari character identity.
  • 💅 The trimmed gaming fingernails are a direct callback to her Gyaru Gamer persona.
  • 👗 The uniform with working snaps is her canonical human-world visual identity.

Now: This edition is a first run. Once this production batch sells out, the mold is retired. No second run. No restock. This is a true limited release — first batch, last batch.

Complete Technical Specs

Product Full Name MRL × Reiyu GuiGui Futanari Sex Doll — Limited Edition
Official Character Reiyu GuiGui (@reiyuguigui) — VTuber, Poltergeisha Gamer
Authorization 100% Official Licensed Collaboration — authorized by @reiyuguigui
Material Medical-Grade Silicone — non-porous, body-safe, phthalate-free
Weight 3.9 kg (approximately 8.6 lbs)
Height 66 cm (approximately 26 inches)
Width 17 cm
Bust / Waist / Hip 41 cm / 29 cm / 42 cm
Phallus Length 13 cm
Phallus Circumference 10 cm
Vaginal Channel Depth 14 cm
Internal Channel Texture Graduated ridges + constriction zone at ~8cm + soft terminus
Skeleton High-strength stainless-alloy poseable joints
Outfit White snap-button shirt, red plaid micro-skirt, bow tie, black over-the-knee thigh-highs
Clothing Compatibility With some other 3.0 series anime sex doll clothing
Special Detail Two fingernails on right hand trimmed short — Reiyu's gamer girl easter egg
Glow Feature Photoluminescent hair tips (glow in dark)
Edition Type First-Run Limited — Production mold retired after this batch
Lubricant Compatibility Water-based only (silicone-based lubes degrade silicone material)
const TAG = "spz-custom-popup"; const DISPLAY_TYPE = { POPUP: "PTT_POPUP" // 弹窗 }; const API = { LIST: `/api/storefront/promotion/placement/list`, // 获取弹窗列表 REPORT: `/api/storefront/promotion/placement/data/report` // 上报数据 }; const DISPLAY_DEVICE = { PC_AND_MOBILE: "PD_PC_MOBILE", // PC和移动端 PC: "PD_PC", // PC MOBILE: "PD_MOBILE" // 移动端 }; const REPORT_EVENT = { CLICK: "PE_CLICK", // 点击事件 IMPRESSION: "PE_IMPRESSION" // 曝光事件 }; class SpzCustomPopup extends SPZ.BaseElement { constructor(element) { super(element); this.popupList_ = []; // 弹窗数据 this.popupZIndex = 1050; // 弹窗层级 // 节流处理 每5s内多次点击 算一次点击上报 this.throttleReport = this.win.SPZCore.Types.throttle( this.win, (data) => { this.reportData(data) }, 5000 ) } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.fetchData_(); } // 接口请求,获取数据 fetchData_() { const id = window.SHOPLAZZA.meta.page.template_type === 51 ? window.SHOPLAZZA.meta.page.resource_id : 0; return this.xhr_.fetchJson(API.LIST, { method: 'POST', body: { page_id: window.SHOPLAZZA.meta.page.template_type, placement_type: DISPLAY_TYPE.POPUP, discount_id: id } }).then((res) => { // 请求成功 执行render this.doRender_(res.list); }).catch((err) => { console.error(err); }); } // 渲染dom doRender_(data) { this.popupList_ = data || []; if (this.popupList_.length > 0) { this.popupList_.forEach((item) => { item.config = JSON.parse(item.config); }) } return this.templates_ .findAndRenderTemplate(this.element, { list: this.popupList_ }) .then((el) => { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); this.element.appendChild(el); }) .then(() => { // 遍历显示弹窗 this.popupList_.forEach((item) => { this.showPopup_(item); }); }) } showPopup_(popup) { // 展示弹窗 符合展示条件的弹窗 const $popup = document.querySelector(`#popup-${popup.id}`); $popup && SPZ.whenApiDefined($popup).then((api)=> { const isPC = this.viewport_.getWidth() >= 960; const isMobile = this.viewport_.getWidth() < 960; const isMatchPCDevice = popup.device === DISPLAY_DEVICE.PC_AND_MOBILE || popup.device === DISPLAY_DEVICE.PC; const isMatchMobileDevice = popup.device == DISPLAY_DEVICE.PC_AND_MOBILE || popup.device === DISPLAY_DEVICE.MOBILE; if((isPC && isMatchPCDevice) || (isMobile && isMatchMobileDevice)) { // 根据推送时间 延迟展示弹窗 setTimeout(() => { api.open(); }, popup.delay_seconds * 1000); } }) } // 上报数据 async reportData(data) { this.xhr_.fetchJson(API.REPORT, { method: "POST", body: { placement_id: data.placement_id, event: data.event } }); } setupAction_() { this.registerAction('handleTrack', async(invocation) => { // 如果是主题编辑器则不用处理 if(window.top !== window.self) { return; } const data = invocation.args; const event = data.event; // 点击上报 节流处理 if(event === REPORT_EVENT.CLICK) { await this.throttleReport(data); } else { this.reportData(data); } }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomPopup);
const TAG = "spz-custom-announcement"; const DISPLAY_TYPE = { ANNOUNCEMENT: "PTT_BANNER" // 公告栏 }; const API = { LIST: `/api/storefront/promotion/placement/list`, // 获取公告栏列表 REPORT: `/api/storefront/promotion/placement/data/report` // 上报数据 }; const DISPLAY_DEVICE = { PC_AND_MOBILE: "PD_PC_MOBILE", // PC和移动端 PC: "PD_PC", // PC MOBILE: "PD_MOBILE" // 移动端 }; const REPORT_EVENT = { CLICK: "PE_CLICK", // 点击事件 IMPRESSION: "PE_IMPRESSION" // 曝光事件 }; const POSITION = { TOP: "PP_TOP", // 顶部 BOTTOM: "PP_BOTTOM" // 底部 } const MODE = { FIXED: "PM_FIXED", // 固定 NORMAL: "PM_SCROLLING" // 滚动 } const THEME_NAME = window.SHOPLAZZA.theme.merchant_theme_name; class SpzCustomAnnouncement extends SPZ.BaseElement { constructor(element) { super(element); this.announcementList_ = []; // 公告栏数据 } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.fetchData_(); this.createAnnouncementDom_(); this.listenCartChange_(); } fetchData_(type = '') { const id = window.SHOPLAZZA.meta.page.template_type === 51 ? window.SHOPLAZZA.meta.page.resource_id : 0; return this.xhr_.fetchJson(API.LIST, { method: 'POST', body: { page_id: window.SHOPLAZZA.meta.page.template_type, placement_type: DISPLAY_TYPE.ANNOUNCEMENT, discount_id: id } }).then((res) => { this.announcementList_ = res.list || []; if (this.announcementList_.length > 0) { this.announcementList_.forEach((item) => { item.config = JSON.parse(item.config); }); } if(type === 'cartChange') { this.announcementList_.forEach((item) => { this.updateText_(item); }); } else { this.doRender_(this.announcementList_); } }).catch((error) => { console.error(error); }) } doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, { list: this.announcementList_ }) .then((el) => { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); this.element.appendChild(el); }) .then(() => { this.announcementList_.forEach((item) => { this.showAnnouncement_(item); }); }).then(() => { this.handleThemeCompatibility_(); }); } // 更新文案 updateText_(item) { const announcement = document.querySelector(`#announcement-${item.id}`); const announcementText = announcement.querySelectorAll('.announcement_text'); const textArr = item.config.text_discount.replace_texts; const textDom = textArr.map((text) => { return `${text}`; }).join(','); announcementText.forEach((text) => { text.innerHTML = textDom; }); } // 创建公告栏dom createAnnouncementDom_() { const isHero = /Hero/.test(THEME_NAME); const isEva = /Eva/.test(THEME_NAME); const headerEl = document.querySelector('[data-section-type="header"]'); const headerSticky = headerEl && SPZCore.Dom.computedStyle(this.win, headerEl).position === 'sticky'; // 创建滚动的底部公告栏 const announcementBottomContainer = document.createElement('div'); announcementBottomContainer.className = 'announcement__container_bottom bootstrap'; document.body.appendChild(announcementBottomContainer); // 创建固定的底部公告栏 const announcementBottomSticky = document.createElement('ljs-sticky'); announcementBottomSticky.className = 'announcement__container_bottom-sticky'; announcementBottomSticky.setAttribute('layout', 'container'); announcementBottomSticky.setAttribute('position', 'bottom'); announcementBottomSticky.style.position = 'fixed'; announcementBottomSticky.style.bottom = '0'; announcementBottomSticky.style.left = '0'; announcementBottomSticky.style.right = '0'; announcementBottomSticky.style.zIndex = '1030'; document.body.appendChild(announcementBottomSticky); const announcementTopContainer = document.createElement('div'); announcementTopContainer.classList.add('announcement__container_top'); if (isHero) { announcementTopContainer.classList.add('announcement__container_top_zIndex_1030'); } announcementTopContainer.classList.add('bootstrap'); document.body.insertBefore(announcementTopContainer, document.body.children[0]); const announcementTopFixedContainer = document.createElement('div'); announcementTopFixedContainer.classList.add('announcement__container_top-fixed'); if (isHero) { announcementTopFixedContainer.classList.add('announcement__container_top_zIndex_1030'); } announcementTopFixedContainer.classList.add('bootstrap'); const insertBeforeElement = headerSticky ? headerEl : document.body; insertBeforeElement.insertBefore(announcementTopFixedContainer, insertBeforeElement.children[0]); if (isEva) { const evaHeader = document.querySelector('header.header'); const isEvaMaskHeader = evaHeader && SPZCore.Dom.computedStyle(this.win, evaHeader).position === 'absolute'; let fixedBannerTopContainer = document.querySelector('.announcement__container_top-fixed'); if (isEvaMaskHeader) { if (fixedBannerTopContainer) { fixedBannerTopContainer.remove(); } const newBanner = document.createElement('div'); newBanner.className = 'announcement__container_top-fixed bootstrap'; document.body.insertBefore(newBanner, document.body.firstChild); fixedBannerTopContainer = newBanner; } else { if (!headerEl) return; const observer = new MutationObserver(() => { const isSticky = SPZCore.Dom.computedStyle(this.win, headerEl).position === 'sticky'; if (!isSticky) return; const isTopFixedAnnouncementInHeader = headerEl.querySelector('.announcement__container_top-fixed'); if (isTopFixedAnnouncementInHeader) return; const announcementTopFixedContainer = document.querySelector('.announcement__container_top-fixed'); if (announcementTopFixedContainer) { announcementTopFixedContainer.remove(); headerEl.insertBefore(announcementTopFixedContainer, headerEl.children[0]); observer.disconnect(); } }); observer.observe(headerEl, { attributes: true, attributeFilter: ['style', 'class'] }); } if (headerSticky && !isEvaMaskHeader && fixedBannerTopContainer) { fixedBannerTopContainer.style.position = 'relative'; fixedBannerTopContainer.style.zIndex = '29'; } } } // 展示公告栏 showAnnouncement_(item) { const announcement = document.querySelector(`#announcement-${item.id}`); const announcementBottomContainer = document.querySelector('.announcement__container_bottom'); const announcementBottomSticky = document.querySelector('.announcement__container_bottom-sticky'); const announcementTopContainer = document.querySelector('.announcement__container_top'); const announcementTopFixedContainer = document.querySelector('.announcement__container_top-fixed'); const isPC = this.viewport_.getWidth() >= 960; const isMobile = this.viewport_.getWidth() < 960; const isMatchPCDevice = item.device === DISPLAY_DEVICE.PC_AND_MOBILE || item.device === DISPLAY_DEVICE.PC; const isMatchMobileDevice = item.device == DISPLAY_DEVICE.PC_AND_MOBILE || item.device === DISPLAY_DEVICE.MOBILE; if((isPC && isMatchPCDevice) || (isMobile && isMatchMobileDevice)) { if (item.position === POSITION.BOTTOM) { if(item.mode === MODE.FIXED) { announcementBottomSticky && announcementBottomSticky.appendChild(announcement); } else { announcementBottomContainer && announcementBottomContainer.appendChild(announcement); } } else { if (item.mode === MODE.FIXED) { announcementTopFixedContainer && announcementTopFixedContainer.appendChild(announcement); } else { announcementTopContainer && announcementTopContainer.appendChild(announcement); } } this.reportData({ placement_id: item.id, event: REPORT_EVENT.IMPRESSION }); } } // 处理主题兼容 handleThemeCompatibility_() { try { const isBoost = /Boost/.test(THEME_NAME); const isHyde = /Hyde/.test(THEME_NAME); const isEva = /Eva/.test(THEME_NAME); const boostHeader = document.querySelector('.boost-header'); const fixedBannerTopContainer = document.querySelector('.announcement__container_top-fixed'); const notFixedBannerTopContainer = document.querySelector('.announcement__container_top'); const headerEl = document.querySelector('[data-section-type="header"]'); const headerSticky = headerEl && SPZCore.Dom.computedStyle(this.win, headerEl).position === 'sticky'; const header = document.querySelector('.header__fixed') || document.querySelector('.header__wrapper'); const headerFixed = header && SPZCore.Dom.computedStyle(this.win, header).position === 'fixed'; const handleScroll = SPZCore.Types.throttle(this.win, () => { if (isHyde) { if (header && headerSticky) { header.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } } if (isEva) { const evaHeader = document.querySelector('header.header'); const isEvaMaskHeader = evaHeader && SPZCore.Dom.computedStyle(this.win, evaHeader).position === 'absolute'; if (!isEvaMaskHeader) return; if (evaHeader.classList.contains('header__fixed')) { evaHeader.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } if(document.documentElement.scrollTop === 0) { evaHeader.style.marginTop = '0'; } } if (headerSticky) return; if (headerFixed) { header.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { const observer = new MutationObserver((mutationsList, observer) => { for (const mutation of mutationsList) { if (mutation.type === 'childList' && fixedBannerTopContainer.childElementCount > 0) { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; observer.disconnect(); // 停止观察 break; } } }); // 开始观察 fixedBannerTopContainer 的子节点变化 observer.observe(fixedBannerTopContainer, { childList: true, subtree: true }); // 初始检查 if (fixedBannerTopContainer.childElementCount > 0) { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } if(header) { header.style.marginTop = '0'; } } if (isBoost) { fixedBannerTopContainer.style.zIndex = '1031'; if (boostHeader && boostHeader.classList.contains('header__fixed')) { boostHeader.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } } }, 16); window.addEventListener('scroll', handleScroll); window.dispatchEvent(new Event('scroll')); } catch (error) { console.error('error', error); } } // 上报数据 async reportData(data) { // 如果是主题编辑器则不用处理 if(window.top !== window.self) { return; } this.xhr_.fetchJson(API.REPORT, { method: "POST", body: { placement_id: data.placement_id, event: data.event } }); } // 监听购物车变化事件dj.cartChange listenCartChange_() { SPZUtils.Event.listen(document, 'dj.cartChange', (event) => { this.fetchData_('cartChange'); }); } setupAction_() { this.registerAction('handleClose', (invocation) => { const data = invocation.args; const id = data.id; const announcement = document.querySelector(`#announcement-${id}`); announcement && SPZCore.Dom.removeElement(announcement); window.dispatchEvent(new Event('scroll')); }); this.registerAction('handleJumpLink', (invocation) => { const data = invocation.args; if(!data.show_url) return; data.url && window.open(data.url, data.open_new_window ? '_blank' : '_self'); this.reportData({ placement_id: data.id, event: REPORT_EVENT.CLICK }); }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomAnnouncement);