We Offer Free Shipping Worldwide.
10 ‘Adult’ Reads
09.24.2025 | xhentaidoll | Blog

10 ‘Adult’ Reads

I have curated a list of 10 adult reads that I personally devoured, and I’m confident many of you will find them just as enthralling. Whether it’s books, webtoons, manhua, or manga, if content came with strict age restrictions, every single one of these would bear an unwavering 18+ label. They pull no punches with explicit content and steamy sexual scenes—but out of respect for boundaries and clarity, I won’t dive into the most graphic details here. Instead, I’ll focus on the gripping plots, complex characters, and addictive premises that make these reads impossible to put down.

1. Perfect Half

Genre: Adult, Drama, Fantasy, Harem, Seinen

Author: Luv P

Chapters: 188 (Ongoing)

Years: 2016 – Present

Where to Read: Lezhin

Once upon a time, this world was ruled entirely by men—until women rose up, fought fiercely, and demanded equality. Now, the land is split right down the middle, a tense balance between the sexes, and the battle for dominance rages on in every corner of life. But here’s the question that lingers: Who will ultimately come out on top? And more intriguingly… what exactly is the “game” they’re playing? Is it power? Control? Or something far more intimate, tangled in desire and hidden agendas? With its fantasy twist and harem dynamics, this ongoing series keeps readers on the edge, eager to see how the gender war—and the characters’ complicated relationships—unfold.

2. Rain Curtain

Genre: Action, Adult, Drama, Smut

Author: Jei and Kei

Chapters: 40 (Completed)

Years: 2018 – 2019

Where to Read: Bato.to

Rainy days have a way of stirring up buried thoughts—and for the protagonist of Rain Curtain, they 唤醒 (awaken) memories of a mysterious “man” who once emerged from the depths of dark water. His words still echo: “Do not be shy, for pleasure is eternal.” He saw parts of her she’d hidden from the world—her filthiest desires, the cravings she dared not name. Now, every rainfall brings him back to her mind, and her longing for him grows stronger than ever. This completed series weaves drama, passion, and a touch of intrigue into a short but intense story, perfect for readers who love a moody, desire-fueled narrative.

3. An Innocent Sin

Genre: Adult, Mature, Drama

Author: Oh Gye

Chapters: 138 (Completed)

Years: 2016 – 2021

Where to Read: Lezhin

Nayeon thinks she’s alone on the last train home, the quiet of the night giving her permission to indulge in a little fantasy—letting her mind wander to the desires she keeps locked away. But when she glances at the train window, her reflection reveals a shocking truth: a stranger is sitting nearby, watching her. Instead of shame, he offers her a business card, a silent invitation to meet again. Driven by curiosity and the thrill of the unknown, Nayeon accepts, leading her to a place called Peach Puff. What is this mysterious spot? Are the people there hiding secrets? And what will happen when she gives in to the temptation of this handsome stranger? This long-running drama dives deep into guilt, desire, and the blurred lines between innocence and sin.

4. Lilith’s Cord

Genre: Action, Adventure, Ecchi, Fantasy, Romance, School Life, Shounen, Smut, Supernatural, Adult

Author: Juder

Chapters: 93 (Completed)

Years: 2016 – 2020

Where to Read: Lezhin

We’ve all heard the story: humans are the descendants of Adam and Eve. But Lilith’s Cord flips that narrative on its head, revealing a hidden truth: a small, secret group of humans are the children of Lilith—Adam’s first wife, the one often erased from traditional tales. These “children of Lilith” look no different from Eve’s descendants, blending seamlessly into society, but they hold a power and a heritage that sets them apart. Where are they hiding? What makes them unique? And how will their existence change the world as we know it? This genre-bending series mixes action, fantasy, school life, and romance, creating a rich, immersive world that keeps readers hooked from start to finish.

5. Household Affairs

Genre: Mystery, Mature, Ecchi, Adult, Smut

Author: VultureBoy

Chapters: 77 (Completed)

Years: 2015 – 2017

Where to Read: [Not Specified in Original, but Available on Major Adult Webtoon Platforms]

Yeon-woo Ha is just doing his job—making a routine delivery—when his world is upended by the seductive sight of Si-yeon Hong. Before he knows it, passion takes over, and they give in to their desires. But the aftermath is brutal: Yeon-woo soon realizes Si-yeon is married. And that’s only the beginning of the chaos. Unbeknownst to both of them, Si-yeon’s seemingly cold husband, Ha-jin, is hiding a deadly secret—he’s an assassin. As desire and loneliness pull Yeon-woo and Si-yeon closer, Ha-jin’s shadow looms over them, threatening to destroy everything. This mystery-driven series is a rollercoaster of emotion, blending steamy moments with heart-pounding tension as readers wonder: What will happen when the assassin uncovers the truth?

6. Sunggi’s Study Group

Genre: Comedy, Ecchi, Smut, Adult

Author: Husky-nom and the Artist Edge-Edge

Chapters: 77 (Completed)

Years: 2015 – 2017

Where to Read: Lezhin

Study groups are supposed to be about one thing: passing exams. At least, that’s what Sunggi thinks when he joins a group focused on acing the government service exam—one of the most competitive tests around. But from the moment he walks in, he realizes this isn’t your average study session. Sure, there’s some reviewing here and there, but the group has a few “side goals” that are far more enticing. Laughter, flirtation, and steamy moments take center stage as Sunggi learns that studying can be a lot more fun (and a lot less stressful) when you’re surrounded by people who know how to balance work and play. This lighthearted, comedic series is perfect for readers who want a break from heavy drama—with plenty of spice to keep things interesting.

7. Sweet Guy

Genre: Ecchi, Romance, Seinen, Smut, Adult

Author: BAK Hyeong Jun and I Wonsik

Chapters: 75 (Completed)

Years: 2014 – 2017

Where to Read: Lezhin

Hosang’s love life has always been a disaster. “Underwhelming” doesn’t even begin to describe it—he’s never had a meaningful relationship, never felt that spark with someone. That is, until a freak accident changes everything. He buys an electric mat from his old college friend Gahee, and when he gets electrocuted by it, he gains a mysterious new ability. Suddenly, his luck with women flips 180 degrees, and he’s thrust into a life he’d only ever dreamed of—filled with romance, passion, and attention he never thought he’d get. But with great power comes great responsibility… right? Or will Hosang let his newfound luck go to his head? This romantic, ecchi-filled series is a fun, feel-good ride about self-discovery and the joys of finding love (and desire) when you least expect it.

8. H-Mate

Genre: Seinen, Ecchi, Mature, Smut, Drama, Romance

Author: Turtle Feet

Chapters: 93 (Completed)

Years: 2015 – 2017

Where to Read: Day Comics

Jang-Mi and Taebong have been best friends for 15 years—they know each other’s deepest secrets, have each other’s backs, and share a bond that feels unbreakable. But everything changes when Jang-Mi breaks up with her boyfriend, and in a moment of vulnerability, she and Taebong sleep together. Overnight, the line between friendship and something more is blurred. Now, they’re left asking: Is this love? Or is it just a one-night mistake fueled by heartbreak and loneliness? To make things even more complicated, there’s someone else in the picture—someone who might be the key to figuring out what they really want. This dramatic romance dives into the complexities of friendship and love, exploring how desire can both strengthen and tear apart the closest relationships.

9. Love Parameter

Genre: Adult, Smut, Ecchi, Shounen, Romance, Harem

Author: Kkun and the Artist, Insane

Chapters: 112 (Completed)

Years: 2015 – 2018

Where to Read: Day Comics

Young Hoon is a self-proclaimed nerd with a terrible track record with love. He just can’t seem to understand women—their feelings, their signals, their wants—and as a result, every girlfriend he’s ever had dumps him within a month. But his luck changes when his glasses break one day, and a mysterious man appears out of nowhere to give him a new pair. These aren’t ordinary glasses, though—they have the power to show him people’s “personal stats” and even their most embarrassing, dirty secrets. Suddenly, Young Hoon has a cheat code for love. But will this new ability help him find real connection… or just get him into more trouble? This harem-style series is a fun, playful take on dating, with plenty of ecchi moments and laugh-out-loud humor.

10. Drug Candy

Genre: Comedy, Ecchi, Seinen, Adult, Smut, Drama, Romance, Psychological

Author: Lee Hyunmin

Chapters: 44 (Completed)

Years: 2015 – 2016

Where to Read: Lezhin

Seunggu’s life is in shambles. He’s been reassigned and demoted at work, his marriage has fallen apart, and he’s stuck in a deep, hopeless rut. He feels like he’s lost everything—until he meets Yura. Smart, sassy, and impossible to resist, Yura is like a breath of fresh air in Seunggu’s dark world. He can’t help but be drawn to her, and before he knows it, he’s “addicted” to her—like she’s a drug he can’t quit. But as their relationship deepens, Seunggu starts to question: Is this love, or is he just using Yura to escape his pain? And what secrets is Yura hiding behind her confident exterior? This psychological romance mixes comedy, drama, and steam, exploring the messy, complicated side of love and addiction.

Now that I’ve shared my top 10, I’m curious: Which of these adult reads have you already tried? And are there any hidden gems you love that didn’t make the list? Let’s swap recommendations—after all, a good 18+ read is always worth sharing!

 

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);