@creaditor/newsletter-starterkit
Version:
Creaditor Newsletter Editor - Starterkit for creating beautiful email newsletters
112 lines • 6.32 kB
JavaScript
"use strict";(("undefined"!=typeof self?self:this).webpackChunkCreaditor=("undefined"!=typeof self?self:this).webpackChunkCreaditor||[]).push([[2543],{62543:(t,e,i)=>{i.r(e),i.d(e,{ListPicker:()=>a});var l=i(56666),s=i(21293),r=(i(70235),i(27338));class a extends s.oi{constructor(){super(),(0,l.Z)(this,"inputRef",(0,r.V)()),(0,l.Z)(this,"modalRef",(0,r.V)()),this.level=0,this.storage={},this.filtered=[],this.dispatch=this.dispatch.bind(this)}disconnectedCallback(){super.disconnectedCallback()}connectedCallback(){super.connectedCallback(),this.storage[0]||(this.storage={0:[...this.list]}),this.createdEvent=new UIEvent("change",{view:window,bubbles:!0,cancelable:!0})}findSelected(){if(this.selected){const t=(e,i)=>{for(const l of e){if(l.value===this.selected)return this.level=i,this.storage[i]=[...e],!0;if(l.children&&t(l.children,i+1))return!0}return!1};t(this.storage[0],0)}}onSearch(t){const e=t.target.value;if(""===e)return void(this.filtered=[]);const i=function(t){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,s=[];for(const r of t){if(r.label.toLowerCase().includes(e.toLowerCase())){let t=s.find((t=>t.parentLabel===l));t||(t={parentLabel:l,items:[]},s.push(t)),t.items.push(r)}r.children&&(s=s.concat(i(r.children,r.label)))}return s};this.filtered=i(this.storage[0])}close(){this.opened=!1,this.modalRef.value?.close()}dispatch(t){this.value=t,this.dispatchEvent(this.createdEvent),this.inputRef&&this.inputRef.value&&(this.inputRef.value.value=""),this.close(),this.filtered=[]}updated(t){t.has("selected")&&this.findSelected()}render(){const t=s.dy`${(t=>this.filtered&&this.filtered.length>0?this.filtered.map((t=>{let{items:e,parentLabel:i}=t;return s.dy`<h3
style="font-size:16px;text-align:var(--text-align-locale)"
>
${i}
</h3>
${e.map((t=>s.dy` <cdtr-dropdown-item
class="${t.value===this.selected?"selected":""}"
=${()=>this.dispatch(t.value)}
.value="${t.value}"
><cdtr-row class="animate">
${t.value===this.selected?" ✓ ":""}${" "}
<lang-text text="${t.label}"></lang-text>
</cdtr-row>
</cdtr-dropdown-item>`))}
<cdtr-divider></cdtr-divider>`})):t.map((t=>t.children&&t.children.length>0?s.dy`
<cdtr-dropdown-item
class="slideFromLeft"
=${()=>{this.level++,this.storage[this.level]=[...t.children],this.list=t.children}}
.notClickable=${!0}
>
<cdtr-row
class="animate"
alignItems="center"
justify="space-between"
style="min-width:0;padding:2px;width:100%;display:flex;align-items:center;justify-content:space-between;"
>
<lang-text text="${t.label}"></lang-text>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width="20"
fill="currentColor"
>
<path
fill="#000"
d="M11.8284 12.0005L14.6569 14.8289L13.2426 16.2431L9 12.0005L13.2426 7.75781L14.6569 9.17203L11.8284 12.0005Z"
></path>
</svg>
</cdtr-row>
</cdtr-dropdown-item>
`:s.dy`<cdtr-dropdown-item
class="slideFromLeft ${t.value===this.selected?"selected":""}"
=${()=>this.dispatch(t.value)}
.value="${t.value}"
><cdtr-row class="animate">
${t.value===this.selected?" ✓ ":""}${" "}
<lang-text text="${t.label}"></lang-text>
</cdtr-row>
</cdtr-dropdown-item>`)))(this.filtered.length>0?this.filtered:this.storage[this.level])}`,e=s.dy`<cdtr-row
slot="header"
class="header"
justify="flex-start"
>
${this.level>0?s.dy` <paper-button
=${t=>{this.level--,this.level<0?(this.level=0,this.list=this.storage[this.level],this.close()):this.list=this.storage[this.level]}}
>
<cdtr-arrow-icon></cdtr-arrow-icon>
<cdtr-title>
<lang-text
style="font-weight:700;"
text="${this.level>0?"go_back":"close"}"
></lang-text>
</cdtr-title>
</paper-button>`:""}
${0===this.level?s.dy`<cdtr-col sm="12"
><h3
style="padding:0 3px;text-align:var(--text-align-locale);font-size:20px !important;"
>
<lang-text text="${this.heading}"></lang-text>
</h3>
</cdtr-col>`:""}
${this.hasSearch&&s.dy`<cdtr-input
${(0,r.i)(this.inputRef)}
placeholder="search"
=${this.onSearch}
style="width:100%"
></cdtr-input>`}
</cdtr-row>
<div style="direction:var(--direction);" slot="content">${t}</div>`;return this.hasModal?s.dy` <cdtr-draggable-box
${(0,r.i)(this.modalRef)}
style="direction:var(--direction);"
.height=${this.height||300}
.left=${this.left}
.top=${this.top}
.opened=${this.opened}
>
<cdtr-dropdown-button
style="min-width:0;width:100%;display:block;"
slot="trigger"
><lang-text text="${this.title}"></lang-text
></cdtr-dropdown-button>
${e}
</cdtr-draggable-box>`:e}}(0,l.Z)(a,"styles",s.iv`
.selected {
background: #f1f1f1 !important;
border-radius: 5px;
display: block;
}
.slideFromLeft {
animation: slideFromLeft 0.2s ease-in-out;
display: block;
}
slideFromLeft {
from {
transform: translateX(-10%);
opacity: 0;
}
to {
transform: translateX(0);
}
}
`),(0,l.Z)(a,"properties",{value:{type:String,reflect:!1},title:{type:String,reflect:!1},heading:{type:String},list:{type:Array},level:{type:Number},left:{type:String},top:{type:String},opened:{type:Boolean},hasModal:{type:Boolean},hasSearch:{type:Boolean},selected:{type:String},height:{type:Number},filtered:{type:Array}}),customElements.define("cdtr-list-picker",a)}}]);