UNPKG

@limetech/lime-elements

Version:
2 lines 12.6 kB
import{r as t,c as e,h as i,H as r}from"./p-288f0842.js";import{i as o}from"./p-b8c91b22.js";import{g as s}from"./p-d251f404.js";import{t as n}from"./p-4c88e5d3.js";import{c as a}from"./p-ad52787a.js";import"./p-89524e09.js";async function l(t,e){const{width:i,height:r,fit:o="cover",type:s="image/jpeg",quality:n=.85,rename:a=(t=>v(t,s))}=e;const l=await f(t);const{sx:c,sy:b,sw:p,sh:g,dx:w,dy:y,dw:k,dh:x}=m(l.width,l.height,i,r,o);const j=d(i,r);const z=h(j);z.clearRect(0,0,i,r);z.drawImage(l,c,b,p,g,w,y,k,x);const F=await u(j,s,n);const C=a(t.name);return new File([F],C,{type:s})}function c(){try{return typeof globalThis.OffscreenCanvas==="function"}catch(t){return false}}function d(t,e){if(c()){return new globalThis.OffscreenCanvas(t,e)}const i=document.createElement("canvas");i.width=t;i.height=e;return i}function h(t){const e=t.getContext("2d",{alpha:true});if(!e){throw new Error("2D canvas context not available")}return e}function u(t,e,i){if("convertToBlob"in t){return t.convertToBlob({type:e,quality:i})}return new Promise(((r,o)=>{t.toBlob((t=>{if(!t){o(new Error("Failed to create blob from canvas"));return}r(t)}),e,i)}))}async function f(t){var e,i;if(typeof globalThis.createImageBitmap==="function"){try{return await globalThis.createImageBitmap(t,{imageOrientation:"from-image"})}catch(t){const r=((i=(e=globalThis.process)===null||e===void 0?void 0:e.env)===null||i===void 0?void 0:i.NODE_ENV)!=="production";if(r&&typeof console!=="undefined"&&typeof console.debug==="function"){console.debug("createImageBitmap failed, falling back to HTMLImageElement:",t)}}}return await b(t)}async function b(t){var e;const i=URL.createObjectURL(t);try{const t=new Image;t.decoding="sync";t.src=i;await((e=t.decode)===null||e===void 0?void 0:e.call(t).catch((()=>undefined)));if(!t.complete){await new Promise(((e,i)=>{const r=()=>{t.removeEventListener("load",o);t.removeEventListener("error",s)};const o=()=>{r();e()};const s=t=>{r();i(t)};t.addEventListener("load",o);t.addEventListener("error",s)}))}return t}finally{URL.revokeObjectURL(i)}}function m(t,e,i,r,o){const s=t/e;const n=i/r;if(o==="cover"){let o;let a;if(s>n){a=e;o=e*n}else{o=t;a=t/n}const l=(t-o)/2;const c=(e-a)/2;return{sx:l,sy:c,sw:o,sh:a,dx:0,dy:0,dw:i,dh:r}}let a;let l;if(s>n){a=i;l=i/s}else{l=r;a=r*s}const c=(i-a)/2;const d=(r-l)/2;return{sx:0,sy:0,sw:t,sh:e,dx:c,dy:d,dw:a,dh:l}}function v(t,e){const i=e==="image/png"?"png":"jpg";const r=t.lastIndexOf(".");const o=r>0?t.slice(0,r):t;return`${o}.${i}`}const p="@charset \"UTF-8\";:host(limel-profile-picture){position:relative;display:inline-flex;min-width:1.5rem;min-height:1.5rem;border-radius:var(--profile-picture-border-radius, 100vw);background-color:rgb(var(--contrast-400))}*{box-sizing:border-box}limel-file-dropzone,limel-file-input,button.avatar{display:flex;align-items:center;justify-content:center;width:100%;height:100%}button{all:unset;display:block}button:focus{outline:none}button:focus-visible{outline:none;box-shadow:var(--shadow-depth-8-focused)}button.avatar{overflow:hidden;border-radius:var(--profile-picture-border-radius, 100vw)}:host(:not([disabled]):not([disabled=true])) button.avatar{transition:color var(--limel-clickable-transition-speed, 0.4s) ease, background-color var(--limel-clickable-transition-speed, 0.4s) ease, box-shadow var(--limel-clickable-transform-speed, 0.4s) ease, transform var(--limel-clickable-transform-speed, 0.4s) var(--limel-clickable-transform-timing-function, ease);cursor:pointer;color:var(--limel-theme-on-surface-color);background-color:transparent}:host(:not([disabled]):not([disabled=true])) button.avatar:hover,:host(:not([disabled]):not([disabled=true])) button.avatar:focus,:host(:not([disabled]):not([disabled=true])) button.avatar:focus-visible{will-change:color, background-color, box-shadow, transform}:host(:not([disabled]):not([disabled=true])) button.avatar:hover,:host(:not([disabled]):not([disabled=true])) button.avatar:focus-visible{transform:translate3d(0, 0.01rem, 0);color:var(--limel-theme-on-surface-color);background-color:var(--lime-elevated-surface-background-color)}:host(:not([disabled]):not([disabled=true])) button.avatar:hover{box-shadow:var(--button-shadow-hovered)}:host(:not([disabled]):not([disabled=true])) button.avatar:active{--limel-clickable-transform-timing-function:cubic-bezier(\n 0.83,\n -0.15,\n 0.49,\n 1.16\n );transform:translate3d(0, 0.05rem, 0);box-shadow:var(--button-shadow-pressed)}:host(:not([disabled]):not([disabled=true])) button.avatar:hover,:host(:not([disabled]):not([disabled=true])) button.avatar:active{--limel-clickable-transition-speed:0.2s;--limel-clickable-transform-speed:0.16s}:host([invalid]:not([invalid=false])) button.avatar{box-shadow:var(--shadow-error-state)}button.remove{transition:color var(--limel-clickable-transition-speed, 0.4s) ease, background-color var(--limel-clickable-transition-speed, 0.4s) ease, box-shadow var(--limel-clickable-transform-speed, 0.4s) ease, transform var(--limel-clickable-transform-speed, 0.4s) var(--limel-clickable-transform-timing-function, ease);cursor:pointer;color:var(--limel-theme-on-surface-color);background-color:rgb(var(--contrast-900));cursor:pointer;height:1.25rem;width:1.25rem;border-radius:50%;background-repeat:no-repeat;background-position:center;background-size:0.75rem;background-image:url(\"data:image/svg+xml; utf8, <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><defs/><path fill='rgb(255,255,255)' d='M7.219 5.781L5.78 7.22 14.563 16 5.78 24.781 7.22 26.22 16 17.437l8.781 8.782 1.438-1.438L17.437 16l8.782-8.781L24.78 5.78 16 14.563z'/></svg>\");position:absolute;top:0;left:0;opacity:0}button.remove:hover,button.remove:focus,button.remove:focus-visible{will-change:color, background-color, box-shadow, transform}button.remove:hover,button.remove:focus-visible{transform:translate3d(0, 0.01rem, 0);color:rgb(var(--color-white));background-color:rgb(var(--color-red-default))}button.remove:hover{box-shadow:var(--button-shadow-hovered)}button.remove:active{--limel-clickable-transform-timing-function:cubic-bezier(\n 0.83,\n -0.15,\n 0.49,\n 1.16\n );transform:translate3d(0, 0.05rem, 0);box-shadow:var(--button-shadow-pressed)}button.remove:hover,button.remove:active{--limel-clickable-transition-speed:0.2s;--limel-clickable-transform-speed:0.16s}:host(:hover) button.remove,:host(:focus) button.remove,:host(:focus-visible) button.remove,:host(:focus-within) button.remove,:host(:active) button.remove{animation:show 0.4s ease-in-out forwards}@keyframes show{0%{transform:scale(0.9);opacity:0}100%{transform:scale(1);opacity:1}}button.avatar,img,limel-icon{border-radius:var(--profile-picture-border-radius, 100vw)}limel-icon{width:calc(100% - 1rem);min-width:1rem;max-width:4rem;color:var(--limel-theme-text-secondary-on-background-color);margin:auto}img{object-fit:var(--limel-profile-picture-object-fit);width:100%;height:100%}:host(.has-image-error) img{border:1px dashed rgb(var(--contrast-600));background:url(\"data:image/svg+xml;charset=utf-8, <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' style='fill-rule:evenodd;'><path fill='rgba(186,186,192,0.16)' d='M0 0h4v4H0zM4 4h4v4H4z'/></svg>\");background-size:0.5rem}limel-spinner{position:absolute;inset:0;margin:auto}limel-popover{position:absolute;inset:auto 0 0 auto;display:block;width:2.25rem;height:2.25rem}";const g=class{constructor(r){t(this,r);this.change=e(this,"change",7);this.filesRejected=e(this,"filesRejected",7);this.removeButtonId=a();this.browseButtonId=a();this.renderHelperText=()=>{if(!this.helperText){return}return i("limel-tooltip",{elementId:this.browseButtonId,label:this.helperText})};this.handleNewFiles=async t=>{var e,i;t.stopPropagation();if(this.disabled){return}const r=(e=t.detail)===null||e===void 0?void 0:e[0];if(!r){return}if(!o(r,this.accept)){this.filesRejected.emit([r]);return}this.revokeObjectUrl();this.imageError=false;let s=r;if(this.resize&&r.fileContent instanceof File){try{const t=await l(r.fileContent,Object.assign(Object.assign({},this.resize),{fit:(i=this.resize.fit)!==null&&i!==void 0?i:this.imageFit}));s=Object.assign(Object.assign({},r),{filename:t.name,size:t.size,contentType:t.type,fileContent:t})}catch(t){s=r}}if(!s.href&&s.fileContent instanceof File){this.objectUrl=URL.createObjectURL(s.fileContent)}this.change.emit(s)};this.handleRejectedFiles=t=>{t.stopPropagation();this.filesRejected.emit(t.detail)};this.handleClear=t=>{t.stopPropagation();this.revokeObjectUrl();this.imageError=false;this.change.emit(undefined)};this.onImageError=()=>{this.imageError=true};this.openPopover=t=>{t.stopPropagation();this.isErrorMessagePopoverOpen=true};this.onPopoverClose=t=>{t.stopPropagation();this.isErrorMessagePopoverOpen=false};this.getTranslation=t=>n.get(t,this.language);this.language="en";this.label=undefined;this.icon="user";this.helperText=undefined;this.disabled=false;this.readonly=false;this.required=false;this.invalid=false;this.loading=false;this.value=undefined;this.imageFit="cover";this.accept="image/jpeg,image/png,image/heic,.jpg,.jpeg,.png,.heic";this.resize=undefined;this.objectUrl=undefined;this.imageError=false;this.isErrorMessagePopoverOpen=false}disconnectedCallback(){this.revokeObjectUrl()}handleValueChange(){this.revokeObjectUrl();this.imageError=false;const t=this.value;if(t&&typeof t!=="string"&&!t.href&&t.fileContent instanceof File){this.objectUrl=URL.createObjectURL(t.fileContent)}}render(){const t={"has-image-error":this.imageError};if(this.readonly){return i(r,{class:t},this.renderAvatar())}return i(r,{class:t},i("limel-file-dropzone",{disabled:this.disabled,accept:this.accept,onFilesSelected:this.handleNewFiles,onFilesRejected:this.handleRejectedFiles},i("limel-file-input",{accept:this.accept,disabled:this.disabled,"aria-required":this.required?"true":undefined,"aria-invalid":this.invalid?"true":undefined},this.renderBrowseButton())),this.renderClearButton(),this.renderSpinner(),this.renderErrorMessage(),this.renderHelperText())}get hasValue(){if(typeof this.value==="string"){return!!this.value}if(this.value&&(this.value.href||this.value.fileContent)){return true}return!!this.objectUrl}renderBrowseButton(){return i("button",{id:this.browseButtonId,type:"button",class:"avatar",disabled:this.disabled,"aria-label":this.label,"aria-busy":this.loading?"true":"false","aria-live":"polite"},this.renderAvatar())}renderAvatar(){const t=this.getImageSrc();if(t){return i("img",{src:t,alt:"",style:{"--limel-profile-picture-object-fit":this.imageFit},loading:"lazy",onError:this.onImageError})}return this.renderIcon()}renderIcon(){var t,e;const r=s(this.icon);return i("limel-icon",{name:r,style:{color:`${(t=this.icon)===null||t===void 0?void 0:t.color}`,"background-color":`${(e=this.icon)===null||e===void 0?void 0:e.backgroundColor}`}})}renderClearButton(){if(!this.hasValue||this.disabled){return}return[i("button",{class:"remove",type:"button",id:this.removeButtonId,onClick:this.handleClear}),i("limel-tooltip",{label:this.getTranslation("profile-picture.remove"),elementId:this.removeButtonId})]}renderSpinner(){if(!this.loading){return}return i("limel-spinner",null)}getUnsupportedPreviewContext(){const t=this.value;const e=!this.getImageSrc();const i=!!(t&&typeof t!=="string"&&t.fileContent instanceof File&&!t.href);const r=!!this.resize;return{hasNoSrc:e,hasLocalFile:i,isResizeConfigured:r}}shouldShowErrorMessage(){const{hasNoSrc:t,hasLocalFile:e,isResizeConfigured:i}=this.getUnsupportedPreviewContext();return(t||this.imageError)&&e&&i}renderErrorMessage(){if(!this.shouldShowErrorMessage()){return}const t={name:"error",color:"rgb(var(--color-orange-dark))"};const e={maxWidth:"20rem",borderRadius:"0.75rem"};return i("limel-popover",{open:this.isErrorMessagePopoverOpen,onClick:this.openPopover,onClose:this.onPopoverClose},i("limel-icon-button",{slot:"trigger",elevated:true,icon:t,"aria-live":"polite",label:this.getTranslation("profile-picture.unsupported-preview.title")}),i("limel-callout",{type:"warning",style:e,heading:this.getTranslation("profile-picture.unsupported-preview.title")},this.getTranslation("profile-picture.unsupported-preview.description")))}getImageSrc(){if(!this.value){return this.objectUrl}if(typeof this.value==="string"){return this.value}if(this.value.href){return this.value.href}if(this.value.fileContent instanceof File){return this.objectUrl}return undefined}revokeObjectUrl(){if(this.objectUrl){URL.revokeObjectURL(this.objectUrl);this.objectUrl=undefined}}static get watchers(){return{value:["handleValueChange"]}}};g.style=p;export{g as limel_profile_picture}; //# sourceMappingURL=p-ed04acfc.entry.js.map