@kvass/widgets 1.2.6 → 1.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Flatfinder-xVhUSkxC.js +15 -0
- package/dist/_plugin-vue_export-helper.js +17 -0
- package/dist/contact.js +21 -0
- package/dist/flatfinder.js +185 -0
- package/dist/font-selector.js +1 -0
- package/dist/img-comparison-slider.js +1 -0
- package/dist/index.es.js +12 -0
- package/dist/index.js +1 -0
- package/dist/map.js +2028 -0
- package/dist/project-portal.js +1 -0
- package/dist/vimeo.js +1 -0
- package/dist/youtube.js +1 -0
- package/package.json +4 -1
- package/.github/workflows/semantic-release.yml +0 -21
- package/.prettierrc +0 -6
- package/.releaserc +0 -3
- package/index.html +0 -38
- package/src/contact/README.md +0 -80
- package/src/contact/api.js +0 -82
- package/src/contact/components/Checkbox.ce.vue +0 -127
- package/src/contact/components/Field.ce.vue +0 -156
- package/src/contact/components/Fieldset.ce.vue +0 -63
- package/src/contact/components/Form.ce.vue +0 -407
- package/src/contact/main.js +0 -9
- package/src/contact/utils.js +0 -14
- package/src/flatfinder/README.md +0 -58
- package/src/flatfinder/components/Flatfinder.ce.vue +0 -34
- package/src/flatfinder/main.js +0 -4
- package/src/font-selector/README.md +0 -60
- package/src/font-selector/components/FontSelector.ce.vue +0 -246
- package/src/font-selector/main.js +0 -4
- package/src/font-selector/providers.js +0 -48
- package/src/font-selector/selector.svg +0 -7
- package/src/img-comparison-slider/README.md +0 -69
- package/src/img-comparison-slider/components/ImgComparisonSlider.ce.vue +0 -139
- package/src/img-comparison-slider/main.js +0 -7
- package/src/map/README.md +0 -59
- package/src/map/components/Map.ce.vue +0 -66
- package/src/map/main.js +0 -4
- package/src/project-portal/App.ce.vue +0 -308
- package/src/project-portal/api.js +0 -48
- package/src/project-portal/assets/logo.png +0 -0
- package/src/project-portal/assets/map-pin-solid.svg +0 -1
- package/src/project-portal/components/Card.ce.vue +0 -110
- package/src/project-portal/components/Category.ce.vue +0 -87
- package/src/project-portal/components/CategorySelector.ce.vue +0 -43
- package/src/project-portal/components/ProjectTypeSelector.ce.vue +0 -70
- package/src/project-portal/main.js +0 -16
- package/src/project-portal/styles/_variables.scss +0 -19
- package/src/project-portal/styles/components/_card.scss +0 -178
- package/src/utils/index.js +0 -40
- package/src/vimeo/README.md +0 -58
- package/src/vimeo/components/Vimeo.ce.vue +0 -311
- package/src/vimeo/main.js +0 -4
- package/src/youtube/README.md +0 -58
- package/src/youtube/components/Youtube.ce.vue +0 -322
- package/src/youtube/main.js +0 -4
- package/vite.config.js +0 -51
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as j,x as f,o as t,e as m,w as b,a as u,t as h,v,n as x,g as B,c as l,j as L,d as g,y as M,F as w,k as C,r as y,b as S,T as N,p as V}from"./_plugin-vue_export-helper.js";const E=".category{padding:1rem 1.5rem;border:none;border-radius:var(--kvass-project-selector-border-radius, 3px);font-size:.9em;background-color:var(--kvass-project-selector-light-grey, #efefef)}.category:focus-visible{outline:2px solid var(--kvass-project-selector-primary, #0523a8);outline-offset:2px}.category--primary.category--active{background-color:var(--kvass-project-selector-primary, #0523a8)}.category--sale.category--active{background-color:var(--kvass-project-selector-sale, #2da71d)}.category--sold.category--active{background-color:var(--kvass-project-selector-sold, #cc3434)}.category--development.category--active{background-color:var(--kvass-project-selector-development, #3d495b)}.category--upcoming.category--active{background-color:var(--kvass-project-selector-upcoming, #e9b03d)}.category--default.category--active{background-color:var(--kvass-project-selector-default, )}.category--active{color:#fff}",O={__name:"Category.ce",props:{value:{type:String,default:"development"},component:{type:String,default:"div"},active:{type:Boolean}},setup(e){const o={sale:"sale",upcoming:"upcoming",development:"development",sold:"sold"},a={sale:"Til salgs",upcoming:"Kommer for salg",development:"Under utvikling",all:"Alle",sold:"Utsolgt"},r=e,c=f(()=>o[r.value]?o[r.value]:"default"),s=f(()=>a[r.value]);return(d,p)=>(t(),m(B(e.component),{class:x(["category",[`category--${v(c)}`,{"category--active":e.active}]])},{default:b(()=>[u("span",null,h(v(s)),1)]),_:1},8,["class"]))}},z=j(O,[["styles",[E]]]),U=".project-selector-card{position:relative;font-family:var(--kvass-project-selector-secondary-font, inherit);display:flex;flex-direction:column;border-radius:var(--kvass-project-selector-border-radius, 3px);background-color:#fff;text-decoration:none;color:inherit;overflow:hidden}.project-selector-card__header{min-height:var(--kvass-project-selector-header-min-height, 250px);background-color:var(--kvass-project-selector-dark, #272727)}@media (max-width: 767px){.project-selector-card__header{min-height:var(--kvass-project-selector-header-min-height-resposive, 150px)}}.project-selector-card__header-category{position:absolute;background-color:var(--kvass-project-selector-secondary, #3d495b);z-index:11;color:#fff;left:var(--kvass-project-selector-card-status-gap, .5rem);top:var(--kvass-project-selector-card-status-gap, .5rem);border-radius:var(--kvass-project-selector-border-radius, 3px)}.project-selector-card__header-category .category{font-size:var(--kvass-project-selector-card-status-font-size, .8em);padding:var(--kvass-project-selector-card-status-padding-x, .5rem) var(--kvass-project-selector-card-status-padding-x, 1rem)}.project-selector-card__header-cover{width:100%;background-repeat:no-repeat;height:100%;background-size:cover;background-position:center;transition:transform .62s cubic-bezier(.05,.2,.1,1)}.project-selector-card__header-cover:hover{transform:scale(1.11);-webkit-transform:scale(1.11)}.project-selector-card__title{font-weight:700;line-height:1;margin:0}.project-selector-card__content{background-color:var(--kvass-project-selector-background-color, #efeded);border-top:none;text-align:left;display:flex;flex-direction:column;gap:.5rem;padding:calc(var(--kvass-project-selector-card-spacing, 2.5rem) - .5rem);height:100%}.project-selector-card__content-name{color:var(--kvass-project-selector-dark, #272727);margin:0!important}.project-selector-card__content-url{color:var(--kvass-project-selector-primary, #0523a8);font-size:1.1em;margin-top:auto;text-decoration:underline;text-decoration-color:var(--kvass-project-selector-primary, #0523a8);text-underline-offset:.3em;text-decoration-thickness:1px}.project-selector-card__content-url:hover{color:var(--kvass-project-selector-secondary, #3d495b)}.project-selector-card__content-city{font-size:1.2rem}.project-selector-card__content-location{display:flex;align-items:center;align-content:center;gap:1rem;color:var(--kvass-project-selector-secondary, #3d495b)}.project-selector-card__content-location svg{opacity:.5;height:.9rem}.project-selector-card__content-location svg path{color:currentColor}@media (max-width: 767px){.project-selector-card__content{gap:.5rem;padding:calc(var(--kvass-project-selector-card-spacing, 2.5rem) - .5rem) calc(var(--kvass-project-selector-card-spacing, 2.5rem) - 1rem)}}.project-selector--theme-tiles .project-selector-card{border-radius:var(--kvass-project-selector-border-radius, 0px)}.project-selector--theme-tiles .project-selector-card:hover .project-selector-card__content{background:#0003!important}.project-selector--theme-tiles .project-selector-card__header{min-height:var(--kvass-project-selector-header-min-height, 400px)}@media (max-width: 767px){.project-selector--theme-tiles .project-selector-card__header{min-height:var(--kvass-project-selector-header-min-height-resposive, 250px)}}.project-selector--theme-tiles .project-selector-card__content{font-size:1.5rem;height:unset!important;position:absolute;inset:0;z-index:10;pointer-events:none;background:#0006!important;transition:background .2s ease;display:grid!important;place-content:center}.project-selector--theme-tiles .project-selector-card__content>*{color:#fff!important;text-align:center}.project-selector--theme-tiles .project-selector-card__content-url{text-decoration-color:currentColor;font-size:.8em}.project-selector--theme-tiles .project-selector-card__content-location{justify-content:center;margin-bottom:1rem}.project-selector--theme-tiles .project-selector-card__content-location svg{display:none}.project-selector--theme-tiles .project-selector-card__content-intro{font-size:.8em}",D={key:0,class:"project-selector-card__header-category"},H={class:"project-selector-card__content"},P={class:"project-selector-card__content-name"},G={key:0,class:"project-selector-card__content-location"},K=u("svg",{"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"map-pin",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 288 512"},[u("path",{fill:"currentColor",d:"M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z"})],-1),W={class:"project-selector-card__content-city"},q=["innerHTML"],J=["href"],Q={__name:"Card.ce",props:{item:{type:Object,default:()=>({})},theme:{type:String,default:"default",enums:["default","primary","flat"]},disableLabel:{type:Boolean,default:!1}},setup(e){const o=e,a=f(()=>c(o.item.media&&o.item.media.cover?o.item.media.cover:null)||c(o.item.media&&o.item.media.gallery?o.item.media.gallery:null)),r=f(()=>o.item.status);function c(s){if(!s||!s.length)return;let d=s.find(p=>p.type?p.type.startsWith("image"):p);if(d)return d.url}return(s,d)=>(t(),l("div",{class:x(["project-selector-card","project-selector-card--"+e.theme])},[(t(),m(B(e.item.url&&!["development"].includes(v(r))?"a":"div"),{class:"project-selector-card__header",href:e.item.url},{default:b(()=>[e.disableLabel?g("",!0):(t(),l("div",D,[L(z,{value:v(r),component:"div",active:""},null,8,["value"])])),u("div",{class:"project-selector-card__header-cover",style:M({backgroundImage:`url(${v(a)})`})},null,4)]),_:1},8,["href"])),u("div",H,[u("h2",P,h(e.item.name),1),e.item.address&&e.item.address.city?(t(),l("span",G,[K,u("span",W,h(e.item.address?e.item.address.city:""),1)])):g("",!0),u("div",{class:"project-selector-card__content-intro",innerHTML:e.item.intro},null,8,q),e.item.url&&!["development"].includes(v(r))?(t(),l("a",{key:1,class:"project-selector-card__content-url",href:e.item.url}," Se prosjektet",8,J)):g("",!0)])],2))}},T=j(Q,[["styles",[U]]]),R=".project-selector-category__selector{cursor:pointer}@media (max-width: 767px){.project-selector-category__selector{width:100%}}.project-selector-category__selector:hover{box-shadow:inset 0 0 0 2em #4a4a4a33}",X={class:"project-selector-category"},Y={__name:"CategorySelector.ce",props:{items:{type:Array,default:()=>[]},value:{type:String}},setup(e){return(o,a)=>(t(),l("div",X,[(t(!0),l(w,null,C(e.items,(r,c)=>(t(),m(z,{key:c,class:"project-selector-category__selector",value:r,active:e.value==r,component:"button",onClick:s=>o.$emit("input",r)},null,8,["value","active","onClick"]))),128))]))}},F=j(Y,[["styles",[R]]]),Z=".project-type-selector .elder-dropdown__content{z-index:11}.project-type-selector__trigger{appearance:none;padding:1rem 2rem;border:none;border-radius:var(--kvass-project-selector-border-radius, 3px);font-size:.9em;background-color:var(--kvass-project-selector-primary, #0523a8);color:#fff}.project-type-selector__trigger:-ms-expand{display:none}@media (max-width: 767px){.project-type-selector__trigger{width:100%}}.project-type-selector__dropdown-item{text-align:center!important;padding:.5rem 1.5rem;font-size:.9em}.project-type-selector__dropdown-item--selected{background-color:#8f8f8f66}.project-type-selector__dropdown-item:hover{background-color:#24242466}",ee={class:"project-type-selector__trigger"},te=["value","onChange"],re={__name:"ProjectTypeSelector.ce",props:{items:{type:Array,default:()=>[]},value:{type:String}},setup(e){function o(a){return a.charAt(0).toUpperCase()+a.substring(1)}return(a,r)=>(t(),l("select",ee,[(t(!0),l(w,null,C(e.items,(c,s)=>(t(),l("option",{key:s,value:c,onChange:d=>a.$emit("input",c),class:"project-type-selector__dropdown-item"},h(o(c==="none"?"Velg type":c)),41,te))),128))]))}},I=j(re,[["styles",[Z]]]),oe=".project-selector__navigation{display:flex;justify-content:var(--kvass-project-selector-nav-position, center);padding:0 2rem 3rem;gap:1.5rem}@media (max-width: 767px){.project-selector__navigation{flex-direction:column-reverse;justify-content:center;gap:.5rem}}.project-selector__navigation-category{display:flex;justify-content:center;gap:1.5rem}@media (max-width: 767px){.project-selector__navigation-category{flex-direction:column;gap:.5rem;align-items:center}}.project-selector__card{position:relative;display:grid;grid-template-columns:repeat(var(--kvass-project-selector-grid-columns, 4),1fr);gap:var(--kvass-project-selector-grid-gap, 2rem)}@media (max-width: 767px){.project-selector__card{grid-template-columns:1fr;padding-top:2rem}}.project-selector__no-result{font-size:1.2em;text-align:center;display:flex;justify-content:center;align-items:center;min-height:200px;margin:2rem 0;background-color:var(--kvass-project-selector-light-grey, #efefef)}@media (max-width: 767px){.project-selector__no-result{min-height:100px}}.project-selector .list-leave-active{position:absolute}.project-selector .list-move,.project-selector .list-enter-active,.project-selector .list-leave-active{transition:all .5s ease}.project-selector .list-enter{transform:scale(.95)}.project-selector .list-enter,.project-selector .list-leave-to{opacity:0}.project-selector--theme-tiles .project-selector__card{grid-template-columns:repeat(var(--kvass-project-selector-grid-columns, 2),1fr);gap:var(--kvass-project-selector-grid-gap, 0rem)}@media (max-width: 767px){.project-selector--theme-tiles .project-selector__card{grid-template-columns:1fr;padding-top:2rem}}",ce={key:0,class:"project-selector__navigation"},ae={key:2,class:"project-selector__no-result"},se={created(){this.fetch()}},le=Object.assign(se,{__name:"App.ce",props:{source:{type:String,default:"https://feature.kvass.no"},startCategory:{type:String,default:"all",enums:["all","sale","upcoming","development","sold"]},enabledCategories:{type:String,default:"all,sale,upcoming,development,sold"},theme:{type:String,enum:["default","tiles"],default:"default"},sortOn:{type:String,enum:["status","name"],default:"status"},disableNav:{type:Boolean,default:!1}},setup(e){const o=e,a=y(""),r=y("none"),c=y([]);var s=[];y(null);const d=S(()=>[...o.enabledCategories.split(",").filter(n=>n==="all"?!0:s.find(i=>i.status.includes(n)))]),p=S(()=>{let n=["none"].concat(s.map(i=>{if(i.customFields&&i.customFields["project-type"])return i.customFields["project-type"]}));return[...new Set(n||[])].filter(Boolean)});function $(){c.value=s.filter(n=>a.value==="all"?!0:n.status.includes(a.value)).filter(n=>{if(!p.length||r.value==="none")return!0;if(!(!n.customFields||!n.customFields["project-type"]))return n.customFields["project-type"].includes(r.value)})}return(n,i)=>(t(),l("div",{class:x(["project-selector",`project-selector--theme-${e.theme}`])},[!e.disableNav||!d.value.length?(t(),l("div",ce,[d.value.length?(t(),m(F,{key:0,class:"project-selector__navigation-category",items:d.value,value:a.value,onInput:i[0]||(i[0]=_=>{a.value=_,$()})},null,8,["items","value"])):g("",!0),p.value.length>1?(t(),m(I,{key:1,class:"project-selector__navigation-project-type",items:p.value,value:r.value,onInput:i[1]||(i[1]=_=>{r.value=_.target.value,$()})},null,8,["items","value"])):g("",!0)])):g("",!0),c.value&&c.value.length?(t(),m(N,{key:1,tag:"div",name:"list",appear:"",class:"project-selector__card"},{default:b(()=>[(t(!0),l(w,null,C(c.value,(_,A)=>(t(),m(T,{"disable-label":e.disableNav,key:A,item:_,theme:"border"},null,8,["disable-label","item"]))),128))]),_:1})):(t(),l("div",ae,"Ingen resultater"))],2))}}),k=j(le,[["styles",[oe]]]);k.styles=[...k.styles,...T.styles,...z.styles,...F.styles,...I.styles];customElements.define("kvass-project-portal",V(k));
|
package/dist/vimeo.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as f,o,c as r,z as l,A as m,j as v,w as g,a as d,y as c,B as y,C as k,t as u,d as w,p as b}from"./_plugin-vue_export-helper.js";import{E as p,L as _,W as S}from"./index.js";const x=".widget-kvass-media-render-vimeo{height:100%;width:100%;position:relative}.widget-kvass-media-render-vimeo iframe{height:100%;width:100%}.widget-kvass-media-render-vimeo>*{position:absolute;top:0;left:0;width:100%;height:100%}.widget-kvass-media-render-vimeo__thumbnail{background-size:cover;background-repeat:no-repeat;background-position:center;filter:blur(10px);opacity:.7}.widget-kvass-media-render-vimeo__blocked{display:flex;justify-content:center;align-items:center;left:50%;top:50%;transform:translate(-50%,-50%)}.widget-kvass-media-render-vimeo__blocked svg{opacity:.3}@media (max-width: 992px){.widget-kvass-media-render-vimeo__blocked svg{font-size:2.5em}}.widget-kvass-media-render-vimeo__blocked-warning{pointer-events:initial;position:absolute;bottom:0;text-align:center;background-color:#f2f2f2;font-size:.6em;bottom:3rem;left:3rem;max-width:400px;font-size:.8em;padding:1.5em 2em}.widget-kvass-media-render-vimeo__blocked-warning-button{padding:.5rem;border:1px solid #818181;backdrop-filter:none;background-color:transparent}@media (max-width: 992px){.widget-kvass-media-render-vimeo__blocked-warning{left:.5rem;bottom:.5rem;font-size:.6em;max-width:200px}}.widget-kvass-media-render-vimeo .fade-enter-active,.widget-kvass-media-render-vimeo .fade-leave-active{transition:opacity .5s}.widget-kvass-media-render-vimeo .fade-enter,.widget-kvass-media-render-vimeo .fade-leave-to{opacity:0}",B={props:{url:{type:String,default:""},videoState:{type:String,default:"ready",enums:["ready ","play","pause"]},loop:{type:[String,Boolean],default:!0},autoplay:{type:[String,Boolean],default:!1},controls:{type:[String,Boolean],default:!0},mute:{type:[String,Boolean],default:!1},displayThumbnail:{type:[String,Boolean],default:!0},ignoreConsent:{type:[String,Boolean],default:!1},hideConsent:{type:[String,Boolean],default:!1},thumbnailSource:{type:String,default:""},consentBlockMessage:{type:String,default:"The video is blocked due to lack of consent to cookies"},consentButtonLabel:{type:String,default:"Edit consents"},aspectRatio:{type:String,default:"16/9"}},watch:{videoState:{handler(e,t){if(e!==t)switch(e){case"play":return this.play();case"pause":return this.pause();default:return}}}},data(){return{ready:!1,thumbnail:null,consents:[]}},computed:{kvassDefined(){return typeof Kvass<"u"},showConsent(){return this.hideConsent||!this.kvassDefined?!1:!this.ignoreConsent&&!this.consents.includes("statistics")},videoId(){if(!this.url)return;let e=[p(this.url,/https\:\/\/(w{3}\.)?vimeo\.com\/(.+)\/?/,{group:2}),p(this.url,/https\:\/\/(w{3}\.)?player\.vimeo\.com\/(video\/)?(.+)\/?/,{group:3})].find(t=>!!t);if(e)return e.split("&")[0]}},methods:{openConsent(){this.kvassDefined&&Kvass.emit("consent:show")},async play(){try{this.player.setVolume(0),await this.player.play()}catch(e){console.log(e)}},pause(){this.player.pause()},async init(){const e={url:`https://vimeo.com/${this.videoId}`,loop:this.loop,autoplay:this.autoplay,controls:this.controls,muted:this.mute||this.autoplay,playsinline:1,dnt:1};function t(i){return i==="false"?!1:i==="true"?!0:i}Object.entries(e).map(([i,s])=>e[i]=t(s)),_("https://player.vimeo.com/api/player.js");const a=await S(()=>window.Vimeo,{limit:100});this.player=new a.Player(this.$refs.vimeoPlayer,e),await this.player.ready().then(()=>{this.ready=!0}).catch(i=>{console.log(i)})}},async mounted(){if(this.displayThumbnail&&(this.thumbnail=`/api/media/thumbnail?url=${this.url}`),this.ignoreConsent||!this.kvassDefined)return this.init();let e=t=>{if(this.consents=t||[],!(!this.consents||!this.consents.length)&&this.consents.includes("statistics"))return this.init()};this.kvassDefined&&(Kvass.emit("consent:get",t=>e(t)),Kvass.on("consent:change",e))}},C={key:0,class:"widget-kvass-media-render-vimeo__blocked"},z={class:"widget-kvass-media-render-vimeo__blocked-warning"};function D(e,t,a,i,s,n){return o(),r("div",{class:"widget-kvass-media-render-vimeo",style:c(`aspect-ratio: ${a.aspectRatio};`)},[l((o(),r("div",{key:n.videoId,ref:"vimeoPlayer",class:"widget-kvass-media-render-vimeo__embed",frameborder:"0",allow:"autoplay; fullscreen;",webkitallowfullscreen:"",mozallowfullscreen:""})),[[m,s.ready]]),v(y,{name:"fade",mode:"in-out"},{default:g(()=>[l(d("div",{class:"widget-kvass-media-render-vimeo__thumbnail",style:c({backgroundImage:`url(${s.thumbnail})`})},null,4),[[m,!s.ready&&s.thumbnail]])]),_:1}),n.showConsent?(o(),r("div",C,[d("div",z,[k(u(a.consentBlockMessage)+" ",1),d("button",{class:"widget-kvass-media-render-vimeo__blocked-warning-button",onClick:t[0]||(t[0]=(...h)=>n.openConsent&&n.openConsent(...h))},u(a.consentButtonLabel),1)])])):w("",!0)],4)}const V=f(B,[["render",D],["styles",[x]]]);customElements.define("kvass-vimeo",b(V));
|
package/dist/youtube.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as p,o as d,c as u,a as i,j as h,w as y,z as f,y as l,A as b,B as g,C as w,t as c,d as v,p as k}from"./_plugin-vue_export-helper.js";import{E as a,L as _,W as S}from"./index.js";const B=".widget-kvass-media-render-youtube{height:100%;width:100%;position:relative}.widget-kvass-media-render-youtube iframe{height:100%;width:100%}.widget-kvass-media-render-youtube>*{position:absolute;top:0;left:0;width:100%;height:100%}.widget-kvass-media-render-youtube__thumbnail{background-size:cover;background-repeat:no-repeat;background-position:center;filter:blur(10px);opacity:.7}.widget-kvass-media-render-youtube__blocked{display:flex;justify-content:center;align-items:center;left:50%;top:50%;transform:translate(-50%,-50%)}.widget-kvass-media-render-youtube__blocked svg{opacity:.3}@media (max-width: 992px){.widget-kvass-media-render-youtube__blocked svg{font-size:2.5em}}.widget-kvass-media-render-youtube__blocked-warning{pointer-events:initial;position:absolute;bottom:0;text-align:center;background-color:#f2f2f2;font-size:.6em;bottom:3rem;left:3rem;max-width:400px;font-size:.8em;padding:1.5em 2em}.widget-kvass-media-render-youtube__blocked-warning-button{padding:.5rem;border:1px solid #818181;backdrop-filter:none;background-color:transparent}@media (max-width: 992px){.widget-kvass-media-render-youtube__blocked-warning{left:.5rem;bottom:.5rem;font-size:.6em;max-width:200px}}.widget-kvass-media-render-youtube .fade-enter-active,.widget-kvass-media-render-youtube .fade-leave-active{transition:opacity .5s}.widget-kvass-media-render-youtube .fade-enter,.widget-kvass-media-render-youtube .fade-leave-to{opacity:0}",x={props:{url:{type:String,default:""},videoState:{type:String,default:"ready",enums:["ready ","play","pause"]},loop:{type:[String,Boolean],default:!0},autoplay:{type:[String,Boolean],default:!1},controls:{type:[String,Boolean],default:!0},mute:{type:[String,Boolean],default:!1},displayThumbnail:{type:[String,Boolean],default:!0},ignoreConsent:{type:[String,Boolean],default:!1},hideConsent:{type:[String,Boolean],default:!1},thumbnailSource:{type:String,default:""},consentBlockMessage:{type:String,default:"The video is blocked due to lack of consent to cookies"},consentButtonLabel:{type:String,default:"Edit consents"},aspectRatio:{type:String,default:"16/9"}},watch:{videoState:{handler(e,t){if(e!==t)switch(e){case"play":return this.play();case"pause":return this.pause();default:return}}}},data(){return{ready:!1,thumbnail:null,consents:[]}},computed:{kvassDefined(){return typeof Kvass<"u"},showConsent(){return this.hideConsent||!this.kvassDefined?!1:!this.ignoreConsent&&!this.consents.includes("statistics")},videoId(){if(!this.url)return;let e=this.url,t=[a(e,/https\:\/\/(w{3}\.)?youtube\.com\/watch\?v=(.+)\/?/,{group:2}),a(e,/https\:\/\/(w{3}\.)?youtube\.com\/embed\/(.+)\/?/,{group:2}),a(e,/https\:\/\/(w{3}\.)?youtube\.com\/watch\/(.+)\/?/,{group:2}),a(e,/https\:\/\/(w{3}\.)?youtu\.be\/(.+)\/?/,{group:2})].find(s=>!!s);if(t)return t.split("&")[0]}},methods:{openConsent(){this.kvassDefined&&Kvass.emit("consent:show")},play(){this.player.mute(),this.player.playVideo()},pause(){this.player.pauseVideo()},async init(){const e={loop:this.loop,autoplay:this.autoplay,controls:this.controls,muted:this.mute||this.autoplay,enablejsapi:1,playsinline:1};function t(s){return s==="false"?!1:s==="true"?!0:s}Object.entries(e).map(([s,r])=>e[s]=Number(t(r))),_("https://www.youtube.com/iframe_api"),await S(()=>window.YT&&window.YT.Player,{limit:200}),this.player=new YT.Player(this.$refs.youtubePlayer,{videoId:this.videoId,playerVars:{...e,videoId:this.videoId,origin:window.location.host},events:{onReady:s=>{this.ready=!0,e.mute&&this.player.mute(),e.autoplay&&this.play()}}})}},async mounted(){if(this.displayThumbnail&&(this.thumbnail=!this.thumbnailSource&&this.kvassDefined?`/api/media/thumbnail?url=${this.url}`:this.thumbnailSource),this.ignoreConsent||!this.kvassDefined)return this.init();let e=t=>{if(this.consents=t||[],!(!this.consents||!this.consents.length)&&this.consents.includes("statistics"))return this.init()};this.kvassDefined&&(Kvass.emit("consent:get",t=>e(t)),Kvass.on("consent:change",e))}},C={ref:"youtubePlayer",class:"kvass-media-render-youtube__embed",frameborder:"0",allow:"autoplay; fullscreen;",webkitallowfullscreen:"",mozallowfullscreen:""},T={key:0,class:"widget-kvass-media-render-youtube__blocked"},z={class:"widget-kvass-media-render-youtube__blocked-warning"};function D(e,t,s,r,n,o){return d(),u("div",{class:"widget-kvass-media-render-youtube",style:l(`aspect-ratio: ${s.aspectRatio};`)},[i("div",C,null,512),h(g,{name:"fade",mode:"in-out"},{default:y(()=>[f(i("div",{class:"widget-kvass-media-render-youtube__thumbnail",style:l({backgroundImage:`url(${n.thumbnail})`})},null,4),[[b,!n.ready&&n.thumbnail]])]),_:1}),o.showConsent?(d(),u("div",T,[i("div",z,[w(c(s.consentBlockMessage)+" ",1),i("button",{class:"widget-kvass-media-render-youtube__blocked-warning-button",onClick:t[0]||(t[0]=(...m)=>o.openConsent&&o.openConsent(...m))},c(s.consentButtonLabel),1)])])):v("",!0)],4)}const E=p(x,[["render",D],["styles",[B]]]);customElements.define("kvass-youtube",k(E));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kvass/widgets",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "vite",
|
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
"vue": "^3.4.15",
|
|
17
17
|
"webfontloader": "^1.6.28"
|
|
18
18
|
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
19
22
|
"devDependencies": {
|
|
20
23
|
"@types/webfontloader": "^1.6.38",
|
|
21
24
|
"@vitejs/plugin-vue": "^5.0.3",
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
name: CI
|
|
2
|
-
on:
|
|
3
|
-
push:
|
|
4
|
-
branches:
|
|
5
|
-
- master
|
|
6
|
-
jobs:
|
|
7
|
-
deploy:
|
|
8
|
-
runs-on: ubuntu-20.04
|
|
9
|
-
steps:
|
|
10
|
-
- uses: actions/checkout@v3
|
|
11
|
-
- uses: actions/setup-node@v3
|
|
12
|
-
with:
|
|
13
|
-
node-version: '20'
|
|
14
|
-
- name: Authenticate with private NPM package
|
|
15
|
-
run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc
|
|
16
|
-
- run: npm install
|
|
17
|
-
- name: Release
|
|
18
|
-
env:
|
|
19
|
-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
20
|
-
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
|
21
|
-
run: npx semantic-release
|
package/.prettierrc
DELETED
package/.releaserc
DELETED
package/index.html
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="nb">
|
|
3
|
-
|
|
4
|
-
<head>
|
|
5
|
-
<meta charset="UTF-8" />
|
|
6
|
-
<link rel="icon" type="image/svg+xml" href="favicon.svg" />
|
|
7
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
|
-
<title>Kvass Web Components</title>
|
|
9
|
-
</head>
|
|
10
|
-
|
|
11
|
-
<body
|
|
12
|
-
style="font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;">
|
|
13
|
-
<!-- <kvass-contact
|
|
14
|
-
account-url="https://local.kvass.test"
|
|
15
|
-
label-subtitle="Ønsker du å motta vårt nyhetsbrev?"
|
|
16
|
-
tags="Test side"
|
|
17
|
-
upsell
|
|
18
|
-
references="Residential:630f5c19ffd25600331dcd05"
|
|
19
|
-
default-assignees="630f5c19ffd25600331dcc06,627181d6009b8f0022b09ac8"
|
|
20
|
-
/>
|
|
21
|
-
|
|
22
|
-
<script type="module" src="/src/contact/main.js"></script> -->
|
|
23
|
-
|
|
24
|
-
<!-- <kvass-img-comparison-slider
|
|
25
|
-
first-image="https://assets.lastdodo.com/image/ld_medium/plain/assets/catalog/assets/2013/12/2/2/8/7/pdf_287e8674-5b0f-11e3-90d5-a6d2687aed80.jpg,First image"
|
|
26
|
-
second-image="https://seeklogo.com/images/I/Ilguciema_Kvass-logo-227537F6D4-seeklogo.com.png,Second imanr bge"
|
|
27
|
-
options="keyboard:disabled,direction:vertical"></kvass-img-comparison-slider>
|
|
28
|
-
|
|
29
|
-
<script type="module" src="/src/img-comparison-slider/main.js"></script> -->
|
|
30
|
-
<!-- <kvass-map coordinates="10.745,59.9123" address="Klokkergårdveien 5, 1711 Sarpsborg" show-address /> -->
|
|
31
|
-
<!-- <kvass-flatfinder project-url="https://alvebergtunet.production.kvass.no" project-id="65a4f48ed1ba5cd61468f235"
|
|
32
|
-
path-prefix="/residential" />
|
|
33
|
-
<script type="module" src="/dist/flatfinder.js"></script> -->
|
|
34
|
-
<kvass-font-selector></kvass-font-selector>
|
|
35
|
-
<script type="module" src="/src/font-selector/main.js"></script>
|
|
36
|
-
</body>
|
|
37
|
-
|
|
38
|
-
</html>
|
package/src/contact/README.md
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
# kvass-contact
|
|
2
|
-
|
|
3
|
-
A simple, embeddable Web Component for sending leads to Kvass.
|
|
4
|
-
|
|
5
|
-
`https://unpkg.com/@kvass/widgets@latest/dist/contact.js`
|
|
6
|
-
|
|
7
|
-
## Develop
|
|
8
|
-
|
|
9
|
-
To run in development mode, first install the neccessary packages.
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
npm install
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Then, run in development mode.
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
npm run dev
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Open `localhost:3000` in the browser of your choice, and you will see the form widget.
|
|
22
|
-
|
|
23
|
-
## Build
|
|
24
|
-
|
|
25
|
-
To build the widget for production, run `build` instead of `dev`.
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
npm run build
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
To use the widget, use the `<kvass-contact />` element as shown here.
|
|
32
|
-
|
|
33
|
-
```html
|
|
34
|
-
<kvass-contact account-url="https://example.kvass.no" />
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Props
|
|
38
|
-
|
|
39
|
-
The component has several props for easy configuration.
|
|
40
|
-
|
|
41
|
-
| Name | Type | Description | Default |
|
|
42
|
-
| :--------------------- | :------ | :--------------------------------------------------------------------------------------- | :-------------------------------------- |
|
|
43
|
-
| account-url `required` | String | Account URL where data will be sent. | |
|
|
44
|
-
| references `required` | String | Comma-separated list of references in {type}:{id} format | |
|
|
45
|
-
| default-assignees | String | Comma-separated list of userIds. Used as fallback assignees of the created task in Kvass | |
|
|
46
|
-
| projects | String | Comma-separated list of project ids. If not defined, a selection field will show | |
|
|
47
|
-
| tags | String | Comma-separated list of tags | |
|
|
48
|
-
| upsell | Boolean | If `true`, shows a checkbox for upsell | `false` |
|
|
49
|
-
| label-title | String | Title of the lead form | `"Meld interesse"` |
|
|
50
|
-
| label-subtitle | String | Optional subtitle shown under form title | |
|
|
51
|
-
| label-submit | String | Label for the submit button | `"Meld interesse"` |
|
|
52
|
-
| privacy-url | String | Optional URL to privacy statement | `{accountUrl}/api/legal/privacy/tenant` |
|
|
53
|
-
| label-success | String | Message displayed after submit | `"Takk for interessen!"` |
|
|
54
|
-
| success-theme | String | Success theme, enums: ['default', 'overlay'] | `"default"` |
|
|
55
|
-
| submit-timeout | Number | Delay on submit reset | `2000` |
|
|
56
|
-
|
|
57
|
-
## Styling
|
|
58
|
-
|
|
59
|
-
The widget's styles are based on CSS custom properties, and can be overwritten.
|
|
60
|
-
These are the available CSS variables.
|
|
61
|
-
|
|
62
|
-
| Name | Description | Default |
|
|
63
|
-
| :------------------------------- | :---------------------------------------------------------- | :------------ |
|
|
64
|
-
| --kvass-contact-background | The form's background color | `#ffffff` |
|
|
65
|
-
| --kvass-contact-spacing | Base spacing amount. Other amounts are calculated from this | `2rem` |
|
|
66
|
-
| --kvass-contact-padding | Outer padding of the form element | `2rem` |
|
|
67
|
-
| --kvass-contact-max-width | Max width of the form | `720px` |
|
|
68
|
-
| --kvass-contact-border-radius | Base border-radius | `4px` |
|
|
69
|
-
| --kvass-contact-border-color | Color of the borders of the form fields | `#eaeaea` |
|
|
70
|
-
| --kvass-contact-border-width | Border-width for input fields | `1px` |
|
|
71
|
-
| --kvass-contact-color | Base text color | `#222222` |
|
|
72
|
-
| --kvass-contact-color-inverted | Inverted text color. Used for the submit button | `#ffffff` |
|
|
73
|
-
| --kvass-contact-primary | Primary color. Used for submit button and form elements | `#1d56d8` |
|
|
74
|
-
| --kvass-contact-error | Error color. Used for error states | `#d81d1d` |
|
|
75
|
-
| --kvass-contact-grid-columns | Amount of columns in the form | `1` |
|
|
76
|
-
| --kvass-contact-disabled | Background color on disabled button | `#eaeaea` |
|
|
77
|
-
| --kvass-contact-input-background | Background color for input fields | `transparent` |
|
|
78
|
-
| --kvass-contact-outline-width | Width of focus outline | `2px` |
|
|
79
|
-
| --kvass-contact-outline-offset | Offset between the form control and its outline | `0px` |
|
|
80
|
-
| --kvass-contact-checkbox-size | Size of checkboxes | `1em` |
|
package/src/contact/api.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
function createLead(url, data, projects, defaultAssignees) {
|
|
2
|
-
if (projects && projects instanceof Array && projects.length) {
|
|
3
|
-
return Promise.all(
|
|
4
|
-
projects.map((p) => {
|
|
5
|
-
let projectRef = { onModel: 'Project', ref: p }
|
|
6
|
-
return createLead(url, {
|
|
7
|
-
...data,
|
|
8
|
-
project: p,
|
|
9
|
-
references: [projectRef, ...data.references],
|
|
10
|
-
})
|
|
11
|
-
}),
|
|
12
|
-
)
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
if (!projects?.length && defaultAssignees?.length) {
|
|
16
|
-
return createContact(
|
|
17
|
-
url,
|
|
18
|
-
{ ...data.contact, assignees: defaultAssignees },
|
|
19
|
-
data.comment,
|
|
20
|
-
)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return fetch(`${url}/api/graphql`, {
|
|
24
|
-
method: 'POST',
|
|
25
|
-
headers: {
|
|
26
|
-
'Content-Type': 'application/json',
|
|
27
|
-
},
|
|
28
|
-
body: JSON.stringify({
|
|
29
|
-
query: `
|
|
30
|
-
mutation ($data: LeadCreate!) {
|
|
31
|
-
LeadCreate(data: $data) {
|
|
32
|
-
id
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
`,
|
|
36
|
-
variables: { data },
|
|
37
|
-
}),
|
|
38
|
-
}).then((res) => res.json())
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function createContact(url, data, comment) {
|
|
42
|
-
return fetch(`${url}/api/graphql`, {
|
|
43
|
-
method: 'POST',
|
|
44
|
-
headers: {
|
|
45
|
-
'Content-Type': 'application/json',
|
|
46
|
-
},
|
|
47
|
-
body: JSON.stringify({
|
|
48
|
-
query: `
|
|
49
|
-
mutation ($data: ContactInput!, $comment: String) {
|
|
50
|
-
ContactCreate(data: $data, comment: $comment) {
|
|
51
|
-
id
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
`,
|
|
55
|
-
variables: { data, comment },
|
|
56
|
-
}),
|
|
57
|
-
}).then((res) => res.json())
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function getProjects(url) {
|
|
61
|
-
return fetch(`${url}/api/graphql`, {
|
|
62
|
-
method: 'POST',
|
|
63
|
-
headers: {
|
|
64
|
-
'Content-Type': 'application/json',
|
|
65
|
-
},
|
|
66
|
-
body: JSON.stringify({
|
|
67
|
-
query: `
|
|
68
|
-
query {
|
|
69
|
-
Projects {
|
|
70
|
-
id
|
|
71
|
-
name
|
|
72
|
-
isPublished
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
`,
|
|
76
|
-
}),
|
|
77
|
-
})
|
|
78
|
-
.then((res) => res.json())
|
|
79
|
-
.then((res) => res.data.Projects.filter((d) => d.isPublished))
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export { createLead, createContact, getProjects }
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
export default {
|
|
3
|
-
// disable attrs on root element
|
|
4
|
-
inheritAttrs: false,
|
|
5
|
-
}
|
|
6
|
-
</script>
|
|
7
|
-
|
|
8
|
-
<script setup>
|
|
9
|
-
const emit = defineEmits(['update:modelValue'])
|
|
10
|
-
const props = defineProps({
|
|
11
|
-
modelValue: [Boolean, Array],
|
|
12
|
-
state: String,
|
|
13
|
-
label: String,
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
function onChange(ev) {
|
|
17
|
-
if (typeof props.modelValue === 'boolean')
|
|
18
|
-
return emit('update:modelValue', ev.target.checked)
|
|
19
|
-
return emit(
|
|
20
|
-
'update:modelValue',
|
|
21
|
-
ev.target.checked
|
|
22
|
-
? [...props.modelValue, props.state]
|
|
23
|
-
: props.modelValue.filter((v) => v !== props.state),
|
|
24
|
-
)
|
|
25
|
-
}
|
|
26
|
-
</script>
|
|
27
|
-
|
|
28
|
-
<template>
|
|
29
|
-
<label
|
|
30
|
-
class="kvass-contact-checkbox"
|
|
31
|
-
:class="[
|
|
32
|
-
{ 'kvass-contact-checkbox--required': 'required' in $attrs },
|
|
33
|
-
$attrs.class,
|
|
34
|
-
]"
|
|
35
|
-
>
|
|
36
|
-
<input
|
|
37
|
-
class="kvass-contact-checkbox__element"
|
|
38
|
-
type="checkbox"
|
|
39
|
-
v-bind="$attrs"
|
|
40
|
-
:value="modelValue"
|
|
41
|
-
:checked="$attrs.checked"
|
|
42
|
-
@change="onChange"
|
|
43
|
-
/>
|
|
44
|
-
<span class="kvass-contact-checkbox__label" v-html="label"></span>
|
|
45
|
-
</label>
|
|
46
|
-
</template>
|
|
47
|
-
|
|
48
|
-
<style lang="scss">
|
|
49
|
-
.kvass-contact-checkbox {
|
|
50
|
-
display: flex;
|
|
51
|
-
align-items: start;
|
|
52
|
-
gap: 0.75rem;
|
|
53
|
-
cursor: pointer;
|
|
54
|
-
|
|
55
|
-
&__element {
|
|
56
|
-
cursor: inherit;
|
|
57
|
-
|
|
58
|
-
margin: 0;
|
|
59
|
-
appearance: none;
|
|
60
|
-
background-color: var(--kvass-contact-input-background);
|
|
61
|
-
flex-shrink: 0;
|
|
62
|
-
|
|
63
|
-
font: inherit;
|
|
64
|
-
color: currentColor;
|
|
65
|
-
width: var(
|
|
66
|
-
--kvass-contact-checkbox-size,
|
|
67
|
-
var(--kvass-contact-default-checkbox-size)
|
|
68
|
-
);
|
|
69
|
-
aspect-ratio: 1;
|
|
70
|
-
border: var(
|
|
71
|
-
--kvass-contact-checkbox-border-width,
|
|
72
|
-
var(--kvass-contact-default-checkbox-border-width)
|
|
73
|
-
)
|
|
74
|
-
solid currentColor;
|
|
75
|
-
border-radius: var(
|
|
76
|
-
--kvass-contact-checkbox-border-radius,
|
|
77
|
-
var(--kvass-contact-default-checkbox-border-radius)
|
|
78
|
-
);
|
|
79
|
-
|
|
80
|
-
&:focus-visible {
|
|
81
|
-
outline: var(
|
|
82
|
-
--kvass-contact-outline-width,
|
|
83
|
-
var(--kvass-contact-default-outline-width)
|
|
84
|
-
)
|
|
85
|
-
solid var(--kvass-contact-color, var(--kvass-contact-default-color));
|
|
86
|
-
outline-offset: var(
|
|
87
|
-
--kvass-contact-outline-offset,
|
|
88
|
-
var(--kvass-contact-default-outline-offset)
|
|
89
|
-
);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
&:checked {
|
|
93
|
-
position: relative;
|
|
94
|
-
background-color: var(
|
|
95
|
-
--kvass-contact-primary,
|
|
96
|
-
var(--kvass-contact-default-primary)
|
|
97
|
-
);
|
|
98
|
-
border-color: var(
|
|
99
|
-
--kvass-contact-primary,
|
|
100
|
-
var(--kvass-contact-default-primary)
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
&::before {
|
|
104
|
-
content: '✓';
|
|
105
|
-
font-size: 0.75em;
|
|
106
|
-
position: absolute;
|
|
107
|
-
top: 50%;
|
|
108
|
-
left: 50%;
|
|
109
|
-
translate: -50% -50%;
|
|
110
|
-
|
|
111
|
-
color: var(
|
|
112
|
-
--kvass-contact-color-inverted,
|
|
113
|
-
var(--kvass-contact-default-color-inverted)
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
&--required {
|
|
120
|
-
span:after {
|
|
121
|
-
content: '*';
|
|
122
|
-
color: var(--kvass-contact-error, var(--kvass-contact-default-error));
|
|
123
|
-
margin-left: 0.3rem;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
</style>
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
export default {
|
|
3
|
-
// disable attrs on root element
|
|
4
|
-
inheritAttrs: false,
|
|
5
|
-
}
|
|
6
|
-
</script>
|
|
7
|
-
|
|
8
|
-
<script setup>
|
|
9
|
-
import { computed, ref } from 'vue';
|
|
10
|
-
|
|
11
|
-
const emit = defineEmits(['update:modelValue'])
|
|
12
|
-
const props = defineProps({
|
|
13
|
-
modelValue: [String, Array],
|
|
14
|
-
label: String,
|
|
15
|
-
type: String,
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
const component = computed(() => {
|
|
19
|
-
switch (props.type) {
|
|
20
|
-
case 'textarea':
|
|
21
|
-
return 'textarea'
|
|
22
|
-
case 'select':
|
|
23
|
-
return 'select'
|
|
24
|
-
default:
|
|
25
|
-
return 'input'
|
|
26
|
-
}
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
const focused = ref(false)
|
|
30
|
-
const blurred = ref(false)
|
|
31
|
-
|
|
32
|
-
function onInput(event) {
|
|
33
|
-
emit('update:modelValue', event.target.value)
|
|
34
|
-
focused.value = true
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function onBlur() {
|
|
38
|
-
if (!focused.value) return
|
|
39
|
-
blurred.value = true
|
|
40
|
-
}
|
|
41
|
-
</script>
|
|
42
|
-
|
|
43
|
-
<template>
|
|
44
|
-
<label
|
|
45
|
-
class="kvass-contact-field"
|
|
46
|
-
:class="[
|
|
47
|
-
{
|
|
48
|
-
'kvass-contact-field--required': 'required' in $attrs,
|
|
49
|
-
'kvass-contact-field--focused': blurred,
|
|
50
|
-
},
|
|
51
|
-
$attrs.class,
|
|
52
|
-
]"
|
|
53
|
-
:for="$attrs.id"
|
|
54
|
-
>
|
|
55
|
-
<span class="kvass-contact-field__label" v-if="label">{{ label }}</span>
|
|
56
|
-
<component
|
|
57
|
-
:is="component"
|
|
58
|
-
class="kvass-contact-field__element"
|
|
59
|
-
v-bind="$attrs"
|
|
60
|
-
:value="modelValue"
|
|
61
|
-
@input="onInput"
|
|
62
|
-
@blur="onBlur"
|
|
63
|
-
>
|
|
64
|
-
<slot />
|
|
65
|
-
</component>
|
|
66
|
-
</label>
|
|
67
|
-
</template>
|
|
68
|
-
|
|
69
|
-
<style lang="scss">
|
|
70
|
-
.kvass-contact-field {
|
|
71
|
-
display: flex;
|
|
72
|
-
flex-direction: column;
|
|
73
|
-
gap: 0.3rem;
|
|
74
|
-
|
|
75
|
-
&__label {
|
|
76
|
-
margin-left: var(--kvass-contact-label-transform, 0);
|
|
77
|
-
font-weight: var(--kvass-contact-label-weight, initial);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
input {
|
|
81
|
-
-webkit-appearance: none;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
&__element {
|
|
85
|
-
padding: calc(
|
|
86
|
-
var(--kvass-contact-spacing, var(--kvass-contact-default-spacing)) / 2
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
padding-left: var(
|
|
90
|
-
--kvass-contact-field-input-tranform,
|
|
91
|
-
calc(
|
|
92
|
-
var(--kvass-contact-spacing, var(--kvass-contact-default-spacing)) / 2
|
|
93
|
-
)
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
border-radius: var(
|
|
97
|
-
--kvass-contact-border-radius,
|
|
98
|
-
var(--kvass-contact-default-border-radius)
|
|
99
|
-
);
|
|
100
|
-
border: var(
|
|
101
|
-
--kvass-contact-border-width,
|
|
102
|
-
var(--kvass-contact-default-border-width)
|
|
103
|
-
)
|
|
104
|
-
solid
|
|
105
|
-
var(
|
|
106
|
-
--kvass-contact-border-color,
|
|
107
|
-
var(--kvass-contact-default-border-color)
|
|
108
|
-
);
|
|
109
|
-
resize: vertical;
|
|
110
|
-
font: inherit;
|
|
111
|
-
color: inherit;
|
|
112
|
-
background-color: var(
|
|
113
|
-
--kvass-contact-input-background,
|
|
114
|
-
var(--kvass-contact-default-input-background)
|
|
115
|
-
);
|
|
116
|
-
|
|
117
|
-
&:focus-visible {
|
|
118
|
-
outline: var(
|
|
119
|
-
--kvass-contact-outline-width,
|
|
120
|
-
var(--kvass-contact-default-outline-width)
|
|
121
|
-
)
|
|
122
|
-
solid var(--kvass-contact-color, var(--kvass-contact-default-color));
|
|
123
|
-
|
|
124
|
-
outline-offset: var(
|
|
125
|
-
--kvass-contact-outline-offset,
|
|
126
|
-
var(--kvass-contact-default-outline-offset)
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
&--required {
|
|
132
|
-
.kvass-contact-field__label::after {
|
|
133
|
-
content: '*';
|
|
134
|
-
color: var(--kvass-contact-error, var(--kvass-contact-default-error));
|
|
135
|
-
margin-left: 0.3rem;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
&.kvass-contact-field--focused {
|
|
139
|
-
.kvass-contact-field__element:invalid {
|
|
140
|
-
border-color: var(
|
|
141
|
-
--kvass-contact-error,
|
|
142
|
-
var(--kvass-contact-default-error)
|
|
143
|
-
);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
&--full-width {
|
|
149
|
-
grid-column-end: span
|
|
150
|
-
var(
|
|
151
|
-
--kvass-contact-grid-columns,
|
|
152
|
-
var(--kvass-contact-default-grid-columns)
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
</style>
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
<script setup>
|
|
2
|
-
defineProps({
|
|
3
|
-
label: String,
|
|
4
|
-
})
|
|
5
|
-
</script>
|
|
6
|
-
|
|
7
|
-
<template>
|
|
8
|
-
<fieldset class="kvass-contact-fieldset">
|
|
9
|
-
<legend class="kvass-contact-fieldset__label" v-if="label">
|
|
10
|
-
{{ label }}
|
|
11
|
-
</legend>
|
|
12
|
-
<slot />
|
|
13
|
-
</fieldset>
|
|
14
|
-
</template>
|
|
15
|
-
|
|
16
|
-
<style lang="scss">
|
|
17
|
-
.kvass-contact-fieldset {
|
|
18
|
-
position: relative;
|
|
19
|
-
display: flex;
|
|
20
|
-
flex-direction: column;
|
|
21
|
-
gap: calc(
|
|
22
|
-
var(--kvass-contact-spacing, var(--kvass-contact-default-spacing)) / 4
|
|
23
|
-
);
|
|
24
|
-
margin: calc(
|
|
25
|
-
var(--kvass-contact-spacing, var(--kvass-contact-default-spacing)) / 1.5
|
|
26
|
-
)
|
|
27
|
-
0 0 0;
|
|
28
|
-
padding: calc(
|
|
29
|
-
var(--kvass-contact-spacing, var(--kvass-contact-default-spacing)) / 2
|
|
30
|
-
);
|
|
31
|
-
border-radius: var(
|
|
32
|
-
--kvass-contact-border-radius,
|
|
33
|
-
var(--kvass-contact-default-border-radius)
|
|
34
|
-
);
|
|
35
|
-
border: var(
|
|
36
|
-
--kvass-contact-border-width,
|
|
37
|
-
var(--kvass-contact-default-border-width)
|
|
38
|
-
)
|
|
39
|
-
solid
|
|
40
|
-
var(--kvass-contact-border-color, var(--kvass-contact-default-border-color));
|
|
41
|
-
font: inherit;
|
|
42
|
-
|
|
43
|
-
&:focus-visible {
|
|
44
|
-
outline: var(
|
|
45
|
-
--kvass-contact-outline-width,
|
|
46
|
-
var(--kvass-contact-default-outline-width)
|
|
47
|
-
)
|
|
48
|
-
solid var(--kvass-contact-color, var(--kvass-contact-default-color));
|
|
49
|
-
outline-offset: var(
|
|
50
|
-
--kvass-contact-outline-offset,
|
|
51
|
-
var(--kvass-contact-default-outline-offset)
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
&__label {
|
|
56
|
-
margin: 0;
|
|
57
|
-
padding: 0;
|
|
58
|
-
position: absolute;
|
|
59
|
-
top: -1.4rem;
|
|
60
|
-
left: 0;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
</style>
|