scandit-web-datacapture-barcode
Version:
Scandit Data Capture SDK for the Web
110 lines (95 loc) • 6.88 kB
JavaScript
import { a } from './chunk-GDJIQ3LO.js';
import { ScanditHTMLElement, html, defineCustomElements, css, waitTransitionEndForElement } from 'scandit-web-datacapture-core/build/js/private/utils/index.js';
var l="--position",x=(a=>(a.Collapsed="collapsed",a.WillCollapse="willcollapse",a.Expanded="expanded",a.WillExpand="willexpand",a.Tap="cardtap",a))(x||{}),g="cubic-bezier(0.4, 0, 0.2, 1)",s=class s extends ScanditHTMLElement{constructor(){super();this.onCardClickHandler=this.onCardClick.bind(this);this.updateFadeMaskHandler=this.updateFadeMask.bind(this);let t=this.attachShadow({mode:"open"});t.prepend(s.createStyleElement().cloneNode(!0));let e=document.createElement("div");if(e.role="list",e.id="root",e.innerHTML=html`<slot></slot>`,t.append(e),!CSS.supports("mask-image","linear-gradient(black, white)")){let o=document.createElement("div");o.innerHTML='<div class="fade top"></div><div class="fade bottom"></div>',o.classList.add("fade-layer"),t.prepend(o);}}set collapsed(t){if(!t){this.removeAttribute("collapsed");return}this.setAttribute("collapsed",t.toString());}get collapsed(){return !!this.getAttribute("collapsed")}get items(){return this.querySelectorAll(a.tag)}get root(){var t;return (t=this.shadowRoot)==null?void 0:t.querySelector("#root")}static create(){return document.createElement(s.tag)}static register(){defineCustomElements({[s.tag]:s});}static createStyleElement(){return css`
:host {
--top-offset: 0rem;
--list-height: 600px;
--animation-function: ${g};
--max-expanded-height: calc(var(--list-height) - var(--top-offset));
--max-collapsed-height: 115px;
-webkit-tap-highlight-color: transparent;
position: relative;
width: 100%;
}
:host #root {
display: block;
transform-style: preserve-3d;
cursor: pointer;
height: calc(var(--max-expanded-height));
overflow-y: auto;
scroll-behavior: smooth;
scrollbar-width: none;
transition: height 0.6s var(--animation-function);
mask-image: linear-gradient(
to bottom,
rgba(0, 0, 0, 0) 0%,
rgba(0, 0, 0, 1) var(--end-top-mask, 0%),
rgba(0, 0, 0, 1) var(--start-bottom-mask, 95%),
rgba(0, 0, 0, 0) 100%
);
-webkit-overflow-scrolling: touch;
-ms-overflow-style: none;
}
:host .fade-layer {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
pointer-events: none;
}
:host([collapsed]) .fade-layer div.fade {
opacity: 0 ;
}
:host .fade-layer div.fade {
position: absolute;
height: 64px;
width: 100%;
z-index: 1;
opacity: 0;
}
:host .fade-layer div.fade.top {
top: 0px;
background: linear-gradient(180deg, rgba(0, 0, 0, 0.45), transparent);
}
:host .fade-layer div.fade.bottom {
bottom: 0px;
background: linear-gradient(0deg, rgba(0, 0, 0, 0.45), transparent);
}
:host #root::-webkit-scrollbar {
display: none;
}
:host([collapsed]) #root {
height: var(--max-collapsed-height);
mask: none;
overflow: hidden;
}
::slotted(${a.tag}) {
--position: 0;
--animation-duration: 0.5s;
--margin-bottom: calc(0.5rem * var(--position));
--translate-y-value: calc((var(--position) * 100%) + var(--margin-bottom));
--scale: 1;
position: absolute;
width: 100%;
transform: translateY(var(--translate-y-value)) scale(var(--scale));
z-index: calc((var(--position) * -1));
transition: transform var(--animation-duration) var(--animation-function),
opacity var(--animation-duration) var(--animation-function);
will-change: transform, opacity;
opacity: 1;
}
:host([collapsed]) ::slotted(${a.tag}) {
--translate-y-value: calc(var(--position) * 10%);
--scale: calc(1 - (var(--position) * 0.05));
opacity: 1;
}
:host([collapsed]) ::slotted(${a.tag}:nth-child(3)) {
opacity: 0.5;
}
:host([collapsed]) ::slotted(${a.tag}:nth-child(n+4)) {
opacity: 0;
}
`}connectedCallback(){var t;this.addEventListener("click",this.onCardClickHandler),(t=this.root)==null||t.addEventListener("scroll",this.updateFadeMaskHandler),this.updateFadeMaskHandler();}disconnectedCallback(){var t;this.removeEventListener("click",this.onCardClickHandler),(t=this.root)==null||t.removeEventListener("scroll",this.updateFadeMaskHandler);}attributeChangedCallback(t,e,o){t==="collapsed"&&(this.hasAttribute("collapsed")?this.collapse():this.expand());}renderCards(t){let e=document.createDocumentFragment();for(let[o,a]of Object.entries(t))a.dataset.position=`${o}`,a.style.setProperty(l,o.toString()),e.append(a);this.append(e);}clearCards(){for(let t of this.querySelectorAll(a.tag))t.remove();}async unshift(t){if(t.dataset.position==="0"&&t.style.getPropertyValue(l)==="0")return;let e=new Animation(new KeyframeEffect(t,[{transform:"translateY(-100%)",scale:1.05,opacity:0},{transform:"translateY(0%)",scale:1,opacity:1}],{duration:500,easing:g}));t.remove(),t.dataset.position="0",t.style.setProperty(l,"0");let o="0";for(let[a,r]of Object.entries(this.items))o=`${Number(a)+1}`,r.dataset.position=o,r.style.setProperty(l,o);this.prepend(t),e.play(),await e.finished;}onCardClick(t){this.dispatchEvent(new CustomEvent("cardtap",{detail:{card:t.target}}));}updateFadeMask(t){var h,m,v,u,f;let{scrollTop:e=0,scrollHeight:o=0,clientHeight:a=0}=(h=t==null?void 0:t.target)!=null?h:this.root,r=o-a,i=Math.round(e/r*100);if(Number.isNaN(i))return;(m=this.root)==null||m.style.setProperty("--end-top-mask",`${Math.min(i,5)}%`),(v=this.root)==null||v.style.setProperty("--start-bottom-mask",`${Math.max(i,95)}%`);let c=(u=this.shadowRoot)==null?void 0:u.querySelector(".fade.top"),p=(f=this.shadowRoot)==null?void 0:f.querySelector(".fade.bottom");c!=null&&p!=null&&(c.style.setProperty("opacity",`${i/100}`),p.style.setProperty("opacity",`${1-i/100}`));}async toggle(t){var a;let e=[];t==="collapsed"&&((a=this.root)==null||a.scrollTo({behavior:"instant",top:0}));let o={collapsed:"willcollapse",expanded:"willexpand"}[t];this.dispatchEvent(new CustomEvent(o));for(let[r,i]of Object.entries(this.items))Number(r)!==0&&e.push(waitTransitionEndForElement(i)),t==="expanded"&&i.style.removeProperty("opacity"),i.style.setProperty(l,r);await Promise.all(e),this.dispatchEvent(new CustomEvent(t)),this.updateFadeMaskHandler();}async expand(){await this.toggle("expanded");}async collapse(){await this.toggle("collapsed");}};s.tag="scandit-find-card-list",s.observedAttributes=["collapsed"];var d=s;d.register();
export { x as a, d as b };