diff --git a/docs/assets/AIPlatformWijzerPage.a39598dd.js b/docs/assets/AIPlatformWijzerPage.a39598dd.js new file mode 100644 index 0000000..c15a1a3 --- /dev/null +++ b/docs/assets/AIPlatformWijzerPage.a39598dd.js @@ -0,0 +1 @@ +import{_ as S,a as x,b as j,c as I,d as L,e as A,f as T,g as B,h as P,i as U,j as D}from"./wandb_logo.127f2d59.js";import{Q as n,a as g}from"./QCard.eb99e114.js";import{Q as f,a as y}from"./QCardActions.638d9df6.js";import{a as q,u as C,_ as Q,n as z,l as i,p as h,q as t,t as l,k as s,aw as b,ab as r,m as _,ac as v,F as k,v as m,Q as N}from"./index.ab4869ca.js";import{Q as V}from"./QPage.d12e44a1.js";import{u as R}from"./answerStore.972bc172.js";import{T as F}from"./ToolQuestionItem.708210ee.js";import{u as W}from"./vue-i18n.db8d47ce.js";import"./format.43d1c739.js";import"./scroll.270b929d.js";import"./QKnob.9e532b29.js";const E=q({name:"ResultCard",components:{ToolQuestionItem:F},props:{result:{type:Object}},setup(e,{emit:a}){const u=R(),p=C();return{props:e,emit:a,router:p,removeResult:d=>{u.results=u.results.filter(o=>o.id!==d)},goToResult:d=>{p.push({name:"result",query:{result_id:d}})}}}}),O={class:"text-center full-width q-mt-sm"},G={class:"text-weight-bolder"},H={style:{"font-size":"x-small"}},J={class:"text-weight-bolder"};function K(e,a,u,p,w,c){const d=z("tool-question-item");return i(),h(g,{class:"card"},{default:t(()=>[l("div",null,[s(b,{style:{position:"absolute","z-index":"100"},push:"",onClick:a[0]||(a[0]=o=>e.removeResult(e.result.id)),color:"negative",icon:"clear",round:"",size:"sm"}),s(b,{round:"",style:{position:"absolute","z-index":"100",right:"0"},"no-caps":"",onClick:a[1]||(a[1]=o=>e.goToResult(e.result.id)),push:"",color:"primary",icon:"arrow_right"})]),l("div",O,[l("div",G,r(new Date(e.result.timestamp).toLocaleDateString("en-CA",{year:"numeric",month:"2-digit",day:"2-digit"})),1),l("span",H,r(e.result.id),1),s(f,{inset:"",dense:""})]),s(n,{class:"row justify-around",disable:!0},{default:t(()=>[(i(!0),_(k,null,v(e.result.top_3,(o,$)=>(i(),_("div",{key:$,class:"col-md-3 col-sm-6 col-xs-6 text-center justify-center"},[s(d,{tool:o,"no-hover":"",size:"70px"},null,8,["tool"]),l("div",J,r($+1),1)]))),128))]),_:1})]),_:1})}var M=Q(E,[["render",K]]);const X=q({name:"AIPlatformWijzerPage",components:{ResultCard:M},setup(){const{t:e}=W(),a=C(),u=R();return u.resetQuiz(),{router:a,t:e,getImgUrl:c=>new URL({"../assets/small/azureml_logo.png":S,"../assets/small/clearml_logo.png":x,"../assets/small/dagshub_logo.png":j,"../assets/small/databricks_logo.png":I,"../assets/small/datarobot_logo.png":L,"../assets/small/h2o_logo.png":A,"../assets/small/kubeflow_logo.png":T,"../assets/small/mlflow_logo.png":B,"../assets/small/sagemaker_logo.png":P,"../assets/small/vertex_logo.png":U,"../assets/small/wandb_logo.png":D}[`../assets/small/${c}`],self.location).href,answerStore:u,openLink:c=>{window.open(c,"_blank")}}}}),Y={class:"row"},Z={class:"col-md-6 col-sm-12 col-xs-12"},ee={class:"col-md-6 col-sm-12 col-xs-12"},se={class:"col-md-6 col-sm-12 col-xs-12"},te={class:"flex justify-center"},oe={class:"flex"},le=["onClick"],ae=["src"];function re(e,a,u,p,w,c){const d=z("result-card");return i(),h(V,null,{default:t(()=>[l("div",Y,[l("div",Z,[s(g,{class:"q-ma-md card q-pa-md"},{default:t(()=>[s(n,{class:"text-h5 text-weight-bolder"},{default:t(()=>[m(r(e.$t("home.introduction.title")),1)]),_:1}),s(f,{inset:""}),s(n,null,{default:t(()=>[l("p",null,r(e.$t("home.introduction.text")),1),l("p",null,r(e.$t("home.introduction.tutorial")),1)]),_:1}),s(y,{align:"center"},{default:t(()=>[s(b,{push:"",rounded:"","no-caps":"",class:"float-center",color:"accent",label:e.$t("home.introduction.btn.start"),onClick:a[0]||(a[0]=o=>e.router.push("/quiz"))},null,8,["label"])]),_:1})]),_:1})]),l("div",ee,[s(g,{class:"q-ma-md card q-pa-md"},{default:t(()=>[s(n,{class:"text-h5 text-weight-bolder"},{default:t(()=>[m(r(e.$t("home.about.title")),1)]),_:1}),s(f,{inset:""}),s(n,null,{default:t(()=>[m(r(e.$t("home.about.text")),1)]),_:1}),s(y,null,{default:t(()=>[s(b,{rounded:"",push:"","no-caps":"",color:"primary",onClick:a[1]||(a[1]=o=>e.openLink("https://www.saxion.edu/business-and-research/research/smart-industry/ambient-intelligence")),label:e.$t("home.about.btn.more_info")},null,8,["label"])]),_:1})]),_:1}),l("div",se,[s(g,{class:"q-ma-md card q-pa-md"},{default:t(()=>[s(n,{class:"text-h5 text-weight-bolder"},{default:t(()=>[m(r(e.$t("home.results.title")),1)]),_:1}),s(f,{inset:""}),e.answerStore.results.length===0?(i(),h(n,{key:0},{default:t(()=>[m(r(e.$t("home.results.no_results")),1)]),_:1})):(i(),h(n,{key:1,class:"row q-col-gutter-sm"},{default:t(()=>[(i(!0),_(k,null,v(e.answerStore.results,o=>(i(),_("div",{key:o.id,class:"col-md-6 col-sm-12 col-xs-12"},[l("div",te,[s(d,{result:o},null,8,["result"])])]))),128))]),_:1}))]),_:1})]),s(g,{class:"q-ma-md card q-pa-md"},{default:t(()=>[s(n,{class:"text-h5 text-weight-bolder"},{default:t(()=>[m(r(e.$t("home.tools.title")),1)]),_:1}),s(f,{inset:""}),s(n,null,{default:t(()=>[l("div",oe,[(i(!0),_(k,null,v(e.answerStore.tools,o=>(i(),_("div",{key:o.id,class:"q-ma-sm text-weight-bolder cursor-pointer",onClick:$=>e.openLink(o.link)},[s(N,{square:""},{default:t(()=>[l("img",{src:e.getImgUrl(o.img_link)},null,8,ae)]),_:2},1024),m(" "+r(o.title),1)],8,le))),128))])]),_:1})]),_:1})])])]),_:1})}var be=Q(X,[["render",re]]);export{be as default}; diff --git a/docs/assets/AIPlatformWijzerPage.cbf73174.js b/docs/assets/AIPlatformWijzerPage.cbf73174.js deleted file mode 100644 index a3bf749..0000000 --- a/docs/assets/AIPlatformWijzerPage.cbf73174.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as A,a as Q,b as S,c as I,d as R,e as D,f as L,g as T,h as P,i as B,j as M}from"./wandb_logo.43daca0d.js";import{Q as l,a as _}from"./use-form.ff3f77cb.js";import{Q as p,a as j}from"./QCardActions.06a548c9.js";import{a as y,u as $,_ as q,c as x,o as r,e as f,w as s,g as a,f as e,Q as b,L as h,M as c,N as w,O as k,h as d,P as N}from"./index.0ed11181.js";import{Q as U}from"./QPage.9c21063d.js";import{u as C}from"./answerStore.1c70fbbb.js";import{T as O}from"./ToolQuestionItem.7d4396e6.js";import"./QKnob.af0fb19d.js";import"./scroll.f78dc32b.js";const V=y({name:"ResultCard",components:{ToolQuestionItem:O},props:{result:{type:Object}},setup(t,{emit:n}){const m=C(),g=$();return{props:t,emit:n,router:g,removeResult:i=>{m.results=m.results.filter(o=>o.id!==i)},goToResult:i=>{g.push({name:"result",query:{result_id:i}})}}}}),W={class:"text-center full-width q-mt-sm"},E={class:"text-weight-bolder"},F={style:{"font-size":"x-small"}},G={class:"text-weight-bolder"};function H(t,n,m,g,u,z){const i=x("tool-question-item");return r(),f(_,{class:"card"},{default:s(()=>[a("div",null,[e(b,{style:{position:"absolute","z-index":"100"},push:"",onClick:n[0]||(n[0]=o=>t.removeResult(t.result.id)),color:"negative",icon:"clear",round:"",size:"sm"}),e(b,{round:"",style:{position:"absolute","z-index":"100",right:"0"},"no-caps":"",onClick:n[1]||(n[1]=o=>t.goToResult(t.result.id)),push:"",color:"primary",icon:"arrow_right"})]),a("div",W,[a("div",E,h(new Date(t.result.timestamp).toLocaleDateString("en-CA",{year:"numeric",month:"2-digit",day:"2-digit"})),1),a("span",F,h(t.result.id),1),e(p,{inset:"",dense:""})]),e(l,{class:"row justify-around",disable:!0},{default:s(()=>[(r(!0),c(k,null,w(t.result.top_3,(o,v)=>(r(),c("div",{key:v,class:"col-md-3 col-sm-6 col-xs-6 text-center justify-center"},[e(i,{tool:o,"no-hover":"",size:"70px"},null,8,["tool"]),a("div",G,h(v+1),1)]))),128))]),_:1})]),_:1})}var J=q(V,[["render",H]]);const K=y({name:"AIPlatformWijzerPage",components:{ResultCard:J},setup(){const t=$(),n=C();return n.resetQuiz(),{router:t,getImgUrl:u=>new URL({"../assets/small/azureml_logo.png":A,"../assets/small/clearml_logo.png":Q,"../assets/small/dagshub_logo.png":S,"../assets/small/databricks_logo.png":I,"../assets/small/datarobot_logo.png":R,"../assets/small/h2o_logo.png":D,"../assets/small/kubeflow_logo.png":L,"../assets/small/mlflow_logo.png":T,"../assets/small/sagemaker_logo.png":P,"../assets/small/vertex_logo.png":B,"../assets/small/wandb_logo.png":M}[`../assets/small/${u}`],self.location).href,answerStore:n,openLink:u=>{window.open(u,"_blank")}}}}),X={class:"row"},Y={class:"col-md-6 col-sm-12 col-xs-12"},Z=a("p",null," Welkom bij de AI platformwijzer! Als u hier bent beland, dan bent u hoogstwaarschijnlijk op zoek naar d\xE9 datapipeline tool voor uw organisatie. Goed nieuws, daarvoor bent u hier aan het goede adres! ",-1),ee=a("p",null," Als u op onderstaande knop klikt, krijg je een aantal vragen die ons helpen te bepalen wat je nodig hebt. De vragen vari\xEBren van de aard van de dataverwerking, schaalbaarheid, gewenste functionaliteiten tot de mate van ervaring met verschillende tools en programmeertalen. Op basis van de verzamelde antwoorden en een geavanceerd algoritme, wordt een gedetailleerde aanbeveling gegenereerd die aangeeft welk dataplatform het beste aansluit bij de specifieke kenmerken en vereisten van de gebruiker. De aanbeveling omvat toonaangevende dataplatformen, zoals Amazon SageMaker, Databricks, Microsoft Azure Machine Learning, en andere relevante platforms. U krijgt niet alleen een passend dataplatform aangereikt, maar ook nuttige informatie en richtlijnen over waarom dit platform het beste bij uw behoefte past, waardoor u weloverwogen beslissingen kunt nemen voor uw data-analyse- en machine learning-projecten. ",-1),te=a("p",null,"Succes!",-1),se={class:"col-md-6 col-sm-12 col-xs-12"},oe={class:"col-md-6 col-sm-12 col-xs-12"},ae={class:"flex justify-center"},ne={class:"flex"},le=["onClick"],re=["src"];function ie(t,n,m,g,u,z){const i=x("result-card");return r(),f(U,null,{default:s(()=>[a("div",X,[a("div",Y,[e(_,{class:"q-ma-md card q-pa-md"},{default:s(()=>[e(l,{class:"text-h5 text-weight-bolder"},{default:s(()=>[d("De Quiz")]),_:1}),e(p,{inset:""}),e(l,null,{default:s(()=>[Z,ee,te]),_:1}),e(j,{align:"center"},{default:s(()=>[e(b,{push:"",rounded:"","no-caps":"",class:"float-center",color:"accent",label:"Start de quiz",onClick:n[0]||(n[0]=o=>t.router.push("/quiz"))})]),_:1})]),_:1})]),a("div",se,[e(_,{class:"q-ma-md card q-pa-md"},{default:s(()=>[e(l,{class:"text-h5 text-weight-bolder"},{default:s(()=>[d("Over het Ambient Intelligence Lectoraat")]),_:1}),e(p,{inset:""}),e(l,null,{default:s(()=>[d(" Deze tool is ontwikkeld door de onderzoeksgroep Ambient Intelligence. Ambiente Intelligentie maakt omgevingen slim. De onderzoeksgroep richt zich voornamelijk op toepassingen die verband houden met veiligheid, sport en slimme industrie. Veiligheidsprojecten worden vaak in samenwerking met de brandweer uitgevoerd. In deze projecten zijn oplossingen ontwikkeld om te bepalen waar een brandweerman zich bevindt in gebouwen zonder infrastructuur met sensoren.")]),_:1}),e(j,null,{default:s(()=>[e(b,{rounded:"",push:"","no-caps":"",color:"primary",onClick:n[1]||(n[1]=o=>t.openLink("https://www.saxion.edu/business-and-research/research/smart-industry/ambient-intelligence")),label:"Meer informatie"})]),_:1})]),_:1}),a("div",oe,[e(_,{class:"q-ma-md card q-pa-md"},{default:s(()=>[e(l,{class:"text-h5 text-weight-bolder"},{default:s(()=>[d("Resultaten")]),_:1}),e(p,{inset:""}),t.answerStore.results.length===0?(r(),f(l,{key:0},{default:s(()=>[d(" Nog geen resultaten!")]),_:1})):(r(),f(l,{key:1,class:"row q-col-gutter-sm"},{default:s(()=>[(r(!0),c(k,null,w(t.answerStore.results,o=>(r(),c("div",{key:o.id,class:"col-md-6 col-sm-12 col-xs-12"},[a("div",ae,[e(i,{result:o},null,8,["result"])])]))),128))]),_:1}))]),_:1})]),e(_,{class:"q-ma-md card q-pa-md"},{default:s(()=>[e(l,{class:"text-h5 text-weight-bolder"},{default:s(()=>[d("De Tools")]),_:1}),e(p,{inset:""}),e(l,null,{default:s(()=>[a("div",ne,[(r(!0),c(k,null,w(t.answerStore.tools,o=>(r(),c("div",{key:o.id,class:"q-ma-sm text-weight-bolder cursor-pointer",onClick:v=>t.openLink(o.link)},[e(N,{square:""},{default:s(()=>[a("img",{src:t.getImgUrl(o.img_link)},null,8,re)]),_:2},1024),d(" "+h(o.title),1)],8,le))),128))])]),_:1})]),_:1})])])]),_:1})}var be=q(K,[["render",ie]]);export{be as default}; diff --git a/docs/assets/ErrorNotFound.1f6efecb.js b/docs/assets/ErrorNotFound.1f6efecb.js new file mode 100644 index 0000000..5d38dbe --- /dev/null +++ b/docs/assets/ErrorNotFound.1f6efecb.js @@ -0,0 +1 @@ +import{_ as t,a as o,l as s,m as a,t as e,k as n,aw as r}from"./index.ab4869ca.js";const c=o({name:"ErrorNotFound"}),l={class:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"},d=e("div",{style:{"font-size":"30vh"}}," 404 ",-1),i=e("div",{class:"text-h2",style:{opacity:".4"}}," Oops. Nothing here... ",-1);function _(p,f,u,h,m,x){return s(),a("div",l,[e("div",null,[d,i,n(r,{class:"q-mt-xl",color:"white","text-color":"blue",unelevated:"",to:"/",label:"Go Home","no-caps":""})])])}var N=t(c,[["render",_]]);export{N as default}; diff --git a/docs/assets/ErrorNotFound.b871cd10.js b/docs/assets/ErrorNotFound.b871cd10.js deleted file mode 100644 index 1dfce61..0000000 --- a/docs/assets/ErrorNotFound.b871cd10.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,a as o,o as s,M as a,g as e,f as n,Q as r}from"./index.0ed11181.js";const c=o({name:"ErrorNotFound"}),l={class:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"},d=e("div",{style:{"font-size":"30vh"}}," 404 ",-1),i=e("div",{class:"text-h2",style:{opacity:".4"}}," Oops. Nothing here... ",-1);function _(p,f,u,h,x,m){return s(),a("div",l,[e("div",null,[d,i,n(r,{class:"q-mt-xl",color:"white","text-color":"blue",unelevated:"",to:"/",label:"Go Home","no-caps":""})])])}var N=t(c,[["render",_]]);export{N as default}; diff --git a/docs/assets/IntroPage.67584488.js b/docs/assets/IntroPage.67584488.js deleted file mode 100644 index 4cf7aee..0000000 --- a/docs/assets/IntroPage.67584488.js +++ /dev/null @@ -1 +0,0 @@ -import{Q as e}from"./QPage.9c21063d.js";import{_ as a,a as t,u as o,am as s,o as r,e as n,w as c,g as u}from"./index.0ed11181.js";const _=t({name:"IntroPage",setup(){return o(),s(),{}}}),d=u("div",{class:"q-ma-md"},"Introduction here",-1);function p(i,m,f,l,g,h){return r(),n(e,null,{default:c(()=>[d]),_:1})}var B=a(_,[["render",p]]);export{B as default}; diff --git a/docs/assets/IntroPage.c6c887aa.js b/docs/assets/IntroPage.c6c887aa.js new file mode 100644 index 0000000..6701533 --- /dev/null +++ b/docs/assets/IntroPage.c6c887aa.js @@ -0,0 +1 @@ +import{Q as e}from"./QPage.d12e44a1.js";import{_ as t,a,u as o,aE as s,l as r,p as n,q as c,t as u}from"./index.ab4869ca.js";const p=a({name:"IntroPage",setup(){return o(),s(),{}}}),_=u("div",{class:"q-ma-md"},"Introduction here",-1);function d(i,f,m,l,h,x){return r(),n(e,null,{default:c(()=>[_]),_:1})}var B=t(p,[["render",d]]);export{B as default}; diff --git a/docs/assets/MainLayout.8fa83886.js b/docs/assets/MainLayout.8fa83886.js new file mode 100644 index 0000000..aca446f --- /dev/null +++ b/docs/assets/MainLayout.8fa83886.js @@ -0,0 +1 @@ +import{Q as w,a as h,b as v}from"./QHeader.09181622.js";import{Q as b,a as $}from"./QLayout.b7c5abd4.js";import{u as g}from"./QuestionToolIcon.7c4c8f1b.js";import{a as c,w as z,_ as d,l as i,m as Q,k as t,u as q,r as j,n as m,p as u,q as l,t as p,v as k,x as y}from"./index.ab4869ca.js";import{Q as L}from"./MatchItem.5ec0f16d.js";import{u as S}from"./answerStore.972bc172.js";import{u as T}from"./vue-i18n.db8d47ce.js";import{_ as V}from"./lg_saxion_wit.4b1b1f5e.js";import"./QResizeObserver.b57e8b42.js";import"./scroll.270b929d.js";import"./wandb_logo.127f2d59.js";import"./QCard.eb99e114.js";import"./use-key-composition.7c536e3b.js";import"./QChip.f74b9a82.js";import"./format.43d1c739.js";const C=c({name:"LocaleSwitcher",setup(e,{emit:o}){const{t:r,locale:a}=T(),s=S();return z(a,()=>{console.log("locale",a.value),s.loadTools(a.value)}),{locale:a,t:r,localeOptions:[{value:"en-US",label:"\u{1F1EC}\u{1F1E7} English"},{value:"nl",label:"\u{1F1F3}\u{1F1F1} Nederlands"}]}}});function x(e,o,r,a,s,f){return i(),Q("div",null,[t(L,{modelValue:e.locale,"onUpdate:modelValue":o[0]||(o[0]=n=>e.locale=n),"label-color":"white",options:e.localeOptions,label:e.$t("language_picker"),dense:"",borderless:"","emit-value":"","map-options":"","options-dense":"",style:{"min-width":"120px"}},null,8,["modelValue","options","label"])])}var N=d(C,[["render",x]]);const B=c({name:"MainLayout",components:{LocaleSwitcher:N},setup(){const e=q(),o=g(),r=[{icon:"home",label:"Hoofdscherm",route_name:"index",separator:!0},{icon:"quiz",label:"AI-Platformwijzer",route_name:"aiplatformwijzer",separator:!1},{icon:"quiz",label:"Data wijzer",route_name:"datawijzer",separator:!1},{icon:"quiz",label:"Standaarden wijzer",route_name:"standaardenwijzer",separator:!1}],a=s=>{e.push({name:s})};return{drawer:j(!1),menuList:r,goToRoute:a,q:o}}}),A={style:{position:"absolute",right:"0"}};function H(e,o,r,a,s,f){const n=m("locale-switcher"),_=m("router-view");return i(),u(b,{view:"lHh Lpr lFf"},{default:l(()=>[t(v,{elevated:""},{default:l(()=>[t(w,null,{default:l(()=>[p("img",{class:"q-ma-sm",src:V,style:{height:"6vh"},onClick:o[0]||(o[0]=I=>e.goToRoute("index"))}),e.q.screen.lt.sm?y("",!0):(i(),u(h,{key:0,class:"absolute-center text-h5"},{default:l(()=>[k(" AI-Platformwijzer ")]),_:1})),p("div",A,[t(n,{class:"q-ma-md"})])]),_:1})]),_:1}),t($,null,{default:l(()=>[t(_)]),_:1})]),_:1})}var ee=d(B,[["render",H]]);export{ee as default}; diff --git a/docs/assets/MainLayout.fac65cab.js b/docs/assets/MainLayout.fac65cab.js deleted file mode 100644 index 1be8551..0000000 --- a/docs/assets/MainLayout.fac65cab.js +++ /dev/null @@ -1 +0,0 @@ -import{Q as m,a as c,b as f}from"./QHeader.5be086d0.js";import{Q as d,a as p}from"./QLayout.f1a18fb7.js";import{u as _}from"./use-quasar.624d3c43.js";import{_ as w,a as z,u as b,r as h,c as v,o as i,e as l,w as e,f as r,g as Q,h as g,i as j}from"./index.0ed11181.js";import{_ as q}from"./lg_saxion_wit.4b1b1f5e.js";import"./QResizeObserver.f9785bfd.js";import"./scroll.f78dc32b.js";const x=z({name:"MainLayout",setup(){const a=b(),o=_(),t=[{icon:"home",label:"Hoofdscherm",route_name:"index",separator:!0},{icon:"quiz",label:"AI-Platformwijzer",route_name:"aiplatformwijzer",separator:!1},{icon:"quiz",label:"Data wijzer",route_name:"datawijzer",separator:!1},{icon:"quiz",label:"Standaarden wijzer",route_name:"standaardenwijzer",separator:!1}],s=n=>{a.push({name:n})};return{drawer:h(!1),menuList:t,goToRoute:s,q:o}}});function C(a,o,t,s,n,T){const u=v("router-view");return i(),l(d,{view:"lHh Lpr lFf"},{default:e(()=>[r(f,{elevated:""},{default:e(()=>[r(m,null,{default:e(()=>[Q("img",{class:"q-ma-sm",src:q,style:{height:"6vh"},onClick:o[0]||(o[0]=y=>a.goToRoute("index"))}),a.q.screen.lt.sm?j("",!0):(i(),l(c,{key:0,class:"absolute-center text-h5"},{default:e(()=>[g(" AI-Platformwijzer ")]),_:1}))]),_:1})]),_:1}),r(p,null,{default:e(()=>[r(u)]),_:1})]),_:1})}var P=w(x,[["render",C]]);export{P as default}; diff --git a/docs/assets/MatchItem.5ec0f16d.js b/docs/assets/MatchItem.5ec0f16d.js new file mode 100644 index 0000000..17f8861 --- /dev/null +++ b/docs/assets/MatchItem.5ec0f16d.js @@ -0,0 +1 @@ +import{u as ct,a as Kt,b as jt,c as Qt,f as qt,d as vl}from"./use-key-composition.7c536e3b.js";import{y as Ae,R as ml,S as hl,r as B,f as h,h as V,U as Wt,V as ie,D as gl,g as Ue,z as dt,C as Xe,W as _t,X as Te,I as me,Y as Sl,w as ue,Z as Tt,$ as yl,H as wl,N as oe,a0 as bl,a1 as pl,a2 as Cl,a3 as kl,a4 as xl,a5 as Vl,a6 as lt,a7 as ql,a8 as Le,a9 as xe,aa as _l,L as Tl,a as El,_ as Al,n as Ml,l as Ve,m as qe,t as Et,k as _e,q as Fe,v as nt,ab as ot,F as At,ac as Mt,x as zt,ad as zl}from"./index.ab4869ca.js";import{Q as Ut}from"./QChip.f74b9a82.js";import{u as Bl,b as Ll,c as Fl,d as Il,e as Ol,Q as it,a as Hl}from"./QCard.eb99e114.js";import{u as Pl,a as Rl,b as Dl,c as $l,d as Nl,e as Kl,f as jl,g as Ql,r as Bt,h as Lt,i as Wl,j as Ul,n as Ft,Q as Xl}from"./format.43d1c739.js";import{b as Yl,a as Jl,h as Zl}from"./scroll.270b929d.js";import"./answerStore.972bc172.js";import{Q as Gl}from"./QuestionToolIcon.7c4c8f1b.js";var en=Ae({name:"QField",inheritAttrs:!1,props:{...ct,tag:{type:String,default:"label"}},emits:Kt,setup(){return jt(Qt({requiredForAttr:!1,tagProp:!0}))}}),tn=Ae({name:"QItem",props:{...Bl,...ml,tag:{type:String,default:"div"},active:{type:Boolean,default:null},clickable:Boolean,dense:Boolean,insetLevel:Number,tabindex:[String,Number],focused:Boolean,manualFocus:Boolean},emits:["click","keyup"],setup(e,{slots:n,emit:i}){const{proxy:{$q:c}}=Ue(),S=Ll(e,c),{hasLink:o,linkAttrs:y,linkClass:v,linkTag:m,navigateOnClick:p}=hl(),s=B(null),C=B(null),q=h(()=>e.clickable===!0||o.value===!0||e.tag==="label"),_=h(()=>e.disable!==!0&&q.value===!0),z=h(()=>"q-item q-item-type row no-wrap"+(e.dense===!0?" q-item--dense":"")+(S.value===!0?" q-item--dark":"")+(o.value===!0&&e.active===null?v.value:e.active===!0?` q-item--active${e.activeClass!==void 0?` ${e.activeClass}`:""}`:"")+(e.disable===!0?" disabled":"")+(_.value===!0?" q-item--clickable q-link cursor-pointer "+(e.manualFocus===!0?"q-manual-focusable":"q-focusable q-hoverable")+(e.focused===!0?" q-manual-focusable--focused":""):"")),R=h(()=>{if(e.insetLevel===void 0)return null;const x=c.lang.rtl===!0?"Right":"Left";return{["padding"+x]:16+e.insetLevel*56+"px"}});function I(x){_.value===!0&&(C.value!==null&&(x.qKeyEvent!==!0&&document.activeElement===s.value?C.value.focus():document.activeElement===C.value&&s.value.focus()),p(x))}function $(x){if(_.value===!0&&Wt(x,[13,32])===!0){ie(x),x.qKeyEvent=!0;const A=new MouseEvent("click",x);A.qKeyEvent=!0,s.value.dispatchEvent(A)}i("keyup",x)}function N(){const x=gl(n.default,[]);return _.value===!0&&x.unshift(V("div",{class:"q-focus-helper",tabindex:-1,ref:C})),x}return()=>{const x={ref:s,class:z.value,style:R.value,role:"listitem",onClick:I,onKeyup:$};return _.value===!0?(x.tabindex=e.tabindex||"0",Object.assign(x,y.value)):q.value===!0&&(x["aria-disabled"]="true"),V(m.value,x,N())}}}),ln=Ae({name:"QItemSection",props:{avatar:Boolean,thumbnail:Boolean,side:Boolean,top:Boolean,noWrap:Boolean},setup(e,{slots:n}){const i=h(()=>`q-item__section column q-item__section--${e.avatar===!0||e.side===!0||e.thumbnail===!0?"side":"main"}`+(e.top===!0?" q-item__section--top justify-start":" justify-center")+(e.avatar===!0?" q-item__section--avatar":"")+(e.thumbnail===!0?" q-item__section--thumbnail":"")+(e.noWrap===!0?" q-item__section--nowrap":""));return()=>V("div",{class:i.value},dt(n.default))}}),nn=Ae({name:"QItemLabel",props:{overline:Boolean,caption:Boolean,header:Boolean,lines:[Number,String]},setup(e,{slots:n}){const i=h(()=>parseInt(e.lines,10)),c=h(()=>"q-item__label"+(e.overline===!0?" q-item__label--overline text-overline":"")+(e.caption===!0?" q-item__label--caption text-caption":"")+(e.header===!0?" q-item__label--header":"")+(i.value===1?" ellipsis":"")),S=h(()=>e.lines!==void 0&&i.value>1?{overflow:"hidden",display:"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":i.value}:null);return()=>V("div",{style:S.value,class:c.value},dt(n.default))}});function on(e,n,i){let c;function S(){c!==void 0&&(_t.remove(c),c=void 0)}return Xe(()=>{e.value===!0&&S()}),{removeFromHistory:S,addToHistory(){c={condition:()=>i.value===!0,handler:n},_t.add(c)}}}let Ie=0,ut,at,He,rt=!1,It,Ot,Ht,he=null;function un(e){an(e)&&ie(e)}function an(e){if(e.target===document.body||e.target.classList.contains("q-layout__backdrop"))return!0;const n=Sl(e),i=e.shiftKey&&!e.deltaX,c=!i&&Math.abs(e.deltaX)<=Math.abs(e.deltaY),S=i||c?e.deltaY:e.deltaX;for(let o=0;o0&&y.scrollTop+y.clientHeight===y.scrollHeight:S<0&&y.scrollLeft===0?!0:S>0&&y.scrollLeft+y.clientWidth===y.scrollWidth}return!0}function Pt(e){e.target===document&&(document.scrollingElement.scrollTop=document.scrollingElement.scrollTop)}function je(e){rt!==!0&&(rt=!0,requestAnimationFrame(()=>{rt=!1;const{height:n}=e.target,{clientHeight:i,scrollTop:c}=document.scrollingElement;(He===void 0||n!==window.innerHeight)&&(He=i-n,document.scrollingElement.scrollTop=c),c>He&&(document.scrollingElement.scrollTop-=Math.ceil((c-He)/8))}))}function Rt(e){const n=document.body,i=window.visualViewport!==void 0;if(e==="add"){const{overflowY:c,overflowX:S}=window.getComputedStyle(n);ut=Yl(window),at=Jl(window),It=n.style.left,Ot=n.style.top,Ht=window.location.href,n.style.left=`-${ut}px`,n.style.top=`-${at}px`,S!=="hidden"&&(S==="scroll"||n.scrollWidth>window.innerWidth)&&n.classList.add("q-body--force-scrollbar-x"),c!=="hidden"&&(c==="scroll"||n.scrollHeight>window.innerHeight)&&n.classList.add("q-body--force-scrollbar-y"),n.classList.add("q-body--prevent-scroll"),document.qScrollPrevented=!0,Te.is.ios===!0&&(i===!0?(window.scrollTo(0,0),window.visualViewport.addEventListener("resize",je,me.passiveCapture),window.visualViewport.addEventListener("scroll",je,me.passiveCapture),window.scrollTo(0,0)):window.addEventListener("scroll",Pt,me.passiveCapture))}Te.is.desktop===!0&&Te.is.mac===!0&&window[`${e}EventListener`]("wheel",un,me.notPassive),e==="remove"&&(Te.is.ios===!0&&(i===!0?(window.visualViewport.removeEventListener("resize",je,me.passiveCapture),window.visualViewport.removeEventListener("scroll",je,me.passiveCapture)):window.removeEventListener("scroll",Pt,me.passiveCapture)),n.classList.remove("q-body--prevent-scroll"),n.classList.remove("q-body--force-scrollbar-x"),n.classList.remove("q-body--force-scrollbar-y"),document.qScrollPrevented=!1,n.style.left=It,n.style.top=Ot,window.location.href===Ht&&window.scrollTo(ut,at),He=void 0)}function rn(e){let n="add";if(e===!0){if(Ie++,he!==null){clearTimeout(he),he=null;return}if(Ie>1)return}else{if(Ie===0||(Ie--,Ie>0))return;if(n="remove",Te.is.ios===!0&&Te.is.nativeMobile===!0){he!==null&&clearTimeout(he),he=setTimeout(()=>{Rt(n),he=null},100);return}}Rt(n)}function sn(){let e;return{preventBodyScroll(n){n!==e&&(e!==void 0||n===!0)&&(e=n,rn(n))}}}let Qe=0;const cn={standard:"fixed-full flex-center",top:"fixed-top justify-center",bottom:"fixed-bottom justify-center",right:"fixed-right items-center",left:"fixed-left items-center"},Dt={standard:["scale","scale"],top:["slide-down","slide-up"],bottom:["slide-up","slide-down"],right:["slide-left","slide-right"],left:["slide-right","slide-left"]};var dn=Ae({name:"QDialog",inheritAttrs:!1,props:{...Pl,...Rl,transitionShow:String,transitionHide:String,persistent:Boolean,autoClose:Boolean,allowFocusOutside:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,position:{type:String,default:"standard",validator:e=>e==="standard"||["top","bottom","left","right"].includes(e)}},emits:[...Dl,"shake","click","escapeKey"],setup(e,{slots:n,emit:i,attrs:c}){const S=Ue(),o=B(null),y=B(!1),v=B(!1);let m=null,p=null,s,C;const q=h(()=>e.persistent!==!0&&e.noRouteDismiss!==!0&&e.seamless!==!0),{preventBodyScroll:_}=sn(),{registerTimeout:z}=$l(),{registerTick:R,removeTick:I}=Nl(),{transitionProps:$,transitionStyle:N}=Kl(e,()=>Dt[e.position][0],()=>Dt[e.position][1]),{showPortal:x,hidePortal:A,portalIsAccessible:ge,renderPortal:L}=jl(S,o,T,"dialog"),{hide:K}=Ql({showing:y,hideOnRouteChange:q,handleShow:Se,handleHide:le,processOnMount:!0}),{addToHistory:Y,removeFromHistory:ae}=on(y,K,q),J=h(()=>`q-dialog__inner flex no-pointer-events q-dialog__inner--${e.maximized===!0?"maximized":"minimized"} q-dialog__inner--${e.position} ${cn[e.position]}`+(v.value===!0?" q-dialog__inner--animating":"")+(e.fullWidth===!0?" q-dialog__inner--fullwidth":"")+(e.fullHeight===!0?" q-dialog__inner--fullheight":"")+(e.square===!0?" q-dialog__inner--square":"")),Z=h(()=>y.value===!0&&e.seamless!==!0),D=h(()=>e.autoClose===!0?{onClick:l}:{}),re=h(()=>[`q-dialog fullscreen no-pointer-events q-dialog--${Z.value===!0?"modal":"seamless"}`,c.class]);ue(()=>e.maximized,d=>{y.value===!0&&te(d)}),ue(Z,d=>{_(d),d===!0?(Wl(w),Ul(G)):(Bt(w),Lt(G))});function Se(d){Y(),p=e.noRefocus===!1&&document.activeElement!==null?document.activeElement:null,te(e.maximized),x(),v.value=!0,e.noFocus!==!0?(document.activeElement!==null&&document.activeElement.blur(),R(P)):I(),z(()=>{if(S.proxy.$q.platform.is.ios===!0){if(e.seamless!==!0&&document.activeElement){const{top:f,bottom:k}=document.activeElement.getBoundingClientRect(),{innerHeight:F}=window,b=window.visualViewport!==void 0?window.visualViewport.height:F;f>0&&k>b/2&&(document.scrollingElement.scrollTop=Math.min(document.scrollingElement.scrollHeight-b,k>=F?1/0:Math.ceil(document.scrollingElement.scrollTop+k-b/2))),document.activeElement.scrollIntoView()}C=!0,o.value.click(),C=!1}x(!0),v.value=!1,i("show",d)},e.transitionDuration)}function le(d){I(),ae(),ee(!0),v.value=!0,A(),p!==null&&(((d&&d.type.indexOf("key")===0?p.closest('[tabindex]:not([tabindex^="-"])'):void 0)||p).focus(),p=null),z(()=>{A(!0),v.value=!1,i("hide",d)},e.transitionDuration)}function P(d){Fl(()=>{let f=o.value;f===null||f.contains(document.activeElement)===!0||(f=(d!==""?f.querySelector(d):null)||f.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||f.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||f.querySelector("[autofocus], [data-autofocus]")||f,f.focus({preventScroll:!0}))})}function se(d){d&&typeof d.focus=="function"?d.focus({preventScroll:!0}):P(),i("shake");const f=o.value;f!==null&&(f.classList.remove("q-animate--scale"),f.classList.add("q-animate--scale"),m!==null&&clearTimeout(m),m=setTimeout(()=>{m=null,o.value!==null&&(f.classList.remove("q-animate--scale"),P())},170))}function G(){e.seamless!==!0&&(e.persistent===!0||e.noEscDismiss===!0?e.maximized!==!0&&e.noShake!==!0&&se():(i("escapeKey"),K()))}function ee(d){m!==null&&(clearTimeout(m),m=null),(d===!0||y.value===!0)&&(te(!1),e.seamless!==!0&&(_(!1),Bt(w),Lt(G))),d!==!0&&(p=null)}function te(d){d===!0?s!==!0&&(Qe<1&&document.body.classList.add("q-body--dialog"),Qe++,s=!0):s===!0&&(Qe<2&&document.body.classList.remove("q-body--dialog"),Qe--,s=!1)}function l(d){C!==!0&&(K(d),i("click",d))}function r(d){e.persistent!==!0&&e.noBackdropDismiss!==!0?K(d):e.noShake!==!0&&se()}function w(d){e.allowFocusOutside!==!0&&ge.value===!0&&yl(o.value,d.target)!==!0&&P('[tabindex]:not([tabindex="-1"])')}Object.assign(S.proxy,{focus:P,shake:se,__updateRefocusTarget(d){p=d||null}}),Xe(ee);function T(){return V("div",{role:"dialog","aria-modal":Z.value===!0?"true":"false",...c,class:re.value},[V(Tt,{name:"q-transition--fade",appear:!0},()=>Z.value===!0?V("div",{class:"q-dialog__backdrop fixed-full",style:N.value,"aria-hidden":"true",tabindex:-1,onClick:r}):null),V(Tt,$.value,()=>y.value===!0?V("div",{ref:o,class:J.value,style:N.value,tabindex:-1,...D.value},dt(n.default)):null)])}return L}});let We=!1;{const e=document.createElement("div");e.setAttribute("dir","rtl"),Object.assign(e.style,{width:"1px",height:"1px",overflow:"auto"});const n=document.createElement("div");Object.assign(n.style,{width:"1000px",height:"1px"}),document.body.appendChild(e),e.appendChild(n),e.scrollLeft=-1e3,We=e.scrollLeft>=0,e.remove()}const W=1e3,fn=["start","center","end","start-force","center-force","end-force"],Xt=Array.prototype.filter,vn=window.getComputedStyle(document.body).overflowAnchor===void 0?wl:function(e,n){e!==null&&(e._qOverflowAnimationFrame!==void 0&&cancelAnimationFrame(e._qOverflowAnimationFrame),e._qOverflowAnimationFrame=requestAnimationFrame(()=>{if(e===null)return;e._qOverflowAnimationFrame=void 0;const i=e.children||[];Xt.call(i,S=>S.dataset&&S.dataset.qVsAnchor!==void 0).forEach(S=>{delete S.dataset.qVsAnchor});const c=i[n];c&&c.dataset&&(c.dataset.qVsAnchor="")}))};function Ee(e,n){return e+n}function st(e,n,i,c,S,o,y,v){const m=e===window?document.scrollingElement||document.documentElement:e,p=S===!0?"offsetWidth":"offsetHeight",s={scrollStart:0,scrollViewSize:-y-v,scrollMaxSize:0,offsetStart:-y,offsetEnd:-v};if(S===!0?(e===window?(s.scrollStart=window.pageXOffset||window.scrollX||document.body.scrollLeft||0,s.scrollViewSize+=document.documentElement.clientWidth):(s.scrollStart=m.scrollLeft,s.scrollViewSize+=m.clientWidth),s.scrollMaxSize=m.scrollWidth,o===!0&&(s.scrollStart=(We===!0?s.scrollMaxSize-s.scrollViewSize:0)-s.scrollStart)):(e===window?(s.scrollStart=window.pageYOffset||window.scrollY||document.body.scrollTop||0,s.scrollViewSize+=document.documentElement.clientHeight):(s.scrollStart=m.scrollTop,s.scrollViewSize+=m.clientHeight),s.scrollMaxSize=m.scrollHeight),i!==null)for(let C=i.previousElementSibling;C!==null;C=C.previousElementSibling)C.classList.contains("q-virtual-scroll--skip")===!1&&(s.offsetStart+=C[p]);if(c!==null)for(let C=c.nextElementSibling;C!==null;C=C.nextElementSibling)C.classList.contains("q-virtual-scroll--skip")===!1&&(s.offsetEnd+=C[p]);if(n!==e){const C=m.getBoundingClientRect(),q=n.getBoundingClientRect();S===!0?(s.offsetStart+=q.left-C.left,s.offsetEnd-=q.width):(s.offsetStart+=q.top-C.top,s.offsetEnd-=q.height),e!==window&&(s.offsetStart+=s.scrollStart),s.offsetEnd+=s.scrollMaxSize-s.offsetStart}return s}function $t(e,n,i,c){n==="end"&&(n=(e===window?document.body:e)[i===!0?"scrollWidth":"scrollHeight"]),e===window?i===!0?(c===!0&&(n=(We===!0?document.body.scrollWidth-document.documentElement.clientWidth:0)-n),window.scrollTo(n,window.pageYOffset||window.scrollY||document.body.scrollTop||0)):window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,n):i===!0?(c===!0&&(n=(We===!0?e.scrollWidth-e.offsetWidth:0)-n),e.scrollLeft=n):e.scrollTop=n}function Oe(e,n,i,c){if(i>=c)return 0;const S=n.length,o=Math.floor(i/W),y=Math.floor((c-1)/W)+1;let v=e.slice(o,y).reduce(Ee,0);return i%W!==0&&(v-=n.slice(o*W,i).reduce(Ee,0)),c%W!==0&&c!==S&&(v-=n.slice(c,y*W).reduce(Ee,0)),v}const Yt={virtualScrollSliceSize:{type:[Number,String],default:null},virtualScrollSliceRatioBefore:{type:[Number,String],default:1},virtualScrollSliceRatioAfter:{type:[Number,String],default:1},virtualScrollItemSize:{type:[Number,String],default:24},virtualScrollStickySizeStart:{type:[Number,String],default:0},virtualScrollStickySizeEnd:{type:[Number,String],default:0},tableColspan:[Number,String]},zn=Object.keys(Yt),mn={virtualScrollHorizontal:Boolean,onVirtualScroll:Function,...Yt};function hn({virtualScrollLength:e,getVirtualScrollTarget:n,getVirtualScrollEl:i,virtualScrollItemSizeComputed:c}){const S=Ue(),{props:o,emit:y,proxy:v}=S,{$q:m}=v;let p,s,C,q=[],_;const z=B(0),R=B(0),I=B({}),$=B(null),N=B(null),x=B(null),A=B({from:0,to:0}),ge=h(()=>o.tableColspan!==void 0?o.tableColspan:100);c===void 0&&(c=h(()=>o.virtualScrollItemSize));const L=h(()=>c.value+";"+o.virtualScrollHorizontal),K=h(()=>L.value+";"+o.virtualScrollSliceRatioBefore+";"+o.virtualScrollSliceRatioAfter);ue(K,()=>{P()}),ue(L,Y);function Y(){le(s,!0)}function ae(l){le(l===void 0?s:l)}function J(l,r){const w=n();if(w==null||w.nodeType===8)return;const T=st(w,i(),$.value,N.value,o.virtualScrollHorizontal,m.lang.rtl,o.virtualScrollStickySizeStart,o.virtualScrollStickySizeEnd);C!==T.scrollViewSize&&P(T.scrollViewSize),D(w,T,Math.min(e.value-1,Math.max(0,parseInt(l,10)||0)),0,fn.indexOf(r)>-1?r:s>-1&&l>s?"end":"start")}function Z(){const l=n();if(l==null||l.nodeType===8)return;const r=st(l,i(),$.value,N.value,o.virtualScrollHorizontal,m.lang.rtl,o.virtualScrollStickySizeStart,o.virtualScrollStickySizeEnd),w=e.value-1,T=r.scrollMaxSize-r.offsetStart-r.offsetEnd-R.value;if(p===r.scrollStart)return;if(r.scrollMaxSize<=0){D(l,r,0,0);return}C!==r.scrollViewSize&&P(r.scrollViewSize),re(A.value.from);const d=Math.floor(r.scrollMaxSize-Math.max(r.scrollViewSize,r.offsetEnd)-Math.min(_[w],r.scrollViewSize/2));if(d>0&&Math.ceil(r.scrollStart)>=d){D(l,r,w,r.scrollMaxSize-r.offsetEnd-q.reduce(Ee,0));return}let f=0,k=r.scrollStart-r.offsetStart,F=k;if(k<=T&&k+r.scrollViewSize>=z.value)k-=z.value,f=A.value.from,F=k;else for(let b=0;k>=q[b]&&f0&&f-r.scrollViewSize?(f++,F=k):F=_[f]+k;D(l,r,f,F)}function D(l,r,w,T,d){const f=typeof d=="string"&&d.indexOf("-force")>-1,k=f===!0?d.replace("-force",""):d,F=k!==void 0?k:"start";let b=Math.max(0,w-I.value[F]),j=b+I.value.total;j>e.value&&(j=e.value,b=Math.max(0,j-I.value.total)),p=r.scrollStart;const ne=b!==A.value.from||j!==A.value.to;if(ne===!1&&k===void 0){G(w);return}const{activeElement:Pe}=document,U=x.value;ne===!0&&U!==null&&U!==Pe&&U.contains(Pe)===!0&&(U.addEventListener("focusout",Se),setTimeout(()=>{U!==null&&U.removeEventListener("focusout",Se)})),vn(U,w-b);const Re=k!==void 0?_.slice(b,w).reduce(Ee,0):0;if(ne===!0){const ce=j>=A.value.from&&b<=A.value.to?A.value.to:j;A.value={from:b,to:ce},z.value=Oe(q,_,0,b),R.value=Oe(q,_,j,e.value),requestAnimationFrame(()=>{A.value.to!==j&&p===r.scrollStart&&(A.value={from:A.value.from,to:j},R.value=Oe(q,_,j,e.value))})}requestAnimationFrame(()=>{if(p!==r.scrollStart)return;ne===!0&&re(b);const ce=_.slice(b,w).reduce(Ee,0),de=ce+r.offsetStart+z.value,De=de+_[w];let Me=de+T;if(k!==void 0){const Ye=ce-Re,ze=r.scrollStart+Ye;Me=f!==!0&&zeb.classList&&b.classList.contains("q-virtual-scroll--skip")===!1),T=w.length,d=o.virtualScrollHorizontal===!0?b=>b.getBoundingClientRect().width:b=>b.offsetHeight;let f=l,k,F;for(let b=0;b=T;f--)_[f]=w;const d=Math.floor((e.value-1)/W);q=[];for(let f=0;f<=d;f++){let k=0;const F=Math.min((f+1)*W,e.value);for(let b=f*W;b=0?(re(A.value.from),oe(()=>{J(l)})):ee()}function P(l){if(l===void 0&&typeof window!="undefined"){const k=n();k!=null&&k.nodeType!==8&&(l=st(k,i(),$.value,N.value,o.virtualScrollHorizontal,m.lang.rtl,o.virtualScrollStickySizeStart,o.virtualScrollStickySizeEnd).scrollViewSize)}C=l;const r=parseFloat(o.virtualScrollSliceRatioBefore)||0,w=parseFloat(o.virtualScrollSliceRatioAfter)||0,T=1+r+w,d=l===void 0||l<=0?1:Math.ceil(l/c.value),f=Math.max(1,d,Math.ceil((o.virtualScrollSliceSize>0?o.virtualScrollSliceSize:10)/T));I.value={total:Math.ceil(f*T),start:Math.ceil(f*r),center:Math.ceil(f*(.5+r)),end:Math.ceil(f*(1+r)),view:d}}function se(l,r){const w=o.virtualScrollHorizontal===!0?"width":"height",T={["--q-virtual-scroll-item-"+w]:c.value+"px"};return[l==="tbody"?V(l,{class:"q-virtual-scroll__padding",key:"before",ref:$},[V("tr",[V("td",{style:{[w]:`${z.value}px`,...T},colspan:ge.value})])]):V(l,{class:"q-virtual-scroll__padding",key:"before",ref:$,style:{[w]:`${z.value}px`,...T}}),V(l,{class:"q-virtual-scroll__content",key:"content",ref:x,tabindex:-1},r.flat()),l==="tbody"?V(l,{class:"q-virtual-scroll__padding",key:"after",ref:N},[V("tr",[V("td",{style:{[w]:`${R.value}px`,...T},colspan:ge.value})])]):V(l,{class:"q-virtual-scroll__padding",key:"after",ref:N,style:{[w]:`${R.value}px`,...T}})]}function G(l){s!==l&&(o.onVirtualScroll!==void 0&&y("virtualScroll",{index:l,from:A.value.from,to:A.value.to-1,direction:l{P()});let te=!1;return Cl(()=>{te=!0}),kl(()=>{if(te!==!0)return;const l=n();p!==void 0&&l!==void 0&&l!==null&&l.nodeType!==8?$t(l,p,o.virtualScrollHorizontal,m.lang.rtl):J(s)}),Xe(()=>{ee.cancel()}),Object.assign(v,{scrollTo:J,reset:Y,refresh:ae}),{virtualScrollSliceRange:A,virtualScrollSliceSizeComputed:I,setVirtualScrollSize:P,onVirtualScrollEvt:ee,localResetVirtualScroll:le,padVirtualScroll:se,scrollTo:J,reset:Y,refresh:ae}}const Nt=e=>["add","add-unique","toggle"].includes(e),gn=".*+?^${}()|[]\\",Sn=Object.keys(ct);var Bn=Ae({name:"QSelect",inheritAttrs:!1,props:{...mn,...Il,...ct,modelValue:{required:!0},multiple:Boolean,displayValue:[String,Number],displayValueHtml:Boolean,dropdownIcon:String,options:{type:Array,default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],hideSelected:Boolean,hideDropdownIcon:Boolean,fillInput:Boolean,maxValues:[Number,String],optionsDense:Boolean,optionsDark:{type:Boolean,default:null},optionsSelectedClass:String,optionsHtml:Boolean,optionsCover:Boolean,menuShrink:Boolean,menuAnchor:String,menuSelf:String,menuOffset:Array,popupContentClass:String,popupContentStyle:[String,Array,Object],useInput:Boolean,useChips:Boolean,newValueMode:{type:String,validator:Nt},mapOptions:Boolean,emitValue:Boolean,inputDebounce:{type:[Number,String],default:500},inputClass:[Array,String,Object],inputStyle:[Array,String,Object],tabindex:{type:[String,Number],default:0},autocomplete:String,transitionShow:String,transitionHide:String,transitionDuration:[String,Number],behavior:{type:String,validator:e=>["default","menu","dialog"].includes(e),default:"default"},virtualScrollItemSize:{type:[Number,String],default:void 0},onNewValue:Function,onFilter:Function},emits:[...Kt,"add","remove","inputValue","newValue","keyup","keypress","keydown","filterAbort"],setup(e,{slots:n,emit:i}){const{proxy:c}=Ue(),{$q:S}=c,o=B(!1),y=B(!1),v=B(-1),m=B(""),p=B(!1),s=B(!1);let C=null,q=null,_,z,R,I=null,$,N,x,A;const ge=B(null),L=B(null),K=B(null),Y=B(null),ae=B(null),J=Ol(e),Z=vl(pt),D=h(()=>Array.isArray(e.options)?e.options.length:0),re=h(()=>e.virtualScrollItemSize===void 0?e.optionsDense===!0?24:48:e.virtualScrollItemSize),{virtualScrollSliceRange:Se,virtualScrollSliceSizeComputed:le,localResetVirtualScroll:P,padVirtualScroll:se,onVirtualScrollEvt:G,scrollTo:ee,setVirtualScrollSize:te}=hn({virtualScrollLength:D,getVirtualScrollTarget:el,getVirtualScrollEl:wt,virtualScrollItemSizeComputed:re}),l=Qt(),r=h(()=>{const t=e.mapOptions===!0&&e.multiple!==!0,a=e.modelValue!==void 0&&(e.modelValue!==null||t===!0)?e.multiple===!0&&Array.isArray(e.modelValue)?e.modelValue:[e.modelValue]:[];if(e.mapOptions===!0&&Array.isArray(e.options)===!0){const u=e.mapOptions===!0&&_!==void 0?_:[],g=a.map(M=>Gt(M,u));return e.modelValue===null&&t===!0?g.filter(M=>M!==null):g}return a}),w=h(()=>{const t={};return Sn.forEach(a=>{const u=e[a];u!==void 0&&(t[a]=u)}),t}),T=h(()=>e.optionsDark===null?l.isDark.value:e.optionsDark),d=h(()=>qt(r.value)),f=h(()=>{let t="q-field__input q-placeholder col";return e.hideSelected===!0||r.value.length===0?[t,e.inputClass]:(t+=" q-field__input--padding",e.inputClass===void 0?t:[t,e.inputClass])}),k=h(()=>(e.virtualScrollHorizontal===!0?"q-virtual-scroll--horizontal":"")+(e.popupContentClass?" "+e.popupContentClass:"")),F=h(()=>D.value===0),b=h(()=>r.value.map(t=>Q.value(t)).join(", ")),j=h(()=>e.displayValue!==void 0?e.displayValue:b.value),ne=h(()=>e.optionsHtml===!0?()=>!0:t=>t!=null&&t.html===!0),Pe=h(()=>e.displayValueHtml===!0||e.displayValue===void 0&&(e.optionsHtml===!0||r.value.some(ne.value))),U=h(()=>l.focused.value===!0?e.tabindex:-1),Re=h(()=>{const t={tabindex:e.tabindex,role:"combobox","aria-label":e.label,"aria-readonly":e.readonly===!0?"true":"false","aria-autocomplete":e.useInput===!0?"list":"none","aria-expanded":o.value===!0?"true":"false","aria-controls":`${l.targetUid.value}_lb`};return v.value>=0&&(t["aria-activedescendant"]=`${l.targetUid.value}_${v.value}`),t}),ce=h(()=>({id:`${l.targetUid.value}_lb`,role:"listbox","aria-multiselectable":e.multiple===!0?"true":"false"})),de=h(()=>r.value.map((t,a)=>({index:a,opt:t,html:ne.value(t),selected:!0,removeAtIndex:Zt,toggleOption:fe,tabindex:U.value}))),De=h(()=>{if(D.value===0)return[];const{from:t,to:a}=Se.value;return e.options.slice(t,a).map((u,g)=>{const M=ye.value(u)===!0,E=Ge(u)===!0,H=t+g,O={clickable:!0,active:E,activeClass:ze.value,manualFocus:!0,focused:!1,disable:M,tabindex:-1,dense:e.optionsDense,dark:T.value,role:"option","aria-selected":E===!0?"true":"false",id:`${l.targetUid.value}_${H}`,onClick:()=>{fe(u)}};return M!==!0&&(v.value===H&&(O.focused=!0),S.platform.is.desktop===!0&&(O.onMousemove=()=>{o.value===!0&&we(H)})),{index:H,opt:u,html:ne.value(u),label:Q.value(u),selected:O.active,focused:O.focused,toggleOption:fe,setOptionIndex:we,itemProps:O}})}),Me=h(()=>e.dropdownIcon!==void 0?e.dropdownIcon:S.iconSet.arrow.dropdown),Ye=h(()=>e.optionsCover===!1&&e.outlined!==!0&&e.standout!==!0&&e.borderless!==!0&&e.rounded!==!0),ze=h(()=>e.optionsSelectedClass!==void 0?e.optionsSelectedClass:e.color!==void 0?`text-${e.color}`:""),X=h(()=>Ze(e.optionValue,"value")),Q=h(()=>Ze(e.optionLabel,"label")),ye=h(()=>Ze(e.optionDisable,"disable")),$e=h(()=>r.value.map(t=>X.value(t))),Jt=h(()=>{const t={onInput:pt,onChange:Z,onKeydown:yt,onKeyup:gt,onKeypress:St,onFocus:mt,onClick(a){z===!0&&xe(a)}};return t.onCompositionstart=t.onCompositionupdate=t.onCompositionend=Z,t});ue(r,t=>{_=t,e.useInput===!0&&e.fillInput===!0&&e.multiple!==!0&&l.innerLoading.value!==!0&&(y.value!==!0&&o.value!==!0||d.value!==!0)&&(R!==!0&&ke(),(y.value===!0||o.value===!0)&&be(""))},{immediate:!0}),ue(()=>e.fillInput,ke),ue(o,et),ue(D,fl);function ft(t){return e.emitValue===!0?X.value(t):t}function Je(t){if(t>-1&&t=e.maxValues)return;const g=e.modelValue.slice();i("add",{index:g.length,value:u}),g.push(u),i("update:modelValue",g)}function fe(t,a){if(l.editable.value!==!0||t===void 0||ye.value(t)===!0)return;const u=X.value(t);if(e.multiple!==!0){a!==!0&&(Be(e.fillInput===!0?Q.value(t):"",!0,!0),ve()),L.value!==null&&L.value.focus(),(r.value.length===0||Le(X.value(r.value[0]),u)!==!0)&&i("update:modelValue",e.emitValue===!0?u:t);return}if((z!==!0||p.value===!0)&&l.focus(),mt(),r.value.length===0){const E=e.emitValue===!0?u:t;i("add",{index:0,value:E}),i("update:modelValue",e.multiple===!0?[E]:E);return}const g=e.modelValue.slice(),M=$e.value.findIndex(E=>Le(E,u));if(M>-1)i("remove",{index:M,value:g.splice(M,1)[0]});else{if(e.maxValues!==void 0&&g.length>=e.maxValues)return;const E=e.emitValue===!0?u:t;i("add",{index:g.length,value:E}),g.push(E)}i("update:modelValue",g)}function we(t){if(S.platform.is.desktop!==!0)return;const a=t>-1&&t=0?Q.value(e.options[u]):$,!0))}}function Gt(t,a){const u=g=>Le(X.value(g),t);return e.options.find(u)||a.find(u)||t}function Ze(t,a){const u=t!==void 0?t:a;return typeof u=="function"?u:g=>g!==null&&typeof g=="object"&&u in g?g[u]:g}function Ge(t){const a=X.value(t);return $e.value.find(u=>Le(u,a))!==void 0}function mt(t){e.useInput===!0&&L.value!==null&&(t===void 0||L.value===t.target&&t.target.value===b.value)&&L.value.select()}function ht(t){Wt(t,27)===!0&&o.value===!0&&(xe(t),ve(),ke()),i("keyup",t)}function gt(t){const{value:a}=t.target;if(t.keyCode!==void 0){ht(t);return}if(t.target.value="",C!==null&&(clearTimeout(C),C=null),q!==null&&(clearTimeout(q),q=null),ke(),typeof a=="string"&&a.length!==0){const u=a.toLocaleLowerCase(),g=E=>{const H=e.options.find(O=>E.value(O).toLocaleLowerCase()===u);return H===void 0?!1:(r.value.indexOf(H)===-1?fe(H):ve(),!0)},M=E=>{g(X)!==!0&&(g(Q)===!0||E===!0||be(a,!0,()=>M(!0)))};M()}else l.clearValue(t)}function St(t){i("keypress",t)}function yt(t){if(i("keydown",t),_l(t)===!0)return;const a=m.value.length!==0&&(e.newValueMode!==void 0||e.onNewValue!==void 0),u=t.shiftKey!==!0&&e.multiple!==!0&&(v.value>-1||a===!0);if(t.keyCode===27){lt(t);return}if(t.keyCode===9&&u===!1){pe();return}if(t.target===void 0||t.target.id!==l.targetUid.value||l.editable.value!==!0)return;if(t.keyCode===40&&l.innerLoading.value!==!0&&o.value===!1){ie(t),Ce();return}if(t.keyCode===8&&(e.useChips===!0||e.clearable===!0)&&e.hideSelected!==!0&&m.value.length===0){e.multiple===!0&&Array.isArray(e.modelValue)===!0?Je(e.modelValue.length-1):e.multiple!==!0&&e.modelValue!==null&&i("update:modelValue",null);return}(t.keyCode===35||t.keyCode===36)&&(typeof m.value!="string"||m.value.length===0)&&(ie(t),v.value=-1,Ne(t.keyCode===36?1:-1,e.multiple)),(t.keyCode===33||t.keyCode===34)&&le.value!==void 0&&(ie(t),v.value=Math.max(-1,Math.min(D.value,v.value+(t.keyCode===33?-1:1)*le.value.view)),Ne(t.keyCode===33?1:-1,e.multiple)),(t.keyCode===38||t.keyCode===40)&&(ie(t),Ne(t.keyCode===38?-1:1,e.multiple));const g=D.value;if((x===void 0||A0&&e.useInput!==!0&&t.key!==void 0&&t.key.length===1&&t.altKey===!1&&t.ctrlKey===!1&&t.metaKey===!1&&(t.keyCode!==32||x.length!==0)){o.value!==!0&&Ce(t);const M=t.key.toLocaleLowerCase(),E=x.length===1&&x[0]===M;A=Date.now()+1500,E===!1&&(ie(t),x+=M);const H=new RegExp("^"+x.split("").map(tt=>gn.indexOf(tt)>-1?"\\"+tt:tt).join(".*"),"i");let O=v.value;if(E===!0||O<0||H.test(Q.value(e.options[O]))!==!0)do O=Ft(O+1,-1,g-1);while(O!==v.value&&(ye.value(e.options[O])===!0||H.test(Q.value(e.options[O]))!==!0));v.value!==O&&oe(()=>{we(O),ee(O),O>=0&&e.useInput===!0&&e.fillInput===!0&&Ke(Q.value(e.options[O]),!0)});return}if(!(t.keyCode!==13&&(t.keyCode!==32||e.useInput===!0||x!=="")&&(t.keyCode!==9||u===!1))){if(t.keyCode!==9&&ie(t),v.value>-1&&v.value{if(H){if(Nt(H)!==!0)return}else H=e.newValueMode;if(Be("",e.multiple!==!0,!0),E==null)return;(H==="toggle"?fe:vt)(E,H==="add-unique"),e.multiple!==!0&&(L.value!==null&&L.value.focus(),ve())};if(e.onNewValue!==void 0?i("newValue",m.value,M):M(m.value),e.multiple!==!0)return}o.value===!0?pe():l.innerLoading.value!==!0&&Ce()}}function wt(){return z===!0?ae.value:K.value!==null&&K.value.contentEl!==null?K.value.contentEl:void 0}function el(){return wt()}function tl(){return e.hideSelected===!0?[]:n["selected-item"]!==void 0?de.value.map(t=>n["selected-item"](t)).slice():n.selected!==void 0?[].concat(n.selected()):e.useChips===!0?de.value.map((t,a)=>V(Ut,{key:"option-"+a,removable:l.editable.value===!0&&ye.value(t.opt)!==!0,dense:!0,textColor:e.color,tabindex:U.value,onRemove(){t.removeAtIndex(a)}},()=>V("span",{class:"ellipsis",[t.html===!0?"innerHTML":"textContent"]:Q.value(t.opt)}))):[V("span",{[Pe.value===!0?"innerHTML":"textContent"]:j.value})]}function bt(){if(F.value===!0)return n["no-option"]!==void 0?n["no-option"]({inputValue:m.value}):void 0;const t=n.option!==void 0?n.option:u=>V(tn,{key:u.index,...u.itemProps},()=>V(ln,()=>V(nn,()=>V("span",{[u.html===!0?"innerHTML":"textContent"]:u.label}))));let a=se("div",De.value.map(t));return n["before-options"]!==void 0&&(a=n["before-options"]().concat(a)),Tl(n["after-options"],a)}function ll(t,a){const u=a===!0?{...Re.value,...l.splitAttrs.attributes.value}:void 0,g={ref:a===!0?L:void 0,key:"i_t",class:f.value,style:e.inputStyle,value:m.value!==void 0?m.value:"",type:"search",...u,id:a===!0?l.targetUid.value:void 0,maxlength:e.maxlength,autocomplete:e.autocomplete,"data-autofocus":t===!0||e.autofocus===!0||void 0,disabled:e.disable===!0,readonly:e.readonly===!0,...Jt.value};return t!==!0&&z===!0&&(Array.isArray(g.class)===!0?g.class=[...g.class,"no-pointer-events"]:g.class+=" no-pointer-events"),V("input",g)}function pt(t){C!==null&&(clearTimeout(C),C=null),q!==null&&(clearTimeout(q),q=null),!(t&&t.target&&t.target.qComposing===!0)&&(Ke(t.target.value||""),R=!0,$=m.value,l.focused.value!==!0&&(z!==!0||p.value===!0)&&l.focus(),e.onFilter!==void 0&&(C=setTimeout(()=>{C=null,be(m.value)},e.inputDebounce)))}function Ke(t,a){m.value!==t&&(m.value=t,a===!0||e.inputDebounce===0||e.inputDebounce==="0"?i("inputValue",t):q=setTimeout(()=>{q=null,i("inputValue",t)},e.inputDebounce))}function Be(t,a,u){R=u!==!0,e.useInput===!0&&(Ke(t,!0),(a===!0||u!==!0)&&($=t),a!==!0&&be(t))}function be(t,a,u){if(e.onFilter===void 0||a!==!0&&l.focused.value!==!0)return;l.innerLoading.value===!0?i("filterAbort"):(l.innerLoading.value=!0,s.value=!0),t!==""&&e.multiple!==!0&&r.value.length!==0&&R!==!0&&t===Q.value(r.value[0])&&(t="");const g=setTimeout(()=>{o.value===!0&&(o.value=!1)},10);I!==null&&clearTimeout(I),I=g,i("filter",t,(M,E)=>{(a===!0||l.focused.value===!0)&&I===g&&(clearTimeout(I),typeof M=="function"&&M(),s.value=!1,oe(()=>{l.innerLoading.value=!1,l.editable.value===!0&&(a===!0?o.value===!0&&ve():o.value===!0?et(!0):o.value=!0),typeof E=="function"&&oe(()=>{E(c)}),typeof u=="function"&&oe(()=>{u(c)})}))},()=>{l.focused.value===!0&&I===g&&(clearTimeout(I),l.innerLoading.value=!1,s.value=!1),o.value===!0&&(o.value=!1)})}function nl(){return V(Xl,{ref:K,class:k.value,style:e.popupContentStyle,modelValue:o.value,fit:e.menuShrink!==!0,cover:e.optionsCover===!0&&F.value!==!0&&e.useInput!==!0,anchor:e.menuAnchor,self:e.menuSelf,offset:e.menuOffset,dark:T.value,noParentEvent:!0,noRefocus:!0,noFocus:!0,square:Ye.value,transitionShow:e.transitionShow,transitionHide:e.transitionHide,transitionDuration:e.transitionDuration,separateClosePopup:!0,...ce.value,onScrollPassive:G,onBeforeShow:kt,onBeforeHide:ol,onShow:il},bt)}function ol(t){xt(t),pe()}function il(){te()}function ul(t){xe(t),L.value!==null&&L.value.focus(),p.value=!0,window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,0)}function al(t){xe(t),oe(()=>{p.value=!1})}function rl(){const t=[V(en,{class:`col-auto ${l.fieldClass.value}`,...w.value,for:l.targetUid.value,dark:T.value,square:!0,loading:s.value,itemAligned:!1,filled:!0,stackLabel:m.value.length!==0,...l.splitAttrs.listeners.value,onFocus:ul,onBlur:al},{...n,rawControl:()=>l.getControl(!0),before:void 0,after:void 0})];return o.value===!0&&t.push(V("div",{ref:ae,class:k.value+" scroll",style:e.popupContentStyle,...ce.value,onClick:lt,onScrollPassive:G},bt())),V(dn,{ref:Y,modelValue:y.value,position:e.useInput===!0?"top":void 0,transitionShow:N,transitionHide:e.transitionHide,transitionDuration:e.transitionDuration,onBeforeShow:kt,onBeforeHide:sl,onHide:cl,onShow:dl},()=>V("div",{class:"q-select__dialog"+(T.value===!0?" q-select__dialog--dark q-dark":"")+(p.value===!0?" q-select__dialog--focused":"")},t))}function sl(t){xt(t),Y.value!==null&&Y.value.__updateRefocusTarget(l.rootRef.value.querySelector(".q-field__native > [tabindex]:last-child")),l.focused.value=!1}function cl(t){ve(),l.focused.value===!1&&i("blur",t),ke()}function dl(){const t=document.activeElement;(t===null||t.id!==l.targetUid.value)&&L.value!==null&&L.value!==t&&L.value.focus(),te()}function pe(){y.value!==!0&&(v.value=-1,o.value===!0&&(o.value=!1),l.focused.value===!1&&(I!==null&&(clearTimeout(I),I=null),l.innerLoading.value===!0&&(i("filterAbort"),l.innerLoading.value=!1,s.value=!1)))}function Ce(t){l.editable.value===!0&&(z===!0?(l.onControlFocusin(t),y.value=!0,oe(()=>{l.focus()})):l.focus(),e.onFilter!==void 0?be(m.value):(F.value!==!0||n["no-option"]!==void 0)&&(o.value=!0))}function ve(){y.value=!1,pe()}function ke(){e.useInput===!0&&Be(e.multiple!==!0&&e.fillInput===!0&&r.value.length!==0&&Q.value(r.value[0])||"",!0,!0)}function et(t){let a=-1;if(t===!0){if(r.value.length!==0){const u=X.value(r.value[0]);a=e.options.findIndex(g=>Le(X.value(g),u))}P(a)}we(a)}function fl(t,a){o.value===!0&&l.innerLoading.value===!1&&(P(-1,!0),oe(()=>{o.value===!0&&l.innerLoading.value===!1&&(t>a?P():et(!0))}))}function Ct(){y.value===!1&&K.value!==null&&K.value.updatePosition()}function kt(t){t!==void 0&&xe(t),i("popupShow",t),l.hasPopupOpen=!0,l.onControlFocusin(t)}function xt(t){t!==void 0&&xe(t),i("popupHide",t),l.hasPopupOpen=!1,l.onControlFocusout(t)}function Vt(){z=S.platform.is.mobile!==!0&&e.behavior!=="dialog"?!1:e.behavior!=="menu"&&(e.useInput===!0?n["no-option"]!==void 0||e.onFilter!==void 0||F.value===!1:!0),N=S.platform.is.ios===!0&&z===!0&&e.useInput===!0?"fade":e.transitionShow}return xl(Vt),Vl(Ct),Vt(),Xe(()=>{C!==null&&clearTimeout(C),q!==null&&clearTimeout(q)}),Object.assign(c,{showPopup:Ce,hidePopup:ve,removeAtIndex:Je,add:vt,toggleOption:fe,getOptionIndex:()=>v.value,setOptionIndex:we,moveOptionSelection:Ne,filter:be,updateMenuPosition:Ct,updateInputValue:Be,isOptionSelected:Ge,getEmittingOptionValue:ft,isOptionDisabled:(...t)=>ye.value.apply(null,t)===!0,getOptionValue:(...t)=>X.value.apply(null,t),getOptionLabel:(...t)=>Q.value.apply(null,t)}),Object.assign(l,{innerValue:r,fieldClass:h(()=>`q-select q-field--auto-height q-select--with${e.useInput!==!0?"out":""}-input q-select--with${e.useChips!==!0?"out":""}-chips q-select--${e.multiple===!0?"multiple":"single"}`),inputRef:ge,targetRef:L,hasValue:d,showPopup:Ce,floatingLabel:h(()=>e.hideSelected!==!0&&d.value===!0||typeof m.value=="number"||m.value.length!==0||qt(e.displayValue)),getControlChild:()=>{if(l.editable.value!==!1&&(y.value===!0||F.value!==!0||n["no-option"]!==void 0))return z===!0?rl():nl();l.hasPopupOpen===!0&&(l.hasPopupOpen=!1)},controlEvents:{onFocusin(t){l.onControlFocusin(t)},onFocusout(t){l.onControlFocusout(t,()=>{ke(),pe()})},onClick(t){if(lt(t),z!==!0&&o.value===!0){pe(),L.value!==null&&L.value.focus();return}Ce(t)}},getControl:t=>{const a=tl(),u=t===!0||y.value!==!0||z!==!0;if(e.useInput===!0)a.push(ll(t,u));else if(l.editable.value===!0){const M=u===!0?Re.value:void 0;a.push(V("input",{ref:u===!0?L:void 0,key:"d_t",class:"q-select__focus-target",id:u===!0?l.targetUid.value:void 0,value:j.value,readonly:!0,"data-autofocus":t===!0||e.autofocus===!0||void 0,...M,onKeydown:yt,onKeyup:ht,onKeypress:St})),u===!0&&typeof e.autocomplete=="string"&&e.autocomplete.length!==0&&a.push(V("input",{class:"q-select__autocomplete-input",autocomplete:e.autocomplete,tabindex:-1,onKeyup:gt}))}if(J.value!==void 0&&e.disable!==!0&&$e.value.length!==0){const M=$e.value.map(E=>V("option",{value:E,selected:!0}));a.push(V("select",{class:"hidden",name:J.value,multiple:e.multiple},M))}const g=e.useInput===!0||u!==!0?void 0:l.splitAttrs.attributes.value;return V("div",{class:"q-field__native row items-center",...g,...l.splitAttrs.listeners.value},a)},getInnerAppend:()=>e.loading!==!0&&s.value!==!0&&e.hideDropdownIcon!==!0?[V(ql,{class:"q-select__dropdown-icon"+(o.value===!0?" rotate-180":""),name:Me.value})]:null}),jt(l)}});const yn=El({name:"MatchItem",props:["isMatch","match","tools","tool_id","question_number","question_id"],components:{QuestionToolIcon:Gl},emits:["showTool"],setup(e,{emit:n}){return{props:e,findMatchingTools:(S,o)=>{const y=[];return e.tools.forEach(v=>{let m=v.good_compatible.find(p=>p.question_id===S&&p.answer_id===o);if(m&&v.id!==e.tool_id){let p=JSON.parse(JSON.stringify(v));p.match=m,y.push(p)}}),y},showTool:S=>{n("showTool",S)}}}}),wn={key:0},bn={class:"text-h6"},pn=["innerHTML"],Cn={key:0,class:"q-ma-sm"};function kn(e,n,i,c,S,o){const y=Ml("question-tool-icon");return e.match.hasOwnProperty("matches")&&e.match.matches.length>0?(Ve(),qe("div",wn,[Et("div",bn,[_e(Ut,{color:"primary","text-color":"white"},{default:Fe(()=>[nt(ot(e.props.question_number+1),1)]),_:1}),nt(ot(e.match.question_text),1)]),(Ve(!0),qe(At,null,Mt(e.match.matches,(v,m)=>(Ve(),qe("div",{key:m},[_e(Hl,{class:"q-my-md"},{default:Fe(()=>[_e(it,{class:zl(["text-weight-bold text-white",e.props.isMatch?"bg-positive ":"bg-negative "])},{default:Fe(()=>[nt(ot(e.match.answers.find(p=>p.id===v.answer_id).answer_text),1)]),_:2},1032,["class"]),_e(it,{class:"text-left"},{default:Fe(()=>[Et("div",{innerHTML:v.explanation},null,8,pn)]),_:2},1024),_e(it,{class:"flex"},{default:Fe(()=>[(Ve(!0),qe(At,null,Mt(e.findMatchingTools(v.question_id,v.answer_id),(p,s)=>(Ve(),qe("div",{class:"flex q-ma-sm cursor-pointer",key:p.id},[s===0?(Ve(),qe("div",Cn,"Zie:")):zt("",!0),_e(y,{tool:p,onClick:C=>e.showTool(p.id)},null,8,["tool","onClick"])]))),128))]),_:2},1024)]),_:2},1024)]))),128))])):zt("",!0)}var Ln=Al(yn,[["render",kn]]);export{Ln as M,Bn as Q,hn as a,dn as b,zn as c,mn as u}; diff --git a/docs/assets/QCard.eb99e114.js b/docs/assets/QCard.eb99e114.js new file mode 100644 index 0000000..c0b85ff --- /dev/null +++ b/docs/assets/QCard.eb99e114.js @@ -0,0 +1 @@ +import{f as o,h as s,y as l,z as d,g as f}from"./index.ab4869ca.js";const m={dark:{type:Boolean,default:null}};function g(e,a){return o(()=>e.dark===null?a.dark.isActive:e.dark)}let t=[],n=[];function c(e){n=n.filter(a=>a!==e)}function F(e){c(e),n.push(e)}function q(e){c(e),n.length===0&&t.length!==0&&(t[t.length-1](),t=[])}function v(e){n.length===0?e():t.push(e)}function k(e){t=t.filter(a=>a!==e)}const p={name:String};function y(e){return o(()=>({type:"hidden",name:e.name,value:e.modelValue}))}function C(e={}){return(a,r,u)=>{a[r](s("input",{class:"hidden"+(u||""),...e.value}))}}function S(e){return o(()=>e.name||e.for)}var b=l({name:"QCardSection",props:{tag:{type:String,default:"div"},horizontal:Boolean},setup(e,{slots:a}){const r=o(()=>`q-card__section q-card__section--${e.horizontal===!0?"horiz row no-wrap":"vert"}`);return()=>s(e.tag,{class:r.value},d(a.default))}}),B=l({name:"QCard",props:{...m,tag:{type:String,default:"div"},square:Boolean,flat:Boolean,bordered:Boolean},setup(e,{slots:a}){const{proxy:{$q:r}}=f(),u=g(e,r),i=o(()=>"q-card"+(u.value===!0?" q-card--dark q-dark":"")+(e.bordered===!0?" q-card--bordered":"")+(e.square===!0?" q-card--square no-border-radius":"")+(e.flat===!0?" q-card--flat no-shadow":""));return()=>s(e.tag,{class:i.value},d(a.default))}});export{b as Q,B as a,g as b,v as c,p as d,S as e,F as f,k as g,y as h,C as i,q as r,m as u}; diff --git a/docs/assets/QCardActions.06a548c9.js b/docs/assets/QCardActions.06a548c9.js deleted file mode 100644 index dc7c7cc..0000000 --- a/docs/assets/QCardActions.06a548c9.js +++ /dev/null @@ -1 +0,0 @@ -import{u as $,b as h}from"./use-form.ff3f77cb.js";import{j as c,k as e,l as u,x as f,R as S,S as x,m as C}from"./index.0ed11181.js";const q={true:"inset",item:"item-inset","item-thumbnail":"item-thumbnail-inset"},r={xs:2,sm:4,md:8,lg:16,xl:24};var B=c({name:"QSeparator",props:{...$,spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String},setup(a){const i=f(),n=h(a,i.proxy.$q),t=e(()=>a.vertical===!0?"vertical":"horizontal"),o=e(()=>` q-separator--${t.value}`),m=e(()=>a.inset!==!1?`${o.value}-${q[a.inset]}`:""),v=e(()=>`q-separator${o.value}${m.value}`+(a.color!==void 0?` bg-${a.color}`:"")+(n.value===!0?" q-separator--dark":"")),d=e(()=>{const s={};if(a.size!==void 0&&(s[a.vertical===!0?"width":"height"]=a.size),a.spaced!==!1){const g=a.spaced===!0?`${r.md}px`:a.spaced in r?`${r[a.spaced]}px`:a.spaced,l=a.vertical===!0?["Left","Right"]:["Top","Bottom"];s[`margin${l[0]}`]=s[`margin${l[1]}`]=g}return s});return()=>u("hr",{class:v.value,style:d.value,"aria-orientation":t.value})}}),Q=c({name:"QCardActions",props:{...S,vertical:Boolean},setup(a,{slots:i}){const n=x(a),t=e(()=>`q-card__actions ${n.value} q-card__actions--${a.vertical===!0?"vert column":"horiz row"}`);return()=>u("div",{class:t.value},C(i.default))}});export{B as Q,Q as a}; diff --git a/docs/assets/QCardActions.638d9df6.js b/docs/assets/QCardActions.638d9df6.js new file mode 100644 index 0000000..c3e2aab --- /dev/null +++ b/docs/assets/QCardActions.638d9df6.js @@ -0,0 +1 @@ +import{u as $,b as h}from"./QCard.eb99e114.js";import{y as l,f as e,h as u,g as f,ax as x,ay as z,z as C}from"./index.ab4869ca.js";const S={true:"inset",item:"item-inset","item-thumbnail":"item-thumbnail-inset"},r={xs:2,sm:4,md:8,lg:16,xl:24};var B=l({name:"QSeparator",props:{...$,spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String},setup(a){const i=f(),n=h(a,i.proxy.$q),t=e(()=>a.vertical===!0?"vertical":"horizontal"),o=e(()=>` q-separator--${t.value}`),v=e(()=>a.inset!==!1?`${o.value}-${S[a.inset]}`:""),m=e(()=>`q-separator${o.value}${v.value}`+(a.color!==void 0?` bg-${a.color}`:"")+(n.value===!0?" q-separator--dark":"")),d=e(()=>{const s={};if(a.size!==void 0&&(s[a.vertical===!0?"width":"height"]=a.size),a.spaced!==!1){const g=a.spaced===!0?`${r.md}px`:a.spaced in r?`${r[a.spaced]}px`:a.spaced,c=a.vertical===!0?["Left","Right"]:["Top","Bottom"];s[`margin${c[0]}`]=s[`margin${c[1]}`]=g}return s});return()=>u("hr",{class:m.value,style:d.value,"aria-orientation":t.value})}}),Q=l({name:"QCardActions",props:{...x,vertical:Boolean},setup(a,{slots:i}){const n=z(a),t=e(()=>`q-card__actions ${n.value} q-card__actions--${a.vertical===!0?"vert column":"horiz row"}`);return()=>u("div",{class:t.value},C(i.default))}});export{B as Q,Q as a}; diff --git a/docs/assets/QChip.f74b9a82.js b/docs/assets/QChip.f74b9a82.js new file mode 100644 index 0000000..35b758c --- /dev/null +++ b/docs/assets/QChip.f74b9a82.js @@ -0,0 +1 @@ +import{y as C,ae as _,af as x,f as l,ag as y,h as a,a7 as u,ah as B,ai as R,g as I,V}from"./index.ab4869ca.js";import{u as w,b as z}from"./QCard.eb99e114.js";const D={xs:8,sm:10,md:14,lg:20,xl:24};var L=C({name:"QChip",props:{...w,..._,dense:Boolean,icon:String,iconRight:String,iconRemove:String,iconSelected:String,label:[String,Number],color:String,textColor:String,modelValue:{type:Boolean,default:!0},selected:{type:Boolean,default:null},square:Boolean,outline:Boolean,clickable:Boolean,removable:Boolean,removeAriaLabel:String,tabindex:[String,Number],disable:Boolean,ripple:{type:[Boolean,Object],default:!0}},emits:["update:modelValue","update:selected","remove","click"],setup(e,{slots:h,emit:i}){const{proxy:{$q:n}}=I(),v=z(e,n),b=x(e,D),m=l(()=>e.selected===!0||e.icon!==void 0),f=l(()=>e.selected===!0?e.iconSelected||n.iconSet.chip.selected:e.icon),q=l(()=>e.iconRemove||n.iconSet.chip.remove),c=l(()=>e.disable===!1&&(e.clickable===!0||e.selected!==null)),g=l(()=>{const t=e.outline===!0&&e.color||e.textColor;return"q-chip row inline no-wrap items-center"+(e.outline===!1&&e.color!==void 0?` bg-${e.color}`:"")+(t?` text-${t} q-chip--colored`:"")+(e.disable===!0?" disabled":"")+(e.dense===!0?" q-chip--dense":"")+(e.outline===!0?" q-chip--outline":"")+(e.selected===!0?" q-chip--selected":"")+(c.value===!0?" q-chip--clickable cursor-pointer non-selectable q-hoverable":"")+(e.square===!0?" q-chip--square":"")+(v.value===!0?" q-chip--dark q-dark":"")}),r=l(()=>{const t=e.disable===!0?{tabindex:-1,"aria-disabled":"true"}:{tabindex:e.tabindex||0},o={...t,role:"button","aria-hidden":"false","aria-label":e.removeAriaLabel||n.lang.label.remove};return{chip:t,remove:o}});function S(t){t.keyCode===13&&s(t)}function s(t){e.disable||(i("update:selected",!e.selected),i("click",t))}function d(t){(t.keyCode===void 0||t.keyCode===13)&&(V(t),e.disable===!1&&(i("update:modelValue",!1),i("remove")))}function k(){const t=[];c.value===!0&&t.push(a("div",{class:"q-focus-helper"})),m.value===!0&&t.push(a(u,{class:"q-chip__icon q-chip__icon--left",name:f.value}));const o=e.label!==void 0?[a("div",{class:"ellipsis"},[e.label])]:void 0;return t.push(a("div",{class:"q-chip__content col row no-wrap items-center q-anchor--skip"},B(h.default,o))),e.iconRight&&t.push(a(u,{class:"q-chip__icon q-chip__icon--right",name:e.iconRight})),e.removable===!0&&t.push(a(u,{class:"q-chip__icon q-chip__icon--remove cursor-pointer",name:q.value,...r.value.remove,onClick:d,onKeyup:d})),t}return()=>{if(e.modelValue===!1)return;const t={class:g.value,style:b.value};return c.value===!0&&Object.assign(t,r.value.chip,{onClick:s,onKeyup:S}),y("div",t,k(),"ripple",e.ripple!==!1&&e.disable!==!0,()=>[[R,e.ripple]])}}});export{L as Q}; diff --git a/docs/assets/QHeader.5be086d0.js b/docs/assets/QHeader.09181622.js similarity index 56% rename from docs/assets/QHeader.5be086d0.js rename to docs/assets/QHeader.09181622.js index b71e2ce..6360c36 100644 --- a/docs/assets/QHeader.5be086d0.js +++ b/docs/assets/QHeader.09181622.js @@ -1 +1 @@ -import{j as b,k as o,l as c,m as g,n as H,p as m,r as Q,q as d,s as T,t as _,v as O,x as k}from"./index.0ed11181.js";import{Q as $}from"./QResizeObserver.f9785bfd.js";var L=b({name:"QToolbarTitle",props:{shrink:Boolean},setup(t,{slots:s}){const n=o(()=>"q-toolbar__title ellipsis"+(t.shrink===!0?" col-shrink":""));return()=>c("div",{class:n.value},g(s.default))}}),R=b({name:"QToolbar",props:{inset:Boolean},setup(t,{slots:s}){const n=o(()=>"q-toolbar row no-wrap items-center"+(t.inset===!0?" q-toolbar--inset":""));return()=>c("div",{class:n.value,role:"toolbar"},g(s.default))}}),S=b({name:"QHeader",props:{modelValue:{type:Boolean,default:!0},reveal:Boolean,revealOffset:{type:Number,default:250},bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},emits:["reveal","focusin"],setup(t,{slots:s,emit:n}){const{proxy:{$q:v}}=k(),a=H(O,m);if(a===m)return console.error("QHeader needs to be child of QLayout"),m;const f=Q(parseInt(t.heightHint,10)),u=Q(!0),h=o(()=>t.reveal===!0||a.view.value.indexOf("H")>-1||v.platform.is.ios&&a.isContainer.value===!0),y=o(()=>{if(t.modelValue!==!0)return 0;if(h.value===!0)return u.value===!0?f.value:0;const e=f.value-a.scroll.value.position;return e>0?e:0}),p=o(()=>t.modelValue!==!0||h.value===!0&&u.value!==!0),V=o(()=>t.modelValue===!0&&p.value===!0&&t.reveal===!0),w=o(()=>"q-header q-layout__section--marginal "+(h.value===!0?"fixed":"absolute")+"-top"+(t.bordered===!0?" q-header--bordered":"")+(p.value===!0?" q-header--hidden":"")+(t.modelValue!==!0?" q-layout--prevent-focus":"")),x=o(()=>{const e=a.rows.value.top,r={};return e[0]==="l"&&a.left.space===!0&&(r[v.lang.rtl===!0?"right":"left"]=`${a.left.size}px`),e[2]==="r"&&a.right.space===!0&&(r[v.lang.rtl===!0?"left":"right"]=`${a.right.size}px`),r});function l(e,r){a.update("header",e,r)}function i(e,r){e.value!==r&&(e.value=r)}function z({height:e}){i(f,e),l("size",e)}function B(e){V.value===!0&&i(u,!0),n("focusin",e)}d(()=>t.modelValue,e=>{l("space",e),i(u,!0),a.animate()}),d(y,e=>{l("offset",e)}),d(()=>t.reveal,e=>{e===!1&&i(u,t.modelValue)}),d(u,e=>{a.animate(),n("reveal",e)}),d(a.scroll,e=>{t.reveal===!0&&i(u,e.direction==="up"||e.position<=t.revealOffset||e.position-e.inflectionPoint<100)});const q={};return a.instances.header=q,t.modelValue===!0&&l("size",f.value),l("space",t.modelValue),l("offset",y.value),T(()=>{a.instances.header===q&&(a.instances.header=void 0,l("size",0),l("offset",0),l("space",!1))}),()=>{const e=_(s.default,[]);return t.elevated===!0&&e.push(c("div",{class:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),e.push(c($,{debounce:0,onResize:z})),c("header",{class:w.value,style:x.value,onFocusin:B},e)}}});export{R as Q,L as a,S as b}; +import{y as b,f as o,h as c,z as Q,i as H,A as m,B as T,r as q,w as d,C as _,D as O,g as C}from"./index.ab4869ca.js";import{Q as $}from"./QResizeObserver.b57e8b42.js";var L=b({name:"QToolbarTitle",props:{shrink:Boolean},setup(t,{slots:s}){const n=o(()=>"q-toolbar__title ellipsis"+(t.shrink===!0?" col-shrink":""));return()=>c("div",{class:n.value},Q(s.default))}}),R=b({name:"QToolbar",props:{inset:Boolean},setup(t,{slots:s}){const n=o(()=>"q-toolbar row no-wrap items-center"+(t.inset===!0?" q-toolbar--inset":""));return()=>c("div",{class:n.value,role:"toolbar"},Q(s.default))}}),S=b({name:"QHeader",props:{modelValue:{type:Boolean,default:!0},reveal:Boolean,revealOffset:{type:Number,default:250},bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},emits:["reveal","focusin"],setup(t,{slots:s,emit:n}){const{proxy:{$q:v}}=C(),a=H(T,m);if(a===m)return console.error("QHeader needs to be child of QLayout"),m;const f=q(parseInt(t.heightHint,10)),u=q(!0),h=o(()=>t.reveal===!0||a.view.value.indexOf("H")>-1||v.platform.is.ios&&a.isContainer.value===!0),y=o(()=>{if(t.modelValue!==!0)return 0;if(h.value===!0)return u.value===!0?f.value:0;const e=f.value-a.scroll.value.position;return e>0?e:0}),g=o(()=>t.modelValue!==!0||h.value===!0&&u.value!==!0),w=o(()=>t.modelValue===!0&&g.value===!0&&t.reveal===!0),z=o(()=>"q-header q-layout__section--marginal "+(h.value===!0?"fixed":"absolute")+"-top"+(t.bordered===!0?" q-header--bordered":"")+(g.value===!0?" q-header--hidden":"")+(t.modelValue!==!0?" q-layout--prevent-focus":"")),V=o(()=>{const e=a.rows.value.top,r={};return e[0]==="l"&&a.left.space===!0&&(r[v.lang.rtl===!0?"right":"left"]=`${a.left.size}px`),e[2]==="r"&&a.right.space===!0&&(r[v.lang.rtl===!0?"left":"right"]=`${a.right.size}px`),r});function l(e,r){a.update("header",e,r)}function i(e,r){e.value!==r&&(e.value=r)}function B({height:e}){i(f,e),l("size",e)}function x(e){w.value===!0&&i(u,!0),n("focusin",e)}d(()=>t.modelValue,e=>{l("space",e),i(u,!0),a.animate()}),d(y,e=>{l("offset",e)}),d(()=>t.reveal,e=>{e===!1&&i(u,t.modelValue)}),d(u,e=>{a.animate(),n("reveal",e)}),d(a.scroll,e=>{t.reveal===!0&&i(u,e.direction==="up"||e.position<=t.revealOffset||e.position-e.inflectionPoint<100)});const p={};return a.instances.header=p,t.modelValue===!0&&l("size",f.value),l("space",t.modelValue),l("offset",y.value),_(()=>{a.instances.header===p&&(a.instances.header=void 0,l("size",0),l("offset",0),l("space",!1))}),()=>{const e=O(s.default,[]);return t.elevated===!0&&e.push(c("div",{class:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),e.push(c($,{debounce:0,onResize:B})),c("header",{class:z.value,style:V.value,onFocusin:x},e)}}});export{R as Q,L as a,S as b}; diff --git a/docs/assets/QInput.3944fa04.js b/docs/assets/QInput.3944fa04.js new file mode 100644 index 0000000..490e652 --- /dev/null +++ b/docs/assets/QInput.3944fa04.js @@ -0,0 +1 @@ +import{u as ae,a as ne,c as le,b as ie,f as G,d as re}from"./use-key-composition.7c536e3b.js";import{r as X,w as I,N as L,aa as ue,f as E,y as oe,C as se,o as fe,h as U,ao as de,g as ce,a9 as J}from"./index.ab4869ca.js";import{d as ge,e as me,c as ve}from"./QCard.eb99e114.js";const p={date:"####/##/##",datetime:"####/##/## ##:##",time:"##:##",fulltime:"##:##:##",phone:"(###) ### - ####",card:"#### #### #### ####"},H={"#":{pattern:"[\\d]",negate:"[^\\d]"},S:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]"},N:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]"},A:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:e=>e.toLocaleUpperCase()},a:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:e=>e.toLocaleLowerCase()},X:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:e=>e.toLocaleUpperCase()},x:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:e=>e.toLocaleLowerCase()}},te=Object.keys(H);te.forEach(e=>{H[e].regex=new RegExp(H[e].pattern)});const he=new RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|(["+te.join("")+"])|(.)","g"),ee=/[.*+?^${}()|[\]\\]/g,h=String.fromCharCode(1),ke={mask:String,reverseFillMask:Boolean,fillMask:[Boolean,String],unmaskedValue:Boolean};function Me(e,C,B,S){let c,g,A,V,N,M;const w=X(null),f=X(b());function Y(){return e.autogrow===!0||["textarea","text","search","url","tel","password"].includes(e.type)}I(()=>e.type+e.autogrow,D),I(()=>e.mask,l=>{if(l!==void 0)K(f.value,!0);else{const a=F(f.value);D(),e.modelValue!==a&&C("update:modelValue",a)}}),I(()=>e.fillMask+e.reverseFillMask,()=>{w.value===!0&&K(f.value,!0)}),I(()=>e.unmaskedValue,()=>{w.value===!0&&K(f.value)});function b(){if(D(),w.value===!0){const l=q(F(e.modelValue));return e.fillMask!==!1?$(l):l}return e.modelValue}function j(l){if(l-1){for(let u=l-i.length;u>0;u--)a+=h;i=i.slice(0,n)+a+i.slice(n)}return i}function D(){if(w.value=e.mask!==void 0&&e.mask.length!==0&&Y(),w.value===!1){V=void 0,c="",g="";return}const l=p[e.mask]===void 0?e.mask:p[e.mask],a=typeof e.fillMask=="string"&&e.fillMask.length!==0?e.fillMask.slice(0,1):"_",i=a.replace(ee,"\\$&"),n=[],u=[],r=[];let v=e.reverseFillMask===!0,o="",s="";l.replace(he,(k,t,m,T,R)=>{if(T!==void 0){const x=H[T];r.push(x),s=x.negate,v===!0&&(u.push("(?:"+s+"+)?("+x.pattern+"+)?(?:"+s+"+)?("+x.pattern+"+)?"),v=!1),u.push("(?:"+s+"+)?("+x.pattern+")?")}else if(m!==void 0)o="\\"+(m==="\\"?"":m),r.push(m),n.push("([^"+o+"]+)?"+o+"?");else{const x=t!==void 0?t:R;o=x==="\\"?"\\\\\\\\":x.replace(ee,"\\\\$&"),r.push(x),n.push("([^"+o+"]+)?"+o+"?")}});const Z=new RegExp("^"+n.join("")+"("+(o===""?".":"[^"+o+"]")+"+)?"+(o===""?"":"["+o+"]*")+"$"),P=u.length-1,d=u.map((k,t)=>t===0&&e.reverseFillMask===!0?new RegExp("^"+i+"*"+k):t===P?new RegExp("^"+k+"("+(s===""?".":s)+"+)?"+(e.reverseFillMask===!0?"$":i+"*")):new RegExp("^"+k));A=r,V=k=>{const t=Z.exec(e.reverseFillMask===!0?k:k.slice(0,r.length+1));t!==null&&(k=t.slice(1).join(""));const m=[],T=d.length;for(let R=0,x=k;Rtypeof k=="string"?k:h).join(""),g=c.split(h).join(a)}function K(l,a,i){const n=S.value,u=n.selectionEnd,r=n.value.length-u,v=F(l);a===!0&&D();const o=q(v),s=e.fillMask!==!1?$(o):o,Z=f.value!==s;n.value!==s&&(n.value=s),Z===!0&&(f.value=s),document.activeElement===n&&L(()=>{if(s===g){const d=e.reverseFillMask===!0?g.length:0;n.setSelectionRange(d,d,"forward");return}if(i==="insertFromPaste"&&e.reverseFillMask!==!0){const d=n.selectionEnd;let k=u-1;for(let t=N;t<=k&&t-1){const d=e.reverseFillMask===!0?u===0?s.length>o.length?1:0:Math.max(0,s.length-(s===g?0:Math.min(o.length,r)+1))+1:u;n.setSelectionRange(d,d,"forward");return}if(e.reverseFillMask===!0)if(Z===!0){const d=Math.max(0,s.length-(s===g?0:Math.min(o.length,r+1)));d===1&&u===1?n.setSelectionRange(d,d,"forward"):y.rightReverse(n,d)}else{const d=s.length-r;n.setSelectionRange(d,d,"backward")}else if(Z===!0){const d=Math.max(0,c.indexOf(h),Math.min(o.length,u)-1);y.right(n,d)}else{const d=u-1;y.right(n,d)}});const P=e.unmaskedValue===!0?F(s):s;String(e.modelValue)!==P&&(e.modelValue!==null||P!=="")&&B(P,!0)}function Q(l,a,i){const n=q(F(l.value));a=Math.max(0,c.indexOf(h),Math.min(n.length,a)),N=a,l.setSelectionRange(a,i,"forward")}const y={left(l,a){const i=c.slice(a-1).indexOf(h)===-1;let n=Math.max(0,a-1);for(;n>=0;n--)if(c[n]===h){a=n,i===!0&&a++;break}if(n<0&&c[a]!==void 0&&c[a]!==h)return y.right(l,0);a>=0&&l.setSelectionRange(a,a,"backward")},right(l,a){const i=l.value.length;let n=Math.min(i,a+1);for(;n<=i;n++)if(c[n]===h){a=n;break}else c[n-1]===h&&(a=n);if(n>i&&c[a-1]!==void 0&&c[a-1]!==h)return y.left(l,i);l.setSelectionRange(a,a,"forward")},leftReverse(l,a){const i=j(l.value.length);let n=Math.max(0,a-1);for(;n>=0;n--)if(i[n-1]===h){a=n;break}else if(i[n]===h&&(a=n,n===0))break;if(n<0&&i[a]!==void 0&&i[a]!==h)return y.rightReverse(l,0);a>=0&&l.setSelectionRange(a,a,"backward")},rightReverse(l,a){const i=l.value.length,n=j(i),u=n.slice(0,a+1).indexOf(h)===-1;let r=Math.min(i,a+1);for(;r<=i;r++)if(n[r-1]===h){a=r,a>0&&u===!0&&a--;break}if(r>i&&n[a-1]!==void 0&&n[a-1]!==h)return y.leftReverse(l,i);l.setSelectionRange(a,a,"forward")}};function W(l){C("click",l),M=void 0}function _(l){if(C("keydown",l),ue(l)===!0||l.altKey===!0)return;const a=S.value,i=a.selectionStart,n=a.selectionEnd;if(l.shiftKey||(M=void 0),l.keyCode===37||l.keyCode===39){l.shiftKey&&M===void 0&&(M=a.selectionDirection==="forward"?i:n);const u=y[(l.keyCode===39?"right":"left")+(e.reverseFillMask===!0?"Reverse":"")];if(l.preventDefault(),u(a,M===i?n:i),l.shiftKey){const r=a.selectionStart;a.setSelectionRange(Math.min(M,r),Math.max(M,r),"forward")}}else l.keyCode===8&&e.reverseFillMask!==!0&&i===n?(y.left(a,i),a.setSelectionRange(a.selectionStart,n,"backward")):l.keyCode===46&&e.reverseFillMask===!0&&i===n&&(y.rightReverse(a,n),a.setSelectionRange(i,a.selectionEnd,"forward"))}function q(l){if(l==null||l==="")return"";if(e.reverseFillMask===!0)return O(l);const a=A;let i=0,n="";for(let u=0;u=0&&n>-1;r--){const v=a[r];let o=l[n];if(typeof v=="string")u=v+u,o===v&&n--;else if(o!==void 0&&v.regex.test(o))do u=(v.transform!==void 0?v.transform(o):o)+u,n--,o=l[n];while(i===r&&o!==void 0&&v.regex.test(o));else return u}return u}function F(l){return typeof l!="string"||V===void 0?typeof l=="number"?V(""+l):l:V(l)}function $(l){return g.length-l.length<=0?l:e.reverseFillMask===!0&&l.length!==0?g.slice(0,-l.length)+l:l+g.slice(l.length)}return{innerValue:f,hasMask:w,moveCursorForPaste:Q,updateMaskValue:K,onMaskedKeydown:_,onMaskedClick:W}}function we(e,C){function B(){const S=e.modelValue;try{const c="DataTransfer"in window?new DataTransfer:"ClipboardEvent"in window?new ClipboardEvent("").clipboardData:void 0;return Object(S)===S&&("length"in S?Array.from(S):[S]).forEach(g=>{c.items.add(g)}),{files:c.files}}catch{return{files:void 0}}}return C===!0?E(()=>{if(e.type==="file")return B()}):E(B)}var Se=oe({name:"QInput",inheritAttrs:!1,props:{...ae,...ke,...ge,modelValue:{required:!1},shadowText:String,type:{type:String,default:"text"},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},emits:[...ne,"paste","change","keydown","click","animationend"],setup(e,{emit:C,attrs:B}){const{proxy:S}=ce(),{$q:c}=S,g={};let A=NaN,V,N,M=null,w;const f=X(null),Y=me(e),{innerValue:b,hasMask:j,moveCursorForPaste:D,updateMaskValue:K,onMaskedKeydown:Q,onMaskedClick:y}=Me(e,C,o,f),W=we(e,!0),_=E(()=>G(b.value)),q=re(r),O=le(),F=E(()=>e.type==="textarea"||e.autogrow===!0),$=E(()=>F.value===!0||["text","search","url","tel","password"].includes(e.type)),l=E(()=>{const t={...O.splitAttrs.listeners.value,onInput:r,onPaste:u,onChange:Z,onBlur:P,onFocus:J};return t.onCompositionstart=t.onCompositionupdate=t.onCompositionend=q,j.value===!0&&(t.onKeydown=Q,t.onClick=y),e.autogrow===!0&&(t.onAnimationend=v),t}),a=E(()=>{const t={tabindex:0,"data-autofocus":e.autofocus===!0||void 0,rows:e.type==="textarea"?6:void 0,"aria-label":e.label,name:Y.value,...O.splitAttrs.attributes.value,id:O.targetUid.value,maxlength:e.maxlength,disabled:e.disable===!0,readonly:e.readonly===!0};return F.value===!1&&(t.type=e.type),e.autogrow===!0&&(t.rows=1),t});I(()=>e.type,()=>{f.value&&(f.value.value=e.modelValue)}),I(()=>e.modelValue,t=>{if(j.value===!0){if(N===!0&&(N=!1,String(t)===A))return;K(t)}else b.value!==t&&(b.value=t,e.type==="number"&&g.hasOwnProperty("value")===!0&&(V===!0?V=!1:delete g.value));e.autogrow===!0&&L(s)}),I(()=>e.autogrow,t=>{t===!0?L(s):f.value!==null&&B.rows>0&&(f.value.style.height="auto")}),I(()=>e.dense,()=>{e.autogrow===!0&&L(s)});function i(){ve(()=>{const t=document.activeElement;f.value!==null&&f.value!==t&&(t===null||t.id!==O.targetUid.value)&&f.value.focus({preventScroll:!0})})}function n(){f.value!==null&&f.value.select()}function u(t){if(j.value===!0&&e.reverseFillMask!==!0){const m=t.target;D(m,m.selectionStart,m.selectionEnd)}C("paste",t)}function r(t){if(!t||!t.target)return;if(e.type==="file"){C("update:modelValue",t.target.files);return}const m=t.target.value;if(t.target.qComposing===!0){g.value=m;return}if(j.value===!0)K(m,!1,t.inputType);else if(o(m),$.value===!0&&t.target===document.activeElement){const{selectionStart:T,selectionEnd:R}=t.target;T!==void 0&&R!==void 0&&L(()=>{t.target===document.activeElement&&m.indexOf(t.target.value)===0&&t.target.setSelectionRange(T,R)})}e.autogrow===!0&&s()}function v(t){C("animationend",t),s()}function o(t,m){w=()=>{M=null,e.type!=="number"&&g.hasOwnProperty("value")===!0&&delete g.value,e.modelValue!==t&&A!==t&&(A=t,m===!0&&(N=!0),C("update:modelValue",t),L(()=>{A===t&&(A=NaN)})),w=void 0},e.type==="number"&&(V=!0,g.value=t),e.debounce!==void 0?(M!==null&&clearTimeout(M),g.value=t,M=setTimeout(w,e.debounce)):w()}function s(){requestAnimationFrame(()=>{const t=f.value;if(t!==null){const m=t.parentNode.style,{scrollTop:T}=t,{overflowY:R,maxHeight:x}=c.platform.is.firefox===!0?{}:window.getComputedStyle(t),z=R!==void 0&&R!=="scroll";z===!0&&(t.style.overflowY="hidden"),m.marginBottom=t.scrollHeight-1+"px",t.style.height="1px",t.style.height=t.scrollHeight+"px",z===!0&&(t.style.overflowY=parseInt(x,10){f.value!==null&&(f.value.value=b.value!==void 0?b.value:"")})}function d(){return g.hasOwnProperty("value")===!0?g.value:b.value!==void 0?b.value:""}se(()=>{P()}),fe(()=>{e.autogrow===!0&&s()}),Object.assign(O,{innerValue:b,fieldClass:E(()=>`q-${F.value===!0?"textarea":"input"}`+(e.autogrow===!0?" q-textarea--autogrow":"")),hasShadow:E(()=>e.type!=="file"&&typeof e.shadowText=="string"&&e.shadowText.length!==0),inputRef:f,emitValue:o,hasValue:_,floatingLabel:E(()=>_.value===!0&&(e.type!=="number"||isNaN(b.value)===!1)||G(e.displayValue)),getControl:()=>U(F.value===!0?"textarea":"input",{ref:f,class:["q-field__native q-placeholder",e.inputClass],style:e.inputStyle,...a.value,...l.value,...e.type!=="file"?{value:d()}:W.value}),getShadowControl:()=>U("div",{class:"q-field__native q-field__shadow absolute-bottom no-pointer-events"+(F.value===!0?"":" text-no-wrap")},[U("span",{class:"invisible"},d()),U("span",e.shadowText)])});const k=ie(O);return Object.assign(S,{focus:i,select:n,getNativeElement:()=>f.value}),de(S,"nativeEl",()=>f.value),k}});export{Se as Q}; diff --git a/docs/assets/QInput.c63abfb0.js b/docs/assets/QInput.c63abfb0.js deleted file mode 100644 index 98727e8..0000000 --- a/docs/assets/QInput.c63abfb0.js +++ /dev/null @@ -1 +0,0 @@ -import{u as ae,a as ne,c as le,b as ie,f as G,d as re}from"./use-key-composition.deb261a7.js";import{r as X,q as P,I as L,ay as ue,k as E,j as oe,s as se,A as fe,l as U,a1 as de,x as ce,ai as J}from"./index.0ed11181.js";import{e as ge,g as me,d as ve}from"./use-form.ff3f77cb.js";const p={date:"####/##/##",datetime:"####/##/## ##:##",time:"##:##",fulltime:"##:##:##",phone:"(###) ### - ####",card:"#### #### #### ####"},H={"#":{pattern:"[\\d]",negate:"[^\\d]"},S:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]"},N:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]"},A:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:e=>e.toLocaleUpperCase()},a:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:e=>e.toLocaleLowerCase()},X:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:e=>e.toLocaleUpperCase()},x:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:e=>e.toLocaleLowerCase()}},te=Object.keys(H);te.forEach(e=>{H[e].regex=new RegExp(H[e].pattern)});const he=new RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|(["+te.join("")+"])|(.)","g"),ee=/[.*+?^${}()|[\]\\]/g,h=String.fromCharCode(1),ke={mask:String,reverseFillMask:Boolean,fillMask:[Boolean,String],unmaskedValue:Boolean};function Me(e,C,q,S){let c,g,A,V,j,M;const w=X(null),f=X(b());function Y(){return e.autogrow===!0||["textarea","text","search","url","tel","password"].includes(e.type)}P(()=>e.type+e.autogrow,B),P(()=>e.mask,l=>{if(l!==void 0)K(f.value,!0);else{const a=F(f.value);B(),e.modelValue!==a&&C("update:modelValue",a)}}),P(()=>e.fillMask+e.reverseFillMask,()=>{w.value===!0&&K(f.value,!0)}),P(()=>e.unmaskedValue,()=>{w.value===!0&&K(f.value)});function b(){if(B(),w.value===!0){const l=D(F(e.modelValue));return e.fillMask!==!1?$(l):l}return e.modelValue}function N(l){if(l-1){for(let u=l-i.length;u>0;u--)a+=h;i=i.slice(0,n)+a+i.slice(n)}return i}function B(){if(w.value=e.mask!==void 0&&e.mask.length!==0&&Y(),w.value===!1){V=void 0,c="",g="";return}const l=p[e.mask]===void 0?e.mask:p[e.mask],a=typeof e.fillMask=="string"&&e.fillMask.length!==0?e.fillMask.slice(0,1):"_",i=a.replace(ee,"\\$&"),n=[],u=[],r=[];let v=e.reverseFillMask===!0,o="",s="";l.replace(he,(k,t,m,T,R)=>{if(T!==void 0){const x=H[T];r.push(x),s=x.negate,v===!0&&(u.push("(?:"+s+"+)?("+x.pattern+"+)?(?:"+s+"+)?("+x.pattern+"+)?"),v=!1),u.push("(?:"+s+"+)?("+x.pattern+")?")}else if(m!==void 0)o="\\"+(m==="\\"?"":m),r.push(m),n.push("([^"+o+"]+)?"+o+"?");else{const x=t!==void 0?t:R;o=x==="\\"?"\\\\\\\\":x.replace(ee,"\\\\$&"),r.push(x),n.push("([^"+o+"]+)?"+o+"?")}});const Z=new RegExp("^"+n.join("")+"("+(o===""?".":"[^"+o+"]")+"+)?"+(o===""?"":"["+o+"]*")+"$"),I=u.length-1,d=u.map((k,t)=>t===0&&e.reverseFillMask===!0?new RegExp("^"+i+"*"+k):t===I?new RegExp("^"+k+"("+(s===""?".":s)+"+)?"+(e.reverseFillMask===!0?"$":i+"*")):new RegExp("^"+k));A=r,V=k=>{const t=Z.exec(e.reverseFillMask===!0?k:k.slice(0,r.length+1));t!==null&&(k=t.slice(1).join(""));const m=[],T=d.length;for(let R=0,x=k;Rtypeof k=="string"?k:h).join(""),g=c.split(h).join(a)}function K(l,a,i){const n=S.value,u=n.selectionEnd,r=n.value.length-u,v=F(l);a===!0&&B();const o=D(v),s=e.fillMask!==!1?$(o):o,Z=f.value!==s;n.value!==s&&(n.value=s),Z===!0&&(f.value=s),document.activeElement===n&&L(()=>{if(s===g){const d=e.reverseFillMask===!0?g.length:0;n.setSelectionRange(d,d,"forward");return}if(i==="insertFromPaste"&&e.reverseFillMask!==!0){const d=n.selectionEnd;let k=u-1;for(let t=j;t<=k&&t-1){const d=e.reverseFillMask===!0?u===0?s.length>o.length?1:0:Math.max(0,s.length-(s===g?0:Math.min(o.length,r)+1))+1:u;n.setSelectionRange(d,d,"forward");return}if(e.reverseFillMask===!0)if(Z===!0){const d=Math.max(0,s.length-(s===g?0:Math.min(o.length,r+1)));d===1&&u===1?n.setSelectionRange(d,d,"forward"):y.rightReverse(n,d)}else{const d=s.length-r;n.setSelectionRange(d,d,"backward")}else if(Z===!0){const d=Math.max(0,c.indexOf(h),Math.min(o.length,u)-1);y.right(n,d)}else{const d=u-1;y.right(n,d)}});const I=e.unmaskedValue===!0?F(s):s;String(e.modelValue)!==I&&(e.modelValue!==null||I!=="")&&q(I,!0)}function Q(l,a,i){const n=D(F(l.value));a=Math.max(0,c.indexOf(h),Math.min(n.length,a)),j=a,l.setSelectionRange(a,i,"forward")}const y={left(l,a){const i=c.slice(a-1).indexOf(h)===-1;let n=Math.max(0,a-1);for(;n>=0;n--)if(c[n]===h){a=n,i===!0&&a++;break}if(n<0&&c[a]!==void 0&&c[a]!==h)return y.right(l,0);a>=0&&l.setSelectionRange(a,a,"backward")},right(l,a){const i=l.value.length;let n=Math.min(i,a+1);for(;n<=i;n++)if(c[n]===h){a=n;break}else c[n-1]===h&&(a=n);if(n>i&&c[a-1]!==void 0&&c[a-1]!==h)return y.left(l,i);l.setSelectionRange(a,a,"forward")},leftReverse(l,a){const i=N(l.value.length);let n=Math.max(0,a-1);for(;n>=0;n--)if(i[n-1]===h){a=n;break}else if(i[n]===h&&(a=n,n===0))break;if(n<0&&i[a]!==void 0&&i[a]!==h)return y.rightReverse(l,0);a>=0&&l.setSelectionRange(a,a,"backward")},rightReverse(l,a){const i=l.value.length,n=N(i),u=n.slice(0,a+1).indexOf(h)===-1;let r=Math.min(i,a+1);for(;r<=i;r++)if(n[r-1]===h){a=r,a>0&&u===!0&&a--;break}if(r>i&&n[a-1]!==void 0&&n[a-1]!==h)return y.leftReverse(l,i);l.setSelectionRange(a,a,"forward")}};function W(l){C("click",l),M=void 0}function _(l){if(C("keydown",l),ue(l)===!0||l.altKey===!0)return;const a=S.value,i=a.selectionStart,n=a.selectionEnd;if(l.shiftKey||(M=void 0),l.keyCode===37||l.keyCode===39){l.shiftKey&&M===void 0&&(M=a.selectionDirection==="forward"?i:n);const u=y[(l.keyCode===39?"right":"left")+(e.reverseFillMask===!0?"Reverse":"")];if(l.preventDefault(),u(a,M===i?n:i),l.shiftKey){const r=a.selectionStart;a.setSelectionRange(Math.min(M,r),Math.max(M,r),"forward")}}else l.keyCode===8&&e.reverseFillMask!==!0&&i===n?(y.left(a,i),a.setSelectionRange(a.selectionStart,n,"backward")):l.keyCode===46&&e.reverseFillMask===!0&&i===n&&(y.rightReverse(a,n),a.setSelectionRange(i,a.selectionEnd,"forward"))}function D(l){if(l==null||l==="")return"";if(e.reverseFillMask===!0)return O(l);const a=A;let i=0,n="";for(let u=0;u=0&&n>-1;r--){const v=a[r];let o=l[n];if(typeof v=="string")u=v+u,o===v&&n--;else if(o!==void 0&&v.regex.test(o))do u=(v.transform!==void 0?v.transform(o):o)+u,n--,o=l[n];while(i===r&&o!==void 0&&v.regex.test(o));else return u}return u}function F(l){return typeof l!="string"||V===void 0?typeof l=="number"?V(""+l):l:V(l)}function $(l){return g.length-l.length<=0?l:e.reverseFillMask===!0&&l.length!==0?g.slice(0,-l.length)+l:l+g.slice(l.length)}return{innerValue:f,hasMask:w,moveCursorForPaste:Q,updateMaskValue:K,onMaskedKeydown:_,onMaskedClick:W}}function we(e,C){function q(){const S=e.modelValue;try{const c="DataTransfer"in window?new DataTransfer:"ClipboardEvent"in window?new ClipboardEvent("").clipboardData:void 0;return Object(S)===S&&("length"in S?Array.from(S):[S]).forEach(g=>{c.items.add(g)}),{files:c.files}}catch{return{files:void 0}}}return C===!0?E(()=>{if(e.type==="file")return q()}):E(q)}var Se=oe({name:"QInput",inheritAttrs:!1,props:{...ae,...ke,...ge,modelValue:{required:!1},shadowText:String,type:{type:String,default:"text"},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},emits:[...ne,"paste","change","keydown","click","animationend"],setup(e,{emit:C,attrs:q}){const{proxy:S}=ce(),{$q:c}=S,g={};let A=NaN,V,j,M=null,w;const f=X(null),Y=me(e),{innerValue:b,hasMask:N,moveCursorForPaste:B,updateMaskValue:K,onMaskedKeydown:Q,onMaskedClick:y}=Me(e,C,o,f),W=we(e,!0),_=E(()=>G(b.value)),D=re(r),O=le(),F=E(()=>e.type==="textarea"||e.autogrow===!0),$=E(()=>F.value===!0||["text","search","url","tel","password"].includes(e.type)),l=E(()=>{const t={...O.splitAttrs.listeners.value,onInput:r,onPaste:u,onChange:Z,onBlur:I,onFocus:J};return t.onCompositionstart=t.onCompositionupdate=t.onCompositionend=D,N.value===!0&&(t.onKeydown=Q,t.onClick=y),e.autogrow===!0&&(t.onAnimationend=v),t}),a=E(()=>{const t={tabindex:0,"data-autofocus":e.autofocus===!0||void 0,rows:e.type==="textarea"?6:void 0,"aria-label":e.label,name:Y.value,...O.splitAttrs.attributes.value,id:O.targetUid.value,maxlength:e.maxlength,disabled:e.disable===!0,readonly:e.readonly===!0};return F.value===!1&&(t.type=e.type),e.autogrow===!0&&(t.rows=1),t});P(()=>e.type,()=>{f.value&&(f.value.value=e.modelValue)}),P(()=>e.modelValue,t=>{if(N.value===!0){if(j===!0&&(j=!1,String(t)===A))return;K(t)}else b.value!==t&&(b.value=t,e.type==="number"&&g.hasOwnProperty("value")===!0&&(V===!0?V=!1:delete g.value));e.autogrow===!0&&L(s)}),P(()=>e.autogrow,t=>{t===!0?L(s):f.value!==null&&q.rows>0&&(f.value.style.height="auto")}),P(()=>e.dense,()=>{e.autogrow===!0&&L(s)});function i(){ve(()=>{const t=document.activeElement;f.value!==null&&f.value!==t&&(t===null||t.id!==O.targetUid.value)&&f.value.focus({preventScroll:!0})})}function n(){f.value!==null&&f.value.select()}function u(t){if(N.value===!0&&e.reverseFillMask!==!0){const m=t.target;B(m,m.selectionStart,m.selectionEnd)}C("paste",t)}function r(t){if(!t||!t.target)return;if(e.type==="file"){C("update:modelValue",t.target.files);return}const m=t.target.value;if(t.target.qComposing===!0){g.value=m;return}if(N.value===!0)K(m,!1,t.inputType);else if(o(m),$.value===!0&&t.target===document.activeElement){const{selectionStart:T,selectionEnd:R}=t.target;T!==void 0&&R!==void 0&&L(()=>{t.target===document.activeElement&&m.indexOf(t.target.value)===0&&t.target.setSelectionRange(T,R)})}e.autogrow===!0&&s()}function v(t){C("animationend",t),s()}function o(t,m){w=()=>{M=null,e.type!=="number"&&g.hasOwnProperty("value")===!0&&delete g.value,e.modelValue!==t&&A!==t&&(A=t,m===!0&&(j=!0),C("update:modelValue",t),L(()=>{A===t&&(A=NaN)})),w=void 0},e.type==="number"&&(V=!0,g.value=t),e.debounce!==void 0?(M!==null&&clearTimeout(M),g.value=t,M=setTimeout(w,e.debounce)):w()}function s(){requestAnimationFrame(()=>{const t=f.value;if(t!==null){const m=t.parentNode.style,{scrollTop:T}=t,{overflowY:R,maxHeight:x}=c.platform.is.firefox===!0?{}:window.getComputedStyle(t),z=R!==void 0&&R!=="scroll";z===!0&&(t.style.overflowY="hidden"),m.marginBottom=t.scrollHeight-1+"px",t.style.height="1px",t.style.height=t.scrollHeight+"px",z===!0&&(t.style.overflowY=parseInt(x,10){f.value!==null&&(f.value.value=b.value!==void 0?b.value:"")})}function d(){return g.hasOwnProperty("value")===!0?g.value:b.value!==void 0?b.value:""}se(()=>{I()}),fe(()=>{e.autogrow===!0&&s()}),Object.assign(O,{innerValue:b,fieldClass:E(()=>`q-${F.value===!0?"textarea":"input"}`+(e.autogrow===!0?" q-textarea--autogrow":"")),hasShadow:E(()=>e.type!=="file"&&typeof e.shadowText=="string"&&e.shadowText.length!==0),inputRef:f,emitValue:o,hasValue:_,floatingLabel:E(()=>_.value===!0&&(e.type!=="number"||isNaN(b.value)===!1)||G(e.displayValue)),getControl:()=>U(F.value===!0?"textarea":"input",{ref:f,class:["q-field__native q-placeholder",e.inputClass],style:e.inputStyle,...a.value,...l.value,...e.type!=="file"?{value:d()}:W.value}),getShadowControl:()=>U("div",{class:"q-field__native q-field__shadow absolute-bottom no-pointer-events"+(F.value===!0?"":" text-no-wrap")},[U("span",{class:"invisible"},d()),U("span",e.shadowText)])});const k=ie(O);return Object.assign(S,{focus:i,select:n,getNativeElement:()=>f.value}),de(S,"nativeEl",()=>f.value),k}});export{Se as Q}; diff --git a/docs/assets/QKnob.9e532b29.js b/docs/assets/QKnob.9e532b29.js new file mode 100644 index 0000000..d4ab6ac --- /dev/null +++ b/docs/assets/QKnob.9e532b29.js @@ -0,0 +1 @@ +import{ae as oe,y as R,af as se,f as c,h as p,ah as de,g as U,az as ce,X as w,H as ve,aA as fe,ak as E,aB as V,a6 as I,a9 as _,at as $,al as A,V as G,r as K,w as me,ag as he}from"./index.ab4869ca.js";import{k as N,l as ge,n as L}from"./format.43d1c739.js";import{d as ye,h as be}from"./QCard.eb99e114.js";const X={...oe,min:{type:Number,default:0},max:{type:Number,default:100},color:String,centerColor:String,trackColor:String,fontSize:String,rounded:Boolean,thickness:{type:Number,default:.2,validator:e=>e>=0&&e<=1},angle:{type:Number,default:0},showValue:Boolean,reverse:Boolean,instantFeedback:Boolean},O=50,W=2*O,J=W*Math.PI,Ce=Math.round(J*1e3)/1e3;var ke=R({name:"QCircularProgress",props:{...X,value:{type:Number,default:0},animationSpeed:{type:[String,Number],default:600},indeterminate:Boolean},setup(e,{slots:n}){const{proxy:{$q:i}}=U(),m=se(e),t=c(()=>{const s=(i.lang.rtl===!0?-1:1)*e.angle;return{transform:e.reverse!==(i.lang.rtl===!0)?`scale3d(-1, 1, 1) rotate3d(0, 0, 1, ${-90-s}deg)`:`rotate3d(0, 0, 1, ${s-90}deg)`}}),a=c(()=>e.instantFeedback!==!0&&e.indeterminate!==!0?{transition:`stroke-dashoffset ${e.animationSpeed}ms ease 0s, stroke ${e.animationSpeed}ms ease`}:""),r=c(()=>W/(1-e.thickness/2)),d=c(()=>`${r.value/2} ${r.value/2} ${r.value} ${r.value}`),l=c(()=>N(e.value,e.min,e.max)),u=c(()=>e.max-e.min),h=c(()=>e.thickness/2*r.value),f=c(()=>{const s=(e.max-l.value)/u.value,v=e.rounded===!0&&l.value{const s=[];e.centerColor!==void 0&&e.centerColor!=="transparent"&&s.push(p("circle",{class:`q-circular-progress__center text-${e.centerColor}`,fill:"currentColor",r:O-h.value/2,cx:r.value,cy:r.value})),e.trackColor!==void 0&&e.trackColor!=="transparent"&&s.push(y({cls:"track",thickness:h.value,offset:0,color:e.trackColor})),s.push(y({cls:"circle",thickness:h.value,offset:f.value,color:e.color,rounded:e.rounded===!0?"round":void 0}));const v=[p("svg",{class:"q-circular-progress__svg",style:t.value,viewBox:d.value,"aria-hidden":"true"},s)];return e.showValue===!0&&v.push(p("div",{class:"q-circular-progress__text absolute-full row flex-center content-center",style:{fontSize:e.fontSize}},n.default!==void 0?n.default():[p("div",l.value)])),p("div",{class:`q-circular-progress q-circular-progress--${e.indeterminate===!0?"in":""}determinate`,style:m.value,role:"progressbar","aria-valuemin":e.min,"aria-valuemax":e.max,"aria-valuenow":e.indeterminate===!0?void 0:l.value},de(n.internal,v))}}});const T={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0},xe=Object.keys(T);T.all=!0;function Q(e){const n={};for(const i of xe)e[i]===!0&&(n[i]=!0);return Object.keys(n).length===0?T:(n.horizontal===!0?n.left=n.right=!0:n.left===!0&&n.right===!0&&(n.horizontal=!0),n.vertical===!0?n.up=n.down=!0:n.up===!0&&n.down===!0&&(n.vertical=!0),n.horizontal===!0&&n.vertical===!0&&(n.all=!0),n)}const pe=["INPUT","TEXTAREA"];function j(e,n){return n.event===void 0&&e.target!==void 0&&e.target.draggable!==!0&&typeof n.handler=="function"&&pe.includes(e.target.nodeName.toUpperCase())===!1&&(e.qClonedBy===void 0||e.qClonedBy.indexOf(n.uid)===-1)}function D(e,n,i){const m=$(e);let t,a=m.left-n.event.x,r=m.top-n.event.y,d=Math.abs(a),l=Math.abs(r);const u=n.direction;u.horizontal===!0&&u.vertical!==!0?t=a<0?"left":"right":u.horizontal!==!0&&u.vertical===!0?t=r<0?"up":"down":u.up===!0&&r<0?(t="up",d>l&&(u.left===!0&&a<0?t="left":u.right===!0&&a>0&&(t="right"))):u.down===!0&&r>0?(t="down",d>l&&(u.left===!0&&a<0?t="left":u.right===!0&&a>0&&(t="right"))):u.left===!0&&a<0?(t="left",d0&&(t="down"))):u.right===!0&&a>0&&(t="right",d0&&(t="down")));let h=!1;if(t===void 0&&i===!1){if(n.event.isFirst===!0||n.event.lastDir===void 0)return{};t=n.event.lastDir,h=!0,t==="left"||t==="right"?(m.left-=a,d=0,a=0):(m.top-=r,l=0,r=0)}return{synthetic:h,payload:{evt:e,touch:n.event.mouse!==!0,mouse:n.event.mouse===!0,position:m,direction:t,isFirst:n.event.isFirst,isFinal:i===!0,duration:Date.now()-n.event.time,distance:{x:d,y:l},offset:{x:a,y:r},delta:{x:m.left-n.event.lastX,y:m.top-n.event.lastY}}}}let Me=0;var we=ce({name:"touch-pan",beforeMount(e,{value:n,modifiers:i}){if(i.mouse!==!0&&w.has.touch!==!0)return;function m(a,r){i.mouse===!0&&r===!0?G(a):(i.stop===!0&&_(a),i.prevent===!0&&I(a))}const t={uid:"qvtp_"+Me++,handler:n,modifiers:i,direction:Q(i),noop:ve,mouseStart(a){j(a,t)&&fe(a)&&(E(t,"temp",[[document,"mousemove","move","notPassiveCapture"],[document,"mouseup","end","passiveCapture"]]),t.start(a,!0))},touchStart(a){if(j(a,t)){const r=a.target;E(t,"temp",[[r,"touchmove","move","notPassiveCapture"],[r,"touchcancel","end","passiveCapture"],[r,"touchend","end","passiveCapture"]]),t.start(a)}},start(a,r){if(w.is.firefox===!0&&V(e,!0),t.lastEvt=a,r===!0||i.stop===!0){if(t.direction.all!==!0&&(r!==!0||t.modifiers.mouseAllDir!==!0&&t.modifiers.mousealldir!==!0)){const u=a.type.indexOf("mouse")>-1?new MouseEvent(a.type,a):new TouchEvent(a.type,a);a.defaultPrevented===!0&&I(u),a.cancelBubble===!0&&_(u),Object.assign(u,{qKeyEvent:a.qKeyEvent,qClickOutside:a.qClickOutside,qAnchorHandled:a.qAnchorHandled,qClonedBy:a.qClonedBy===void 0?[t.uid]:a.qClonedBy.concat(t.uid)}),t.initialEvent={target:a.target,event:u}}_(a)}const{left:d,top:l}=$(a);t.event={x:d,y:l,time:Date.now(),mouse:r===!0,detected:!1,isFirst:!0,isFinal:!1,lastX:d,lastY:l}},move(a){if(t.event===void 0)return;const r=$(a),d=r.left-t.event.x,l=r.top-t.event.y;if(d===0&&l===0)return;t.lastEvt=a;const u=t.event.mouse===!0,h=()=>{m(a,u);let s;i.preserveCursor!==!0&&i.preservecursor!==!0&&(s=document.documentElement.style.cursor||"",document.documentElement.style.cursor="grabbing"),u===!0&&document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),ge(),t.styleCleanup=v=>{if(t.styleCleanup=void 0,s!==void 0&&(document.documentElement.style.cursor=s),document.body.classList.remove("non-selectable"),u===!0){const x=()=>{document.body.classList.remove("no-pointer-events--children")};v!==void 0?setTimeout(()=>{x(),v()},50):x()}else v!==void 0&&v()}};if(t.event.detected===!0){t.event.isFirst!==!0&&m(a,t.event.mouse);const{payload:s,synthetic:v}=D(a,t,!1);s!==void 0&&(t.handler(s)===!1?t.end(a):(t.styleCleanup===void 0&&t.event.isFirst===!0&&h(),t.event.lastX=s.position.left,t.event.lastY=s.position.top,t.event.lastDir=v===!0?void 0:s.direction,t.event.isFirst=!1));return}if(t.direction.all===!0||u===!0&&(t.modifiers.mouseAllDir===!0||t.modifiers.mousealldir===!0)){h(),t.event.detected=!0,t.move(a);return}const f=Math.abs(d),y=Math.abs(l);f!==y&&(t.direction.horizontal===!0&&f>y||t.direction.vertical===!0&&f0||t.direction.left===!0&&f>y&&d<0||t.direction.right===!0&&f>y&&d>0?(t.event.detected=!0,t.move(a)):t.end(a,!0))},end(a,r){if(t.event!==void 0){if(A(t,"temp"),w.is.firefox===!0&&V(e,!1),r===!0)t.styleCleanup!==void 0&&t.styleCleanup(),t.event.detected!==!0&&t.initialEvent!==void 0&&t.initialEvent.target.dispatchEvent(t.initialEvent.event);else if(t.event.detected===!0){t.event.isFirst===!0&&t.handler(D(a===void 0?t.lastEvt:a,t).payload);const{payload:d}=D(a===void 0?t.lastEvt:a,t,!0),l=()=>{t.handler(d)};t.styleCleanup!==void 0?t.styleCleanup(l):l()}t.event=void 0,t.initialEvent=void 0,t.lastEvt=void 0}}};if(e.__qtouchpan=t,i.mouse===!0){const a=i.mouseCapture===!0||i.mousecapture===!0?"Capture":"";E(t,"main",[[e,"mousedown","mouseStart",`passive${a}`]])}w.has.touch===!0&&E(t,"main",[[e,"touchstart","touchStart",`passive${i.capture===!0?"Capture":""}`],[e,"touchmove","noop","notPassiveCapture"]])},updated(e,n){const i=e.__qtouchpan;i!==void 0&&(n.oldValue!==n.value&&(typeof value!="function"&&i.end(),i.handler=n.value),i.direction=Q(n.modifiers))},beforeUnmount(e){const n=e.__qtouchpan;n!==void 0&&(n.event!==void 0&&n.end(),A(n,"main"),A(n,"temp"),w.is.firefox===!0&&V(e,!1),n.styleCleanup!==void 0&&n.styleCleanup(),delete e.__qtouchpan)}});const H=[34,37,40,33,39,38],qe=Object.keys(X);var $e=R({name:"QKnob",props:{...ye,...X,modelValue:{type:Number,required:!0},innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:e=>e>=0},tabindex:{type:[Number,String],default:0},disable:Boolean,readonly:Boolean},emits:["update:modelValue","change","dragValue"],setup(e,{slots:n,emit:i}){const{proxy:m}=U(),{$q:t}=m,a=K(e.modelValue),r=K(!1),d=c(()=>isNaN(e.innerMin)===!0||e.innerMinisNaN(e.innerMax)===!0||e.innerMax>e.max?e.max:e.innerMax);let u;function h(){a.value=e.modelValue===null?d.value:N(e.modelValue,d.value,l.value),q(!0)}me(()=>`${e.modelValue}|${d.value}|${l.value}`,h),h();const f=c(()=>e.disable===!1&&e.readonly===!1),y=c(()=>"q-knob non-selectable"+(f.value===!0?" q-knob--editable":e.disable===!0?" disabled":"")),s=c(()=>(String(e.step).trim().split(".")[1]||"").length),v=c(()=>e.step===0?1:e.step),x=c(()=>e.instantFeedback===!0||r.value===!0),F=t.platform.is.mobile===!0?c(()=>f.value===!0?{onClick:Y}:{}):c(()=>f.value===!0?{onMousedown:ae,onClick:Y,onKeydown:ne,onKeyup:re}:{}),P=c(()=>f.value===!0?{tabindex:e.tabindex}:{[`aria-${e.disable===!0?"disabled":"readonly"}`]:"true"}),Z=c(()=>{const o={};return qe.forEach(b=>{o[b]=e[b]}),o});function ee(o){o.isFinal?(M(o.evt,!0),r.value=!1):(o.isFirst&&(B(),r.value=!0),M(o.evt))}const te=c(()=>[[we,ee,void 0,{prevent:!0,stop:!0,mouse:!0}]]);function B(){const{top:o,left:b,width:k,height:S}=m.$el.getBoundingClientRect();u={top:o+S/2,left:b+k/2}}function ae(o){B(),M(o)}function Y(o){B(),M(o,!0)}function ne(o){if(!H.includes(o.keyCode))return;G(o);const b=([34,33].includes(o.keyCode)?10:1)*v.value,k=[34,37,40].includes(o.keyCode)?-b:b;a.value=N(parseFloat((a.value+k).toFixed(s.value)),d.value,l.value),q()}function M(o,b){const k=$(o),S=Math.abs(k.top-u.top),le=Math.sqrt(S**2+Math.abs(k.left-u.left)**2);let g=Math.asin(S/le)*(180/Math.PI);k.top=v.value/2?(z<0?-1:1)*v.value:0),C=parseFloat(C.toFixed(s.value))}C=N(C,d.value,l.value),i("dragValue",C),a.value!==C&&(a.value=C),q(b)}function re(o){H.includes(o.keyCode)&&q(!0)}function q(o){e.modelValue!==a.value&&i("update:modelValue",a.value),o===!0&&i("change",a.value)}const ue=be(e);function ie(){return p("input",ue.value)}return()=>{const o={class:y.value,role:"slider","aria-valuemin":d.value,"aria-valuemax":l.value,"aria-valuenow":e.modelValue,...P.value,...Z.value,value:a.value,instantFeedback:x.value,...F.value},b={default:n.default};return f.value===!0&&e.name!==void 0&&(b.internal=ie),he(ke,o,b,"knob",f.value,()=>te.value)}}});export{$e as Q}; diff --git a/docs/assets/QKnob.af0fb19d.js b/docs/assets/QKnob.af0fb19d.js deleted file mode 100644 index 4b77e90..0000000 --- a/docs/assets/QKnob.af0fb19d.js +++ /dev/null @@ -1 +0,0 @@ -import{V as Ue,r as W,W as Ve,X as ne,I as oe,Y as R,q as B,A as We,s as U,x as _,Z as J,C as ve,$ as Ge,a0 as ee,F as Ze,a1 as Je,l as H,a2 as et,a3 as tt,a4 as nt,k as y,a5 as ze,a6 as Le,a7 as V,j as ge,a8 as Y,m as ot,a9 as lt,aa as it,ab as be,ac as at,ad as ut,ae as rt,af as st,B as ct,ag as dt,ah as se,ai as ce,aj as ft}from"./index.0ed11181.js";import{r as ke,c as vt,u as mt,b as ht,d as gt,e as bt,f as yt}from"./use-form.ff3f77cb.js";import{c as pt,g as xt}from"./scroll.f78dc32b.js";function De(){if(window.getSelection!==void 0){const e=window.getSelection();e.empty!==void 0?e.empty():e.removeAllRanges!==void 0&&(e.removeAllRanges(),Ue.is.mobile!==!0&&e.addRange(document.createRange()))}else document.selection!==void 0&&document.selection.empty()}const Ct={target:{default:!0},noParentEvent:Boolean,contextMenu:Boolean};function wt({showing:e,avoidEmit:n,configureAnchorEl:o}){const{props:a,proxy:t,emit:l}=_(),i=W(null);let s=null;function c(u){return i.value===null?!1:u===void 0||u.touches===void 0||u.touches.length<=1}const r={};o===void 0&&(Object.assign(r,{hide(u){t.hide(u)},toggle(u){t.toggle(u),u.qAnchorHandled=!0},toggleKey(u){Ve(u,13)===!0&&r.toggle(u)},contextClick(u){t.hide(u),ne(u),oe(()=>{t.show(u),u.qAnchorHandled=!0})},prevent:ne,mobileTouch(u){if(r.mobileCleanup(u),c(u)!==!0)return;t.hide(u),i.value.classList.add("non-selectable");const d=u.target;R(r,"anchor",[[d,"touchmove","mobileCleanup","passive"],[d,"touchend","mobileCleanup","passive"],[d,"touchcancel","mobileCleanup","passive"],[i.value,"contextmenu","prevent","notPassive"]]),s=setTimeout(()=>{s=null,t.show(u),u.qAnchorHandled=!0},300)},mobileCleanup(u){i.value.classList.remove("non-selectable"),s!==null&&(clearTimeout(s),s=null),e.value===!0&&u!==void 0&&De()}}),o=function(u=a.contextMenu){if(a.noParentEvent===!0||i.value===null)return;let d;u===!0?t.$q.platform.is.mobile===!0?d=[[i.value,"touchstart","mobileTouch","passive"]]:d=[[i.value,"mousedown","hide","passive"],[i.value,"contextmenu","contextClick","notPassive"]]:d=[[i.value,"click","toggle","passive"],[i.value,"keyup","toggleKey","passive"]],R(r,"anchor",d)});function f(){J(r,"anchor")}function v(u){for(i.value=u;i.value.classList.contains("q-anchor--skip");)i.value=i.value.parentNode;o()}function h(){if(a.target===!1||a.target===""||t.$el.parentNode===null)i.value=null;else if(a.target===!0)v(t.$el.parentNode);else{let u=a.target;if(typeof a.target=="string")try{u=document.querySelector(a.target)}catch{u=void 0}u!=null?(i.value=u.$el||u,o()):(i.value=null,console.error(`Anchor: target "${a.target}" not found`))}}return B(()=>a.contextMenu,u=>{i.value!==null&&(f(),o(u))}),B(()=>a.target,()=>{i.value!==null&&f(),h()}),B(()=>a.noParentEvent,u=>{i.value!==null&&(u===!0?f():o())}),We(()=>{h(),n!==!0&&a.modelValue===!0&&i.value===null&&l("update:modelValue",!1)}),U(()=>{s!==null&&clearTimeout(s),f()}),{anchorEl:i,canShow:c,anchorEvents:r}}function kt(e,n){const o=W(null);let a;function t(s,c){const r=`${c!==void 0?"add":"remove"}EventListener`,f=c!==void 0?c:a;s!==window&&s[r]("scroll",f,ve.passive),window[r]("scroll",f,ve.passive),a=c}function l(){o.value!==null&&(t(o.value),o.value=null)}const i=B(()=>e.noParentEvent,()=>{o.value!==null&&(l(),n())});return U(i),{localScrollTarget:o,unconfigureScrollTarget:l,changeScrollEvent:t}}const Et={modelValue:{type:Boolean,default:null},"onUpdate:modelValue":[Function,Array]},Mt=["beforeShow","show","beforeHide","hide"];function St({showing:e,canShow:n,hideOnRouteChange:o,handleShow:a,handleHide:t,processOnMount:l}){const i=_(),{props:s,emit:c,proxy:r}=i;let f;function v(g){e.value===!0?d(g):h(g)}function h(g){if(s.disable===!0||g!==void 0&&g.qAnchorHandled===!0||n!==void 0&&n(g)!==!0)return;const p=s["onUpdate:modelValue"]!==void 0;p===!0&&(c("update:modelValue",!0),f=g,oe(()=>{f===g&&(f=void 0)})),(s.modelValue===null||p===!1)&&u(g)}function u(g){e.value!==!0&&(e.value=!0,c("beforeShow",g),a!==void 0?a(g):c("show",g))}function d(g){if(s.disable===!0)return;const p=s["onUpdate:modelValue"]!==void 0;p===!0&&(c("update:modelValue",!1),f=g,oe(()=>{f===g&&(f=void 0)})),(s.modelValue===null||p===!1)&&w(g)}function w(g){e.value!==!1&&(e.value=!1,c("beforeHide",g),t!==void 0?t(g):c("hide",g))}function S(g){s.disable===!0&&g===!0?s["onUpdate:modelValue"]!==void 0&&c("update:modelValue",!1):g===!0!==e.value&&(g===!0?u:w)(f)}B(()=>s.modelValue,S),o!==void 0&&Ge(i)===!0&&B(()=>r.$route.fullPath,()=>{o.value===!0&&e.value===!0&&d()}),l===!0&&We(()=>{S(s.modelValue)});const P={show:h,hide:d,toggle:v};return Object.assign(r,P),P}const K=[];function en(e){return K.find(n=>n.contentEl!==null&&n.contentEl.contains(e))}function Ne(e,n){do{if(e.$options.name==="QMenu"){if(e.hide(n),e.$props.separateClosePopup===!0)return ee(e)}else if(e.__qPortal===!0){const o=ee(e);return o!==void 0&&o.$options.name==="QPopupProxy"?(e.hide(n),o):e}e=ee(e)}while(e!=null)}function tn(e,n,o){for(;o!==0&&e!==void 0&&e!==null;){if(e.__qPortal===!0){if(o--,e.$options.name==="QMenu"){e=Ne(e,n);continue}e.hide(n)}e=ee(e)}}function qt(e){for(e=e.parent;e!=null;){if(e.type.name==="QGlobalDialog")return!0;if(e.type.name==="QDialog"||e.type.name==="QMenu")return!1;e=e.parent}return!1}function Pt(e,n,o,a){const t=W(!1),l=W(!1);let i=null;const s={},c=a==="dialog"&&qt(e);function r(v){if(v===!0){ke(s),l.value=!0;return}l.value=!1,t.value===!1&&(c===!1&&i===null&&(i=tt(!1,a)),t.value=!0,K.push(e.proxy),vt(s))}function f(v){if(l.value=!1,v!==!0)return;ke(s),t.value=!1;const h=K.indexOf(e.proxy);h!==-1&&K.splice(h,1),i!==null&&(nt(i),i=null)}return Ze(()=>{f(!0)}),e.proxy.__qPortal=!0,Je(e.proxy,"contentEl",()=>n.value),{showPortal:r,hidePortal:f,portalIsActive:t,portalIsAccessible:l,renderPortal:()=>c===!0?o():t.value===!0?[H(et,{to:i},o())]:void 0}}const Tt={transitionShow:{type:String,default:"fade"},transitionHide:{type:String,default:"fade"},transitionDuration:{type:[String,Number],default:300}};function $t(e,n=()=>{},o=()=>{}){return{transitionProps:y(()=>{const a=`q-transition--${e.transitionShow||n()}`,t=`q-transition--${e.transitionHide||o()}`;return{appear:!0,enterFromClass:`${a}-enter-from`,enterActiveClass:`${a}-enter-active`,enterToClass:`${a}-enter-to`,leaveFromClass:`${t}-leave-from`,leaveActiveClass:`${t}-leave-active`,leaveToClass:`${t}-leave-to`}}),transitionStyle:y(()=>`--q-transition-duration: ${e.transitionDuration}ms`)}}function Ft(){let e;const n=_();function o(){e=void 0}return ze(o),U(o),{removeTick:o,registerTick(a){e=a,oe(()=>{e===a&&(Le(n)===!1&&e(),e=void 0)})}}}function Ht(){let e=null;const n=_();function o(){e!==null&&(clearTimeout(e),e=null)}return ze(o),U(o),{removeTimeout:o,registerTimeout(a,t){o(),Le(n)===!1&&(e=setTimeout(a,t))}}}const L=[];let j;function Bt(e){j=e.keyCode===27}function At(){j===!0&&(j=!1)}function Vt(e){j===!0&&(j=!1,Ve(e,27)===!0&&L[L.length-1](e))}function _e(e){window[e]("keydown",Bt),window[e]("blur",At),window[e]("keyup",Vt),j=!1}function Wt(e){V.is.desktop===!0&&(L.push(e),L.length===1&&_e("addEventListener"))}function Ee(e){const n=L.indexOf(e);n>-1&&(L.splice(n,1),L.length===0&&_e("removeEventListener"))}const D=[];function Oe(e){D[D.length-1](e)}function zt(e){V.is.desktop===!0&&(D.push(e),D.length===1&&document.body.addEventListener("focusin",Oe))}function Lt(e){const n=D.indexOf(e);n>-1&&(D.splice(n,1),D.length===0&&document.body.removeEventListener("focusin",Oe))}const{notPassiveCapture:le}=ve,N=[];function ie(e){const n=e.target;if(n===void 0||n.nodeType===8||n.classList.contains("no-pointer-events")===!0)return;let o=K.length-1;for(;o>=0;){const a=K[o].$;if(a.type.name==="QTooltip"){o--;continue}if(a.type.name!=="QDialog")break;if(a.props.seamless!==!0)return;o--}for(let a=N.length-1;a>=0;a--){const t=N[a];if((t.anchorEl.value===null||t.anchorEl.value.contains(n)===!1)&&(n===document.body||t.innerRef.value!==null&&t.innerRef.value.contains(n)===!1))e.qClickOutside=!0,t.onClickOutside(e);else return}}function Dt(e){N.push(e),N.length===1&&(document.addEventListener("mousedown",ie,le),document.addEventListener("touchstart",ie,le))}function Me(e){const n=N.findIndex(o=>o===e);n>-1&&(N.splice(n,1),N.length===0&&(document.removeEventListener("mousedown",ie,le),document.removeEventListener("touchstart",ie,le)))}let Se,qe;function Pe(e){const n=e.split(" ");return n.length!==2?!1:["top","center","bottom"].includes(n[0])!==!0?(console.error("Anchor/Self position must start with one of top/center/bottom"),!1):["left","middle","right","start","end"].includes(n[1])!==!0?(console.error("Anchor/Self position must end with one of left/middle/right/start/end"),!1):!0}function Nt(e){return e?!(e.length!==2||typeof e[0]!="number"||typeof e[1]!="number"):!0}const me={"start#ltr":"left","start#rtl":"right","end#ltr":"right","end#rtl":"left"};["left","middle","right"].forEach(e=>{me[`${e}#ltr`]=e,me[`${e}#rtl`]=e});function Te(e,n){const o=e.split(" ");return{vertical:o[0],horizontal:me[`${o[1]}#${n===!0?"rtl":"ltr"}`]}}function _t(e,n){let{top:o,left:a,right:t,bottom:l,width:i,height:s}=e.getBoundingClientRect();return n!==void 0&&(o-=n[1],a-=n[0],l+=n[1],t+=n[0],i+=n[0],s+=n[1]),{top:o,bottom:l,height:s,left:a,right:t,width:i,middle:a+(t-a)/2,center:o+(l-o)/2}}function Ot(e,n,o){let{top:a,left:t}=e.getBoundingClientRect();return a+=n.top,t+=n.left,o!==void 0&&(a+=o[1],t+=o[0]),{top:a,bottom:a+1,height:1,left:t,right:t+1,width:1,middle:t,center:a}}function Rt(e,n){return{top:0,center:n/2,bottom:n,left:0,middle:e/2,right:e}}function $e(e,n,o,a){return{top:e[o.vertical]-n[a.vertical],left:e[o.horizontal]-n[a.horizontal]}}function Re(e,n=0){if(e.targetEl===null||e.anchorEl===null||n>5)return;if(e.targetEl.offsetHeight===0||e.targetEl.offsetWidth===0){setTimeout(()=>{Re(e,n+1)},10);return}const{targetEl:o,offset:a,anchorEl:t,anchorOrigin:l,selfOrigin:i,absoluteOffset:s,fit:c,cover:r,maxHeight:f,maxWidth:v}=e;if(V.is.ios===!0&&window.visualViewport!==void 0){const A=document.body.style,{offsetLeft:k,offsetTop:T}=window.visualViewport;k!==Se&&(A.setProperty("--q-pe-left",k+"px"),Se=k),T!==qe&&(A.setProperty("--q-pe-top",T+"px"),qe=T)}const{scrollLeft:h,scrollTop:u}=o,d=s===void 0?_t(t,r===!0?[0,0]:a):Ot(t,s,a);Object.assign(o.style,{top:0,left:0,minWidth:null,minHeight:null,maxWidth:v||"100vw",maxHeight:f||"100vh",visibility:"visible"});const{offsetWidth:w,offsetHeight:S}=o,{elWidth:P,elHeight:g}=c===!0||r===!0?{elWidth:Math.max(d.width,w),elHeight:r===!0?Math.max(d.height,S):S}:{elWidth:w,elHeight:S};let p={maxWidth:v,maxHeight:f};(c===!0||r===!0)&&(p.minWidth=d.width+"px",r===!0&&(p.minHeight=d.height+"px")),Object.assign(o.style,p);const F=Rt(P,g);let x=$e(d,F,l,i);if(s===void 0||a===void 0)de(x,d,F,l,i);else{const{top:A,left:k}=x;de(x,d,F,l,i);let T=!1;if(x.top!==A){T=!0;const E=2*a[1];d.center=d.top-=E,d.bottom-=E+2}if(x.left!==k){T=!0;const E=2*a[0];d.middle=d.left-=E,d.right-=E+2}T===!0&&(x=$e(d,F,l,i),de(x,d,F,l,i))}p={top:x.top+"px",left:x.left+"px"},x.maxHeight!==void 0&&(p.maxHeight=x.maxHeight+"px",d.height>x.maxHeight&&(p.minHeight=p.maxHeight)),x.maxWidth!==void 0&&(p.maxWidth=x.maxWidth+"px",d.width>x.maxWidth&&(p.minWidth=p.maxWidth)),Object.assign(o.style,p),o.scrollTop!==u&&(o.scrollTop=u),o.scrollLeft!==h&&(o.scrollLeft=h)}function de(e,n,o,a,t){const l=o.bottom,i=o.right,s=pt(),c=window.innerHeight-s,r=document.body.clientWidth;if(e.top<0||e.top+l>c)if(t.vertical==="center")e.top=n[a.vertical]>c/2?Math.max(0,c-l):0,e.maxHeight=Math.min(l,c);else if(n[a.vertical]>c/2){const f=Math.min(c,a.vertical==="center"?n.center:a.vertical===t.vertical?n.bottom:n.top);e.maxHeight=Math.min(l,f),e.top=Math.max(0,f-l)}else e.top=Math.max(0,a.vertical==="center"?n.center:a.vertical===t.vertical?n.top:n.bottom),e.maxHeight=Math.min(l,c-e.top);if(e.left<0||e.left+i>r)if(e.maxWidth=Math.min(i,r),t.horizontal==="middle")e.left=n[a.horizontal]>r/2?Math.max(0,r-i):0;else if(n[a.horizontal]>r/2){const f=Math.min(r,a.horizontal==="middle"?n.middle:a.horizontal===t.horizontal?n.right:n.left);e.maxWidth=Math.min(i,f),e.left=Math.max(0,f-e.maxWidth)}else e.left=Math.max(0,a.horizontal==="middle"?n.middle:a.horizontal===t.horizontal?n.left:n.right),e.maxWidth=Math.min(i,r-e.left)}var nn=ge({name:"QMenu",inheritAttrs:!1,props:{...Ct,...Et,...mt,...Tt,persistent:Boolean,autoClose:Boolean,separateClosePopup:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,fit:Boolean,cover:Boolean,square:Boolean,anchor:{type:String,validator:Pe},self:{type:String,validator:Pe},offset:{type:Array,validator:Nt},scrollTarget:{default:void 0},touchPosition:Boolean,maxHeight:{type:String,default:null},maxWidth:{type:String,default:null}},emits:[...Mt,"click","escapeKey"],setup(e,{slots:n,emit:o,attrs:a}){let t=null,l,i,s;const c=_(),{proxy:r}=c,{$q:f}=r,v=W(null),h=W(!1),u=y(()=>e.persistent!==!0&&e.noRouteDismiss!==!0),d=ht(e,f),{registerTick:w,removeTick:S}=Ft(),{registerTimeout:P}=Ht(),{transitionProps:g,transitionStyle:p}=$t(e),{localScrollTarget:F,changeScrollEvent:x,unconfigureScrollTarget:A}=kt(e,Ce),{anchorEl:k,canShow:T}=wt({showing:h}),{hide:E}=St({showing:h,canShow:T,handleShow:q,handleHide:I,hideOnRouteChange:u,processOnMount:!0}),{showPortal:G,hidePortal:z,renderPortal:ae}=Pt(c,v,Ie,"menu"),Q={anchorEl:k,innerRef:v,onClickOutside(m){if(e.persistent!==!0&&h.value===!0)return E(m),(m.type==="touchstart"||m.target.classList.contains("q-dialog__backdrop"))&&be(m),!0}},b=y(()=>Te(e.anchor||(e.cover===!0?"center middle":"bottom start"),f.lang.rtl)),M=y(()=>e.cover===!0?b.value:Te(e.self||"top start",f.lang.rtl)),$=y(()=>(e.square===!0?" q-menu--square":"")+(d.value===!0?" q-menu--dark q-dark":"")),O=y(()=>e.autoClose===!0?{onClick:Qe}:{}),Z=y(()=>h.value===!0&&e.persistent!==!0);B(Z,m=>{m===!0?(Wt(ue),Dt(Q)):(Ee(ue),Me(Q))});function C(){gt(()=>{let m=v.value;m&&m.contains(document.activeElement)!==!0&&(m=m.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||m.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||m.querySelector("[autofocus], [data-autofocus]")||m,m.focus({preventScroll:!0}))})}function q(m){if(t=e.noRefocus===!1?document.activeElement:null,zt(we),G(),Ce(),l=void 0,m!==void 0&&(e.touchPosition||e.contextMenu)){const re=Y(m);if(re.left!==void 0){const{top:Xe,left:Ye}=k.value.getBoundingClientRect();l={left:re.left-Ye,top:re.top-Xe}}}i===void 0&&(i=B(()=>f.screen.width+"|"+f.screen.height+"|"+e.self+"|"+e.anchor+"|"+f.lang.rtl,X)),e.noFocus!==!0&&document.activeElement.blur(),w(()=>{X(),e.noFocus!==!0&&C()}),P(()=>{f.platform.is.ios===!0&&(s=e.autoClose,v.value.click()),X(),G(!0),o("show",m)},e.transitionDuration)}function I(m){S(),z(),xe(!0),t!==null&&(m===void 0||m.qClickOutside!==!0)&&(((m&&m.type.indexOf("key")===0?t.closest('[tabindex]:not([tabindex^="-"])'):void 0)||t).focus(),t=null),P(()=>{z(!0),o("hide",m)},e.transitionDuration)}function xe(m){l=void 0,i!==void 0&&(i(),i=void 0),(m===!0||h.value===!0)&&(Lt(we),A(),Me(Q),Ee(ue)),m!==!0&&(t=null)}function Ce(){(k.value!==null||e.scrollTarget!==void 0)&&(F.value=xt(k.value,e.scrollTarget),x(F.value,X))}function Qe(m){s!==!0?(Ne(r,m),o("click",m)):s=!1}function we(m){Z.value===!0&&e.noFocus!==!0&&it(v.value,m.target)!==!0&&C()}function ue(m){o("escapeKey"),E(m)}function X(){Re({targetEl:v.value,offset:e.offset,anchorEl:k.value,anchorOrigin:b.value,selfOrigin:M.value,absoluteOffset:l,fit:e.fit,cover:e.cover,maxHeight:e.maxHeight,maxWidth:e.maxWidth})}function Ie(){return H(lt,g.value,()=>h.value===!0?H("div",{role:"menu",...a,ref:v,tabindex:-1,class:["q-menu q-position-engine scroll"+$.value,a.class],style:[a.style,p.value],...O.value},ot(n.default)):null)}return U(xe),Object.assign(r,{focus:C,updatePosition:X}),ae}});const ye={...at,min:{type:Number,default:0},max:{type:Number,default:100},color:String,centerColor:String,trackColor:String,fontSize:String,rounded:Boolean,thickness:{type:Number,default:.2,validator:e=>e>=0&&e<=1},angle:{type:Number,default:0},showValue:Boolean,reverse:Boolean,instantFeedback:Boolean};function te(e,n,o){return o<=n?n:Math.min(o,Math.max(n,e))}function Fe(e,n,o){if(o<=n)return n;const a=o-n+1;let t=n+(e-n)%a;return t{const u=(o.lang.rtl===!0?-1:1)*e.angle;return{transform:e.reverse!==(o.lang.rtl===!0)?`scale3d(-1, 1, 1) rotate3d(0, 0, 1, ${-90-u}deg)`:`rotate3d(0, 0, 1, ${u-90}deg)`}}),l=y(()=>e.instantFeedback!==!0&&e.indeterminate!==!0?{transition:`stroke-dashoffset ${e.animationSpeed}ms ease 0s, stroke ${e.animationSpeed}ms ease`}:""),i=y(()=>Ke/(1-e.thickness/2)),s=y(()=>`${i.value/2} ${i.value/2} ${i.value} ${i.value}`),c=y(()=>te(e.value,e.min,e.max)),r=y(()=>e.max-e.min),f=y(()=>e.thickness/2*i.value),v=y(()=>{const u=(e.max-c.value)/r.value,d=e.rounded===!0&&c.value{const u=[];e.centerColor!==void 0&&e.centerColor!=="transparent"&&u.push(H("circle",{class:`q-circular-progress__center text-${e.centerColor}`,fill:"currentColor",r:he-f.value/2,cx:i.value,cy:i.value})),e.trackColor!==void 0&&e.trackColor!=="transparent"&&u.push(h({cls:"track",thickness:f.value,offset:0,color:e.trackColor})),u.push(h({cls:"circle",thickness:f.value,offset:v.value,color:e.color,rounded:e.rounded===!0?"round":void 0}));const d=[H("svg",{class:"q-circular-progress__svg",style:t.value,viewBox:s.value,"aria-hidden":"true"},u)];return e.showValue===!0&&d.push(H("div",{class:"q-circular-progress__text absolute-full row flex-center content-center",style:{fontSize:e.fontSize}},n.default!==void 0?n.default():[H("div",c.value)])),H("div",{class:`q-circular-progress q-circular-progress--${e.indeterminate===!0?"in":""}determinate`,style:a.value,role:"progressbar","aria-valuemin":e.min,"aria-valuemax":e.max,"aria-valuenow":e.indeterminate===!0?void 0:c.value},rt(n.internal,d))}}});const pe={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0},Qt=Object.keys(pe);pe.all=!0;function He(e){const n={};for(const o of Qt)e[o]===!0&&(n[o]=!0);return Object.keys(n).length===0?pe:(n.horizontal===!0?n.left=n.right=!0:n.left===!0&&n.right===!0&&(n.horizontal=!0),n.vertical===!0?n.up=n.down=!0:n.up===!0&&n.down===!0&&(n.vertical=!0),n.horizontal===!0&&n.vertical===!0&&(n.all=!0),n)}const It=["INPUT","TEXTAREA"];function Be(e,n){return n.event===void 0&&e.target!==void 0&&e.target.draggable!==!0&&typeof n.handler=="function"&&It.includes(e.target.nodeName.toUpperCase())===!1&&(e.qClonedBy===void 0||e.qClonedBy.indexOf(n.uid)===-1)}function fe(e,n,o){const a=Y(e);let t,l=a.left-n.event.x,i=a.top-n.event.y,s=Math.abs(l),c=Math.abs(i);const r=n.direction;r.horizontal===!0&&r.vertical!==!0?t=l<0?"left":"right":r.horizontal!==!0&&r.vertical===!0?t=i<0?"up":"down":r.up===!0&&i<0?(t="up",s>c&&(r.left===!0&&l<0?t="left":r.right===!0&&l>0&&(t="right"))):r.down===!0&&i>0?(t="down",s>c&&(r.left===!0&&l<0?t="left":r.right===!0&&l>0&&(t="right"))):r.left===!0&&l<0?(t="left",s0&&(t="down"))):r.right===!0&&l>0&&(t="right",s0&&(t="down")));let f=!1;if(t===void 0&&o===!1){if(n.event.isFirst===!0||n.event.lastDir===void 0)return{};t=n.event.lastDir,f=!0,t==="left"||t==="right"?(a.left-=l,s=0,l=0):(a.top-=i,c=0,i=0)}return{synthetic:f,payload:{evt:e,touch:n.event.mouse!==!0,mouse:n.event.mouse===!0,position:a,direction:t,isFirst:n.event.isFirst,isFinal:o===!0,duration:Date.now()-n.event.time,distance:{x:s,y:c},offset:{x:l,y:i},delta:{x:a.left-n.event.lastX,y:a.top-n.event.lastY}}}}let Xt=0;var Yt=st({name:"touch-pan",beforeMount(e,{value:n,modifiers:o}){if(o.mouse!==!0&&V.has.touch!==!0)return;function a(l,i){o.mouse===!0&&i===!0?be(l):(o.stop===!0&&ce(l),o.prevent===!0&&ne(l))}const t={uid:"qvtp_"+Xt++,handler:n,modifiers:o,direction:He(o),noop:ct,mouseStart(l){Be(l,t)&&dt(l)&&(R(t,"temp",[[document,"mousemove","move","notPassiveCapture"],[document,"mouseup","end","passiveCapture"]]),t.start(l,!0))},touchStart(l){if(Be(l,t)){const i=l.target;R(t,"temp",[[i,"touchmove","move","notPassiveCapture"],[i,"touchcancel","end","passiveCapture"],[i,"touchend","end","passiveCapture"]]),t.start(l)}},start(l,i){if(V.is.firefox===!0&&se(e,!0),t.lastEvt=l,i===!0||o.stop===!0){if(t.direction.all!==!0&&(i!==!0||t.modifiers.mouseAllDir!==!0&&t.modifiers.mousealldir!==!0)){const r=l.type.indexOf("mouse")>-1?new MouseEvent(l.type,l):new TouchEvent(l.type,l);l.defaultPrevented===!0&&ne(r),l.cancelBubble===!0&&ce(r),Object.assign(r,{qKeyEvent:l.qKeyEvent,qClickOutside:l.qClickOutside,qAnchorHandled:l.qAnchorHandled,qClonedBy:l.qClonedBy===void 0?[t.uid]:l.qClonedBy.concat(t.uid)}),t.initialEvent={target:l.target,event:r}}ce(l)}const{left:s,top:c}=Y(l);t.event={x:s,y:c,time:Date.now(),mouse:i===!0,detected:!1,isFirst:!0,isFinal:!1,lastX:s,lastY:c}},move(l){if(t.event===void 0)return;const i=Y(l),s=i.left-t.event.x,c=i.top-t.event.y;if(s===0&&c===0)return;t.lastEvt=l;const r=t.event.mouse===!0,f=()=>{a(l,r);let u;o.preserveCursor!==!0&&o.preservecursor!==!0&&(u=document.documentElement.style.cursor||"",document.documentElement.style.cursor="grabbing"),r===!0&&document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),De(),t.styleCleanup=d=>{if(t.styleCleanup=void 0,u!==void 0&&(document.documentElement.style.cursor=u),document.body.classList.remove("non-selectable"),r===!0){const w=()=>{document.body.classList.remove("no-pointer-events--children")};d!==void 0?setTimeout(()=>{w(),d()},50):w()}else d!==void 0&&d()}};if(t.event.detected===!0){t.event.isFirst!==!0&&a(l,t.event.mouse);const{payload:u,synthetic:d}=fe(l,t,!1);u!==void 0&&(t.handler(u)===!1?t.end(l):(t.styleCleanup===void 0&&t.event.isFirst===!0&&f(),t.event.lastX=u.position.left,t.event.lastY=u.position.top,t.event.lastDir=d===!0?void 0:u.direction,t.event.isFirst=!1));return}if(t.direction.all===!0||r===!0&&(t.modifiers.mouseAllDir===!0||t.modifiers.mousealldir===!0)){f(),t.event.detected=!0,t.move(l);return}const v=Math.abs(s),h=Math.abs(c);v!==h&&(t.direction.horizontal===!0&&v>h||t.direction.vertical===!0&&v0||t.direction.left===!0&&v>h&&s<0||t.direction.right===!0&&v>h&&s>0?(t.event.detected=!0,t.move(l)):t.end(l,!0))},end(l,i){if(t.event!==void 0){if(J(t,"temp"),V.is.firefox===!0&&se(e,!1),i===!0)t.styleCleanup!==void 0&&t.styleCleanup(),t.event.detected!==!0&&t.initialEvent!==void 0&&t.initialEvent.target.dispatchEvent(t.initialEvent.event);else if(t.event.detected===!0){t.event.isFirst===!0&&t.handler(fe(l===void 0?t.lastEvt:l,t).payload);const{payload:s}=fe(l===void 0?t.lastEvt:l,t,!0),c=()=>{t.handler(s)};t.styleCleanup!==void 0?t.styleCleanup(c):c()}t.event=void 0,t.initialEvent=void 0,t.lastEvt=void 0}}};if(e.__qtouchpan=t,o.mouse===!0){const l=o.mouseCapture===!0||o.mousecapture===!0?"Capture":"";R(t,"main",[[e,"mousedown","mouseStart",`passive${l}`]])}V.has.touch===!0&&R(t,"main",[[e,"touchstart","touchStart",`passive${o.capture===!0?"Capture":""}`],[e,"touchmove","noop","notPassiveCapture"]])},updated(e,n){const o=e.__qtouchpan;o!==void 0&&(n.oldValue!==n.value&&(typeof value!="function"&&o.end(),o.handler=n.value),o.direction=He(n.modifiers))},beforeUnmount(e){const n=e.__qtouchpan;n!==void 0&&(n.event!==void 0&&n.end(),J(n,"main"),J(n,"temp"),V.is.firefox===!0&&se(e,!1),n.styleCleanup!==void 0&&n.styleCleanup(),delete e.__qtouchpan)}});const Ae=[34,37,40,33,39,38],Ut=Object.keys(ye);var on=ge({name:"QKnob",props:{...bt,...ye,modelValue:{type:Number,required:!0},innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:e=>e>=0},tabindex:{type:[Number,String],default:0},disable:Boolean,readonly:Boolean},emits:["update:modelValue","change","dragValue"],setup(e,{slots:n,emit:o}){const{proxy:a}=_(),{$q:t}=a,l=W(e.modelValue),i=W(!1),s=y(()=>isNaN(e.innerMin)===!0||e.innerMinisNaN(e.innerMax)===!0||e.innerMax>e.max?e.max:e.innerMax);let r;function f(){l.value=e.modelValue===null?s.value:te(e.modelValue,s.value,c.value),z(!0)}B(()=>`${e.modelValue}|${s.value}|${c.value}`,f),f();const v=y(()=>e.disable===!1&&e.readonly===!1),h=y(()=>"q-knob non-selectable"+(v.value===!0?" q-knob--editable":e.disable===!0?" disabled":"")),u=y(()=>(String(e.step).trim().split(".")[1]||"").length),d=y(()=>e.step===0?1:e.step),w=y(()=>e.instantFeedback===!0||i.value===!0),S=t.platform.is.mobile===!0?y(()=>v.value===!0?{onClick:k}:{}):y(()=>v.value===!0?{onMousedown:A,onClick:k,onKeydown:T,onKeyup:G}:{}),P=y(()=>v.value===!0?{tabindex:e.tabindex}:{[`aria-${e.disable===!0?"disabled":"readonly"}`]:"true"}),g=y(()=>{const b={};return Ut.forEach(M=>{b[M]=e[M]}),b});function p(b){b.isFinal?(E(b.evt,!0),i.value=!1):(b.isFirst&&(x(),i.value=!0),E(b.evt))}const F=y(()=>[[Yt,p,void 0,{prevent:!0,stop:!0,mouse:!0}]]);function x(){const{top:b,left:M,width:$,height:O}=a.$el.getBoundingClientRect();r={top:b+O/2,left:M+$/2}}function A(b){x(),E(b)}function k(b){x(),E(b,!0)}function T(b){if(!Ae.includes(b.keyCode))return;be(b);const M=([34,33].includes(b.keyCode)?10:1)*d.value,$=[34,37,40].includes(b.keyCode)?-M:M;l.value=te(parseFloat((l.value+$).toFixed(u.value)),s.value,c.value),z()}function E(b,M){const $=Y(b),O=Math.abs($.top-r.top),Z=Math.sqrt(O**2+Math.abs($.left-r.left)**2);let C=Math.asin(O/Z)*(180/Math.PI);$.top=d.value/2?(I<0?-1:1)*d.value:0),q=parseFloat(q.toFixed(u.value))}q=te(q,s.value,c.value),o("dragValue",q),l.value!==q&&(l.value=q),z(M)}function G(b){Ae.includes(b.keyCode)&&z(!0)}function z(b){e.modelValue!==l.value&&o("update:modelValue",l.value),b===!0&&o("change",l.value)}const ae=yt(e);function Q(){return H("input",ae.value)}return()=>{const b={class:h.value,role:"slider","aria-valuemin":s.value,"aria-valuemax":c.value,"aria-valuenow":e.modelValue,...P.value,...g.value,value:l.value,instantFeedback:w.value,...S.value},M={default:n.default};return v.value===!0&&e.name!==void 0&&(M.internal=Q),ft(jt,b,M,"knob",v.value,()=>F.value)}}});export{nn as Q,on as a,Tt as b,Mt as c,Ht as d,Ft as e,$t as f,Pt as g,St as h,Ee as i,zt as j,Wt as k,en as l,tn as m,Fe as n,Lt as r,Et as u}; diff --git a/docs/assets/QLayout.f1a18fb7.js b/docs/assets/QLayout.b7c5abd4.js similarity index 52% rename from docs/assets/QLayout.f1a18fb7.js rename to docs/assets/QLayout.b7c5abd4.js index 857781c..f4c8b73 100644 --- a/docs/assets/QLayout.f1a18fb7.js +++ b/docs/assets/QLayout.b7c5abd4.js @@ -1 +1 @@ -import{j as L,n as j,p as T,y as M,k as c,l as d,m as A,v as O,z as D,x as q,q as P,A as K,s as N,B as U,C as V,r as m,D as k,E as x,F as G,G as I}from"./index.0ed11181.js";import{g as _,a as J,b as X,c as $}from"./scroll.f78dc32b.js";import{Q as E}from"./QResizeObserver.f9785bfd.js";var ne=L({name:"QPageContainer",setup(e,{slots:p}){const{proxy:{$q:n}}=q(),o=j(O,T);if(o===T)return console.error("QPageContainer needs to be child of QLayout"),T;M(D,!0);const r=c(()=>{const a={};return o.header.space===!0&&(a.paddingTop=`${o.header.size}px`),o.right.space===!0&&(a[`padding${n.lang.rtl===!0?"Left":"Right"}`]=`${o.right.size}px`),o.footer.space===!0&&(a.paddingBottom=`${o.footer.size}px`),o.left.space===!0&&(a[`padding${n.lang.rtl===!0?"Right":"Left"}`]=`${o.left.size}px`),a});return()=>d("div",{class:"q-page-container",style:r.value},A(p.default))}});const{passive:F}=V,Y=["both","horizontal","vertical"];var Z=L({name:"QScrollObserver",props:{axis:{type:String,validator:e=>Y.includes(e),default:"vertical"},debounce:[String,Number],scrollTarget:{default:void 0}},emits:["scroll"],setup(e,{emit:p}){const n={position:{top:0,left:0},direction:"down",directionChanged:!1,delta:{top:0,left:0},inflectionPoint:{top:0,left:0}};let o=null,r,a;P(()=>e.scrollTarget,()=>{f(),y()});function u(){o!==null&&o();const g=Math.max(0,J(r)),h=X(r),s={top:g-n.position.top,left:h-n.position.left};if(e.axis==="vertical"&&s.top===0||e.axis==="horizontal"&&s.left===0)return;const z=Math.abs(s.top)>=Math.abs(s.left)?s.top<0?"up":"down":s.left<0?"left":"right";n.position={top:g,left:h},n.directionChanged=n.direction!==z,n.delta=s,n.directionChanged===!0&&(n.direction=z,n.inflectionPoint=n.position),p("scroll",{...n})}function y(){r=_(a,e.scrollTarget),r.addEventListener("scroll",l,F),l(!0)}function f(){r!==void 0&&(r.removeEventListener("scroll",l,F),r=void 0)}function l(g){if(g===!0||e.debounce===0||e.debounce==="0")u();else if(o===null){const[h,s]=e.debounce?[setTimeout(u,e.debounce),clearTimeout]:[requestAnimationFrame(u),cancelAnimationFrame];o=()=>{s(h),o=null}}}const{proxy:b}=q();return P(()=>b.$q.lang.rtl,u),K(()=>{a=b.$el.parentNode,y()}),N(()=>{o!==null&&o(),f()}),Object.assign(b,{trigger:l,getPosition:()=>n}),U}}),ie=L({name:"QLayout",props:{container:Boolean,view:{type:String,default:"hhh lpr fff",validator:e=>/^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(e.toLowerCase())},onScroll:Function,onScrollHeight:Function,onResize:Function},setup(e,{slots:p,emit:n}){const{proxy:{$q:o}}=q(),r=m(null),a=m(o.screen.height),u=m(e.container===!0?0:o.screen.width),y=m({position:0,direction:"down",inflectionPoint:0}),f=m(0),l=m(k.value===!0?0:$()),b=c(()=>"q-layout q-layout--"+(e.container===!0?"containerized":"standard")),g=c(()=>e.container===!1?{minHeight:o.screen.height+"px"}:null),h=c(()=>l.value!==0?{[o.lang.rtl===!0?"left":"right"]:`${l.value}px`}:null),s=c(()=>l.value!==0?{[o.lang.rtl===!0?"right":"left"]:0,[o.lang.rtl===!0?"left":"right"]:`-${l.value}px`,width:`calc(100% + ${l.value}px)`}:null);function z(t){if(e.container===!0||document.qScrollPrevented!==!0){const i={position:t.position.top,direction:t.direction,directionChanged:t.directionChanged,inflectionPoint:t.inflectionPoint.top,delta:t.delta.top};y.value=i,e.onScroll!==void 0&&n("scroll",i)}}function W(t){const{height:i,width:v}=t;let S=!1;a.value!==i&&(S=!0,a.value=i,e.onScrollHeight!==void 0&&n("scrollHeight",i),R()),u.value!==v&&(S=!0,u.value=v),S===!0&&e.onResize!==void 0&&n("resize",t)}function B({height:t}){f.value!==t&&(f.value=t,R())}function R(){if(e.container===!0){const t=a.value>f.value?$():0;l.value!==t&&(l.value=t)}}let w=null;const Q={instances:{},view:c(()=>e.view),isContainer:c(()=>e.container),rootRef:r,height:a,containerHeight:f,scrollbarWidth:l,totalWidth:c(()=>u.value+l.value),rows:c(()=>{const t=e.view.toLowerCase().split(" ");return{top:t[0].split(""),middle:t[1].split(""),bottom:t[2].split("")}}),header:x({size:0,offset:0,space:!1}),right:x({size:300,offset:0,space:!1}),footer:x({size:0,offset:0,space:!1}),left:x({size:300,offset:0,space:!1}),scroll:y,animate(){w!==null?clearTimeout(w):document.body.classList.add("q-body--layout-animate"),w=setTimeout(()=>{w=null,document.body.classList.remove("q-body--layout-animate")},155)},update(t,i,v){Q[t][i]=v}};if(M(O,Q),$()>0){let v=function(){t=null,i.classList.remove("hide-scrollbar")},S=function(){if(t===null){if(i.scrollHeight>o.screen.height)return;i.classList.add("hide-scrollbar")}else clearTimeout(t);t=setTimeout(v,300)},C=function(H){t!==null&&H==="remove"&&(clearTimeout(t),v()),window[`${H}EventListener`]("resize",S)},t=null;const i=document.body;P(()=>e.container!==!0?"add":"remove",C),e.container!==!0&&C("add"),G(()=>{C("remove")})}return()=>{const t=I(p.default,[d(Z,{onScroll:z}),d(E,{onResize:W})]),i=d("div",{class:b.value,style:g.value,ref:e.container===!0?void 0:r,tabindex:-1},t);return e.container===!0?d("div",{class:"q-layout-container overflow-hidden",ref:r},[d(E,{onResize:B}),d("div",{class:"absolute-full",style:h.value},[d("div",{class:"scroll",style:s.value},[i])])]):i}}});export{ie as Q,ne as a}; +import{y as P,i as A,A as T,B as M,E as O,f as c,h as d,z as K,G as j,g as R,w as L,o as I,C as N,H as U,I as V,r as m,J as D,K as x,c as G,L as J}from"./index.ab4869ca.js";import{g as _,a as k,b as X,c as $}from"./scroll.270b929d.js";import{Q as E}from"./QResizeObserver.b57e8b42.js";var ne=P({name:"QPageContainer",setup(e,{slots:p}){const{proxy:{$q:n}}=R(),o=A(M,T);if(o===T)return console.error("QPageContainer needs to be child of QLayout"),T;O(j,!0);const r=c(()=>{const a={};return o.header.space===!0&&(a.paddingTop=`${o.header.size}px`),o.right.space===!0&&(a[`padding${n.lang.rtl===!0?"Left":"Right"}`]=`${o.right.size}px`),o.footer.space===!0&&(a.paddingBottom=`${o.footer.size}px`),o.left.space===!0&&(a[`padding${n.lang.rtl===!0?"Right":"Left"}`]=`${o.left.size}px`),a});return()=>d("div",{class:"q-page-container",style:r.value},K(p.default))}});const{passive:F}=V,Y=["both","horizontal","vertical"];var Z=P({name:"QScrollObserver",props:{axis:{type:String,validator:e=>Y.includes(e),default:"vertical"},debounce:[String,Number],scrollTarget:{default:void 0}},emits:["scroll"],setup(e,{emit:p}){const n={position:{top:0,left:0},direction:"down",directionChanged:!1,delta:{top:0,left:0},inflectionPoint:{top:0,left:0}};let o=null,r,a;L(()=>e.scrollTarget,()=>{f(),y()});function u(){o!==null&&o();const v=Math.max(0,k(r)),h=X(r),s={top:v-n.position.top,left:h-n.position.left};if(e.axis==="vertical"&&s.top===0||e.axis==="horizontal"&&s.left===0)return;const w=Math.abs(s.top)>=Math.abs(s.left)?s.top<0?"up":"down":s.left<0?"left":"right";n.position={top:v,left:h},n.directionChanged=n.direction!==w,n.delta=s,n.directionChanged===!0&&(n.direction=w,n.inflectionPoint=n.position),p("scroll",{...n})}function y(){r=_(a,e.scrollTarget),r.addEventListener("scroll",l,F),l(!0)}function f(){r!==void 0&&(r.removeEventListener("scroll",l,F),r=void 0)}function l(v){if(v===!0||e.debounce===0||e.debounce==="0")u();else if(o===null){const[h,s]=e.debounce?[setTimeout(u,e.debounce),clearTimeout]:[requestAnimationFrame(u),cancelAnimationFrame];o=()=>{s(h),o=null}}}const{proxy:b}=R();return L(()=>b.$q.lang.rtl,u),I(()=>{a=b.$el.parentNode,y()}),N(()=>{o!==null&&o(),f()}),Object.assign(b,{trigger:l,getPosition:()=>n}),U}}),ie=P({name:"QLayout",props:{container:Boolean,view:{type:String,default:"hhh lpr fff",validator:e=>/^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(e.toLowerCase())},onScroll:Function,onScrollHeight:Function,onResize:Function},setup(e,{slots:p,emit:n}){const{proxy:{$q:o}}=R(),r=m(null),a=m(o.screen.height),u=m(e.container===!0?0:o.screen.width),y=m({position:0,direction:"down",inflectionPoint:0}),f=m(0),l=m(D.value===!0?0:$()),b=c(()=>"q-layout q-layout--"+(e.container===!0?"containerized":"standard")),v=c(()=>e.container===!1?{minHeight:o.screen.height+"px"}:null),h=c(()=>l.value!==0?{[o.lang.rtl===!0?"left":"right"]:`${l.value}px`}:null),s=c(()=>l.value!==0?{[o.lang.rtl===!0?"right":"left"]:0,[o.lang.rtl===!0?"left":"right"]:`-${l.value}px`,width:`calc(100% + ${l.value}px)`}:null);function w(t){if(e.container===!0||document.qScrollPrevented!==!0){const i={position:t.position.top,direction:t.direction,directionChanged:t.directionChanged,inflectionPoint:t.inflectionPoint.top,delta:t.delta.top};y.value=i,e.onScroll!==void 0&&n("scroll",i)}}function W(t){const{height:i,width:g}=t;let S=!1;a.value!==i&&(S=!0,a.value=i,e.onScrollHeight!==void 0&&n("scrollHeight",i),q()),u.value!==g&&(S=!0,u.value=g),S===!0&&e.onResize!==void 0&&n("resize",t)}function B({height:t}){f.value!==t&&(f.value=t,q())}function q(){if(e.container===!0){const t=a.value>f.value?$():0;l.value!==t&&(l.value=t)}}let z=null;const Q={instances:{},view:c(()=>e.view),isContainer:c(()=>e.container),rootRef:r,height:a,containerHeight:f,scrollbarWidth:l,totalWidth:c(()=>u.value+l.value),rows:c(()=>{const t=e.view.toLowerCase().split(" ");return{top:t[0].split(""),middle:t[1].split(""),bottom:t[2].split("")}}),header:x({size:0,offset:0,space:!1}),right:x({size:300,offset:0,space:!1}),footer:x({size:0,offset:0,space:!1}),left:x({size:300,offset:0,space:!1}),scroll:y,animate(){z!==null?clearTimeout(z):document.body.classList.add("q-body--layout-animate"),z=setTimeout(()=>{z=null,document.body.classList.remove("q-body--layout-animate")},155)},update(t,i,g){Q[t][i]=g}};if(O(M,Q),$()>0){let g=function(){t=null,i.classList.remove("hide-scrollbar")},S=function(){if(t===null){if(i.scrollHeight>o.screen.height)return;i.classList.add("hide-scrollbar")}else clearTimeout(t);t=setTimeout(g,300)},C=function(H){t!==null&&H==="remove"&&(clearTimeout(t),g()),window[`${H}EventListener`]("resize",S)},t=null;const i=document.body;L(()=>e.container!==!0?"add":"remove",C),e.container!==!0&&C("add"),G(()=>{C("remove")})}return()=>{const t=J(p.default,[d(Z,{onScroll:w}),d(E,{onResize:W})]),i=d("div",{class:b.value,style:v.value,ref:e.container===!0?void 0:r,tabindex:-1},t);return e.container===!0?d("div",{class:"q-layout-container overflow-hidden",ref:r},[d(E,{onResize:B}),d("div",{class:"absolute-full",style:h.value},[d("div",{class:"scroll",style:s.value},[i])])]):i}}});export{ie as Q,ne as a}; diff --git a/docs/assets/QLinearProgress.1c886b96.js b/docs/assets/QLinearProgress.1c886b96.js new file mode 100644 index 0000000..f3b5cd0 --- /dev/null +++ b/docs/assets/QLinearProgress.1c886b96.js @@ -0,0 +1 @@ +import{u as b,b as k}from"./QCard.eb99e114.js";import{y as S,ae as h,af as C,f as r,h as t,L as x,g as B}from"./index.ab4869ca.js";const w={xs:2,sm:4,md:6,lg:10,xl:14};function d(e,l,a){return{transform:l===!0?`translateX(${a.lang.rtl===!0?"-":""}100%) scale3d(${-e},1,1)`:`scale3d(${e},1,1)`}}var D=S({name:"QLinearProgress",props:{...b,...h,value:{type:Number,default:0},buffer:Number,color:String,trackColor:String,reverse:Boolean,stripe:Boolean,indeterminate:Boolean,query:Boolean,rounded:Boolean,animationSpeed:{type:[String,Number],default:2100},instantFeedback:Boolean},setup(e,{slots:l}){const{proxy:a}=B(),c=k(e,a.$q),u=C(e,w),s=r(()=>e.indeterminate===!0||e.query===!0),o=r(()=>e.reverse!==e.query),v=r(()=>({...u.value!==null?u.value:{},"--q-linear-progress-speed":`${e.animationSpeed}ms`})),m=r(()=>"q-linear-progress"+(e.color!==void 0?` text-${e.color}`:"")+(e.reverse===!0||e.query===!0?" q-linear-progress--reverse":"")+(e.rounded===!0?" rounded-borders":"")),g=r(()=>d(e.buffer!==void 0?e.buffer:1,o.value,a.$q)),n=r(()=>`with${e.instantFeedback===!0?"out":""}-transition`),f=r(()=>`q-linear-progress__track absolute-full q-linear-progress__track--${n.value} q-linear-progress__track--${c.value===!0?"dark":"light"}`+(e.trackColor!==void 0?` bg-${e.trackColor}`:"")),q=r(()=>d(s.value===!0?1:e.value,o.value,a.$q)),y=r(()=>`q-linear-progress__model absolute-full q-linear-progress__model--${n.value} q-linear-progress__model--${s.value===!0?"in":""}determinate`),$=r(()=>({width:`${e.value*100}%`})),_=r(()=>`q-linear-progress__stripe absolute-${e.reverse===!0?"right":"left"} q-linear-progress__stripe--${n.value}`);return()=>{const i=[t("div",{class:f.value,style:g.value}),t("div",{class:y.value,style:q.value})];return e.stripe===!0&&s.value===!1&&i.push(t("div",{class:_.value,style:$.value})),t("div",{class:m.value,style:v.value,role:"progressbar","aria-valuemin":0,"aria-valuemax":1,"aria-valuenow":e.indeterminate===!0?void 0:e.value},x(l.default,i))}}});export{D as Q}; diff --git a/docs/assets/QPage.9c21063d.js b/docs/assets/QPage.d12e44a1.js similarity index 57% rename from docs/assets/QPage.9c21063d.js rename to docs/assets/QPage.d12e44a1.js index 3b3fb57..075e0b0 100644 --- a/docs/assets/QPage.9c21063d.js +++ b/docs/assets/QPage.d12e44a1.js @@ -1 +1 @@ -import{j as g,n as r,p as t,k as s,l as p,m as h,v as d,z as y,x as f}from"./index.0ed11181.js";var C=g({name:"QPage",props:{padding:Boolean,styleFn:Function},setup(a,{slots:i}){const{proxy:{$q:o}}=f(),e=r(d,t);if(e===t)return console.error("QPage needs to be a deep child of QLayout"),t;if(r(y,t)===t)return console.error("QPage needs to be child of QPageContainer"),t;const c=s(()=>{const n=(e.header.space===!0?e.header.size:0)+(e.footer.space===!0?e.footer.size:0);if(typeof a.styleFn=="function"){const l=e.isContainer.value===!0?e.containerHeight.value:o.screen.height;return a.styleFn(n,l)}return{minHeight:e.isContainer.value===!0?e.containerHeight.value-n+"px":o.screen.height===0?n!==0?`calc(100vh - ${n}px)`:"100vh":o.screen.height-n+"px"}}),u=s(()=>`q-page${a.padding===!0?" q-layout-padding":""}`);return()=>p("main",{class:u.value,style:c.value},h(i.default))}});export{C as Q}; +import{y as g,i as r,A as t,B as h,G as p,f as s,h as d,z as y,g as f}from"./index.ab4869ca.js";var C=g({name:"QPage",props:{padding:Boolean,styleFn:Function},setup(a,{slots:i}){const{proxy:{$q:o}}=f(),e=r(h,t);if(e===t)return console.error("QPage needs to be a deep child of QLayout"),t;if(r(p,t)===t)return console.error("QPage needs to be child of QPageContainer"),t;const c=s(()=>{const n=(e.header.space===!0?e.header.size:0)+(e.footer.space===!0?e.footer.size:0);if(typeof a.styleFn=="function"){const l=e.isContainer.value===!0?e.containerHeight.value:o.screen.height;return a.styleFn(n,l)}return{minHeight:e.isContainer.value===!0?e.containerHeight.value-n+"px":o.screen.height===0?n!==0?`calc(100vh - ${n}px)`:"100vh":o.screen.height-n+"px"}}),u=s(()=>`q-page${a.padding===!0?" q-layout-padding":""}`);return()=>d("main",{class:u.value,style:c.value},y(i.default))}});export{C as Q}; diff --git a/docs/assets/QResizeObserver.f9785bfd.js b/docs/assets/QResizeObserver.b57e8b42.js similarity index 83% rename from docs/assets/QResizeObserver.f9785bfd.js rename to docs/assets/QResizeObserver.b57e8b42.js index 92bdb6b..1616bd5 100644 --- a/docs/assets/QResizeObserver.f9785bfd.js +++ b/docs/assets/QResizeObserver.b57e8b42.js @@ -1 +1 @@ -import{r as g,D as z,A as d,j as y,s as f,B as w,I as v,l as R,x,C as b}from"./index.0ed11181.js";function O(){const r=g(!z.value);return r.value===!1&&d(()=>{r.value=!0}),r}const m=typeof ResizeObserver!="undefined",h=m===!0?{}:{style:"display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;",url:"about:blank"};var L=y({name:"QResizeObserver",props:{debounce:{type:[String,Number],default:100}},emits:["resize"],setup(r,{emit:p}){let i=null,t,o={width:-1,height:-1};function s(e){e===!0||r.debounce===0||r.debounce==="0"?u():i===null&&(i=setTimeout(u,r.debounce))}function u(){if(i!==null&&(clearTimeout(i),i=null),t){const{offsetWidth:e,offsetHeight:n}=t;(e!==o.width||n!==o.height)&&(o={width:e,height:n},p("resize",o))}}const{proxy:a}=x();if(a.trigger=s,m===!0){let e;const n=l=>{t=a.$el.parentNode,t?(e=new ResizeObserver(s),e.observe(t),u()):l!==!0&&v(()=>{n(!0)})};return d(()=>{n()}),f(()=>{i!==null&&clearTimeout(i),e!==void 0&&(e.disconnect!==void 0?e.disconnect():t&&e.unobserve(t))}),w}else{let l=function(){i!==null&&(clearTimeout(i),i=null),n!==void 0&&(n.removeEventListener!==void 0&&n.removeEventListener("resize",s,b.passive),n=void 0)},c=function(){l(),t&&t.contentDocument&&(n=t.contentDocument.defaultView,n.addEventListener("resize",s,b.passive),u())};const e=O();let n;return d(()=>{v(()=>{t=a.$el,t&&c()})}),f(l),()=>{if(e.value===!0)return R("object",{style:h.style,tabindex:-1,type:"text/html",data:h.url,"aria-hidden":"true",onLoad:c})}}}});export{L as Q}; +import{r as g,J as z,o as d,y,C as f,H as w,N as v,h as R,g as O,I as b}from"./index.ab4869ca.js";function x(){const r=g(!z.value);return r.value===!1&&d(()=>{r.value=!0}),r}const m=typeof ResizeObserver!="undefined",h=m===!0?{}:{style:"display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;",url:"about:blank"};var L=y({name:"QResizeObserver",props:{debounce:{type:[String,Number],default:100}},emits:["resize"],setup(r,{emit:p}){let i=null,t,o={width:-1,height:-1};function s(e){e===!0||r.debounce===0||r.debounce==="0"?u():i===null&&(i=setTimeout(u,r.debounce))}function u(){if(i!==null&&(clearTimeout(i),i=null),t){const{offsetWidth:e,offsetHeight:n}=t;(e!==o.width||n!==o.height)&&(o={width:e,height:n},p("resize",o))}}const{proxy:a}=O();if(a.trigger=s,m===!0){let e;const n=l=>{t=a.$el.parentNode,t?(e=new ResizeObserver(s),e.observe(t),u()):l!==!0&&v(()=>{n(!0)})};return d(()=>{n()}),f(()=>{i!==null&&clearTimeout(i),e!==void 0&&(e.disconnect!==void 0?e.disconnect():t&&e.unobserve(t))}),w}else{let l=function(){i!==null&&(clearTimeout(i),i=null),n!==void 0&&(n.removeEventListener!==void 0&&n.removeEventListener("resize",s,b.passive),n=void 0)},c=function(){l(),t&&t.contentDocument&&(n=t.contentDocument.defaultView,n.addEventListener("resize",s,b.passive),u())};const e=x();let n;return d(()=>{v(()=>{t=a.$el,t&&c()})}),f(l),()=>{if(e.value===!0)return R("object",{style:h.style,tabindex:-1,type:"text/html",data:h.url,"aria-hidden":"true",onLoad:c})}}}});export{L as Q}; diff --git a/docs/assets/QuestionMakerPage.55b5194a.js b/docs/assets/QuestionMakerPage.55b5194a.js deleted file mode 100644 index cd66313..0000000 --- a/docs/assets/QuestionMakerPage.55b5194a.js +++ /dev/null @@ -1 +0,0 @@ -import{Q as p}from"./QInput.c63abfb0.js";import{_ as C,a as b,u as A,r as $,k as U,o as c,e as h,w as f,M as v,N as k,O as V,g as x,f as l,Q as r}from"./index.0ed11181.js";import{a as q,Q as y}from"./use-form.ff3f77cb.js";import{Q as N}from"./QPage.9c21063d.js";import{u as S}from"./answerStore.1c70fbbb.js";import{u as J}from"./index.esm.f0b860bb.js";import"./use-key-composition.deb261a7.js";const B=b({name:"QuestionsMakerPage",setup(){const n=J,s=A(),w=S(),t=$(JSON.parse(JSON.stringify(w.questions))),Q=async()=>{await navigator.clipboard.writeText(JSON.stringify({questions:_.value}))},_=U(()=>t.value);return{router:s,copyJson:Q,qs:t,questions:_,removeQuestion:d=>{const u=t.value.findIndex(a=>a.id===d);u>-1&&t.value.splice(u,1)},removeAnswer:(d,u)=>{const a=t.value.find(m=>m.id===d);if(a){const m=a.answers.findIndex(g=>g.id===u);m>-1&&a.answers.splice(m,1)}},addQuestion:()=>{t.value.push({id:n.v4(),question_text:"TEMP",explanation_text:"TEMP",type:"multi",answers:[]})},addAnswer:d=>{t.value.find(a=>a.id===d).answers.push({id:n.v4(),answer_text:"",explanation_text:""})},answerStore:w}}}),M={class:"text-h5 text-weight-bolder row"},O={class:"col-4"},P={class:"col-2"},E={class:"col-12"};function I(n,s,w,t,Q,_){return c(),h(N,{class:"flex flex-center row q-col-gutter-sm row"},{default:f(()=>[(c(!0),v(V,null,k(n.questions,e=>(c(),v("div",{key:e.id,class:"col-10"},[x("div",M,[l(p,{modelValue:e.question_text,"onUpdate:modelValue":o=>e.question_text=o,label:"Question",rounded:"",filled:"",class:"col-8"},null,8,["modelValue","onUpdate:modelValue"]),l(p,{modelValue:e.explanation_text,"onUpdate:modelValue":o=>e.explanation_text=o,label:"Explanation",rounded:"",filled:"",class:"col-8"},null,8,["modelValue","onUpdate:modelValue"]),x("div",O,[l(r,{color:"negative",class:"float-right",icon:"delete",round:"",onClick:o=>n.removeQuestion(e.id)},null,8,["onClick"])])]),l(q,{class:"questioncard"},{default:f(()=>[l(y,null,{default:f(()=>[l(r,{rounded:"",color:"primary",onClick:o=>e.type==="single"?e.type="multi":e.type="single",label:e.type},null,8,["onClick","label"])]),_:2},1024),l(y,{class:"row q-col-gutter-sm"},{default:f(()=>[(c(!0),v(V,null,k(e.answers,o=>(c(),v("div",{key:o.id,class:"col-6 row"},[l(p,{class:"col-10",outlined:"",rounded:"",modelValue:o.answer_text,"onUpdate:modelValue":i=>o.answer_text=i,label:"Question"},null,8,["modelValue","onUpdate:modelValue"]),l(p,{class:"col-10",outlined:"",rounded:"",modelValue:o.explanation_text,"onUpdate:modelValue":i=>o.explanation_text=i,label:"explanation"},null,8,["modelValue","onUpdate:modelValue"]),x("div",P,[l(r,{flat:"",color:"negative",icon:"delete",round:"",onClick:i=>n.removeAnswer(e.id,o.id)},null,8,["onClick"])])]))),128)),l(r,{rounded:"",color:"primary",class:"q-ma-sm",onClick:o=>n.addAnswer(e.id),label:"Add answer","no-caps":""},null,8,["onClick"])]),_:2},1024)]),_:2},1024)]))),128)),x("div",E,[l(r,{class:"q-ma-sm",rounded:"",color:"primary","no-caps":"",label:"Add question",onClick:s[0]||(s[0]=e=>n.addQuestion())}),l(r,{class:"q-ma-sm",rounded:"",color:"primary","no-caps":"",label:"Copy all JSON",onClick:s[1]||(s[1]=e=>n.copyJson())})])]),_:1})}var H=C(B,[["render",I]]);export{H as default}; diff --git a/docs/assets/QuestionMakerPage.dc47af77.js b/docs/assets/QuestionMakerPage.dc47af77.js new file mode 100644 index 0000000..e89476b --- /dev/null +++ b/docs/assets/QuestionMakerPage.dc47af77.js @@ -0,0 +1 @@ +import{Q as p}from"./QInput.3944fa04.js";import{_ as C,a as b,u as A,r as $,f as q,l as c,p as U,q as f,m as v,ac as k,F as V,t as x,k as l,aw as r}from"./index.ab4869ca.js";import{a as h,Q as y}from"./QCard.eb99e114.js";import{Q as S}from"./QPage.d12e44a1.js";import{u as J}from"./answerStore.972bc172.js";import{u as N}from"./index.esm.f0b860bb.js";import"./use-key-composition.7c536e3b.js";const B=b({name:"QuestionsMakerPage",setup(){const n=N,s=A(),w=J(),t=$(JSON.parse(JSON.stringify(w.questions))),Q=async()=>{await navigator.clipboard.writeText(JSON.stringify({questions:_.value}))},_=q(()=>t.value);return{router:s,copyJson:Q,qs:t,questions:_,removeQuestion:d=>{const u=t.value.findIndex(a=>a.id===d);u>-1&&t.value.splice(u,1)},removeAnswer:(d,u)=>{const a=t.value.find(m=>m.id===d);if(a){const m=a.answers.findIndex(g=>g.id===u);m>-1&&a.answers.splice(m,1)}},addQuestion:()=>{t.value.push({id:n.v4(),question_text:"TEMP",explanation_text:"TEMP",type:"multi",answers:[]})},addAnswer:d=>{t.value.find(a=>a.id===d).answers.push({id:n.v4(),answer_text:"",explanation_text:""})},answerStore:w}}}),P={class:"text-h5 text-weight-bolder row"},E={class:"col-4"},I={class:"col-2"},M={class:"col-12"};function O(n,s,w,t,Q,_){return c(),U(S,{class:"flex flex-center row q-col-gutter-sm row"},{default:f(()=>[(c(!0),v(V,null,k(n.questions,e=>(c(),v("div",{key:e.id,class:"col-10"},[x("div",P,[l(p,{modelValue:e.question_text,"onUpdate:modelValue":o=>e.question_text=o,label:"Question",rounded:"",filled:"",class:"col-8"},null,8,["modelValue","onUpdate:modelValue"]),l(p,{modelValue:e.explanation_text,"onUpdate:modelValue":o=>e.explanation_text=o,label:"Explanation",rounded:"",filled:"",class:"col-8"},null,8,["modelValue","onUpdate:modelValue"]),x("div",E,[l(r,{color:"negative",class:"float-right",icon:"delete",round:"",onClick:o=>n.removeQuestion(e.id)},null,8,["onClick"])])]),l(h,{class:"questioncard"},{default:f(()=>[l(y,null,{default:f(()=>[l(r,{rounded:"",color:"primary",onClick:o=>e.type==="single"?e.type="multi":e.type="single",label:e.type},null,8,["onClick","label"])]),_:2},1024),l(y,{class:"row q-col-gutter-sm"},{default:f(()=>[(c(!0),v(V,null,k(e.answers,o=>(c(),v("div",{key:o.id,class:"col-6 row"},[l(p,{class:"col-10",outlined:"",rounded:"",modelValue:o.answer_text,"onUpdate:modelValue":i=>o.answer_text=i,label:"Question"},null,8,["modelValue","onUpdate:modelValue"]),l(p,{class:"col-10",outlined:"",rounded:"",modelValue:o.explanation_text,"onUpdate:modelValue":i=>o.explanation_text=i,label:"explanation"},null,8,["modelValue","onUpdate:modelValue"]),x("div",I,[l(r,{flat:"",color:"negative",icon:"delete",round:"",onClick:i=>n.removeAnswer(e.id,o.id)},null,8,["onClick"])])]))),128)),l(r,{rounded:"",color:"primary",class:"q-ma-sm",onClick:o=>n.addAnswer(e.id),label:"Add answer","no-caps":""},null,8,["onClick"])]),_:2},1024)]),_:2},1024)]))),128)),x("div",M,[l(r,{class:"q-ma-sm",rounded:"",color:"primary","no-caps":"",label:"Add question",onClick:s[0]||(s[0]=e=>n.addQuestion())}),l(r,{class:"q-ma-sm",rounded:"",color:"primary","no-caps":"",label:"Copy all JSON",onClick:s[1]||(s[1]=e=>n.copyJson())})])]),_:1})}var H=C(B,[["render",O]]);export{H as default}; diff --git a/docs/assets/QuestionToolIcon.081efecf.js b/docs/assets/QuestionToolIcon.081efecf.js deleted file mode 100644 index 62066ec..0000000 --- a/docs/assets/QuestionToolIcon.081efecf.js +++ /dev/null @@ -1 +0,0 @@ -import{u as T,b as C,Q as M,a as B}from"./use-form.ff3f77cb.js";import{j as Q,ac as I,ad as V,k as s,l as i,G as N,x as z,a as L,r as p,_ as P,o as u,M as U,e as m,w as _,g as c,P as h,f as j,i as D}from"./index.0ed11181.js";import{_ as F,a as H,b as R,c as A,d as E,e as G,f as O,g as X,h as x,i as J,j as K}from"./wandb_logo.43daca0d.js";import"./answerStore.1c70fbbb.js";import{u as W}from"./use-quasar.624d3c43.js";const Y={xs:2,sm:4,md:6,lg:10,xl:14};function k(e,a,o){return{transform:a===!0?`translateX(${o.lang.rtl===!0?"-":""}100%) scale3d(${-e},1,1)`:`scale3d(${e},1,1)`}}var ue=Q({name:"QLinearProgress",props:{...T,...I,value:{type:Number,default:0},buffer:Number,color:String,trackColor:String,reverse:Boolean,stripe:Boolean,indeterminate:Boolean,query:Boolean,rounded:Boolean,animationSpeed:{type:[String,Number],default:2100},instantFeedback:Boolean},setup(e,{slots:a}){const{proxy:o}=z(),r=C(e,o.$q),l=V(e,Y),t=s(()=>e.indeterminate===!0||e.query===!0),n=s(()=>e.reverse!==e.query),v=s(()=>({...l.value!==null?l.value:{},"--q-linear-progress-speed":`${e.animationSpeed}ms`})),f=s(()=>"q-linear-progress"+(e.color!==void 0?` text-${e.color}`:"")+(e.reverse===!0||e.query===!0?" q-linear-progress--reverse":"")+(e.rounded===!0?" rounded-borders":"")),g=s(()=>k(e.buffer!==void 0?e.buffer:1,n.value,o.$q)),d=s(()=>`with${e.instantFeedback===!0?"out":""}-transition`),$=s(()=>`q-linear-progress__track absolute-full q-linear-progress__track--${d.value} q-linear-progress__track--${r.value===!0?"dark":"light"}`+(e.trackColor!==void 0?` bg-${e.trackColor}`:"")),q=s(()=>k(t.value===!0?1:e.value,n.value,o.$q)),y=s(()=>`q-linear-progress__model absolute-full q-linear-progress__model--${d.value} q-linear-progress__model--${t.value===!0?"in":""}determinate`),w=s(()=>({width:`${e.value*100}%`})),S=s(()=>`q-linear-progress__stripe absolute-${e.reverse===!0?"right":"left"} q-linear-progress__stripe--${d.value}`);return()=>{const b=[i("div",{class:$.value,style:g.value}),i("div",{class:y.value,style:q.value})];return e.stripe===!0&&t.value===!1&&b.push(i("div",{class:S.value,style:w.value})),i("div",{class:f.value,style:v.value,role:"progressbar","aria-valuemin":0,"aria-valuemax":1,"aria-valuenow":e.indeterminate===!0?void 0:e.value},N(a.default,b))}}});const Z=L({name:"QuestionToolItem",props:{tool:{type:Object}},emits:["tool"],setup(e,{emit:a}){const o=W(),r=s(()=>o.platform.is.mobile),l=p(!1),t=p(null);return{getImgUrl:g=>new URL({"../assets/small/azureml_logo.png":F,"../assets/small/clearml_logo.png":H,"../assets/small/dagshub_logo.png":R,"../assets/small/databricks_logo.png":A,"../assets/small/datarobot_logo.png":E,"../assets/small/h2o_logo.png":G,"../assets/small/kubeflow_logo.png":O,"../assets/small/mlflow_logo.png":X,"../assets/small/sagemaker_logo.png":x,"../assets/small/vertex_logo.png":J,"../assets/small/wandb_logo.png":K}[`../assets/small/${g}`],self.location).href,hideTooltip:()=>{t.value=setTimeout(()=>{l.value=!1},50)},showTooltip:()=>{clearTimeout(t.value),l.value=!0},tooltipVisible:l,isMobile:r}}}),ee=["src"],se=["src"],oe=["innerHTML"];function ae(e,a,o,r,l,t){return u(),U("div",null,[e.isMobile?(u(),m(h,{key:1,square:"",onClick:a[0]||(a[0]=n=>e.tooltipVisible=!e.tooltipVisible)},{default:_(()=>[c("img",{src:e.getImgUrl(e.tool.img_link)},null,8,se)]),_:1})):(u(),m(h,{key:0,square:"",onMouseover:e.showTooltip,onMouseleave:e.hideTooltip},{default:_(()=>[c("img",{src:e.getImgUrl(e.tool.img_link)},null,8,ee)]),_:1},8,["onMouseover","onMouseleave"])),e.tooltipVisible?(u(),m(B,{key:2,class:"tooltip",onMouseover:e.showTooltip,onMouseleave:e.hideTooltip},{default:_(()=>[j(M,null,{default:_(()=>[c("div",{innerHTML:e.tool.match.explanation},null,8,oe)]),_:1})]),_:1},8,["onMouseover","onMouseleave"])):D("",!0)])}var _e=P(Z,[["render",ae]]);export{_e as Q,ue as a}; diff --git a/docs/assets/QuestionToolIcon.7c4c8f1b.js b/docs/assets/QuestionToolIcon.7c4c8f1b.js new file mode 100644 index 0000000..d049c3b --- /dev/null +++ b/docs/assets/QuestionToolIcon.7c4c8f1b.js @@ -0,0 +1 @@ +import{_ as d,a as c,b,c as f,d as v,e as h,f as T,g as k,h as M,i as w,j as Q}from"./wandb_logo.127f2d59.js";import{i as I,M as V,a as C,f as $,r as g,_ as q,l as e,m as y,p as n,q as l,t as i,Q as m,k as U,x as B}from"./index.ab4869ca.js";import{Q as j,a as L}from"./QCard.eb99e114.js";import"./answerStore.972bc172.js";function N(){return I(V)}const H=C({name:"QuestionToolItem",props:{tool:{type:Object}},emits:["tool"],setup(o,{emit:a}){const r=N(),_=$(()=>r.platform.is.mobile),s=g(!1),t=g(null);return{getImgUrl:p=>new URL({"../assets/small/azureml_logo.png":d,"../assets/small/clearml_logo.png":c,"../assets/small/dagshub_logo.png":b,"../assets/small/databricks_logo.png":f,"../assets/small/datarobot_logo.png":v,"../assets/small/h2o_logo.png":h,"../assets/small/kubeflow_logo.png":T,"../assets/small/mlflow_logo.png":k,"../assets/small/sagemaker_logo.png":M,"../assets/small/vertex_logo.png":w,"../assets/small/wandb_logo.png":Q}[`../assets/small/${p}`],self.location).href,hideTooltip:()=>{t.value=setTimeout(()=>{s.value=!1},50)},showTooltip:()=>{clearTimeout(t.value),s.value=!0},tooltipVisible:s,isMobile:_}}}),z=["src"],A=["src"],E=["innerHTML"];function K(o,a,r,_,s,t){return e(),y("div",null,[o.isMobile?(e(),n(m,{key:1,square:"",onClick:a[0]||(a[0]=u=>o.tooltipVisible=!o.tooltipVisible)},{default:l(()=>[i("img",{src:o.getImgUrl(o.tool.img_link)},null,8,A)]),_:1})):(e(),n(m,{key:0,square:"",onMouseover:o.showTooltip,onMouseleave:o.hideTooltip},{default:l(()=>[i("img",{src:o.getImgUrl(o.tool.img_link)},null,8,z)]),_:1},8,["onMouseover","onMouseleave"])),o.tooltipVisible?(e(),n(L,{key:2,class:"tooltip",onMouseover:o.showTooltip,onMouseleave:o.hideTooltip},{default:l(()=>[U(j,null,{default:l(()=>[i("div",{innerHTML:o.tool.match.explanation},null,8,E)]),_:1})]),_:1},8,["onMouseover","onMouseleave"])):B("",!0)])}var J=q(H,[["render",K]]);export{J as Q,N as u}; diff --git a/docs/assets/QuizLayout.1110d06c.js b/docs/assets/QuizLayout.1110d06c.js new file mode 100644 index 0000000..f26e41c --- /dev/null +++ b/docs/assets/QuizLayout.1110d06c.js @@ -0,0 +1 @@ +import{Q as s,a as u}from"./QLayout.b7c5abd4.js";import{_ as p,a as c,u as i,n as _,l as m,p as f,q as t,k as a}from"./index.ab4869ca.js";import"./scroll.270b929d.js";import"./QResizeObserver.b57e8b42.js";const l=c({name:"MainLayout",setup(){const e=i();return{goToRoute:o=>{e.push({name:o})}}}});function d(e,r,o,v,h,w){const n=_("router-view");return m(),f(s,{view:"lHh Lpr lFf"},{default:t(()=>[a(u,null,{default:t(()=>[a(n)]),_:1})]),_:1})}var $=p(l,[["render",d]]);export{$ as default}; diff --git a/docs/assets/QuizLayout.bab6dc0d.js b/docs/assets/QuizLayout.bab6dc0d.js deleted file mode 100644 index 8c4bbdb..0000000 --- a/docs/assets/QuizLayout.bab6dc0d.js +++ /dev/null @@ -1 +0,0 @@ -import{Q as s,a as u}from"./QLayout.f1a18fb7.js";import{_ as c,a as p,u as i,c as _,o as f,e as m,w as t,f as a}from"./index.0ed11181.js";import"./scroll.f78dc32b.js";import"./QResizeObserver.f9785bfd.js";const l=p({name:"MainLayout",setup(){const e=i();return{goToRoute:o=>{e.push({name:o})}}}});function d(e,r,o,v,w,h){const n=_("router-view");return f(),m(s,{view:"lHh Lpr lFf"},{default:t(()=>[a(u,null,{default:t(()=>[a(n)]),_:1})]),_:1})}var $=c(l,[["render",d]]);export{$ as default}; diff --git a/docs/assets/QuizPage.c1afb78b.js b/docs/assets/QuizPage.c1afb78b.js deleted file mode 100644 index b078dd9..0000000 --- a/docs/assets/QuizPage.c1afb78b.js +++ /dev/null @@ -1 +0,0 @@ -import{Q as X,a as Y,b as Z}from"./QHeader.5be086d0.js";import{Q as ee,a as se}from"./QuestionToolIcon.081efecf.js";import{j as W,n as oe,p as U,r as y,D as te,k as b,q as C,s as ne,G as le,l as E,v as ae,x as re,m as ie,a as G,_ as D,o as c,M as Q,f as g,w as v,Q as M,ak as ue,e as q,i as A,h as B,L as T,O as S,g as p,al as ce,c as J,N as F,U as j,u as de,am as pe,A as me,an as fe}from"./index.0ed11181.js";import{Q as he}from"./QResizeObserver.f9785bfd.js";import{Q as we}from"./QPage.9c21063d.js";import{_ as ve,a as ge,b as _e,c as be,d as qe,e as ye,f as Ae,g as Qe,h as ke,i as $e,j as Me}from"./wandb_logo.43daca0d.js";import{Q as H,a as L}from"./use-form.ff3f77cb.js";import{u as x}from"./use-quasar.624d3c43.js";import{u as K}from"./answerStore.1c70fbbb.js";import{T as Te}from"./ToolQuestionItem.7d4396e6.js";import{u as Oe}from"./index.esm.f0b860bb.js";import{_ as Ce}from"./lg_saxion_wit.4b1b1f5e.js";import"./QKnob.af0fb19d.js";import"./scroll.f78dc32b.js";var Se=W({name:"QFooter",props:{modelValue:{type:Boolean,default:!0},reveal:Boolean,bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},emits:["reveal","focusin"],setup(e,{slots:r,emit:i}){const{proxy:{$q:n}}=re(),o=oe(ae,U);if(o===U)return console.error("QFooter needs to be child of QLayout"),U;const m=y(parseInt(e.heightHint,10)),a=y(!0),w=y(te.value===!0||o.isContainer.value===!0?0:window.innerHeight),u=b(()=>e.reveal===!0||o.view.value.indexOf("F")>-1||n.platform.is.ios&&o.isContainer.value===!0),f=b(()=>o.isContainer.value===!0?o.containerHeight.value:w.value),O=b(()=>{if(e.modelValue!==!0)return 0;if(u.value===!0)return a.value===!0?m.value:0;const s=o.scroll.value.position+f.value+m.value-o.height.value;return s>0?s:0}),k=b(()=>e.modelValue!==!0||u.value===!0&&a.value!==!0),V=b(()=>e.modelValue===!0&&k.value===!0&&e.reveal===!0),z=b(()=>"q-footer q-layout__section--marginal "+(u.value===!0?"fixed":"absolute")+"-bottom"+(e.bordered===!0?" q-footer--bordered":"")+(k.value===!0?" q-footer--hidden":"")+(e.modelValue!==!0?" q-layout--prevent-focus"+(u.value!==!0?" hidden":""):"")),N=b(()=>{const s=o.rows.value.bottom,t={};return s[0]==="l"&&o.left.space===!0&&(t[n.lang.rtl===!0?"right":"left"]=`${o.left.size}px`),s[2]==="r"&&o.right.space===!0&&(t[n.lang.rtl===!0?"left":"right"]=`${o.right.size}px`),t});function _(s,t){o.update("footer",s,t)}function $(s,t){s.value!==t&&(s.value=t)}function I({height:s}){$(m,s),_("size",s)}function P(){if(e.reveal!==!0)return;const{direction:s,position:t,inflectionPoint:h}=o.scroll.value;$(a,s==="up"||t-h<100||o.height.value-f.value-t-m.value<300)}function R(s){V.value===!0&&$(a,!0),i("focusin",s)}C(()=>e.modelValue,s=>{_("space",s),$(a,!0),o.animate()}),C(O,s=>{_("offset",s)}),C(()=>e.reveal,s=>{s===!1&&$(a,e.modelValue)}),C(a,s=>{o.animate(),i("reveal",s)}),C([m,o.scroll,o.height],P),C(()=>n.screen.height,s=>{o.isContainer.value!==!0&&$(w,s)});const l={};return o.instances.footer=l,e.modelValue===!0&&_("size",m.value),_("space",e.modelValue),_("offset",O.value),ne(()=>{o.instances.footer===l&&(o.instances.footer=void 0,_("size",0),_("offset",0),_("space",!1))}),()=>{const s=le(r.default,[E(he,{debounce:0,onResize:I})]);return e.elevated===!0&&s.push(E("div",{class:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),E("footer",{class:z.value,style:N.value,onFocusin:R},s)}}}),Be=W({name:"QBtnGroup",props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},setup(e,{slots:r}){const i=b(()=>{const n=["unelevated","outline","flat","rounded","square","push","stretch","glossy"].filter(o=>e[o]===!0).map(o=>`q-btn-group--${o}`).join(" ");return`q-btn-group row no-wrap${n.length!==0?" "+n:""}`+(e.spread===!0?" q-btn-group--spread":" inline")});return()=>E("div",{class:i.value},ie(r.default))}});const Ve=G({name:"AnswerItem",props:{fullscreen:{type:Boolean},answer:{type:Object}},emits:["selectAnswer","unselectAnswer"],setup(e,{emit:r}){const i=x(),n=K(),o=b(()=>i.platform.is.mobile),m=y(!1),a=y(null);return{selectAnswer:k=>{r("selectAnswer",k)},unselectAnswer:k=>{r("unselectAnswer",k)},showTooltip:()=>{clearTimeout(a.value),m.value=!0},hideTooltip:()=>{a.value=setTimeout(()=>{m.value=!1},50)},tooltipVisible:m,answerStore:n,isMobile:o,props:e}}}),ze={key:1},Ne=p("b",null,"Antwoord uitleg:",-1),Ie=p("div",null,null,-1);function Pe(e,r,i,n,o,m){return c(),Q(S,null,[g(Be,{rounded:"",class:"full-width"},{default:v(()=>[g(M,{class:"full-width","no-caps":"",push:"",rounded:"",color:e.answerStore.selectedAnswers.includes(e.props.answer.id)?"accent":"primary",onClick:r[0]||(r[0]=ue(a=>e.answerStore.selectedAnswers.includes(e.props.answer.id)?e.unselectAnswer(e.props.answer.id):e.selectAnswer(e.props.answer.id),["stop"])),label:e.props.answer.answer_text},null,8,["color","label"]),e.props.answer.explanation_text&&!e.isMobile?(c(),q(M,{key:0,icon:"info",color:e.answerStore.selectedAnswers.includes(e.props.answer.id)?"accent":"secondary","no-caps":"",push:"",rounded:"",onMouseover:e.showTooltip,onMouseleave:e.hideTooltip,round:"",size:"md"},null,8,["color","onMouseover","onMouseleave"])):e.props.answer.explanation_text?(c(),q(M,{key:1,icon:"info",color:e.answerStore.selectedAnswers.includes(e.props.answer.id)?"accent":"secondary","no-caps":"",push:"",rounded:"",onClick:r[1]||(r[1]=a=>e.tooltipVisible=!e.tooltipVisible),round:"",size:"md"},null,8,["color"])):A("",!0)]),_:1}),e.props.answer.explanation_text&&e.tooltipVisible?(c(),q(L,{key:0,onMouseover:e.showTooltip,onMouseleave:e.hideTooltip,style:{},class:"bg-white text-black tooltip",ref:"tooltip"},{default:v(()=>[g(H,null,{default:v(()=>[B(T(e.props.answer.explanation_text),1)]),_:1})]),_:1},8,["onMouseover","onMouseleave"])):A("",!0),e.props.fullscreen&&e.props.answer.explanation_text?(c(),Q("div",ze,[Ne,B(" "+T(e.props.answer.explanation_text),1)])):A("",!0),Ie],64)}var Re=D(Ve,[["render",Pe]]);const je=G({name:"QuestionItem",props:{question:{type:Object},question_number:{type:Number}},emits:["submitAnswer","previousQuestion","updateAnswer"],setup(e,{emit:r}){const i=K(),n=x(),o=b(()=>n.platform.is.mobile),m=i.tools,a=y(!1),w=y(!1),u=y(!1),f=y(null);return{selectAnswer:l=>{e.question.type==="single"&&i.selectedAnswers.length>0&&i.selectedAnswers.pop(),i.selectedAnswers.push(l),r("updateAnswer",i.selectedAnswers)},clashed_tools:l=>{const s=[];return m.forEach(t=>{let h=t.bad_compatible.find(d=>d.question_id===e.question.id&&d.answer_id===l);if(h){let d=JSON.parse(JSON.stringify(t));d.match=h,s.push(d)}}),s},expandFull:()=>{a.value=!a.value,w.value=!w.value},getImgUrl:l=>new URL({"../assets/small/azureml_logo.png":ve,"../assets/small/clearml_logo.png":ge,"../assets/small/dagshub_logo.png":_e,"../assets/small/databricks_logo.png":be,"../assets/small/datarobot_logo.png":qe,"../assets/small/h2o_logo.png":ye,"../assets/small/kubeflow_logo.png":Ae,"../assets/small/mlflow_logo.png":Qe,"../assets/small/sagemaker_logo.png":ke,"../assets/small/vertex_logo.png":$e,"../assets/small/wandb_logo.png":Me}[`../assets/small/${l}`],self.location).href,matched_tools:l=>{const s=[];return m.forEach(t=>{let h=t.good_compatible.find(d=>d.question_id===e.question.id&&d.answer_id===l);if(h){let d=JSON.parse(JSON.stringify(t));d.match=h,s.push(d)}}),s},submitAnswer:()=>{const l=i.selectedAnswers;l.length>0?r("submitAnswer",e.question.id,l):ce.create({position:"center",message:"Selecteer minimaal 1 antwoord!",color:"negative",timeout:200})},unselectAnswer:l=>{i.selectedAnswers=i.selectedAnswers.filter(s=>s!==l),r("updateAnswer",i.selectedAnswers)},fullscreen:w,answerStore:i,q:n,previousQuestion:()=>{r("previousQuestion")},showTooltip:()=>{clearTimeout(f.value),u.value=!0},hideTooltip:()=>{f.value=setTimeout(()=>{u.value=!1},50)},isMobile:o,tooltipVisible:u,props:e,expanded:a}},components:{AnswerItem:Re,QuestionToolIcon:ee}}),Ee={class:"row justify-center self-start"},Fe={class:"col-12 self-start text-center"},Je={class:"text-h5 text-center text-weight-bolder"},Ue={key:0},He=p("b",null,"Vraag uitleg:",-1),Le={class:"col-md-6 col-sm-10 col-xs-12 self-start"},Ge={key:0,class:"row q-pa-sm"},De=p("b",{class:"text-positive"},"Match",-1),xe=p("div",{class:"col-2",style:{height:"auto"}},null,-1),Ke=p("b",{class:"text-negative"},"Clash",-1),We={class:"text-right col-12 q-pr-lg q-pb-md"},Xe={class:"q-pa-sm col-12"};function Ye(e,r,i,n,o,m){const a=J("AnswerItem"),w=J("question-tool-icon");return c(),Q("div",Ee,[p("div",Fe,[p("span",Je,T(e.props.question.question_text),1),e.isMobile?A("",!0):(c(),q(M,{key:0,icon:"info",color:"accent","no-caps":"",onMouseover:e.showTooltip,onMouseleave:e.hideTooltip,push:"",rounded:"",round:"",size:"md",class:"q-my-sm"},null,8,["onMouseover","onMouseleave"])),p("div",null,[e.tooltipVisible?(c(),q(L,{key:0,onMouseover:e.showTooltip,onMouseleave:e.hideTooltip,class:"tooltip",ref:"tooltip"},{default:v(()=>[g(H,null,{default:v(()=>[B(T(e.props.question.explanation_text),1)]),_:1})]),_:1},8,["onMouseover","onMouseleave"])):A("",!0)])]),e.fullscreen?(c(),Q("div",Ue,[He,B(" "+T(e.props.question.explanation_text),1)])):A("",!0),p("div",Le,[g(L,{class:"row q-pa-lg-lg q-pa-md-md q-pa-xs-xs q-pa-sm-sm card"},{default:v(()=>[(c(!0),Q(S,null,F(e.props.question.answers,u=>(c(),q(H,{class:"col-6",key:u.id},{default:v(()=>[g(a,{answer:u,fullscreen:e.fullscreen,onSelectAnswer:e.selectAnswer,onUnselectAnswer:e.unselectAnswer},null,8,["answer","fullscreen","onSelectAnswer","onUnselectAnswer"]),e.expanded?(c(),Q("div",Ge,[p("div",{class:j(e.fullscreen?"col-12":"col-5")},[De,p("div",{class:j(e.fullscreen?"":"flex")},[(c(!0),Q(S,null,F(e.matched_tools(u.id),f=>(c(),q(w,{key:f.id,tool:f,class:"q-ma-sm cursor-pointer"},null,8,["tool"]))),128))],2)],2),xe,p("div",{class:j(e.fullscreen?"col-12":"col-5")},[Ke,p("div",{class:j(e.fullscreen?"":"flex")},[(c(!0),Q(S,null,F(e.clashed_tools(u.id),f=>(c(),q(w,{tool:f,key:f.id,class:"q-ma-sm cursor-pointer"},null,8,["tool"]))),128))],2)],2)])):A("",!0)]),_:2},1024))),128)),p("div",We,[p("b",null,T(e.props.question.type==="single"?"Selecteer \xE9\xE9n antwoord":"Meerdere antwoorden mogelijk"),1)])]),_:1}),p("div",Xe,[g(M,{color:"accent","no-caps":"",class:"float-left",push:"",rounded:"",icon:"arrow_back",onClick:e.previousQuestion},null,8,["onClick"]),g(M,{color:"accent","no-caps":"",class:"float-right",push:"",rounded:"",label:"Volgende vraag",onClick:e.submitAnswer},null,8,["onClick"])])])])}var Ze=D(je,[["render",Ye]]);const es=G({name:"QuizPage",setup(){const e=x(),r=Oe,i=de(),n=K(),o=n.questions,m=y(!0),a=y(n.answers.length===0?0:n.answers.length-1),w=b(()=>e.platform.is.mobile),u=pe();u.query.hasOwnProperty("question_id")&&(a.value=parseInt(u.query.question_id));const f=b(()=>(a.value+1)/o.length),O=()=>{a.value-1>=0?(a.value--,n.answers.pop(),n.selectedAnswers=n.answers[n.answers.length-1].answers):(n.answers=[],i.push("/"))},k=l=>{i.push(l)},V=(l,s)=>{n.selectedAnswers=[],a.value+1{n.answers[n.answers.length-1].answers=l};me(()=>{n.answers.length===0&&n.answers.push({question_id:o[a.value].id,answers:[]})});const N=n.tools,_=b(()=>{let l=JSON.parse(JSON.stringify(N));return l.forEach(s=>{s.matches=$(s),s.clashes=I(s),s.numberOfMatches=P(s),s.numberOfClashes=R(s),s.numberOfClashes&&s.numberOfClashes?s.percentage=s.numberOfMatches/(s.numberOfMatches+s.numberOfClashes)*100:s.percentage=100}),l.sort((s,t)=>t.percentage===s.percentage?t.numberOfMatches-s.numberOfMatches:t.percentage-s.percentage).map((s,t)=>({...s,rank:t+1}))}),$=l=>{let s=JSON.parse(JSON.stringify(o));return l.good_compatible.forEach(t=>{let h=s.find(d=>d.id===t.question_id);n.answers.forEach(d=>{d.question_id===t.question_id&&d.answers.includes(t.answer_id)&&t.explanation!==""&&(h.hasOwnProperty("matches")||(h.matches=[]),h.matches.push(t))})}),s},I=l=>{let s=JSON.parse(JSON.stringify(o));return l.bad_compatible.forEach(t=>{let h=s.find(d=>d.id===t.question_id);n.answers.forEach(d=>{d.question_id===t.question_id&&d.answers.includes(t.answer_id)&&t.explanation!==""&&(h.hasOwnProperty("matches")||(h.matches=[]),h.matches.push(t))})}),s},P=l=>{let s=0;return l.matches.forEach(t=>{t.hasOwnProperty("matches")&&(s+=t.matches.length)}),s},R=l=>{let s=0;return l.clashes.forEach(t=>{t.hasOwnProperty("matches")&&(s+=t.matches.length)}),s};return{router:i,isMobile:w,updateAnswer:z,previousQuestion:O,questions:o,expanded:m,goToRoute:k,progress:f,nextQuestion:V,q:e,sortedTools:_,currentQuestion:a}},components:{QuestionItem:Ze,ToolQuestionItem:Te}}),ss={class:"absolute-full flex flex-center"},os={class:"text-h4 text-white"},ts={key:1,class:"flex flex-center"},ns=p("div",{class:"text-h5 text-weight-bolder"},"Match",-1);function ls(e,r,i,n,o,m){const a=J("question-item"),w=J("tool-question-item");return c(),q(we,{class:"q-ma-sm flex justify-center"},{default:v(()=>[g(Z,null,{default:v(()=>[g(X,null,{default:v(()=>[p("img",{onClick:r[0]||(r[0]=u=>e.goToRoute("/")),class:"q-ma-sm",src:Ce,style:{height:"6vh"}}),e.q.screen.lt.sm?A("",!0):(c(),q(Y,{key:0,class:"absolute-center text-h5",onClick:r[1]||(r[1]=u=>e.goToRoute("/"))},{default:v(()=>[B(" AI-Platformwijzer Quiz ")]),_:1}))]),_:1}),g(se,{size:"50px",stripe:"",value:e.progress,color:"accent","track-color":"white"},{default:v(()=>[p("div",ss,[p("div",os,T(`${e.currentQuestion+1}/${e.questions.length} vragen`),1)])]),_:1},8,["value"])]),_:1}),g(a,{question:e.questions[e.currentQuestion],question_number:e.currentQuestion+1,onUpdateAnswer:e.updateAnswer,onSubmitAnswer:e.nextQuestion,onPreviousQuestion:e.previousQuestion},null,8,["question","question_number","onUpdateAnswer","onSubmitAnswer","onPreviousQuestion"]),e.isMobile?A("",!0):(c(),q(Se,{key:0,elevated:"",bordered:"",class:"bg-white text-black"},{default:v(()=>[e.expanded?A("",!0):(c(),q(M,{key:0,"no-caps":"",label:"Meer info per tool",flat:"","icon-right":"keyboard_arrow_up",onClick:r[2]||(r[2]=u=>e.expanded=!e.expanded)})),e.expanded?(c(),Q("div",ts,[g(M,{"no-caps":"",label:"",flat:"","icon-right":"keyboard_arrow_down",onClick:r[3]||(r[3]=u=>e.expanded=!e.expanded)}),ns,g(fe,{name:"tool-list",tag:"tool-item",class:"flex flex-center"},{default:v(()=>[(c(!0),Q(S,null,F(e.sortedTools,(u,f)=>(c(),q(w,{tool:u,question:e.questions[e.currentQuestion],size:"80px",key:f},null,8,["tool","question"]))),128))]),_:1})])):A("",!0)]),_:1}))]),_:1})}var bs=D(es,[["render",ls]]);export{bs as default}; diff --git a/docs/assets/QuizPage.e056c35e.js b/docs/assets/QuizPage.e056c35e.js new file mode 100644 index 0000000..9670087 --- /dev/null +++ b/docs/assets/QuizPage.e056c35e.js @@ -0,0 +1 @@ +import{Q as x,a as ee,b as se}from"./QHeader.09181622.js";import{Q as te}from"./QLinearProgress.1c886b96.js";import{y as Z,i as oe,A as U,B as ne,r as y,J as le,f as _,w as S,C as ae,L as re,h as R,g as ie,z as ue,a as D,_ as K,l as i,m as $,k as v,q as w,aw as C,aC as ce,p as b,x as A,v as V,ab as k,t as m,F as z,aD as de,n as H,ac as j,ad as J,u as pe,aE as me,o as fe,aF as he}from"./index.ab4869ca.js";import{Q as we}from"./QResizeObserver.b57e8b42.js";import{Q as ve}from"./QPage.d12e44a1.js";import{_ as ge,a as _e,b as be,c as qe,d as ye,e as Ae,f as Qe,g as $e,h as ke,i as Te,j as Me}from"./wandb_logo.127f2d59.js";import{Q as L,a as G}from"./QCard.eb99e114.js";import{u as W,Q as Ce}from"./QuestionToolIcon.7c4c8f1b.js";import{u as X}from"./answerStore.972bc172.js";import{u as Y}from"./vue-i18n.db8d47ce.js";import{T as Oe}from"./ToolQuestionItem.708210ee.js";import{u as Se}from"./index.esm.f0b860bb.js";import{_ as Be}from"./lg_saxion_wit.4b1b1f5e.js";import"./format.43d1c739.js";import"./scroll.270b929d.js";import"./QKnob.9e532b29.js";var ze=Z({name:"QFooter",props:{modelValue:{type:Boolean,default:!0},reveal:Boolean,bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},emits:["reveal","focusin"],setup(e,{slots:l,emit:h}){const{proxy:{$q:a}}=ie(),t=oe(ne,U);if(t===U)return console.error("QFooter needs to be child of QLayout"),U;const d=y(parseInt(e.heightHint,10)),u=y(!0),r=y(le.value===!0||t.isContainer.value===!0?0:window.innerHeight),c=_(()=>e.reveal===!0||t.view.value.indexOf("F")>-1||a.platform.is.ios&&t.isContainer.value===!0),f=_(()=>t.isContainer.value===!0?t.containerHeight.value:r.value),T=_(()=>{if(e.modelValue!==!0)return 0;if(c.value===!0)return u.value===!0?d.value:0;const s=t.scroll.value.position+f.value+d.value-t.height.value;return s>0?s:0}),O=_(()=>e.modelValue!==!0||c.value===!0&&u.value!==!0),M=_(()=>e.modelValue===!0&&O.value===!0&&e.reveal===!0),I=_(()=>"q-footer q-layout__section--marginal "+(c.value===!0?"fixed":"absolute")+"-bottom"+(e.bordered===!0?" q-footer--bordered":"")+(O.value===!0?" q-footer--hidden":"")+(e.modelValue!==!0?" q-layout--prevent-focus"+(c.value!==!0?" hidden":""):"")),N=_(()=>{const s=t.rows.value.bottom,o={};return s[0]==="l"&&t.left.space===!0&&(o[a.lang.rtl===!0?"right":"left"]=`${t.left.size}px`),s[2]==="r"&&t.right.space===!0&&(o[a.lang.rtl===!0?"left":"right"]=`${t.right.size}px`),o});function q(s,o){t.update("footer",s,o)}function Q(s,o){s.value!==o&&(s.value=o)}function P({height:s}){Q(d,s),q("size",s)}function F(){if(e.reveal!==!0)return;const{direction:s,position:o,inflectionPoint:n}=t.scroll.value;Q(u,s==="up"||o-n<100||t.height.value-f.value-o-d.value<300)}function E(s){M.value===!0&&Q(u,!0),h("focusin",s)}S(()=>e.modelValue,s=>{q("space",s),Q(u,!0),t.animate()}),S(T,s=>{q("offset",s)}),S(()=>e.reveal,s=>{s===!1&&Q(u,e.modelValue)}),S(u,s=>{t.animate(),h("reveal",s)}),S([d,t.scroll,t.height],F),S(()=>a.screen.height,s=>{t.isContainer.value!==!0&&Q(r,s)});const B={};return t.instances.footer=B,e.modelValue===!0&&q("size",d.value),q("space",e.modelValue),q("offset",T.value),ae(()=>{t.instances.footer===B&&(t.instances.footer=void 0,q("size",0),q("offset",0),q("space",!1))}),()=>{const s=re(l.default,[R(we,{debounce:0,onResize:P})]);return e.elevated===!0&&s.push(R("div",{class:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),R("footer",{class:I.value,style:N.value,onFocusin:E},s)}}}),Ve=Z({name:"QBtnGroup",props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},setup(e,{slots:l}){const h=_(()=>{const a=["unelevated","outline","flat","rounded","square","push","stretch","glossy"].filter(t=>e[t]===!0).map(t=>`q-btn-group--${t}`).join(" ");return`q-btn-group row no-wrap${a.length!==0?" "+a:""}`+(e.spread===!0?" q-btn-group--spread":" inline")});return()=>R("div",{class:h.value},ue(l.default))}});const Ie=D({name:"AnswerItem",props:{fullscreen:{type:Boolean},answer:{type:Object}},emits:["selectAnswer","unselectAnswer"],setup(e,{emit:l}){const h=W(),{t:a}=Y(),t=X(),d=_(()=>h.platform.is.mobile),u=y(!1),r=y(null);return{selectAnswer:M=>{l("selectAnswer",M)},t:a,unselectAnswer:M=>{l("unselectAnswer",M)},showTooltip:()=>{clearTimeout(r.value),u.value=!0},hideTooltip:()=>{r.value=setTimeout(()=>{u.value=!1},50)},tooltipVisible:u,answerStore:t,isMobile:d,props:e}}}),Ne={key:1},Pe=m("div",null,null,-1);function Fe(e,l,h,a,t,d){return i(),$(z,null,[v(Ve,{rounded:"",class:"full-width"},{default:w(()=>[v(C,{class:"full-width","no-caps":"",push:"",rounded:"",color:e.answerStore.selectedAnswers.includes(e.props.answer.id)?"accent":"primary",onClick:l[0]||(l[0]=ce(u=>e.answerStore.selectedAnswers.includes(e.props.answer.id)?e.unselectAnswer(e.props.answer.id):e.selectAnswer(e.props.answer.id),["stop"])),label:e.props.answer.answer_text},null,8,["color","label"]),e.props.answer.explanation_text&&!e.isMobile?(i(),b(C,{key:0,icon:"info",color:e.answerStore.selectedAnswers.includes(e.props.answer.id)?"accent":"secondary","no-caps":"",push:"",rounded:"",onMouseover:e.showTooltip,onMouseleave:e.hideTooltip,round:"",size:"md"},null,8,["color","onMouseover","onMouseleave"])):e.props.answer.explanation_text?(i(),b(C,{key:1,icon:"info",color:e.answerStore.selectedAnswers.includes(e.props.answer.id)?"accent":"secondary","no-caps":"",push:"",rounded:"",onClick:l[1]||(l[1]=u=>e.tooltipVisible=!e.tooltipVisible),round:"",size:"md"},null,8,["color"])):A("",!0)]),_:1}),e.props.answer.explanation_text&&e.tooltipVisible?(i(),b(G,{key:0,onMouseover:e.showTooltip,onMouseleave:e.hideTooltip,style:{},class:"bg-white text-black tooltip",ref:"tooltip"},{default:w(()=>[v(L,null,{default:w(()=>[V(k(e.props.answer.explanation_text),1)]),_:1})]),_:1},8,["onMouseover","onMouseleave"])):A("",!0),e.props.fullscreen&&e.props.answer.explanation_text?(i(),$("div",Ne,[m("b",null,k(e.$t("answer.explanation"))+":",1),V(" "+k(e.props.answer.explanation_text),1)])):A("",!0),Pe],64)}var Ee=K(Ie,[["render",Fe]]);const Je=D({name:"QuestionItem",props:{question:{type:Object},question_number:{type:Number}},emits:["submitAnswer","previousQuestion","updateAnswer"],setup(e,{emit:l}){const{t:h}=Y(),a=X(),t=W(),d=_(()=>t.platform.is.mobile),u=a.tools,r=y(!1),c=y(!1),f=y(!1),T=y(null);return{selectAnswer:s=>{e.question.type==="single"&&a.selectedAnswers.length>0&&a.selectedAnswers.pop(),a.selectedAnswers.push(s),l("updateAnswer",a.selectedAnswers)},clashed_tools:s=>{const o=[];return u.forEach(n=>{let g=n.bad_compatible.find(p=>p.question_id===e.question.id&&p.answer_id===s);if(g){let p=JSON.parse(JSON.stringify(n));p.match=g,o.push(p)}}),o},expandFull:()=>{r.value=!r.value,c.value=!c.value},getImgUrl:s=>new URL({"../assets/small/azureml_logo.png":ge,"../assets/small/clearml_logo.png":_e,"../assets/small/dagshub_logo.png":be,"../assets/small/databricks_logo.png":qe,"../assets/small/datarobot_logo.png":ye,"../assets/small/h2o_logo.png":Ae,"../assets/small/kubeflow_logo.png":Qe,"../assets/small/mlflow_logo.png":$e,"../assets/small/sagemaker_logo.png":ke,"../assets/small/vertex_logo.png":Te,"../assets/small/wandb_logo.png":Me}[`../assets/small/${s}`],self.location).href,matched_tools:s=>{const o=[];return u.forEach(n=>{let g=n.good_compatible.find(p=>p.question_id===e.question.id&&p.answer_id===s);if(g){let p=JSON.parse(JSON.stringify(n));p.match=g,o.push(p)}}),o},submitAnswer:()=>{const s=a.selectedAnswers;s.length>0?l("submitAnswer",e.question.id,s):de.create({position:"center",message:h("question.no_selected_answer_error"),color:"negative",timeout:200})},unselectAnswer:s=>{a.selectedAnswers=a.selectedAnswers.filter(o=>o!==s),l("updateAnswer",a.selectedAnswers)},fullscreen:c,t:h,answerStore:a,q:t,previousQuestion:()=>{l("previousQuestion")},showTooltip:()=>{clearTimeout(T.value),f.value=!0},hideTooltip:()=>{T.value=setTimeout(()=>{f.value=!1},50)},isMobile:d,tooltipVisible:f,props:e,expanded:r}},components:{AnswerItem:Ee,QuestionToolIcon:Ce}}),Re={class:"row justify-center self-start"},je={class:"col-12 self-start text-center"},He={class:"text-h5 text-center text-weight-bolder"},Ue={key:0},Le={class:"col-md-6 col-sm-10 col-xs-12 self-start"},Ge={key:0,class:"row q-pa-sm"},De=m("b",{class:"text-positive"},"Match",-1),Ke=m("div",{class:"col-2",style:{height:"auto"}},null,-1),We=m("b",{class:"text-negative"},"Clash",-1),Xe={class:"text-right col-12 q-pr-lg q-pb-md"},Ye={class:"q-pa-sm col-12"};function Ze(e,l,h,a,t,d){const u=H("AnswerItem"),r=H("question-tool-icon");return i(),$("div",Re,[m("div",je,[m("span",He,k(e.props.question.question_text),1),e.isMobile?A("",!0):(i(),b(C,{key:0,icon:"info",color:"accent","no-caps":"",onMouseover:e.showTooltip,onMouseleave:e.hideTooltip,push:"",rounded:"",round:"",size:"md",class:"q-my-sm"},null,8,["onMouseover","onMouseleave"])),m("div",null,[e.tooltipVisible?(i(),b(G,{key:0,onMouseover:e.showTooltip,onMouseleave:e.hideTooltip,class:"tooltip",ref:"tooltip"},{default:w(()=>[v(L,null,{default:w(()=>[V(k(e.props.question.explanation_text),1)]),_:1})]),_:1},8,["onMouseover","onMouseleave"])):A("",!0)])]),e.fullscreen?(i(),$("div",Ue,[m("b",null,k(e.$t("question.explanation"))+":",1),V(" "+k(e.props.question.explanation_text),1)])):A("",!0),m("div",Le,[v(G,{class:"row q-pa-lg-lg q-pa-md-md q-pa-xs-xs q-pa-sm-sm card"},{default:w(()=>[(i(!0),$(z,null,j(e.props.question.answers,c=>(i(),b(L,{class:"col-6",key:c.id},{default:w(()=>[v(u,{answer:c,fullscreen:e.fullscreen,onSelectAnswer:e.selectAnswer,onUnselectAnswer:e.unselectAnswer},null,8,["answer","fullscreen","onSelectAnswer","onUnselectAnswer"]),e.expanded?(i(),$("div",Ge,[m("div",{class:J(e.fullscreen?"col-12":"col-5")},[De,m("div",{class:J(e.fullscreen?"":"flex")},[(i(!0),$(z,null,j(e.matched_tools(c.id),f=>(i(),b(r,{key:f.id,tool:f,class:"q-ma-sm cursor-pointer"},null,8,["tool"]))),128))],2)],2),Ke,m("div",{class:J(e.fullscreen?"col-12":"col-5")},[We,m("div",{class:J(e.fullscreen?"":"flex")},[(i(!0),$(z,null,j(e.clashed_tools(c.id),f=>(i(),b(r,{tool:f,key:f.id,class:"q-ma-sm cursor-pointer"},null,8,["tool"]))),128))],2)],2)])):A("",!0)]),_:2},1024))),128)),m("div",Xe,[m("b",null,k(e.props.question.type==="single"?e.$t("question.single_question_help"):e.$t("question.multiple_question_help")),1)])]),_:1}),m("div",Ye,[v(C,{color:"accent","no-caps":"",class:"float-left",push:"",rounded:"",icon:"arrow_back",onClick:e.previousQuestion},null,8,["onClick"]),v(C,{color:"accent","no-caps":"",class:"float-right",push:"",rounded:"",label:e.$t("question.btn.next"),onClick:e.submitAnswer},null,8,["label","onClick"])])])])}var xe=K(Je,[["render",Ze]]);const es=D({name:"QuizPage",setup(){const{t:e}=Y(),l=W(),h=Se,a=pe(),t=X(),d=t.questions,u=y(!0),r=y(t.answers.length===0?0:t.answers.length-1),c=_(()=>l.platform.is.mobile),f=me();f.query.hasOwnProperty("question_id")&&(r.value=parseInt(f.query.question_id));const T=_(()=>(r.value+1)/d.length),O=()=>{r.value-1>=0?(r.value--,t.answers.pop(),t.selectedAnswers=t.answers[t.answers.length-1].answers):(t.answers=[],a.push("/"))},M=s=>{a.push(s)},I=(s,o)=>{t.selectedAnswers=[],r.value+1{t.answers[t.answers.length-1].answers=s};fe(()=>{t.answers.length===0&&t.answers.push({question_id:d[r.value].id,answers:[]})});const q=t.tools,Q=_(()=>{let s=JSON.parse(JSON.stringify(q));return s.forEach(o=>{o.matches=P(o),o.clashes=F(o),o.numberOfMatches=E(o),o.numberOfClashes=B(o),o.numberOfClashes&&o.numberOfClashes?o.percentage=o.numberOfMatches/(o.numberOfMatches+o.numberOfClashes)*100:o.percentage=100}),s.sort((o,n)=>n.percentage===o.percentage?n.numberOfMatches-o.numberOfMatches:n.percentage-o.percentage).map((o,n)=>({...o,rank:n+1}))}),P=s=>{let o=JSON.parse(JSON.stringify(d));return s.good_compatible.forEach(n=>{let g=o.find(p=>p.id===n.question_id);t.answers.forEach(p=>{p.question_id===n.question_id&&p.answers.includes(n.answer_id)&&n.explanation!==""&&(g.hasOwnProperty("matches")||(g.matches=[]),g.matches.push(n))})}),o},F=s=>{let o=JSON.parse(JSON.stringify(d));return s.bad_compatible.forEach(n=>{let g=o.find(p=>p.id===n.question_id);t.answers.forEach(p=>{p.question_id===n.question_id&&p.answers.includes(n.answer_id)&&n.explanation!==""&&(g.hasOwnProperty("matches")||(g.matches=[]),g.matches.push(n))})}),o},E=s=>{let o=0;return s.matches.forEach(n=>{n.hasOwnProperty("matches")&&(o+=n.matches.length)}),o},B=s=>{let o=0;return s.clashes.forEach(n=>{n.hasOwnProperty("matches")&&(o+=n.matches.length)}),o};return{router:a,isMobile:c,updateAnswer:N,previousQuestion:O,questions:d,t:e,expanded:u,goToRoute:M,progress:T,nextQuestion:I,q:l,sortedTools:Q,currentQuestion:r}},components:{QuestionItem:xe,ToolQuestionItem:Oe}}),ss={class:"absolute-full flex flex-center"},ts={class:"text-h4 text-white"},os={key:1,class:"flex flex-center"},ns=m("div",{class:"text-h5 text-weight-bolder"},"Match",-1);function ls(e,l,h,a,t,d){const u=H("question-item"),r=H("tool-question-item");return i(),b(ve,{class:"q-ma-sm flex justify-center"},{default:w(()=>[v(se,null,{default:w(()=>[v(x,null,{default:w(()=>[m("img",{onClick:l[0]||(l[0]=c=>e.goToRoute("/")),class:"q-ma-sm",src:Be,style:{height:"6vh"}}),e.q.screen.lt.sm?A("",!0):(i(),b(ee,{key:0,class:"absolute-center text-h5",onClick:l[1]||(l[1]=c=>e.goToRoute("/"))},{default:w(()=>[V(" AI-Platformwijzer Quiz ")]),_:1}))]),_:1}),v(te,{size:"50px",stripe:"",value:e.progress,color:"accent","track-color":"white"},{default:w(()=>[m("div",ss,[m("div",ts,k(`${e.currentQuestion+1}/${e.questions.length} ${e.$t("quiz.questions")}`),1)])]),_:1},8,["value"])]),_:1}),v(u,{question:e.questions[e.currentQuestion],question_number:e.currentQuestion+1,onUpdateAnswer:e.updateAnswer,onSubmitAnswer:e.nextQuestion,onPreviousQuestion:e.previousQuestion},null,8,["question","question_number","onUpdateAnswer","onSubmitAnswer","onPreviousQuestion"]),e.isMobile?A("",!0):(i(),b(ze,{key:0,elevated:"",bordered:"",class:"bg-white text-black"},{default:w(()=>[e.expanded?A("",!0):(i(),b(C,{key:0,"no-caps":"",label:e.$t("quiz.btn.more_info"),flat:"","icon-right":"keyboard_arrow_up",onClick:l[2]||(l[2]=c=>e.expanded=!e.expanded)},null,8,["label"])),e.expanded?(i(),$("div",os,[v(C,{"no-caps":"",label:"",flat:"","icon-right":"keyboard_arrow_down",onClick:l[3]||(l[3]=c=>e.expanded=!e.expanded)}),ns,v(he,{name:"tool-list",tag:"tool-item",class:"flex flex-center"},{default:w(()=>[(i(!0),$(z,null,j(e.sortedTools,(c,f)=>(i(),b(r,{tool:c,question:e.questions[e.currentQuestion],size:"80px",key:f},null,8,["tool","question"]))),128))]),_:1})])):A("",!0)]),_:1}))]),_:1})}var ys=K(es,[["render",ls]]);export{ys as default}; diff --git a/docs/assets/ResultPage.27bf3ffd.js b/docs/assets/ResultPage.27bf3ffd.js deleted file mode 100644 index 3898ced..0000000 --- a/docs/assets/ResultPage.27bf3ffd.js +++ /dev/null @@ -1 +0,0 @@ -import{j as pe,l as v,m as He,t as Pl,T as ze,x as Ee,k as m,B as ao,r as I,q as ue,ao as no,ap as tl,a5 as Ol,aq as Ml,s as ct,I as Me,A as ll,C as Re,G as ol,ar as io,as as ro,W as al,ab as Be,at as Et,a7 as ut,au as uo,a9 as fl,aa as so,av as co,aw as fo,X as Wt,ax as vt,ai as it,ay as vo,ad as mo,ac as go,az as rt,$ as ho,aA as el,aB as vl,aC as bo,aD as So,a1 as mt,Q as De,a as $t,_ as Ft,o as G,M as de,f as ee,w as ne,g as Q,L as Se,e as Le,U as nl,af as yo,c as Rt,h as Ae,O as yt,N as pt,i as Lt,aE as po,u as wo,am as _o,aF as ko}from"./index.0ed11181.js";import{Q as qo,a as xo}from"./QCardActions.06a548c9.js";import{u as wt,b as _t,d as Co,e as Bl,g as To,h as Vo,a as It,Q as Xe}from"./use-form.ff3f77cb.js";import{g as Po,b as Oo,a as Mo,h as Bo}from"./scroll.f78dc32b.js";import{u as il,a as El,b as Rl,c as Ll,f as ml,d as Eo}from"./use-key-composition.deb261a7.js";import{Q as zt,_ as Ro,a as Lo,b as zo,c as Ao,d as $o,e as Fo,f as Io,g as Do,h as Ho,i as No,j as jo}from"./wandb_logo.549270dc.js";import{u as Qo,b as Ko,c as Uo,d as Wo,e as Xo,f as Jo,g as Yo,h as Go,r as gl,i as hl,j as Zo,k as ea,n as bl,Q as ta,a as la,l as oa,m as aa}from"./QKnob.af0fb19d.js";import{a as na,Q as ia}from"./QuestionToolIcon.081efecf.js";import{Q as ra}from"./QPage.9c21063d.js";import{_ as zl,a as Al,b as $l,c as Fl,d as Il,e as Dl,f as Hl,g as Nl,h as jl,i as Ql,j as Kl}from"./wandb_logo.43daca0d.js";import{u as rl}from"./answerStore.1c70fbbb.js";import{u as ua}from"./use-quasar.624d3c43.js";var sa=pe({name:"QTh",props:{props:Object,autoWidth:Boolean},emits:["click"],setup(e,{slots:t,emit:o}){const i=Ee(),{proxy:{$q:r}}=i,n=c=>{o("click",c)};return()=>{if(e.props===void 0)return v("th",{class:e.autoWidth===!0?"q-table--col-auto-width":"",onClick:n},He(t.default));let c,s;const f=i.vnode.key;if(f){if(c=e.props.colsMap[f],c===void 0)return}else c=e.props.col;if(c.sortable===!0){const a=c.align==="right"?"unshift":"push";s=Pl(t.default,[]),s[a](v(ze,{class:c.__iconClass,name:r.iconSet.table.arrowUp}))}else s=He(t.default);const b={class:c.__thClass+(e.autoWidth===!0?" q-table--col-auto-width":""),style:c.headerStyle,onClick:a=>{c.sortable===!0&&e.props.sort(c),n(a)}};return v("th",b,s)}}}),ca=pe({name:"QList",props:{...wt,bordered:Boolean,dense:Boolean,separator:Boolean,padding:Boolean,tag:{type:String,default:"div"}},setup(e,{slots:t}){const o=Ee(),i=_t(e,o.proxy.$q),r=m(()=>"q-list"+(e.bordered===!0?" q-list--bordered":"")+(e.dense===!0?" q-list--dense":"")+(e.separator===!0?" q-list--separator":"")+(i.value===!0?" q-list--dark":"")+(e.padding===!0?" q-list--padding":""));return()=>v(e.tag,{class:r.value},He(t.default))}});const da=["horizontal","vertical","cell","none"];var fa=pe({name:"QMarkupTable",props:{...wt,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,wrapCells:Boolean,separator:{type:String,default:"horizontal",validator:e=>da.includes(e)}},setup(e,{slots:t}){const o=Ee(),i=_t(e,o.proxy.$q),r=m(()=>`q-markup-table q-table__container q-table__card q-table--${e.separator}-separator`+(i.value===!0?" q-table--dark q-table__card--dark q-dark":"")+(e.dense===!0?" q-table--dense":"")+(e.flat===!0?" q-table--flat":"")+(e.bordered===!0?" q-table--bordered":"")+(e.square===!0?" q-table--square":"")+(e.wrapCells===!1?" q-table--no-wrap":""));return()=>v("div",{class:r.value},[v("table",{class:"q-table"},He(t.default))])}});function Ul(e,t){return v("div",e,[v("table",{class:"q-table"},t)])}let At=!1;{const e=document.createElement("div");e.setAttribute("dir","rtl"),Object.assign(e.style,{width:"1px",height:"1px",overflow:"auto"});const t=document.createElement("div");Object.assign(t.style,{width:"1000px",height:"1px"}),document.body.appendChild(e),e.appendChild(t),e.scrollLeft=-1e3,At=e.scrollLeft>=0,e.remove()}const Oe=1e3,va=["start","center","end","start-force","center-force","end-force"],Wl=Array.prototype.filter,ma=window.getComputedStyle(document.body).overflowAnchor===void 0?ao:function(e,t){e!==null&&(e._qOverflowAnimationFrame!==void 0&&cancelAnimationFrame(e._qOverflowAnimationFrame),e._qOverflowAnimationFrame=requestAnimationFrame(()=>{if(e===null)return;e._qOverflowAnimationFrame=void 0;const o=e.children||[];Wl.call(o,r=>r.dataset&&r.dataset.qVsAnchor!==void 0).forEach(r=>{delete r.dataset.qVsAnchor});const i=o[t];i&&i.dataset&&(i.dataset.qVsAnchor="")}))};function st(e,t){return e+t}function Xt(e,t,o,i,r,n,c,s){const f=e===window?document.scrollingElement||document.documentElement:e,b=r===!0?"offsetWidth":"offsetHeight",a={scrollStart:0,scrollViewSize:-c-s,scrollMaxSize:0,offsetStart:-c,offsetEnd:-s};if(r===!0?(e===window?(a.scrollStart=window.pageXOffset||window.scrollX||document.body.scrollLeft||0,a.scrollViewSize+=document.documentElement.clientWidth):(a.scrollStart=f.scrollLeft,a.scrollViewSize+=f.clientWidth),a.scrollMaxSize=f.scrollWidth,n===!0&&(a.scrollStart=(At===!0?a.scrollMaxSize-a.scrollViewSize:0)-a.scrollStart)):(e===window?(a.scrollStart=window.pageYOffset||window.scrollY||document.body.scrollTop||0,a.scrollViewSize+=document.documentElement.clientHeight):(a.scrollStart=f.scrollTop,a.scrollViewSize+=f.clientHeight),a.scrollMaxSize=f.scrollHeight),o!==null)for(let g=o.previousElementSibling;g!==null;g=g.previousElementSibling)g.classList.contains("q-virtual-scroll--skip")===!1&&(a.offsetStart+=g[b]);if(i!==null)for(let g=i.nextElementSibling;g!==null;g=g.nextElementSibling)g.classList.contains("q-virtual-scroll--skip")===!1&&(a.offsetEnd+=g[b]);if(t!==e){const g=f.getBoundingClientRect(),w=t.getBoundingClientRect();r===!0?(a.offsetStart+=w.left-g.left,a.offsetEnd-=w.width):(a.offsetStart+=w.top-g.top,a.offsetEnd-=w.height),e!==window&&(a.offsetStart+=a.scrollStart),a.offsetEnd+=a.scrollMaxSize-a.offsetStart}return a}function Sl(e,t,o,i){t==="end"&&(t=(e===window?document.body:e)[o===!0?"scrollWidth":"scrollHeight"]),e===window?o===!0?(i===!0&&(t=(At===!0?document.body.scrollWidth-document.documentElement.clientWidth:0)-t),window.scrollTo(t,window.pageYOffset||window.scrollY||document.body.scrollTop||0)):window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,t):o===!0?(i===!0&&(t=(At===!0?e.scrollWidth-e.offsetWidth:0)-t),e.scrollLeft=t):e.scrollTop=t}function gt(e,t,o,i){if(o>=i)return 0;const r=t.length,n=Math.floor(o/Oe),c=Math.floor((i-1)/Oe)+1;let s=e.slice(n,c).reduce(st,0);return o%Oe!==0&&(s-=t.slice(n*Oe,o).reduce(st,0)),i%Oe!==0&&i!==r&&(s-=t.slice(i,c*Oe).reduce(st,0)),s}const Xl={virtualScrollSliceSize:{type:[Number,String],default:null},virtualScrollSliceRatioBefore:{type:[Number,String],default:1},virtualScrollSliceRatioAfter:{type:[Number,String],default:1},virtualScrollItemSize:{type:[Number,String],default:24},virtualScrollStickySizeStart:{type:[Number,String],default:0},virtualScrollStickySizeEnd:{type:[Number,String],default:0},tableColspan:[Number,String]},Jl=Object.keys(Xl),Yl={virtualScrollHorizontal:Boolean,onVirtualScroll:Function,...Xl};function Gl({virtualScrollLength:e,getVirtualScrollTarget:t,getVirtualScrollEl:o,virtualScrollItemSizeComputed:i}){const r=Ee(),{props:n,emit:c,proxy:s}=r,{$q:f}=s;let b,a,g,w=[],_;const x=I(0),O=I(0),q=I({}),H=I(null),N=I(null),T=I(null),C=I({from:0,to:0}),X=m(()=>n.tableColspan!==void 0?n.tableColspan:100);i===void 0&&(i=m(()=>n.virtualScrollItemSize));const j=m(()=>i.value+";"+n.virtualScrollHorizontal),oe=m(()=>j.value+";"+n.virtualScrollSliceRatioBefore+";"+n.virtualScrollSliceRatioAfter);ue(oe,()=>{ae()}),ue(j,se);function se(){we(a,!0)}function ge(d){we(d===void 0?a:d)}function F(d,y){const z=t();if(z==null||z.nodeType===8)return;const K=Xt(z,o(),H.value,N.value,n.virtualScrollHorizontal,f.lang.rtl,n.virtualScrollStickySizeStart,n.virtualScrollStickySizeEnd);g!==K.scrollViewSize&&ae(K.scrollViewSize),h(z,K,Math.min(e.value-1,Math.max(0,parseInt(d,10)||0)),0,va.indexOf(y)>-1?y:a>-1&&d>a?"end":"start")}function E(){const d=t();if(d==null||d.nodeType===8)return;const y=Xt(d,o(),H.value,N.value,n.virtualScrollHorizontal,f.lang.rtl,n.virtualScrollStickySizeStart,n.virtualScrollStickySizeEnd),z=e.value-1,K=y.scrollMaxSize-y.offsetStart-y.offsetEnd-O.value;if(b===y.scrollStart)return;if(y.scrollMaxSize<=0){h(d,y,0,0);return}g!==y.scrollViewSize&&ae(y.scrollViewSize),D(C.value.from);const V=Math.floor(y.scrollMaxSize-Math.max(y.scrollViewSize,y.offsetEnd)-Math.min(_[z],y.scrollViewSize/2));if(V>0&&Math.ceil(y.scrollStart)>=V){h(d,y,z,y.scrollMaxSize-y.offsetEnd-w.reduce(st,0));return}let P=0,R=y.scrollStart-y.offsetStart,U=R;if(R<=K&&R+y.scrollViewSize>=x.value)R-=x.value,P=C.value.from,U=R;else for(let L=0;R>=w[L]&&P0&&P-y.scrollViewSize?(P++,U=R):U=_[P]+R;h(d,y,P,U)}function h(d,y,z,K,V){const P=typeof V=="string"&&V.indexOf("-force")>-1,R=P===!0?V.replace("-force",""):V,U=R!==void 0?R:"start";let L=Math.max(0,z-q.value[U]),ie=L+q.value.total;ie>e.value&&(ie=e.value,L=Math.max(0,ie-q.value.total)),b=y.scrollStart;const he=L!==C.value.from||ie!==C.value.to;if(he===!1&&R===void 0){ke(z);return}const{activeElement:Je}=document,fe=T.value;he===!0&&fe!==null&&fe!==Je&&fe.contains(Je)===!0&&(fe.addEventListener("focusout",Y),setTimeout(()=>{fe!==null&&fe.removeEventListener("focusout",Y)})),ma(fe,z-L);const $e=R!==void 0?_.slice(L,z).reduce(st,0):0;if(he===!0){const xe=ie>=C.value.from&&L<=C.value.to?C.value.to:ie;C.value={from:L,to:xe},x.value=gt(w,_,0,L),O.value=gt(w,_,ie,e.value),requestAnimationFrame(()=>{C.value.to!==ie&&b===y.scrollStart&&(C.value={from:C.value.from,to:ie},O.value=gt(w,_,ie,e.value))})}requestAnimationFrame(()=>{if(b!==y.scrollStart)return;he===!0&&D(L);const xe=_.slice(L,z).reduce(st,0),Ce=xe+y.offsetStart+x.value,Fe=Ce+_[z];let Ne=Ce+K;if(R!==void 0){const dt=xe-$e,je=y.scrollStart+dt;Ne=P!==!0&&jeL.classList&&L.classList.contains("q-virtual-scroll--skip")===!1),K=z.length,V=n.virtualScrollHorizontal===!0?L=>L.getBoundingClientRect().width:L=>L.offsetHeight;let P=d,R,U;for(let L=0;L=K;P--)_[P]=z;const V=Math.floor((e.value-1)/Oe);w=[];for(let P=0;P<=V;P++){let R=0;const U=Math.min((P+1)*Oe,e.value);for(let L=P*Oe;L=0?(D(C.value.from),Me(()=>{F(d)})):me()}function ae(d){if(d===void 0&&typeof window!="undefined"){const R=t();R!=null&&R.nodeType!==8&&(d=Xt(R,o(),H.value,N.value,n.virtualScrollHorizontal,f.lang.rtl,n.virtualScrollStickySizeStart,n.virtualScrollStickySizeEnd).scrollViewSize)}g=d;const y=parseFloat(n.virtualScrollSliceRatioBefore)||0,z=parseFloat(n.virtualScrollSliceRatioAfter)||0,K=1+y+z,V=d===void 0||d<=0?1:Math.ceil(d/i.value),P=Math.max(1,V,Math.ceil((n.virtualScrollSliceSize>0?n.virtualScrollSliceSize:10)/K));q.value={total:Math.ceil(P*K),start:Math.ceil(P*y),center:Math.ceil(P*(.5+y)),end:Math.ceil(P*(1+y)),view:V}}function _e(d,y){const z=n.virtualScrollHorizontal===!0?"width":"height",K={["--q-virtual-scroll-item-"+z]:i.value+"px"};return[d==="tbody"?v(d,{class:"q-virtual-scroll__padding",key:"before",ref:H},[v("tr",[v("td",{style:{[z]:`${x.value}px`,...K},colspan:X.value})])]):v(d,{class:"q-virtual-scroll__padding",key:"before",ref:H,style:{[z]:`${x.value}px`,...K}}),v(d,{class:"q-virtual-scroll__content",key:"content",ref:T,tabindex:-1},y.flat()),d==="tbody"?v(d,{class:"q-virtual-scroll__padding",key:"after",ref:N},[v("tr",[v("td",{style:{[z]:`${O.value}px`,...K},colspan:X.value})])]):v(d,{class:"q-virtual-scroll__padding",key:"after",ref:N,style:{[z]:`${O.value}px`,...K}})]}function ke(d){a!==d&&(n.onVirtualScroll!==void 0&&c("virtualScroll",{index:d,from:C.value.from,to:C.value.to-1,direction:d{ae()});let qe=!1;return Ol(()=>{qe=!0}),Ml(()=>{if(qe!==!0)return;const d=t();b!==void 0&&d!==void 0&&d!==null&&d.nodeType!==8?Sl(d,b,n.virtualScrollHorizontal,f.lang.rtl):F(a)}),ct(()=>{me.cancel()}),Object.assign(s,{scrollTo:F,reset:se,refresh:ge}),{virtualScrollSliceRange:C,virtualScrollSliceSizeComputed:q,setVirtualScrollSize:ae,onVirtualScrollEvt:me,localResetVirtualScroll:we,padVirtualScroll:_e,scrollTo:F,reset:se,refresh:ge}}const ga={list:ca,table:fa},ha=["list","table","__qtable"];var ba=pe({name:"QVirtualScroll",props:{...Yl,type:{type:String,default:"list",validator:e=>ha.includes(e)},items:{type:Array,default:()=>[]},itemsFn:Function,itemsSize:Number,scrollTarget:{default:void 0}},setup(e,{slots:t,attrs:o}){let i;const r=I(null),n=m(()=>e.itemsSize>=0&&e.itemsFn!==void 0?parseInt(e.itemsSize,10):Array.isArray(e.items)?e.items.length:0),{virtualScrollSliceRange:c,localResetVirtualScroll:s,padVirtualScroll:f,onVirtualScrollEvt:b}=Gl({virtualScrollLength:n,getVirtualScrollTarget:x,getVirtualScrollEl:_}),a=m(()=>{if(n.value===0)return[];const N=(T,C)=>({index:c.value.from+C,item:T});return e.itemsFn===void 0?e.items.slice(c.value.from,c.value.to).map(N):e.itemsFn(c.value.from,c.value.to-c.value.from).map(N)}),g=m(()=>"q-virtual-scroll q-virtual-scroll"+(e.virtualScrollHorizontal===!0?"--horizontal":"--vertical")+(e.scrollTarget!==void 0?"":" scroll")),w=m(()=>e.scrollTarget!==void 0?{}:{tabindex:0});ue(n,()=>{s()}),ue(()=>e.scrollTarget,()=>{q(),O()});function _(){return r.value.$el||r.value}function x(){return i}function O(){i=Po(_(),e.scrollTarget),i.addEventListener("scroll",b,Re.passive)}function q(){i!==void 0&&(i.removeEventListener("scroll",b,Re.passive),i=void 0)}function H(){let N=f(e.type==="list"?"div":"tbody",a.value.map(t.default));return t.before!==void 0&&(N=t.before().concat(N)),ol(t.after,N)}return tl(()=>{s()}),ll(()=>{O()}),Ml(()=>{O()}),Ol(()=>{q()}),ct(()=>{q()}),()=>{if(t.default===void 0){console.error("QVirtualScroll: default scoped slot is required for rendering");return}return e.type==="__qtable"?Ul({ref:r,class:"q-table__middle "+g.value},H()):v(ga[e.type],{...o,ref:r,class:[o.class,g.value],...w.value},H)}}}),Sa=pe({name:"QField",inheritAttrs:!1,props:{...il,tag:{type:String,default:"label"}},emits:El,setup(){return Rl(Ll({requiredForAttr:!1,tagProp:!0}))}}),ya=pe({name:"QItem",props:{...wt,...io,tag:{type:String,default:"div"},active:{type:Boolean,default:null},clickable:Boolean,dense:Boolean,insetLevel:Number,tabindex:[String,Number],focused:Boolean,manualFocus:Boolean},emits:["click","keyup"],setup(e,{slots:t,emit:o}){const{proxy:{$q:i}}=Ee(),r=_t(e,i),{hasLink:n,linkAttrs:c,linkClass:s,linkTag:f,navigateOnClick:b}=ro(),a=I(null),g=I(null),w=m(()=>e.clickable===!0||n.value===!0||e.tag==="label"),_=m(()=>e.disable!==!0&&w.value===!0),x=m(()=>"q-item q-item-type row no-wrap"+(e.dense===!0?" q-item--dense":"")+(r.value===!0?" q-item--dark":"")+(n.value===!0&&e.active===null?s.value:e.active===!0?` q-item--active${e.activeClass!==void 0?` ${e.activeClass}`:""}`:"")+(e.disable===!0?" disabled":"")+(_.value===!0?" q-item--clickable q-link cursor-pointer "+(e.manualFocus===!0?"q-manual-focusable":"q-focusable q-hoverable")+(e.focused===!0?" q-manual-focusable--focused":""):"")),O=m(()=>{if(e.insetLevel===void 0)return null;const T=i.lang.rtl===!0?"Right":"Left";return{["padding"+T]:16+e.insetLevel*56+"px"}});function q(T){_.value===!0&&(g.value!==null&&(T.qKeyEvent!==!0&&document.activeElement===a.value?g.value.focus():document.activeElement===g.value&&a.value.focus()),b(T))}function H(T){if(_.value===!0&&al(T,[13,32])===!0){Be(T),T.qKeyEvent=!0;const C=new MouseEvent("click",T);C.qKeyEvent=!0,a.value.dispatchEvent(C)}o("keyup",T)}function N(){const T=Pl(t.default,[]);return _.value===!0&&T.unshift(v("div",{class:"q-focus-helper",tabindex:-1,ref:g})),T}return()=>{const T={ref:a,class:x.value,style:O.value,role:"listitem",onClick:q,onKeyup:H};return _.value===!0?(T.tabindex=e.tabindex||"0",Object.assign(T,c.value)):w.value===!0&&(T["aria-disabled"]="true"),v(f.value,T,N())}}}),pa=pe({name:"QItemSection",props:{avatar:Boolean,thumbnail:Boolean,side:Boolean,top:Boolean,noWrap:Boolean},setup(e,{slots:t}){const o=m(()=>`q-item__section column q-item__section--${e.avatar===!0||e.side===!0||e.thumbnail===!0?"side":"main"}`+(e.top===!0?" q-item__section--top justify-start":" justify-center")+(e.avatar===!0?" q-item__section--avatar":"")+(e.thumbnail===!0?" q-item__section--thumbnail":"")+(e.noWrap===!0?" q-item__section--nowrap":""));return()=>v("div",{class:o.value},He(t.default))}}),wa=pe({name:"QItemLabel",props:{overline:Boolean,caption:Boolean,header:Boolean,lines:[Number,String]},setup(e,{slots:t}){const o=m(()=>parseInt(e.lines,10)),i=m(()=>"q-item__label"+(e.overline===!0?" q-item__label--overline text-overline":"")+(e.caption===!0?" q-item__label--caption text-caption":"")+(e.header===!0?" q-item__label--header":"")+(o.value===1?" ellipsis":"")),r=m(()=>e.lines!==void 0&&o.value>1?{overflow:"hidden",display:"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":o.value}:null);return()=>v("div",{style:r.value,class:i.value},He(t.default))}});function _a(e,t,o){let i;function r(){i!==void 0&&(Et.remove(i),i=void 0)}return ct(()=>{e.value===!0&&r()}),{removeFromHistory:r,addToHistory(){i={condition:()=>o.value===!0,handler:t},Et.add(i)}}}let ht=0,Jt,Yt,St,Gt=!1,yl,pl,wl,We=null;function ka(e){qa(e)&&Be(e)}function qa(e){if(e.target===document.body||e.target.classList.contains("q-layout__backdrop"))return!0;const t=uo(e),o=e.shiftKey&&!e.deltaX,i=!o&&Math.abs(e.deltaX)<=Math.abs(e.deltaY),r=o||i?e.deltaY:e.deltaX;for(let n=0;n0&&c.scrollTop+c.clientHeight===c.scrollHeight:r<0&&c.scrollLeft===0?!0:r>0&&c.scrollLeft+c.clientWidth===c.scrollWidth}return!0}function _l(e){e.target===document&&(document.scrollingElement.scrollTop=document.scrollingElement.scrollTop)}function Ot(e){Gt!==!0&&(Gt=!0,requestAnimationFrame(()=>{Gt=!1;const{height:t}=e.target,{clientHeight:o,scrollTop:i}=document.scrollingElement;(St===void 0||t!==window.innerHeight)&&(St=o-t,document.scrollingElement.scrollTop=i),i>St&&(document.scrollingElement.scrollTop-=Math.ceil((i-St)/8))}))}function kl(e){const t=document.body,o=window.visualViewport!==void 0;if(e==="add"){const{overflowY:i,overflowX:r}=window.getComputedStyle(t);Jt=Oo(window),Yt=Mo(window),yl=t.style.left,pl=t.style.top,wl=window.location.href,t.style.left=`-${Jt}px`,t.style.top=`-${Yt}px`,r!=="hidden"&&(r==="scroll"||t.scrollWidth>window.innerWidth)&&t.classList.add("q-body--force-scrollbar-x"),i!=="hidden"&&(i==="scroll"||t.scrollHeight>window.innerHeight)&&t.classList.add("q-body--force-scrollbar-y"),t.classList.add("q-body--prevent-scroll"),document.qScrollPrevented=!0,ut.is.ios===!0&&(o===!0?(window.scrollTo(0,0),window.visualViewport.addEventListener("resize",Ot,Re.passiveCapture),window.visualViewport.addEventListener("scroll",Ot,Re.passiveCapture),window.scrollTo(0,0)):window.addEventListener("scroll",_l,Re.passiveCapture))}ut.is.desktop===!0&&ut.is.mac===!0&&window[`${e}EventListener`]("wheel",ka,Re.notPassive),e==="remove"&&(ut.is.ios===!0&&(o===!0?(window.visualViewport.removeEventListener("resize",Ot,Re.passiveCapture),window.visualViewport.removeEventListener("scroll",Ot,Re.passiveCapture)):window.removeEventListener("scroll",_l,Re.passiveCapture)),t.classList.remove("q-body--prevent-scroll"),t.classList.remove("q-body--force-scrollbar-x"),t.classList.remove("q-body--force-scrollbar-y"),document.qScrollPrevented=!1,t.style.left=yl,t.style.top=pl,window.location.href===wl&&window.scrollTo(Jt,Yt),St=void 0)}function xa(e){let t="add";if(e===!0){if(ht++,We!==null){clearTimeout(We),We=null;return}if(ht>1)return}else{if(ht===0||(ht--,ht>0))return;if(t="remove",ut.is.ios===!0&&ut.is.nativeMobile===!0){We!==null&&clearTimeout(We),We=setTimeout(()=>{kl(t),We=null},100);return}}kl(t)}function Ca(){let e;return{preventBodyScroll(t){t!==e&&(e!==void 0||t===!0)&&(e=t,xa(t))}}}let Mt=0;const Ta={standard:"fixed-full flex-center",top:"fixed-top justify-center",bottom:"fixed-bottom justify-center",right:"fixed-right items-center",left:"fixed-left items-center"},ql={standard:["scale","scale"],top:["slide-down","slide-up"],bottom:["slide-up","slide-down"],right:["slide-left","slide-right"],left:["slide-right","slide-left"]};var Zl=pe({name:"QDialog",inheritAttrs:!1,props:{...Qo,...Ko,transitionShow:String,transitionHide:String,persistent:Boolean,autoClose:Boolean,allowFocusOutside:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,position:{type:String,default:"standard",validator:e=>e==="standard"||["top","bottom","left","right"].includes(e)}},emits:[...Uo,"shake","click","escapeKey"],setup(e,{slots:t,emit:o,attrs:i}){const r=Ee(),n=I(null),c=I(!1),s=I(!1);let f=null,b=null,a,g;const w=m(()=>e.persistent!==!0&&e.noRouteDismiss!==!0&&e.seamless!==!0),{preventBodyScroll:_}=Ca(),{registerTimeout:x}=Wo(),{registerTick:O,removeTick:q}=Xo(),{transitionProps:H,transitionStyle:N}=Jo(e,()=>ql[e.position][0],()=>ql[e.position][1]),{showPortal:T,hidePortal:C,portalIsAccessible:X,renderPortal:j}=Yo(r,n,K,"dialog"),{hide:oe}=Go({showing:c,hideOnRouteChange:w,handleShow:Y,handleHide:we,processOnMount:!0}),{addToHistory:se,removeFromHistory:ge}=_a(c,oe,w),F=m(()=>`q-dialog__inner flex no-pointer-events q-dialog__inner--${e.maximized===!0?"maximized":"minimized"} q-dialog__inner--${e.position} ${Ta[e.position]}`+(s.value===!0?" q-dialog__inner--animating":"")+(e.fullWidth===!0?" q-dialog__inner--fullwidth":"")+(e.fullHeight===!0?" q-dialog__inner--fullheight":"")+(e.square===!0?" q-dialog__inner--square":"")),E=m(()=>c.value===!0&&e.seamless!==!0),h=m(()=>e.autoClose===!0?{onClick:d}:{}),D=m(()=>[`q-dialog fullscreen no-pointer-events q-dialog--${E.value===!0?"modal":"seamless"}`,i.class]);ue(()=>e.maximized,V=>{c.value===!0&&qe(V)}),ue(E,V=>{_(V),V===!0?(Zo(z),ea(ke)):(gl(z),hl(ke))});function Y(V){se(),b=e.noRefocus===!1&&document.activeElement!==null?document.activeElement:null,qe(e.maximized),T(),s.value=!0,e.noFocus!==!0?(document.activeElement!==null&&document.activeElement.blur(),O(ae)):q(),x(()=>{if(r.proxy.$q.platform.is.ios===!0){if(e.seamless!==!0&&document.activeElement){const{top:P,bottom:R}=document.activeElement.getBoundingClientRect(),{innerHeight:U}=window,L=window.visualViewport!==void 0?window.visualViewport.height:U;P>0&&R>L/2&&(document.scrollingElement.scrollTop=Math.min(document.scrollingElement.scrollHeight-L,R>=U?1/0:Math.ceil(document.scrollingElement.scrollTop+R-L/2))),document.activeElement.scrollIntoView()}g=!0,n.value.click(),g=!1}T(!0),s.value=!1,o("show",V)},e.transitionDuration)}function we(V){q(),ge(),me(!0),s.value=!0,C(),b!==null&&(((V&&V.type.indexOf("key")===0?b.closest('[tabindex]:not([tabindex^="-"])'):void 0)||b).focus(),b=null),x(()=>{C(!0),s.value=!1,o("hide",V)},e.transitionDuration)}function ae(V){Co(()=>{let P=n.value;P===null||P.contains(document.activeElement)===!0||(P=(V!==""?P.querySelector(V):null)||P.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||P.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||P.querySelector("[autofocus], [data-autofocus]")||P,P.focus({preventScroll:!0}))})}function _e(V){V&&typeof V.focus=="function"?V.focus({preventScroll:!0}):ae(),o("shake");const P=n.value;P!==null&&(P.classList.remove("q-animate--scale"),P.classList.add("q-animate--scale"),f!==null&&clearTimeout(f),f=setTimeout(()=>{f=null,n.value!==null&&(P.classList.remove("q-animate--scale"),ae())},170))}function ke(){e.seamless!==!0&&(e.persistent===!0||e.noEscDismiss===!0?e.maximized!==!0&&e.noShake!==!0&&_e():(o("escapeKey"),oe()))}function me(V){f!==null&&(clearTimeout(f),f=null),(V===!0||c.value===!0)&&(qe(!1),e.seamless!==!0&&(_(!1),gl(z),hl(ke))),V!==!0&&(b=null)}function qe(V){V===!0?a!==!0&&(Mt<1&&document.body.classList.add("q-body--dialog"),Mt++,a=!0):a===!0&&(Mt<2&&document.body.classList.remove("q-body--dialog"),Mt--,a=!1)}function d(V){g!==!0&&(oe(V),o("click",V))}function y(V){e.persistent!==!0&&e.noBackdropDismiss!==!0?oe(V):e.noShake!==!0&&_e()}function z(V){e.allowFocusOutside!==!0&&X.value===!0&&so(n.value,V.target)!==!0&&ae('[tabindex]:not([tabindex="-1"])')}Object.assign(r.proxy,{focus:ae,shake:_e,__updateRefocusTarget(V){b=V||null}}),ct(me);function K(){return v("div",{role:"dialog","aria-modal":E.value===!0?"true":"false",...i,class:D.value},[v(fl,{name:"q-transition--fade",appear:!0},()=>E.value===!0?v("div",{class:"q-dialog__backdrop fixed-full",style:N.value,"aria-hidden":"true",tabindex:-1,onClick:y}):null),v(fl,H.value,()=>c.value===!0?v("div",{ref:n,class:F.value,style:N.value,tabindex:-1,...h.value},He(t.default)):null)])}return j}});const xl=e=>["add","add-unique","toggle"].includes(e),Va=".*+?^${}()|[]\\",Pa=Object.keys(il);var Oa=pe({name:"QSelect",inheritAttrs:!1,props:{...Yl,...Bl,...il,modelValue:{required:!0},multiple:Boolean,displayValue:[String,Number],displayValueHtml:Boolean,dropdownIcon:String,options:{type:Array,default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],hideSelected:Boolean,hideDropdownIcon:Boolean,fillInput:Boolean,maxValues:[Number,String],optionsDense:Boolean,optionsDark:{type:Boolean,default:null},optionsSelectedClass:String,optionsHtml:Boolean,optionsCover:Boolean,menuShrink:Boolean,menuAnchor:String,menuSelf:String,menuOffset:Array,popupContentClass:String,popupContentStyle:[String,Array,Object],useInput:Boolean,useChips:Boolean,newValueMode:{type:String,validator:xl},mapOptions:Boolean,emitValue:Boolean,inputDebounce:{type:[Number,String],default:500},inputClass:[Array,String,Object],inputStyle:[Array,String,Object],tabindex:{type:[String,Number],default:0},autocomplete:String,transitionShow:String,transitionHide:String,transitionDuration:[String,Number],behavior:{type:String,validator:e=>["default","menu","dialog"].includes(e),default:"default"},virtualScrollItemSize:{type:[Number,String],default:void 0},onNewValue:Function,onFilter:Function},emits:[...El,"add","remove","inputValue","newValue","keyup","keypress","keydown","filterAbort"],setup(e,{slots:t,emit:o}){const{proxy:i}=Ee(),{$q:r}=i,n=I(!1),c=I(!1),s=I(-1),f=I(""),b=I(!1),a=I(!1);let g=null,w=null,_,x,O,q=null,H,N,T,C;const X=I(null),j=I(null),oe=I(null),se=I(null),ge=I(null),F=To(e),E=Eo(k),h=m(()=>Array.isArray(e.options)?e.options.length:0),D=m(()=>e.virtualScrollItemSize===void 0?e.optionsDense===!0?24:48:e.virtualScrollItemSize),{virtualScrollSliceRange:Y,virtualScrollSliceSizeComputed:we,localResetVirtualScroll:ae,padVirtualScroll:_e,onVirtualScrollEvt:ke,scrollTo:me,setVirtualScrollSize:qe}=Gl({virtualScrollLength:h,getVirtualScrollTarget:Nt,getVirtualScrollEl:Vt,virtualScrollItemSizeComputed:D}),d=Ll(),y=m(()=>{const l=e.mapOptions===!0&&e.multiple!==!0,p=e.modelValue!==void 0&&(e.modelValue!==null||l===!0)?e.multiple===!0&&Array.isArray(e.modelValue)?e.modelValue:[e.modelValue]:[];if(e.mapOptions===!0&&Array.isArray(e.options)===!0){const S=e.mapOptions===!0&&_!==void 0?_:[],A=p.map(J=>Ht(J,S));return e.modelValue===null&&l===!0?A.filter(J=>J!==null):A}return p}),z=m(()=>{const l={};return Pa.forEach(p=>{const S=e[p];S!==void 0&&(l[p]=S)}),l}),K=m(()=>e.optionsDark===null?d.isDark.value:e.optionsDark),V=m(()=>ml(y.value)),P=m(()=>{let l="q-field__input q-placeholder col";return e.hideSelected===!0||y.value.length===0?[l,e.inputClass]:(l+=" q-field__input--padding",e.inputClass===void 0?l:[l,e.inputClass])}),R=m(()=>(e.virtualScrollHorizontal===!0?"q-virtual-scroll--horizontal":"")+(e.popupContentClass?" "+e.popupContentClass:"")),U=m(()=>h.value===0),L=m(()=>y.value.map(l=>ve.value(l)).join(", ")),ie=m(()=>e.displayValue!==void 0?e.displayValue:L.value),he=m(()=>e.optionsHtml===!0?()=>!0:l=>l!=null&&l.html===!0),Je=m(()=>e.displayValueHtml===!0||e.displayValue===void 0&&(e.optionsHtml===!0||y.value.some(he.value))),fe=m(()=>d.focused.value===!0?e.tabindex:-1),$e=m(()=>{const l={tabindex:e.tabindex,role:"combobox","aria-label":e.label,"aria-readonly":e.readonly===!0?"true":"false","aria-autocomplete":e.useInput===!0?"list":"none","aria-expanded":n.value===!0?"true":"false","aria-controls":`${d.targetUid.value}_lb`};return s.value>=0&&(l["aria-activedescendant"]=`${d.targetUid.value}_${s.value}`),l}),xe=m(()=>({id:`${d.targetUid.value}_lb`,role:"listbox","aria-multiselectable":e.multiple===!0?"true":"false"})),Ce=m(()=>y.value.map((l,p)=>({index:p,opt:l,html:he.value(l),selected:!0,removeAtIndex:Dt,toggleOption:Te,tabindex:fe.value}))),Fe=m(()=>{if(h.value===0)return[];const{from:l,to:p}=Y.value;return e.options.slice(l,p).map((S,A)=>{const J=Ie.value(S)===!0,W=Ze(S)===!0,re=l+A,le={clickable:!0,active:W,activeClass:je.value,manualFocus:!0,focused:!1,disable:J,tabindex:-1,dense:e.optionsDense,dark:K.value,role:"option","aria-selected":W===!0?"true":"false",id:`${d.targetUid.value}_${re}`,onClick:()=>{Te(S)}};return J!==!0&&(s.value===re&&(le.focused=!0),r.platform.is.desktop===!0&&(le.onMousemove=()=>{n.value===!0&&be(re)})),{index:re,opt:S,html:he.value(S),label:ve.value(S),selected:le.active,focused:le.focused,toggleOption:Te,setOptionIndex:be,itemProps:le}})}),Ne=m(()=>e.dropdownIcon!==void 0?e.dropdownIcon:r.iconSet.arrow.dropdown),dt=m(()=>e.optionsCover===!1&&e.outlined!==!0&&e.standout!==!0&&e.borderless!==!0&&e.rounded!==!0),je=m(()=>e.optionsSelectedClass!==void 0?e.optionsSelectedClass:e.color!==void 0?`text-${e.color}`:""),ye=m(()=>Ge(e.optionValue,"value")),ve=m(()=>Ge(e.optionLabel,"label")),Ie=m(()=>Ge(e.optionDisable,"disable")),Qe=m(()=>y.value.map(l=>ye.value(l))),kt=m(()=>{const l={onInput:k,onChange:E,onKeydown:Tt,onKeyup:ft,onKeypress:Ke,onFocus:Ct,onClick(p){x===!0&&it(p)}};return l.onCompositionstart=l.onCompositionupdate=l.onCompositionend=E,l});ue(y,l=>{_=l,e.useInput===!0&&e.fillInput===!0&&e.multiple!==!0&&d.innerLoading.value!==!0&&(c.value!==!0&&n.value!==!0||V.value!==!0)&&(O!==!0&&nt(),(c.value===!0||n.value===!0)&&$(""))},{immediate:!0}),ue(()=>e.fillInput,nt),ue(n,Kt),ue(h,oo);function qt(l){return e.emitValue===!0?ye.value(l):l}function Ye(l){if(l>-1&&l=e.maxValues)return;const A=e.modelValue.slice();o("add",{index:A.length,value:S}),A.push(S),o("update:modelValue",A)}function Te(l,p){if(d.editable.value!==!0||l===void 0||Ie.value(l)===!0)return;const S=ye.value(l);if(e.multiple!==!0){p!==!0&&(B(e.fillInput===!0?ve.value(l):"",!0,!0),Ue()),j.value!==null&&j.value.focus(),(y.value.length===0||vt(ye.value(y.value[0]),S)!==!0)&&o("update:modelValue",e.emitValue===!0?S:l);return}if((x!==!0||b.value===!0)&&d.focus(),Ct(),y.value.length===0){const W=e.emitValue===!0?S:l;o("add",{index:0,value:W}),o("update:modelValue",e.multiple===!0?[W]:W);return}const A=e.modelValue.slice(),J=Qe.value.findIndex(W=>vt(W,S));if(J>-1)o("remove",{index:J,value:A.splice(J,1)[0]});else{if(e.maxValues!==void 0&&A.length>=e.maxValues)return;const W=e.emitValue===!0?S:l;o("add",{index:A.length,value:W}),A.push(W)}o("update:modelValue",A)}function be(l){if(r.platform.is.desktop!==!0)return;const p=l>-1&&l=0?ve.value(e.options[S]):H,!0))}}function Ht(l,p){const S=A=>vt(ye.value(A),l);return e.options.find(S)||p.find(S)||l}function Ge(l,p){const S=l!==void 0?l:p;return typeof S=="function"?S:A=>A!==null&&typeof A=="object"&&S in A?A[S]:A}function Ze(l){const p=ye.value(l);return Qe.value.find(S=>vt(S,p))!==void 0}function Ct(l){e.useInput===!0&&j.value!==null&&(l===void 0||j.value===l.target&&l.target.value===L.value)&&j.value.select()}function et(l){al(l,27)===!0&&n.value===!0&&(it(l),Ue(),nt()),o("keyup",l)}function ft(l){const{value:p}=l.target;if(l.keyCode!==void 0){et(l);return}if(l.target.value="",g!==null&&(clearTimeout(g),g=null),w!==null&&(clearTimeout(w),w=null),nt(),typeof p=="string"&&p.length!==0){const S=p.toLocaleLowerCase(),A=W=>{const re=e.options.find(le=>W.value(le).toLocaleLowerCase()===S);return re===void 0?!1:(y.value.indexOf(re)===-1?Te(re):Ue(),!0)},J=W=>{A(ye)!==!0&&(A(ve)===!0||W===!0||$(p,!0,()=>J(!0)))};J()}else d.clearValue(l)}function Ke(l){o("keypress",l)}function Tt(l){if(o("keydown",l),vo(l)===!0)return;const p=f.value.length!==0&&(e.newValueMode!==void 0||e.onNewValue!==void 0),S=l.shiftKey!==!0&&e.multiple!==!0&&(s.value>-1||p===!0);if(l.keyCode===27){Wt(l);return}if(l.keyCode===9&&S===!1){ot();return}if(l.target===void 0||l.target.id!==d.targetUid.value||d.editable.value!==!0)return;if(l.keyCode===40&&d.innerLoading.value!==!0&&n.value===!1){Be(l),at();return}if(l.keyCode===8&&(e.useChips===!0||e.clearable===!0)&&e.hideSelected!==!0&&f.value.length===0){e.multiple===!0&&Array.isArray(e.modelValue)===!0?Ye(e.modelValue.length-1):e.multiple!==!0&&e.modelValue!==null&&o("update:modelValue",null);return}(l.keyCode===35||l.keyCode===36)&&(typeof f.value!="string"||f.value.length===0)&&(Be(l),s.value=-1,Ve(l.keyCode===36?1:-1,e.multiple)),(l.keyCode===33||l.keyCode===34)&&we.value!==void 0&&(Be(l),s.value=Math.max(-1,Math.min(h.value,s.value+(l.keyCode===33?-1:1)*we.value.view)),Ve(l.keyCode===33?1:-1,e.multiple)),(l.keyCode===38||l.keyCode===40)&&(Be(l),Ve(l.keyCode===38?-1:1,e.multiple));const A=h.value;if((T===void 0||C0&&e.useInput!==!0&&l.key!==void 0&&l.key.length===1&&l.altKey===!1&&l.ctrlKey===!1&&l.metaKey===!1&&(l.keyCode!==32||T.length!==0)){n.value!==!0&&at(l);const J=l.key.toLocaleLowerCase(),W=T.length===1&&T[0]===J;C=Date.now()+1500,W===!1&&(Be(l),T+=J);const re=new RegExp("^"+T.split("").map(Ut=>Va.indexOf(Ut)>-1?"\\"+Ut:Ut).join(".*"),"i");let le=s.value;if(W===!0||le<0||re.test(ve.value(e.options[le]))!==!0)do le=bl(le+1,-1,A-1);while(le!==s.value&&(Ie.value(e.options[le])===!0||re.test(ve.value(e.options[le]))!==!0));s.value!==le&&Me(()=>{be(le),me(le),le>=0&&e.useInput===!0&&e.fillInput===!0&&M(ve.value(e.options[le]),!0)});return}if(!(l.keyCode!==13&&(l.keyCode!==32||e.useInput===!0||T!=="")&&(l.keyCode!==9||S===!1))){if(l.keyCode!==9&&Be(l),s.value>-1&&s.value{if(re){if(xl(re)!==!0)return}else re=e.newValueMode;if(B("",e.multiple!==!0,!0),W==null)return;(re==="toggle"?Te:xt)(W,re==="add-unique"),e.multiple!==!0&&(j.value!==null&&j.value.focus(),Ue())};if(e.onNewValue!==void 0?o("newValue",f.value,J):J(f.value),e.multiple!==!0)return}n.value===!0?ot():d.innerLoading.value!==!0&&at()}}function Vt(){return x===!0?ge.value:oe.value!==null&&oe.value.contentEl!==null?oe.value.contentEl:void 0}function Nt(){return Vt()}function jt(){return e.hideSelected===!0?[]:t["selected-item"]!==void 0?Ce.value.map(l=>t["selected-item"](l)).slice():t.selected!==void 0?[].concat(t.selected()):e.useChips===!0?Ce.value.map((l,p)=>v(zt,{key:"option-"+p,removable:d.editable.value===!0&&Ie.value(l.opt)!==!0,dense:!0,textColor:e.color,tabindex:fe.value,onRemove(){l.removeAtIndex(p)}},()=>v("span",{class:"ellipsis",[l.html===!0?"innerHTML":"textContent"]:ve.value(l.opt)}))):[v("span",{[Je.value===!0?"innerHTML":"textContent"]:ie.value})]}function Pt(){if(U.value===!0)return t["no-option"]!==void 0?t["no-option"]({inputValue:f.value}):void 0;const l=t.option!==void 0?t.option:S=>v(ya,{key:S.index,...S.itemProps},()=>v(pa,()=>v(wa,()=>v("span",{[S.html===!0?"innerHTML":"textContent"]:S.label}))));let p=_e("div",Fe.value.map(l));return t["before-options"]!==void 0&&(p=t["before-options"]().concat(p)),ol(t["after-options"],p)}function u(l,p){const S=p===!0?{...$e.value,...d.splitAttrs.attributes.value}:void 0,A={ref:p===!0?j:void 0,key:"i_t",class:P.value,style:e.inputStyle,value:f.value!==void 0?f.value:"",type:"search",...S,id:p===!0?d.targetUid.value:void 0,maxlength:e.maxlength,autocomplete:e.autocomplete,"data-autofocus":l===!0||e.autofocus===!0||void 0,disabled:e.disable===!0,readonly:e.readonly===!0,...kt.value};return l!==!0&&x===!0&&(Array.isArray(A.class)===!0?A.class=[...A.class,"no-pointer-events"]:A.class+=" no-pointer-events"),v("input",A)}function k(l){g!==null&&(clearTimeout(g),g=null),w!==null&&(clearTimeout(w),w=null),!(l&&l.target&&l.target.qComposing===!0)&&(M(l.target.value||""),O=!0,H=f.value,d.focused.value!==!0&&(x!==!0||b.value===!0)&&d.focus(),e.onFilter!==void 0&&(g=setTimeout(()=>{g=null,$(f.value)},e.inputDebounce)))}function M(l,p){f.value!==l&&(f.value=l,p===!0||e.inputDebounce===0||e.inputDebounce==="0"?o("inputValue",l):w=setTimeout(()=>{w=null,o("inputValue",l)},e.inputDebounce))}function B(l,p,S){O=S!==!0,e.useInput===!0&&(M(l,!0),(p===!0||S!==!0)&&(H=l),p!==!0&&$(l))}function $(l,p,S){if(e.onFilter===void 0||p!==!0&&d.focused.value!==!0)return;d.innerLoading.value===!0?o("filterAbort"):(d.innerLoading.value=!0,a.value=!0),l!==""&&e.multiple!==!0&&y.value.length!==0&&O!==!0&&l===ve.value(y.value[0])&&(l="");const A=setTimeout(()=>{n.value===!0&&(n.value=!1)},10);q!==null&&clearTimeout(q),q=A,o("filter",l,(J,W)=>{(p===!0||d.focused.value===!0)&&q===A&&(clearTimeout(q),typeof J=="function"&&J(),a.value=!1,Me(()=>{d.innerLoading.value=!1,d.editable.value===!0&&(p===!0?n.value===!0&&Ue():n.value===!0?Kt(!0):n.value=!0),typeof W=="function"&&Me(()=>{W(i)}),typeof S=="function"&&Me(()=>{S(i)})}))},()=>{d.focused.value===!0&&q===A&&(clearTimeout(q),d.innerLoading.value=!1,a.value=!1),n.value===!0&&(n.value=!1)})}function te(){return v(ta,{ref:oe,class:R.value,style:e.popupContentStyle,modelValue:n.value,fit:e.menuShrink!==!0,cover:e.optionsCover===!0&&U.value!==!0&&e.useInput!==!0,anchor:e.menuAnchor,self:e.menuSelf,offset:e.menuOffset,dark:K.value,noParentEvent:!0,noRefocus:!0,noFocus:!0,square:dt.value,transitionShow:e.transitionShow,transitionHide:e.transitionHide,transitionDuration:e.transitionDuration,separateClosePopup:!0,...xe.value,onScrollPassive:ke,onBeforeShow:sl,onBeforeHide:Z,onShow:Pe},Pt)}function Z(l){cl(l),ot()}function Pe(){qe()}function ce(l){it(l),j.value!==null&&j.value.focus(),b.value=!0,window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,0)}function tt(l){it(l),Me(()=>{b.value=!1})}function lt(){const l=[v(Sa,{class:`col-auto ${d.fieldClass.value}`,...z.value,for:d.targetUid.value,dark:K.value,square:!0,loading:a.value,itemAligned:!1,filled:!0,stackLabel:f.value.length!==0,...d.splitAttrs.listeners.value,onFocus:ce,onBlur:tt},{...t,rawControl:()=>d.getControl(!0),before:void 0,after:void 0})];return n.value===!0&&l.push(v("div",{ref:ge,class:R.value+" scroll",style:e.popupContentStyle,...xe.value,onClick:Wt,onScrollPassive:ke},Pt())),v(Zl,{ref:se,modelValue:c.value,position:e.useInput===!0?"top":void 0,transitionShow:N,transitionHide:e.transitionHide,transitionDuration:e.transitionDuration,onBeforeShow:sl,onBeforeHide:Qt,onHide:to,onShow:lo},()=>v("div",{class:"q-select__dialog"+(K.value===!0?" q-select__dialog--dark q-dark":"")+(b.value===!0?" q-select__dialog--focused":"")},l))}function Qt(l){cl(l),se.value!==null&&se.value.__updateRefocusTarget(d.rootRef.value.querySelector(".q-field__native > [tabindex]:last-child")),d.focused.value=!1}function to(l){Ue(),d.focused.value===!1&&o("blur",l),nt()}function lo(){const l=document.activeElement;(l===null||l.id!==d.targetUid.value)&&j.value!==null&&j.value!==l&&j.value.focus(),qe()}function ot(){c.value!==!0&&(s.value=-1,n.value===!0&&(n.value=!1),d.focused.value===!1&&(q!==null&&(clearTimeout(q),q=null),d.innerLoading.value===!0&&(o("filterAbort"),d.innerLoading.value=!1,a.value=!1)))}function at(l){d.editable.value===!0&&(x===!0?(d.onControlFocusin(l),c.value=!0,Me(()=>{d.focus()})):d.focus(),e.onFilter!==void 0?$(f.value):(U.value!==!0||t["no-option"]!==void 0)&&(n.value=!0))}function Ue(){c.value=!1,ot()}function nt(){e.useInput===!0&&B(e.multiple!==!0&&e.fillInput===!0&&y.value.length!==0&&ve.value(y.value[0])||"",!0,!0)}function Kt(l){let p=-1;if(l===!0){if(y.value.length!==0){const S=ye.value(y.value[0]);p=e.options.findIndex(A=>vt(ye.value(A),S))}ae(p)}be(p)}function oo(l,p){n.value===!0&&d.innerLoading.value===!1&&(ae(-1,!0),Me(()=>{n.value===!0&&d.innerLoading.value===!1&&(l>p?ae():Kt(!0))}))}function ul(){c.value===!1&&oe.value!==null&&oe.value.updatePosition()}function sl(l){l!==void 0&&it(l),o("popupShow",l),d.hasPopupOpen=!0,d.onControlFocusin(l)}function cl(l){l!==void 0&&it(l),o("popupHide",l),d.hasPopupOpen=!1,d.onControlFocusout(l)}function dl(){x=r.platform.is.mobile!==!0&&e.behavior!=="dialog"?!1:e.behavior!=="menu"&&(e.useInput===!0?t["no-option"]!==void 0||e.onFilter!==void 0||U.value===!1:!0),N=r.platform.is.ios===!0&&x===!0&&e.useInput===!0?"fade":e.transitionShow}return co(dl),fo(ul),dl(),ct(()=>{g!==null&&clearTimeout(g),w!==null&&clearTimeout(w)}),Object.assign(i,{showPopup:at,hidePopup:Ue,removeAtIndex:Ye,add:xt,toggleOption:Te,getOptionIndex:()=>s.value,setOptionIndex:be,moveOptionSelection:Ve,filter:$,updateMenuPosition:ul,updateInputValue:B,isOptionSelected:Ze,getEmittingOptionValue:qt,isOptionDisabled:(...l)=>Ie.value.apply(null,l)===!0,getOptionValue:(...l)=>ye.value.apply(null,l),getOptionLabel:(...l)=>ve.value.apply(null,l)}),Object.assign(d,{innerValue:y,fieldClass:m(()=>`q-select q-field--auto-height q-select--with${e.useInput!==!0?"out":""}-input q-select--with${e.useChips!==!0?"out":""}-chips q-select--${e.multiple===!0?"multiple":"single"}`),inputRef:X,targetRef:j,hasValue:V,showPopup:at,floatingLabel:m(()=>e.hideSelected!==!0&&V.value===!0||typeof f.value=="number"||f.value.length!==0||ml(e.displayValue)),getControlChild:()=>{if(d.editable.value!==!1&&(c.value===!0||U.value!==!0||t["no-option"]!==void 0))return x===!0?lt():te();d.hasPopupOpen===!0&&(d.hasPopupOpen=!1)},controlEvents:{onFocusin(l){d.onControlFocusin(l)},onFocusout(l){d.onControlFocusout(l,()=>{nt(),ot()})},onClick(l){if(Wt(l),x!==!0&&n.value===!0){ot(),j.value!==null&&j.value.focus();return}at(l)}},getControl:l=>{const p=jt(),S=l===!0||c.value!==!0||x!==!0;if(e.useInput===!0)p.push(u(l,S));else if(d.editable.value===!0){const J=S===!0?$e.value:void 0;p.push(v("input",{ref:S===!0?j:void 0,key:"d_t",class:"q-select__focus-target",id:S===!0?d.targetUid.value:void 0,value:ie.value,readonly:!0,"data-autofocus":l===!0||e.autofocus===!0||void 0,...J,onKeydown:Tt,onKeyup:et,onKeypress:Ke})),S===!0&&typeof e.autocomplete=="string"&&e.autocomplete.length!==0&&p.push(v("input",{class:"q-select__autocomplete-input",autocomplete:e.autocomplete,tabindex:-1,onKeyup:ft}))}if(F.value!==void 0&&e.disable!==!0&&Qe.value.length!==0){const J=Qe.value.map(W=>v("option",{value:W,selected:!0}));p.push(v("select",{class:"hidden",name:F.value,multiple:e.multiple},J))}const A=e.useInput===!0||S!==!0?void 0:d.splitAttrs.attributes.value;return v("div",{class:"q-field__native row items-center",...A,...d.splitAttrs.listeners.value},p)},getInnerAppend:()=>e.loading!==!0&&a.value!==!0&&e.hideDropdownIcon!==!0?[v(ze,{class:"q-select__dropdown-icon"+(n.value===!0?" rotate-180":""),name:Ne.value})]:null}),Rl(d)}});function Ma(e,t){const o=I(null),i=m(()=>e.disable===!0?null:v("span",{ref:o,class:"no-outline",tabindex:-1}));function r(n){const c=t.value;n!==void 0&&n.type.indexOf("key")===0?c!==null&&document.activeElement!==c&&c.contains(document.activeElement)===!0&&c.focus():o.value!==null&&(n===void 0||c!==null&&c.contains(n.target)===!0)&&o.value.focus()}return{refocusTargetEl:i,refocusTarget:r}}var Ba={xs:30,sm:35,md:40,lg:50,xl:60};const Ea={...wt,...go,...Bl,modelValue:{required:!0,default:null},val:{},trueValue:{default:!0},falseValue:{default:!1},indeterminateValue:{default:null},checkedIcon:String,uncheckedIcon:String,indeterminateIcon:String,toggleOrder:{type:String,validator:e=>e==="tf"||e==="ft"},toggleIndeterminate:Boolean,label:String,leftLabel:Boolean,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},Ra=["update:modelValue"];function La(e,t){const{props:o,slots:i,emit:r,proxy:n}=Ee(),{$q:c}=n,s=_t(o,c),f=I(null),{refocusTargetEl:b,refocusTarget:a}=Ma(o,f),g=mo(o,Ba),w=m(()=>o.val!==void 0&&Array.isArray(o.modelValue)),_=m(()=>{const h=rt(o.val);return w.value===!0?o.modelValue.findIndex(D=>rt(D)===h):-1}),x=m(()=>w.value===!0?_.value>-1:rt(o.modelValue)===rt(o.trueValue)),O=m(()=>w.value===!0?_.value===-1:rt(o.modelValue)===rt(o.falseValue)),q=m(()=>x.value===!1&&O.value===!1),H=m(()=>o.disable===!0?-1:o.tabindex||0),N=m(()=>`q-${e} cursor-pointer no-outline row inline no-wrap items-center`+(o.disable===!0?" disabled":"")+(s.value===!0?` q-${e}--dark`:"")+(o.dense===!0?` q-${e}--dense`:"")+(o.leftLabel===!0?" reverse":"")),T=m(()=>{const h=x.value===!0?"truthy":O.value===!0?"falsy":"indet",D=o.color!==void 0&&(o.keepColor===!0||(e==="toggle"?x.value===!0:O.value!==!0))?` text-${o.color}`:"";return`q-${e}__inner relative-position non-selectable q-${e}__inner--${h}${D}`}),C=m(()=>{const h={type:"checkbox"};return o.name!==void 0&&Object.assign(h,{".checked":x.value,"^checked":x.value===!0?"checked":void 0,name:o.name,value:w.value===!0?o.val:o.trueValue}),h}),X=Vo(C),j=m(()=>{const h={tabindex:H.value,role:e==="toggle"?"switch":"checkbox","aria-label":o.label,"aria-checked":q.value===!0?"mixed":x.value===!0?"true":"false"};return o.disable===!0&&(h["aria-disabled"]="true"),h});function oe(h){h!==void 0&&(Be(h),a(h)),o.disable!==!0&&r("update:modelValue",se(),h)}function se(){if(w.value===!0){if(x.value===!0){const h=o.modelValue.slice();return h.splice(_.value,1),h}return o.modelValue.concat([o.val])}if(x.value===!0){if(o.toggleOrder!=="ft"||o.toggleIndeterminate===!1)return o.falseValue}else if(O.value===!0){if(o.toggleOrder==="ft"||o.toggleIndeterminate===!1)return o.trueValue}else return o.toggleOrder!=="ft"?o.trueValue:o.falseValue;return o.indeterminateValue}function ge(h){(h.keyCode===13||h.keyCode===32)&&Be(h)}function F(h){(h.keyCode===13||h.keyCode===32)&&oe(h)}const E=t(x,q);return Object.assign(n,{toggle:oe}),()=>{const h=E();o.disable!==!0&&X(h,"unshift",` q-${e}__native absolute q-ma-none q-pa-none`);const D=[v("div",{class:T.value,style:g.value,"aria-hidden":"true"},h)];b.value!==null&&D.push(b.value);const Y=o.label!==void 0?ol(i.default,[o.label]):He(i.default);return Y!==void 0&&D.push(v("div",{class:`q-${e}__label q-anchor--skip`},Y)),v("div",{ref:f,class:N.value,...j.value,onClick:oe,onKeydown:ge,onKeyup:F},D)}}const za=v("div",{key:"svg",class:"q-checkbox__bg absolute"},[v("svg",{class:"q-checkbox__svg fit absolute-full",viewBox:"0 0 24 24"},[v("path",{class:"q-checkbox__truthy",fill:"none",d:"M1.73,12.91 8.1,19.28 22.79,4.59"}),v("path",{class:"q-checkbox__indet",d:"M4,14H20V10H4"})])]);var Zt=pe({name:"QCheckbox",props:Ea,emits:Ra,setup(e){function t(o,i){const r=m(()=>(o.value===!0?e.checkedIcon:i.value===!0?e.indeterminateIcon:e.uncheckedIcon)||null);return()=>r.value!==null?[v("div",{key:"icon",class:"q-checkbox__icon-container absolute-full flex flex-center no-wrap"},[v(ze,{class:"q-checkbox__icon",name:r.value})])]:[za]}return La("checkbox",t)}});let bt=0;const Aa={fullscreen:Boolean,noRouteFullscreenExit:Boolean},$a=["update:fullscreen","fullscreen"];function Fa(){const e=Ee(),{props:t,emit:o,proxy:i}=e;let r,n,c;const s=I(!1);ho(e)===!0&&ue(()=>i.$route.fullPath,()=>{t.noRouteFullscreenExit!==!0&&a()}),ue(()=>t.fullscreen,g=>{s.value!==g&&f()}),ue(s,g=>{o("update:fullscreen",g),o("fullscreen",g)});function f(){s.value===!0?a():b()}function b(){s.value!==!0&&(s.value=!0,c=i.$el.parentNode,c.replaceChild(n,i.$el),document.body.appendChild(i.$el),bt++,bt===1&&document.body.classList.add("q-body--fullscreen-mixin"),r={handler:a},Et.add(r))}function a(){s.value===!0&&(r!==void 0&&(Et.remove(r),r=void 0),c.replaceChild(i.$el,n),s.value=!1,bt=Math.max(0,bt-1),bt===0&&(document.body.classList.remove("q-body--fullscreen-mixin"),i.$el.scrollIntoView!==void 0&&setTimeout(()=>{i.$el.scrollIntoView()})))}return tl(()=>{n=document.createElement("span")}),ll(()=>{t.fullscreen===!0&&b()}),ct(a),Object.assign(i,{toggleFullscreen:f,setFullscreen:b,exitFullscreen:a}),{inFullscreen:s,toggleFullscreen:f}}function Ia(e,t){return new Date(e)-new Date(t)}const Da={sortMethod:Function,binaryStateSort:Boolean,columnSortOrder:{type:String,validator:e=>e==="ad"||e==="da",default:"ad"}};function Ha(e,t,o,i){const r=m(()=>{const{sortBy:s}=t.value;return s&&o.value.find(f=>f.name===s)||null}),n=m(()=>e.sortMethod!==void 0?e.sortMethod:(s,f,b)=>{const a=o.value.find(_=>_.name===f);if(a===void 0||a.field===void 0)return s;const g=b===!0?-1:1,w=typeof a.field=="function"?_=>a.field(_):_=>_[a.field];return s.sort((_,x)=>{let O=w(_),q=w(x);return a.rawSort!==void 0?a.rawSort(O,q,_,x)*g:O==null?-1*g:q==null?1*g:a.sort!==void 0?a.sort(O,q,_,x)*g:el(O)===!0&&el(q)===!0?(O-q)*g:vl(O)===!0&&vl(q)===!0?Ia(O,q)*g:typeof O=="boolean"&&typeof q=="boolean"?(O-q)*g:([O,q]=[O,q].map(H=>(H+"").toLocaleString().toLowerCase()),Ow.name===s);g!==void 0&&g.sortOrder&&(f=g.sortOrder)}let{sortBy:b,descending:a}=t.value;b!==s?(b=s,a=f==="da"):e.binaryStateSort===!0?a=!a:a===!0?f==="ad"?b=null:a=!1:f==="ad"?a=!0:b=null,i({sortBy:b,descending:a,page:1})}return{columnToSort:r,computedSortMethod:n,sort:c}}const Na={filter:[String,Object],filterMethod:Function};function ja(e,t){const o=m(()=>e.filterMethod!==void 0?e.filterMethod:(i,r,n,c)=>{const s=r?r.toLowerCase():"";return i.filter(f=>n.some(b=>{const a=c(b,f)+"";return(a==="undefined"||a==="null"?"":a.toLowerCase()).indexOf(s)!==-1}))});return ue(()=>e.filter,()=>{Me(()=>{t({page:1},!0)})},{deep:!0}),{computedFilterMethod:o}}function Qa(e,t){for(const o in t)if(t[o]!==e[o])return!1;return!0}function Cl(e){return e.page<1&&(e.page=1),e.rowsPerPage!==void 0&&e.rowsPerPage<1&&(e.rowsPerPage=0),e}const Ka={pagination:Object,rowsPerPageOptions:{type:Array,default:()=>[5,7,10,15,20,25,50,0]},"onUpdate:pagination":[Function,Array]};function Ua(e,t){const{props:o,emit:i}=e,r=I(Object.assign({sortBy:null,descending:!1,page:1,rowsPerPage:o.rowsPerPageOptions.length!==0?o.rowsPerPageOptions[0]:5},o.pagination)),n=m(()=>{const a=o["onUpdate:pagination"]!==void 0?{...r.value,...o.pagination}:r.value;return Cl(a)}),c=m(()=>n.value.rowsNumber!==void 0);function s(a){f({pagination:a,filter:o.filter})}function f(a={}){Me(()=>{i("request",{pagination:a.pagination||n.value,filter:a.filter||o.filter,getCellValue:t})})}function b(a,g){const w=Cl({...n.value,...a});if(Qa(n.value,w)===!0){c.value===!0&&g===!0&&s(w);return}if(c.value===!0){s(w);return}o.pagination!==void 0&&o["onUpdate:pagination"]!==void 0?i("update:pagination",w):r.value=w}return{innerPagination:r,computedPagination:n,isServerSide:c,requestServerInteraction:f,setPagination:b}}function Wa(e,t,o,i,r,n){const{props:c,emit:s,proxy:{$q:f}}=e,b=m(()=>i.value===!0?o.value.rowsNumber||0:n.value),a=m(()=>{const{page:C,rowsPerPage:X}=o.value;return(C-1)*X}),g=m(()=>{const{page:C,rowsPerPage:X}=o.value;return C*X}),w=m(()=>o.value.page===1),_=m(()=>o.value.rowsPerPage===0?1:Math.max(1,Math.ceil(b.value/o.value.rowsPerPage))),x=m(()=>g.value===0?!0:o.value.page>=_.value),O=m(()=>(c.rowsPerPageOptions.includes(t.value.rowsPerPage)?c.rowsPerPageOptions:[t.value.rowsPerPage].concat(c.rowsPerPageOptions)).map(X=>({label:X===0?f.lang.table.allRows:""+X,value:X})));ue(_,(C,X)=>{if(C===X)return;const j=o.value.page;C&&!j?r({page:1}):C1&&r({page:C-1})}function N(){const{page:C,rowsPerPage:X}=o.value;g.value>0&&C*X["single","multiple","none"].includes(e)},selected:{type:Array,default:()=>[]}},Ja=["update:selected","selection"];function Ya(e,t,o,i){const r=m(()=>{const x={};return e.selected.map(i.value).forEach(O=>{x[O]=!0}),x}),n=m(()=>e.selection!=="none"),c=m(()=>e.selection==="single"),s=m(()=>e.selection==="multiple"),f=m(()=>o.value.length!==0&&o.value.every(x=>r.value[i.value(x)]===!0)),b=m(()=>f.value!==!0&&o.value.some(x=>r.value[i.value(x)]===!0)),a=m(()=>e.selected.length);function g(x){return r.value[x]===!0}function w(){t("update:selected",[])}function _(x,O,q,H){t("selection",{rows:O,added:q,keys:x,evt:H});const N=c.value===!0?q===!0?O:[]:q===!0?e.selected.concat(O):e.selected.filter(T=>x.includes(i.value(T))===!1);t("update:selected",N)}return{hasSelectionMode:n,singleSelection:c,multipleSelection:s,allRowsSelected:f,someRowsSelected:b,rowsSelectedNumber:a,isRowSelected:g,clearSelection:w,updateSelection:_}}function Tl(e){return Array.isArray(e)?e.slice():[]}const Ga={expanded:Array},Za=["update:expanded"];function en(e,t){const o=I(Tl(e.expanded));ue(()=>e.expanded,c=>{o.value=Tl(c)});function i(c){return o.value.includes(c)}function r(c){e.expanded!==void 0?t("update:expanded",c):o.value=c}function n(c,s){const f=o.value.slice(),b=f.indexOf(c);s===!0?b===-1&&(f.push(c),r(f)):b!==-1&&(f.splice(b,1),r(f))}return{isRowExpanded:i,setExpanded:r,updateExpanded:n}}const tn={visibleColumns:Array};function ln(e,t,o){const i=m(()=>{if(e.columns!==void 0)return e.columns;const s=e.rows[0];return s!==void 0?Object.keys(s).map(f=>({name:f,label:f.toUpperCase(),field:f,align:el(s[f])?"right":"left",sortable:!0})):[]}),r=m(()=>{const{sortBy:s,descending:f}=t.value;return(e.visibleColumns!==void 0?i.value.filter(a=>a.required===!0||e.visibleColumns.includes(a.name)===!0):i.value).map(a=>{const g=a.align||"right",w=`text-${g}`;return{...a,align:g,__iconClass:`q-table__sort-icon q-table__sort-icon--${g}`,__thClass:w+(a.headerClasses!==void 0?" "+a.headerClasses:"")+(a.sortable===!0?" sortable":"")+(a.name===s?` sorted ${f===!0?"sort-desc":""}`:""),__tdStyle:a.style!==void 0?typeof a.style!="function"?()=>a.style:a.style:()=>null,__tdClass:a.classes!==void 0?typeof a.classes!="function"?()=>w+" "+a.classes:_=>w+" "+a.classes(_):()=>w}})}),n=m(()=>{const s={};return r.value.forEach(f=>{s[f.name]=f}),s}),c=m(()=>e.tableColspan!==void 0?e.tableColspan:r.value.length+(o.value===!0?1:0));return{colList:i,computedCols:r,computedColsMap:n,computedColspan:c}}const Bt="q-table__bottom row items-center",eo={};Jl.forEach(e=>{eo[e]={}});var on=pe({name:"QTable",props:{rows:{type:Array,default:()=>[]},rowKey:{type:[String,Function],default:"id"},columns:Array,loading:Boolean,iconFirstPage:String,iconPrevPage:String,iconNextPage:String,iconLastPage:String,title:String,hideHeader:Boolean,grid:Boolean,gridHeader:Boolean,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:e=>["horizontal","vertical","cell","none"].includes(e)},wrapCells:Boolean,virtualScroll:Boolean,virtualScrollTarget:{default:void 0},...eo,noDataLabel:String,noResultsLabel:String,loadingLabel:String,selectedRowsLabel:Function,rowsPerPageLabel:String,paginationLabel:Function,color:{type:String,default:"grey-8"},titleClass:[String,Array,Object],tableStyle:[String,Array,Object],tableClass:[String,Array,Object],tableHeaderStyle:[String,Array,Object],tableHeaderClass:[String,Array,Object],cardContainerClass:[String,Array,Object],cardContainerStyle:[String,Array,Object],cardStyle:[String,Array,Object],cardClass:[String,Array,Object],hideBottom:Boolean,hideSelectedBanner:Boolean,hideNoData:Boolean,hidePagination:Boolean,onRowClick:Function,onRowDblclick:Function,onRowContextmenu:Function,...wt,...Aa,...tn,...Na,...Ka,...Ga,...Xa,...Da},emits:["request","virtualScroll",...$a,...Za,...Ja],setup(e,{slots:t,emit:o}){const i=Ee(),{proxy:{$q:r}}=i,n=_t(e,r),{inFullscreen:c,toggleFullscreen:s}=Fa(),f=m(()=>typeof e.rowKey=="function"?e.rowKey:u=>u[e.rowKey]),b=I(null),a=I(null),g=m(()=>e.grid!==!0&&e.virtualScroll===!0),w=m(()=>" q-table__card"+(n.value===!0?" q-table__card--dark q-dark":"")+(e.square===!0?" q-table--square":"")+(e.flat===!0?" q-table--flat":"")+(e.bordered===!0?" q-table--bordered":"")),_=m(()=>`q-table__container q-table--${e.separator}-separator column no-wrap`+(e.grid===!0?" q-table--grid":w.value)+(n.value===!0?" q-table--dark":"")+(e.dense===!0?" q-table--dense":"")+(e.wrapCells===!1?" q-table--no-wrap":"")+(c.value===!0?" fullscreen scroll":"")),x=m(()=>_.value+(e.loading===!0?" q-table--loading":""));ue(()=>e.tableStyle+e.tableClass+e.tableHeaderStyle+e.tableHeaderClass+_.value,()=>{g.value===!0&&a.value!==null&&a.value.reset()});const{innerPagination:O,computedPagination:q,isServerSide:H,requestServerInteraction:N,setPagination:T}=Ua(i,be),{computedFilterMethod:C}=ja(e,T),{isRowExpanded:X,setExpanded:j,updateExpanded:oe}=en(e,o),se=m(()=>{let u=e.rows;if(H.value===!0||u.length===0)return u;const{sortBy:k,descending:M}=q.value;return e.filter&&(u=C.value(u,e.filter,d.value,be)),K.value!==null&&(u=V.value(e.rows===u?u.slice():u,k,M)),u}),ge=m(()=>se.value.length),F=m(()=>{let u=se.value;if(H.value===!0)return u;const{rowsPerPage:k}=q.value;return k!==0&&(R.value===0&&e.rows!==u?u.length>U.value&&(u=u.slice(0,U.value)):u=u.slice(R.value,U.value)),u}),{hasSelectionMode:E,singleSelection:h,multipleSelection:D,allRowsSelected:Y,someRowsSelected:we,rowsSelectedNumber:ae,isRowSelected:_e,clearSelection:ke,updateSelection:me}=Ya(e,o,F,f),{colList:qe,computedCols:d,computedColsMap:y,computedColspan:z}=ln(e,q,E),{columnToSort:K,computedSortMethod:V,sort:P}=Ha(e,q,qe,T),{firstRowIndex:R,lastRowIndex:U,isFirstPage:L,isLastPage:ie,pagesNumber:he,computedRowsPerPageOptions:Je,computedRowsNumber:fe,firstPage:$e,prevPage:xe,nextPage:Ce,lastPage:Fe}=Wa(i,O,q,H,T,ge),Ne=m(()=>F.value.length===0),dt=m(()=>{const u={};return Jl.forEach(k=>{u[k]=e[k]}),u.virtualScrollItemSize===void 0&&(u.virtualScrollItemSize=e.dense===!0?28:48),u});function je(){g.value===!0&&a.value.reset()}function ye(){if(e.grid===!0)return Pt();const u=e.hideHeader!==!0?Ze:null;if(g.value===!0){const M=t["top-row"],B=t["bottom-row"],$={default:te=>kt(te.item,t.body,te.index)};if(M!==void 0){const te=v("tbody",M({cols:d.value}));$.before=u===null?()=>te:()=>[u()].concat(te)}else u!==null&&($.before=u);return B!==void 0&&($.after=()=>v("tbody",B({cols:d.value}))),v(ba,{ref:a,class:e.tableClass,style:e.tableStyle,...dt.value,scrollTarget:e.virtualScrollTarget,items:F.value,type:"__qtable",tableColspan:z.value,onVirtualScroll:Ie},$)}const k=[qt()];return u!==null&&k.unshift(u()),Ul({class:["q-table__middle scroll",e.tableClass],style:e.tableStyle},k)}function ve(u,k){if(a.value!==null){a.value.scrollTo(u,k);return}u=parseInt(u,10);const M=b.value.querySelector(`tbody tr:nth-of-type(${u+1})`);if(M!==null){const B=b.value.querySelector(".q-table__middle.scroll"),$=M.offsetTop-e.virtualScrollStickySizeStart,te=${const tt=t[`body-cell-${ce.name}`],lt=tt!==void 0?tt:te;return lt!==void 0?lt(Dt({key:B,row:u,pageIndex:M,col:ce})):v("td",{class:ce.__tdClass(u),style:ce.__tdStyle(u)},be(ce,u))});if(E.value===!0){const ce=t["body-selection"],tt=ce!==void 0?ce(xt({key:B,row:u,pageIndex:M})):[v(Zt,{modelValue:$,color:e.color,dark:n.value,dense:e.dense,"onUpdate:modelValue":(lt,Qt)=>{me([B],[u],lt,Qt)}})];Z.unshift(v("td",{class:"q-table--col-auto-width"},tt))}const Pe={key:B,class:{selected:$}};return e.onRowClick!==void 0&&(Pe.class["cursor-pointer"]=!0,Pe.onClick=ce=>{o("RowClick",ce,u,M)}),e.onRowDblclick!==void 0&&(Pe.class["cursor-pointer"]=!0,Pe.onDblclick=ce=>{o("RowDblclick",ce,u,M)}),e.onRowContextmenu!==void 0&&(Pe.class["cursor-pointer"]=!0,Pe.onContextmenu=ce=>{o("RowContextmenu",ce,u,M)}),v("tr",Pe,Z)}function qt(){const u=t.body,k=t["top-row"],M=t["bottom-row"];let B=F.value.map(($,te)=>kt($,u,te));return k!==void 0&&(B=k({cols:d.value}).concat(B)),M!==void 0&&(B=B.concat(M({cols:d.value}))),v("tbody",B)}function Ye(u){return Te(u),u.cols=u.cols.map(k=>mt({...k},"value",()=>be(k,u.row))),u}function Dt(u){return Te(u),mt(u,"value",()=>be(u.col,u.row)),u}function xt(u){return Te(u),u}function Te(u){Object.assign(u,{cols:d.value,colsMap:y.value,sort:P,rowIndex:R.value+u.pageIndex,color:e.color,dark:n.value,dense:e.dense}),E.value===!0&&mt(u,"selected",()=>_e(u.key),(k,M)=>{me([u.key],[u.row],k,M)}),mt(u,"expand",()=>X(u.key),k=>{oe(u.key,k)})}function be(u,k){const M=typeof u.field=="function"?u.field(k):k[u.field];return u.format!==void 0?u.format(M,k):M}const Ve=m(()=>({pagination:q.value,pagesNumber:he.value,isFirstPage:L.value,isLastPage:ie.value,firstPage:$e,prevPage:xe,nextPage:Ce,lastPage:Fe,inFullscreen:c.value,toggleFullscreen:s}));function Ht(){const u=t.top,k=t["top-left"],M=t["top-right"],B=t["top-selection"],$=E.value===!0&&B!==void 0&&ae.value>0,te="q-table__top relative-position row items-center";if(u!==void 0)return v("div",{class:te},[u(Ve.value)]);let Z;if($===!0?Z=B(Ve.value).slice():(Z=[],k!==void 0?Z.push(v("div",{class:"q-table__control"},[k(Ve.value)])):e.title&&Z.push(v("div",{class:"q-table__control"},[v("div",{class:["q-table__title",e.titleClass]},e.title)]))),M!==void 0&&(Z.push(v("div",{class:"q-table__separator col"})),Z.push(v("div",{class:"q-table__control"},[M(Ve.value)]))),Z.length!==0)return v("div",{class:te},Z)}const Ge=m(()=>we.value===!0?null:Y.value);function Ze(){const u=Ct();return e.loading===!0&&t.loading===void 0&&u.push(v("tr",{class:"q-table__progress"},[v("th",{class:"relative-position",colspan:z.value},Qe())])),v("thead",u)}function Ct(){const u=t.header,k=t["header-cell"];if(u!==void 0)return u(et({header:!0})).slice();const M=d.value.map(B=>{const $=t[`header-cell-${B.name}`],te=$!==void 0?$:k,Z=et({col:B});return te!==void 0?te(Z):v(sa,{key:B.name,props:Z},()=>B.label)});if(h.value===!0&&e.grid!==!0)M.unshift(v("th",{class:"q-table--col-auto-width"}," "));else if(D.value===!0){const B=t["header-selection"],$=B!==void 0?B(et({})):[v(Zt,{color:e.color,modelValue:Ge.value,dark:n.value,dense:e.dense,"onUpdate:modelValue":ft})];M.unshift(v("th",{class:"q-table--col-auto-width"},$))}return[v("tr",{class:e.tableHeaderClass,style:e.tableHeaderStyle},M)]}function et(u){return Object.assign(u,{cols:d.value,sort:P,colsMap:y.value,color:e.color,dark:n.value,dense:e.dense}),D.value===!0&&mt(u,"selected",()=>Ge.value,ft),u}function ft(u){we.value===!0&&(u=!1),me(F.value.map(f.value),F.value,u)}const Ke=m(()=>{const u=[e.iconFirstPage||r.iconSet.table.firstPage,e.iconPrevPage||r.iconSet.table.prevPage,e.iconNextPage||r.iconSet.table.nextPage,e.iconLastPage||r.iconSet.table.lastPage];return r.lang.rtl===!0?u.reverse():u});function Tt(){if(e.hideBottom===!0)return;if(Ne.value===!0){if(e.hideNoData===!0)return;const M=e.loading===!0?e.loadingLabel||r.lang.table.loading:e.filter?e.noResultsLabel||r.lang.table.noResults:e.noDataLabel||r.lang.table.noData,B=t["no-data"],$=B!==void 0?[B({message:M,icon:r.iconSet.table.warning,filter:e.filter})]:[v(ze,{class:"q-table__bottom-nodata-icon",name:r.iconSet.table.warning}),M];return v("div",{class:Bt+" q-table__bottom--nodata"},$)}const u=t.bottom;if(u!==void 0)return v("div",{class:Bt},[u(Ve.value)]);const k=e.hideSelectedBanner!==!0&&E.value===!0&&ae.value>0?[v("div",{class:"q-table__control"},[v("div",[(e.selectedRowsLabel||r.lang.table.selectedRecords)(ae.value)])])]:[];if(e.hidePagination!==!0)return v("div",{class:Bt+" justify-end"},Nt(k));if(k.length!==0)return v("div",{class:Bt},k)}function Vt(u){T({page:1,rowsPerPage:u.value})}function Nt(u){let k;const{rowsPerPage:M}=q.value,B=e.paginationLabel||r.lang.table.pagination,$=t.pagination,te=e.rowsPerPageOptions.length>1;if(u.push(v("div",{class:"q-table__separator col"})),te===!0&&u.push(v("div",{class:"q-table__control"},[v("span",{class:"q-table__bottom-item"},[e.rowsPerPageLabel||r.lang.table.recordsPerPage]),v(Oa,{class:"q-table__select inline q-table__bottom-item",color:e.color,modelValue:M,options:Je.value,displayValue:M===0?r.lang.table.allRows:M,dark:n.value,borderless:!0,dense:!0,optionsDense:!0,optionsCover:!0,"onUpdate:modelValue":Vt})])),$!==void 0)k=$(Ve.value);else if(k=[v("span",M!==0?{class:"q-table__bottom-item"}:{},[M?B(R.value+1,Math.min(U.value,fe.value),fe.value):B(1,ge.value,fe.value)])],M!==0&&he.value>1){const Z={color:e.color,round:!0,dense:!0,flat:!0};e.dense===!0&&(Z.size="sm"),he.value>2&&k.push(v(De,{key:"pgFirst",...Z,icon:Ke.value[0],disable:L.value,onClick:$e})),k.push(v(De,{key:"pgPrev",...Z,icon:Ke.value[1],disable:L.value,onClick:xe}),v(De,{key:"pgNext",...Z,icon:Ke.value[2],disable:ie.value,onClick:Ce})),he.value>2&&k.push(v(De,{key:"pgLast",...Z,icon:Ke.value[3],disable:ie.value,onClick:Fe}))}return u.push(v("div",{class:"q-table__control"},k)),u}function jt(){const u=e.gridHeader===!0?[v("table",{class:"q-table"},[Ze()])]:e.loading===!0&&t.loading===void 0?Qe():void 0;return v("div",{class:"q-table__middle"},u)}function Pt(){const u=t.item!==void 0?t.item:k=>{const M=k.cols.map($=>v("div",{class:"q-table__grid-item-row"},[v("div",{class:"q-table__grid-item-title"},[$.label]),v("div",{class:"q-table__grid-item-value"},[$.value])]));if(E.value===!0){const $=t["body-selection"],te=$!==void 0?$(k):[v(Zt,{modelValue:k.selected,color:e.color,dark:n.value,dense:e.dense,"onUpdate:modelValue":(Z,Pe)=>{me([k.key],[k.row],Z,Pe)}})];M.unshift(v("div",{class:"q-table__grid-item-row"},te),v(qo,{dark:n.value}))}const B={class:["q-table__grid-item-card"+w.value,e.cardClass],style:e.cardStyle};return(e.onRowClick!==void 0||e.onRowDblclick!==void 0)&&(B.class[0]+=" cursor-pointer",e.onRowClick!==void 0&&(B.onClick=$=>{o("RowClick",$,k.row,k.pageIndex)}),e.onRowDblclick!==void 0&&(B.onDblclick=$=>{o("RowDblclick",$,k.row,k.pageIndex)})),v("div",{class:"q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3"+(k.selected===!0?" q-table__grid-item--selected":"")},[v("div",B,M)])};return v("div",{class:["q-table__grid-content row",e.cardContainerClass],style:e.cardContainerStyle},F.value.map((k,M)=>u(Ye({key:f.value(k),row:k,pageIndex:M}))))}return Object.assign(i.proxy,{requestServerInteraction:N,setPagination:T,firstPage:$e,prevPage:xe,nextPage:Ce,lastPage:Fe,isRowSelected:_e,clearSelection:ke,isRowExpanded:X,setExpanded:j,sort:P,resetVirtualScroll:je,scrollTo:ve,getCellValue:be}),So(i.proxy,{filteredSortedRows:()=>se.value,computedRows:()=>F.value,computedRowsNumber:()=>fe.value}),()=>{const u=[Ht()],k={ref:b,class:x.value};return e.grid===!0?u.push(jt()):Object.assign(k,{class:[k.class,e.cardClass],style:e.cardStyle}),u.push(ye(),Tt()),e.loading===!0&&t.loading!==void 0&&u.push(t.loading()),v("div",k,u)}}});const an=$t({name:"ToolItem",props:{tool:{type:Object},rank:{type:Number},size:{type:String}},emits:["openDialog"],setup(e,{emit:t}){rl();const o=I(!1);return{props:e,goTo:()=>{window.open(e.tool.link,"_blank").focus()},emit:t,getImgUrl:c=>new URL({"../assets/small/azureml_logo.png":zl,"../assets/small/clearml_logo.png":Al,"../assets/small/dagshub_logo.png":$l,"../assets/small/databricks_logo.png":Fl,"../assets/small/datarobot_logo.png":Il,"../assets/small/h2o_logo.png":Dl,"../assets/small/kubeflow_logo.png":Hl,"../assets/small/mlflow_logo.png":Nl,"../assets/small/sagemaker_logo.png":jl,"../assets/small/vertex_logo.png":Ql,"../assets/small/wandb_logo.png":Kl}[`../assets/small/${c}`],self.location).href,openDialog:()=>{t("openDialog",e.tool)},isHovered:o}}}),nn={class:"cursor-pointer"},rn={class:"col-2"},un=["src"],sn={class:"col-8"},cn={class:"text-weight-bolder text-center text-h6"},dn={class:"Text-center text-h6"},fn={class:"text-weight-bolder col-2 flex flex-center"},vn={key:1},mn={key:1};function gn(e,t,o,i,r,n){return G(),de("div",nn,[ee(It,{onClick:e.openDialog,class:nl(["text-center card row circle",{enlarged:e.isHovered}]),onMouseover:t[1]||(t[1]=c=>e.isHovered=!0),onMouseleave:t[2]||(t[2]=c=>e.isHovered=!1)},{default:ne(()=>[Q("div",rn,[Q("div",null,[ee(la,{"show-value":"",modelValue:e.props.tool.percentage,"onUpdate:modelValue":t[0]||(t[0]=c=>e.props.tool.percentage=c),color:"positive",size:e.props.size,readonly:"","track-color":"negative"},{default:ne(()=>[ee(ze,{square:""},{default:ne(()=>[Q("img",{src:e.getImgUrl(e.props.tool.img_link)},null,8,un)]),_:1})]),_:1},8,["modelValue","size"])])]),Q("div",sn,[Q("div",cn,Se(e.props.tool.title),1),Q("i",dn,Se(e.props.tool.percentage.toFixed(1))+"% Match ",1)]),Q("div",fn,[e.props.tool.rank===1?(G(),Le(ze,{key:0,size:"lg",name:"emoji_events",color:"yellow"})):(G(),de("div",vn,[e.props.tool.rank===2||e.props.tool.rank===3?(G(),Le(ze,{key:0,size:"lg",name:"military_tech",color:e.props.tool.rank===2?"grey":"brown"},null,8,["color"])):(G(),de("i",mn,Se(`${e.props.tool.rank}de`),1))]))])]),_:1},8,["onClick","class"])])}var hn=Ft(an,[["render",gn]]);function Vl(e){if(e===!1)return 0;if(e===!0||e===void 0)return 1;const t=parseInt(e,10);return isNaN(t)?0:t}var bn=yo({name:"close-popup",beforeMount(e,{value:t}){const o={depth:Vl(t),handler(i){o.depth!==0&&setTimeout(()=>{const r=oa(e);r!==void 0&&aa(r,i,o.depth)})},handlerKey(i){al(i,13)===!0&&o.handler(i)}};e.__qclosepopup=o,e.addEventListener("click",o.handler),e.addEventListener("keyup",o.handlerKey)},updated(e,{value:t,oldValue:o}){t!==o&&(e.__qclosepopup.depth=Vl(t))},beforeUnmount(e){const t=e.__qclosepopup;e.removeEventListener("click",t.handler),e.removeEventListener("keyup",t.handlerKey),delete e.__qclosepopup}});const Sn=$t({name:"MatchItem",props:["isMatch","match","tools","tool_id","question_number","question_id"],components:{QuestionToolIcon:ia},emits:["showTool"],setup(e,{emit:t}){return{props:e,findMatchingTools:(r,n)=>{const c=[];return e.tools.forEach(s=>{let f=s.good_compatible.find(b=>b.question_id===r&&b.answer_id===n);if(f&&s.id!==e.tool_id){let b=JSON.parse(JSON.stringify(s));b.match=f,c.push(b)}}),c},showTool:r=>{t("showTool",r)}}}}),yn={key:0},pn={class:"text-h6"},wn=["innerHTML"],_n={key:0,class:"q-ma-sm"};function kn(e,t,o,i,r,n){const c=Rt("question-tool-icon");return e.match.hasOwnProperty("matches")&&e.match.matches.length>0?(G(),de("div",yn,[Q("div",pn,[ee(zt,{color:"primary","text-color":"white"},{default:ne(()=>[Ae(Se(e.props.question_number+1),1)]),_:1}),Ae(Se(e.match.question_text),1)]),(G(!0),de(yt,null,pt(e.match.matches,(s,f)=>(G(),de("div",{key:f},[ee(It,{class:"q-my-md"},{default:ne(()=>[ee(Xe,{class:nl(["text-weight-bold text-white",e.props.isMatch?"bg-positive ":"bg-negative "])},{default:ne(()=>[Ae(Se(e.match.answers.find(b=>b.id===s.answer_id).answer_text),1)]),_:2},1032,["class"]),ee(Xe,{class:"text-left"},{default:ne(()=>[Q("div",{innerHTML:s.explanation},null,8,wn)]),_:2},1024),ee(Xe,{class:"flex"},{default:ne(()=>[(G(!0),de(yt,null,pt(e.findMatchingTools(s.question_id,s.answer_id),(b,a)=>(G(),de("div",{class:"flex q-ma-sm cursor-pointer",key:b.id},[a===0?(G(),de("div",_n,"Zie:")):Lt("",!0),ee(c,{tool:b,onClick:g=>e.showTool(b.id)},null,8,["tool","onClick"])]))),128))]),_:2},1024)]),_:2},1024)]))),128))])):Lt("",!0)}var qn=Ft(Sn,[["render",kn]]);const xn=$t({name:"ToolDialog",props:["modelValue","tool","answers"],emits:["update:modelValue","showNextTool","showPreviousTool","showTool"],components:{MatchItem:qn},setup(e,{emit:t}){const o=ua(),i=rl(),r=I(i.tools),n=I(),c=g=>{t("showTool",g),n.value.scrollIntoView({behavior:"smooth"})},s=g=>new URL({"../assets/large/azureml_logo.png":Ro,"../assets/large/clearml_logo.png":Lo,"../assets/large/dagshub_logo.png":zo,"../assets/large/databricks_logo.png":Ao,"../assets/large/datarobot_logo.png":$o,"../assets/large/h2o_logo.png":Fo,"../assets/large/kubeflow_logo.png":Io,"../assets/large/mlflow_logo.png":Do,"../assets/large/sagemaker_logo.png":Ho,"../assets/large/vertex_logo.png":No,"../assets/large/wandb_logo.png":jo}[`../assets/large/${g}`],self.location).href,f=g=>new URL({"../assets/small/azureml_logo.png":zl,"../assets/small/clearml_logo.png":Al,"../assets/small/dagshub_logo.png":$l,"../assets/small/databricks_logo.png":Fl,"../assets/small/datarobot_logo.png":Il,"../assets/small/h2o_logo.png":Dl,"../assets/small/kubeflow_logo.png":Hl,"../assets/small/mlflow_logo.png":Nl,"../assets/small/sagemaker_logo.png":jl,"../assets/small/vertex_logo.png":Ql,"../assets/small/wandb_logo.png":Kl}[`../assets/small/${g}`],self.location).href,b=m({get(){return e.modelValue},set(g){t("update:modelValue",g)}}),a=m(()=>(e.tool.numberOfMatches/(e.tool.numberOfMatches+e.tool.numberOfClashes)*100).toFixed(2));return{props:e,getImgUrlLarge:s,q:o,getImgUrlSmall:f,emit:t,percentage:a,tools:r,value:b,ScrollToMe:n,showTool:c,answerStore:i}}}),Cn={style:{position:"absolute",left:"1em",top:"1em","z-index":"100"}},Tn={class:"flex flex-center q-ma-md"},Vn=["src"],Pn={class:"text-weight-bolder text-center text-h5"},On={class:"text-h5 text-weight-bolder"},Mn=["href"],Bn={class:"row q-col-gutter-md q-ma-md"},En={class:"col-md-6 col-sm-12 col-xs-12"},Rn=Q("div",{class:"text-h3 text-weight-bolder text-negative text-center"}," Clashes ",-1),Ln={key:0},zn={key:1},An={class:"col-md-6 col-sm-12 col-xs-12"},$n=Q("div",{class:"text-h3 text-weight-bolder text-positive text-center"}," Matches ",-1),Fn={key:0},In={key:1};function Dn(e,t,o,i,r,n){const c=Rt("match-item");return G(),Le(Zl,{modelValue:e.value,"onUpdate:modelValue":t[2]||(t[2]=s=>e.value=s),maximized:""},{default:ne(()=>[ee(It,null,{default:ne(()=>[Q("div",null,[Q("div",Cn,[po(ee(De,{color:"negative",class:"q-mr-sm",round:"",push:"",icon:"close"},null,512),[[bn]]),e.props.tool.rank>1?(G(),Le(De,{key:0,color:"primary",round:"",push:"",icon:"navigate_before",onClick:t[0]||(t[0]=s=>e.emit("showPreviousTool"))})):Lt("",!0)]),e.props.tool.ranke.emit("showNextTool")),style:{position:"absolute",right:"1em",top:"1em","z-index":"100"}})):Lt("",!0),Q("div",Tn,[Q("img",{src:e.getImgUrlLarge(e.props.tool.img_link),style:{"max-height":"30vh","max-width":"100%",width:"auto",height:"auto"},ref:"ScrollToMe"},null,8,Vn),ee(Xe,null,{default:ne(()=>[Q("div",Pn,Se(e.percentage)+" % Match ",1),ee(Xe,{class:"text-center"},{default:ne(()=>[Q("div",On,[Q("a",{href:e.props.tool.link,target:"_blank"},Se(e.props.tool.title),9,Mn)])]),_:1}),ee(Xe,null,{default:ne(()=>[Ae(Se(e.props.tool.description),1)]),_:1})]),_:1}),ee(xo,{align:"around"},{default:ne(()=>[ee(zt,{class:"float-right","text-color":"white",color:"negative"},{default:ne(()=>[Ae("Clashes "+Se(e.props.tool.numberOfClashes)+" ",1),ee(ze,{class:"q-ma-sm",size:"md",name:"close"})]),_:1}),ee(zt,{cl:"","text-color":"white",color:"positive"},{default:ne(()=>[Ae("Matches "+Se(e.props.tool.numberOfMatches)+" ",1),ee(ze,{class:"q-ma-sm",size:"md",name:"done"})]),_:1})]),_:1})]),Q("div",Bn,[Q("div",En,[Rn,e.props.tool.clashes.find(s=>s.hasOwnProperty("matches"))?(G(),de("div",zn,[(G(!0),de(yt,null,pt(e.props.tool.clashes,(s,f)=>(G(),Le(c,{match:s,isMatch:!1,onShowTool:e.showTool,tool_id:e.props.tool.id,question_number:f,key:f,tools:e.tools},null,8,["match","onShowTool","tool_id","question_number","tools"]))),128))])):(G(),de("div",Ln," Er zijn geen clashes gevonden, deze tool voldoet voor 100% aan je aangegeven eisen! "))]),Q("div",An,[$n,e.props.tool.matches.find(s=>s.hasOwnProperty("matches"))?(G(),de("div",In,[(G(!0),de(yt,null,pt(e.props.tool.matches,(s,f)=>(G(),Le(c,{match:s,isMatch:!0,tools:e.tools,key:f,tool_id:e.props.tool.id,onShowTool:e.showTool,question_number:f,class:"q-my-md"},null,8,["match","tools","tool_id","onShowTool","question_number"]))),128))])):(G(),de("div",Fn," Er zijn geen matches gevonden! "))])])])]),_:1})]),_:1},8,["modelValue"])}var Hn=Ft(xn,[["render",Dn]]);const Nn=[{name:"name",required:!0,label:"Tools",align:"left",field:e=>e.name,format:(e,t)=>`${e}`},{name:"rbac",align:"center",label:"RBAC",field:"rbac",sortable:!0},{name:"notebook",align:"center",label:"Notebook omgeving",field:"notebook",sortable:!0},{name:"experiment",align:"center",label:"Experiment-tracking",field:"experiment",sortable:!0},{name:"model",align:"center",label:"Model-tracking",field:"model",sortable:!0},{name:"annotator",align:"center",label:"Data-labeler",field:"annotator",sortable:!0},{name:"llmops",align:"center",label:"LLMOps",field:"llmops",sortable:!0},{name:"datadrift",align:"center",label:"Data-drift detectie",field:"datadrift",sortable:!0},{name:"modeldrift",align:"center",label:"Model-drift detectie",field:"modeldrift",sortable:!0},{name:"hyperparameter",align:"center",label:"Hyperparameter optimalisatie",field:"hyperparameter",sortable:!0},{name:"dataversioning",align:"center",label:"Data-versiebeheer",field:"dataversioning",sortable:!0},{name:"etl",align:"center",label:"ETL",field:"etl",sortable:!0},{name:"automl",align:"center",label:"AutoML",field:"automl",sortable:!0},{name:"vendorlock",align:"center",label:"Vendorlock",field:"vendorlock",sortable:!0},{name:"open-source",align:"center",label:"Opensource",field:"opensource",sortable:!0}],jn=$t({name:"ResultPage",setup(){const e=I([{name:"Databricks",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"x",llmops:"\u2713",datadrift:"x",modeldrift:"\u2713",hyperparameter:"x",dataversioning:"~",etl:"\u2713",automl:"\u2713",vendorlock:"Databricks, Azure, AWS, GCP",opensource:"x"},{name:"Sagemaker",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"x",dataversioning:"~",etl:"\u2713",automl:"\u2713",vendorlock:"AWS",opensource:"x"},{name:"Azure ML",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"x",dataversioning:"\u2713",etl:"\u2713",automl:"\u2713",vendorlock:"Azure",opensource:"x"},{name:"KubeFlow",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"x",llmops:"x",datadrift:"x",modeldrift:"x",hyperparameter:"\u2713",dataversioning:"~",etl:"~",automl:"\u2713",vendorlock:"Kubernetes cluster",opensource:"\u2713"},{name:"H2O.AI",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"x",dataversioning:"\u2713",etl:"x",automl:"\u2713",vendorlock:"Nee",opensource:"\u2713"},{name:"Vertex ai",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"~",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"x",dataversioning:"x",etl:"\u2713",automl:"\u2713",vendorlock:"GCP",opensource:"x"},{name:"Datarobot",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"\u2713",dataversioning:"~",etl:"x",automl:"\u2713",vendorlock:"Ja",opensource:"x"},{name:"Weights and biases",rbac:"\u2713",notebook:"x",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"x",modeldrift:"\u2713",hyperparameter:"\u2713",dataversioning:"\u2713",etl:"\u2713",automl:"\u2713",vendorlock:"Nee",opensource:"\u2713"},{name:"MLflow",rbac:"x",notebook:"x",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"x",modeldrift:"x",hyperparameter:"x",dataversioning:"x",etl:"x",automl:"x",vendorlock:"Nee",opensource:"\u2713"},{name:"Dagshub",rbac:"\u2713",notebook:"x",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"x",modeldrift:"x",hyperparameter:"x",dataversioning:"\u2713",etl:"x",automl:"x",vendorlock:"Ja",opensource:"x"},{name:"ClearML",rbac:"\u2713",notebook:"x",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"\u2713",dataversioning:"\u2713",etl:"x",automl:"x",vendorlock:"Nee",opensource:"\u2713"}]),t=wo(),o=_o(),i=rl();let r=i.results[i.results.length-1];o.query.hasOwnProperty("result_id")&&(r=i.results.find(F=>F.id===o.query.result_id)),r.length===0&&t.push("/");const n=r.answers,c=r.id,s=r.timestamp,f=i.tools,b=i.questions,a=I(-1),g=I([]),w=F=>{let E=JSON.parse(JSON.stringify(F));return E.forEach(h=>{h.matches=x(h),h.clashes=q(h),h.numberOfMatches=H(h),h.numberOfClashes=N(h),h.percentage=h.numberOfMatches/(h.numberOfMatches+h.numberOfClashes)*100}),E.sort((h,D)=>D.percentage===h.percentage?D.numberOfMatches-h.numberOfMatches:D.percentage-h.percentage).map((h,D)=>({...h,rank:D+1}))},_=200;ll(()=>{g.value=w(f),g.value.forEach((F,E)=>{setTimeout(()=>{a.value=E},E*_)})});const x=F=>{let E=JSON.parse(JSON.stringify(b));return F.good_compatible.forEach(h=>{let D=E.find(Y=>Y.id===h.question_id);n.forEach(Y=>{Y.question_id===h.question_id&&Y.answers.includes(h.answer_id)&&h.explanation!==""&&(D.hasOwnProperty("matches")||(D.matches=[]),D.matches.push(h))})}),E},O=m(()=>e.value.slice().sort((F,E)=>{let h=g.value.find(Y=>Y.title===F.name),D=g.value.find(Y=>Y.title===E.name);return h&&h.hasOwnProperty("percentage")&&D&&D.hasOwnProperty("percentage")?D.percentage===h.percentage?D.numberOfMatches-h.numberOfMatches:D.percentage-h.percentage:-1})),q=F=>{let E=JSON.parse(JSON.stringify(b));return F.bad_compatible.forEach(h=>{let D=E.find(Y=>Y.id===h.question_id);n.forEach(Y=>{Y.question_id===h.question_id&&Y.answers.includes(h.answer_id)&&h.explanation!==""&&(D.hasOwnProperty("matches")||(D.matches=[]),D.matches.push(h))})}),E},H=F=>{let E=0;return F.matches.forEach(h=>{h.hasOwnProperty("matches")&&(E+=h.matches.length)}),E},N=F=>{let E=0;return F.clashes.forEach(h=>{h.hasOwnProperty("matches")&&(E+=h.matches.length)}),E},T=I([]),C=I(null),X=I(!1);return{router:t,tools:f,answers:n,showPreviousTool:F=>{C.value.rank-1>=1&&(C.value=g.value.find(E=>E.rank===C.value.rank-1))},showNextTool:F=>{C.value.rank+1<=g.value.length&&(C.value=g.value.find(E=>E.rank===C.value.rank+1))},showTool:F=>{C.value=g.value.find(E=>E.id===F)},chosenTool:C,showDialog:X,openDialog:F=>{C.value=F,X.value=!0},sortedTools:g,rows:e,columns:Nn,itemRefs:T,currentIndex:a,delay:_,sortedRows:O,id:c,timestamp:s}},components:{ToolItem:hn,ToolDialog:Hn}}),Qn={class:"q-ma-md"},Kn={class:"flex"},Un={class:"text-h3 text-weight-bolder text-primary"},Wn={class:"text-weight-bolder"},Xn={style:{"font-size":"small"}},Jn=Q("b",null,"Klik",-1),Yn={class:"row q-col-gutter-md items-center q-my-md"},Gn=Q("div",{class:"text-h3 text-weight-bolder text-primary q-my-md"}," Nakijk grafiek ",-1),Zn={class:"row q-ma-sm"};function ei(e,t,o,i,r,n){const c=Rt("tool-item"),s=Rt("tool-dialog");return G(),Le(ra,null,{default:ne(()=>[Q("div",Qn,[Q("div",Kn,[Q("div",Un,[Ae(" Ranglijst - "),Q("span",Wn,Se(new Date(e.timestamp).toLocaleDateString("en-CA",{year:"numeric",month:"2-digit",day:"2-digit"})),1),Q("div",Xn,Se(e.id),1)])]),Ae(" Hier ziet u een overzicht met de resultaten. "),Jn,Ae(" op een platform om te zien in welke aspecten het matcht of clasht met uw gegeven antwoorden. "),Q("div",Yn,[(G(!0),de(yt,null,pt(e.sortedTools,(f,b)=>(G(),Le(c,{style:ko({transitionDelay:b*e.delay+"ms"}),class:nl([{show_tool:e.currentIndex>=b},"col-xl-2 col-lg-3 col-md-3 col-xs-12 col-sm-6 hide_tool"]),tool:f,size:"60px",key:f.id,ref_for:!0,ref:"itemRefs",onOpenDialog:e.openDialog},null,8,["style","class","tool","onOpenDialog"]))),128))]),Gn,ee(It,{class:"card q-my-md"},{default:ne(()=>[ee(Xe,null,{default:ne(()=>[ee(on,{flat:"",rows:e.sortedRows,columns:e.columns,"row-key":"name"},null,8,["rows","columns"])]),_:1})]),_:1}),ee(s,{modelValue:e.showDialog,"onUpdate:modelValue":t[0]||(t[0]=f=>e.showDialog=f),answers:e.answers,tool:e.chosenTool,onShowPreviousTool:e.showPreviousTool,onShowNextTool:e.showNextTool,onShowTool:e.showTool},null,8,["modelValue","answers","tool","onShowPreviousTool","onShowNextTool","onShowTool"]),Q("div",Zn,[ee(De,{"no-caps":"",onClick:t[1]||(t[1]=f=>e.router.push({name:"index"})),label:"Doe de quiz opnieuw",rounded:"",push:"",color:"accent"})])])]),_:1})}var vi=Ft(jn,[["render",ei]]);export{vi as default}; diff --git a/docs/assets/ResultPage.b5f0eba4.js b/docs/assets/ResultPage.b5f0eba4.js new file mode 100644 index 0000000..3c0c7ba --- /dev/null +++ b/docs/assets/ResultPage.b5f0eba4.js @@ -0,0 +1 @@ +import{y as le,h as i,z as ie,D as Jt,a7 as X,g as ae,f,r as B,w as W,a1 as rt,o as Ee,a3 as Wt,a2 as Gt,C as st,I as Xe,L as it,af as Xt,ae as Yt,aG as oe,V as Ye,am as Zt,W as Ze,aH as De,aI as et,aJ as eo,N as ut,aK as to,ao as re,aw as G,a as Fe,_ as Ie,l as M,m as Q,k as D,q as z,t as P,ab as A,p as J,ad as ct,az as oo,U as lo,n as Be,aL as ao,x as tt,v as pe,F as Le,ac as Ne,u as no,aE as ro,aM as so}from"./index.ab4869ca.js";import{Q as io,a as uo}from"./QCardActions.638d9df6.js";import{u as ye,b as we,d as co,i as mo,a as ze,Q as _e}from"./QCard.eb99e114.js";import{u as fo,a as vo,c as dt,Q as go,M as bo,b as ho}from"./MatchItem.5ec0f16d.js";import{g as po}from"./scroll.270b929d.js";import{Q as _o}from"./QLinearProgress.1c886b96.js";import{Q as yo}from"./QPage.d12e44a1.js";import{_ as mt,a as ft,b as vt,c as gt,d as bt,e as ht,f as pt,g as _t,h as yt,i as wt,j as St}from"./wandb_logo.127f2d59.js";import{Q as wo}from"./QKnob.9e532b29.js";import{u as Ae}from"./answerStore.972bc172.js";import{_ as So,a as ko,b as qo,c as xo,d as Co,e as Po,f as To,g as Oo,h as $o,i as Ro,j as Vo}from"./wandb_logo.5799faed.js";import{Q as ot}from"./QChip.f74b9a82.js";import{m as Mo,o as Do}from"./format.43d1c739.js";import{u as Bo}from"./QuestionToolIcon.7c4c8f1b.js";import{u as kt}from"./vue-i18n.db8d47ce.js";import"./use-key-composition.7c536e3b.js";var Lo=le({name:"QTh",props:{props:Object,autoWidth:Boolean},emits:["click"],setup(e,{slots:l,emit:t}){const u=ae(),{proxy:{$q:a}}=u,m=n=>{t("click",n)};return()=>{if(e.props===void 0)return i("th",{class:e.autoWidth===!0?"q-table--col-auto-width":"",onClick:m},ie(l.default));let n,s;const c=u.vnode.key;if(c){if(n=e.props.colsMap[c],n===void 0)return}else n=e.props.col;if(n.sortable===!0){const r=n.align==="right"?"unshift":"push";s=Jt(l.default,[]),s[r](i(X,{class:n.__iconClass,name:a.iconSet.table.arrowUp}))}else s=ie(l.default);const h={class:n.__thClass+(e.autoWidth===!0?" q-table--col-auto-width":""),style:n.headerStyle,onClick:r=>{n.sortable===!0&&e.props.sort(n),m(r)}};return i("th",h,s)}}}),No=le({name:"QList",props:{...ye,bordered:Boolean,dense:Boolean,separator:Boolean,padding:Boolean,tag:{type:String,default:"div"}},setup(e,{slots:l}){const t=ae(),u=we(e,t.proxy.$q),a=f(()=>"q-list"+(e.bordered===!0?" q-list--bordered":"")+(e.dense===!0?" q-list--dense":"")+(e.separator===!0?" q-list--separator":"")+(u.value===!0?" q-list--dark":"")+(e.padding===!0?" q-list--padding":""));return()=>i(e.tag,{class:a.value},ie(l.default))}});const Eo=["horizontal","vertical","cell","none"];var Fo=le({name:"QMarkupTable",props:{...ye,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,wrapCells:Boolean,separator:{type:String,default:"horizontal",validator:e=>Eo.includes(e)}},setup(e,{slots:l}){const t=ae(),u=we(e,t.proxy.$q),a=f(()=>`q-markup-table q-table__container q-table__card q-table--${e.separator}-separator`+(u.value===!0?" q-table--dark q-table__card--dark q-dark":"")+(e.dense===!0?" q-table--dense":"")+(e.flat===!0?" q-table--flat":"")+(e.bordered===!0?" q-table--bordered":"")+(e.square===!0?" q-table--square":"")+(e.wrapCells===!1?" q-table--no-wrap":""));return()=>i("div",{class:a.value},[i("table",{class:"q-table"},ie(l.default))])}});function qt(e,l){return i("div",e,[i("table",{class:"q-table"},l)])}const Io={list:No,table:Fo},zo=["list","table","__qtable"];var Ao=le({name:"QVirtualScroll",props:{...fo,type:{type:String,default:"list",validator:e=>zo.includes(e)},items:{type:Array,default:()=>[]},itemsFn:Function,itemsSize:Number,scrollTarget:{default:void 0}},setup(e,{slots:l,attrs:t}){let u;const a=B(null),m=f(()=>e.itemsSize>=0&&e.itemsFn!==void 0?parseInt(e.itemsSize,10):Array.isArray(e.items)?e.items.length:0),{virtualScrollSliceRange:n,localResetVirtualScroll:s,padVirtualScroll:c,onVirtualScrollEvt:h}=vo({virtualScrollLength:m,getVirtualScrollTarget:q,getVirtualScrollEl:x}),r=f(()=>{if(m.value===0)return[];const N=(F,$)=>({index:n.value.from+$,item:F});return e.itemsFn===void 0?e.items.slice(n.value.from,n.value.to).map(N):e.itemsFn(n.value.from,n.value.to-n.value.from).map(N)}),p=f(()=>"q-virtual-scroll q-virtual-scroll"+(e.virtualScrollHorizontal===!0?"--horizontal":"--vertical")+(e.scrollTarget!==void 0?"":" scroll")),b=f(()=>e.scrollTarget!==void 0?{}:{tabindex:0});W(m,()=>{s()}),W(()=>e.scrollTarget,()=>{w(),S()});function x(){return a.value.$el||a.value}function q(){return u}function S(){u=po(x(),e.scrollTarget),u.addEventListener("scroll",h,Xe.passive)}function w(){u!==void 0&&(u.removeEventListener("scroll",h,Xe.passive),u=void 0)}function L(){let N=c(e.type==="list"?"div":"tbody",r.value.map(l.default));return l.before!==void 0&&(N=l.before().concat(N)),it(l.after,N)}return rt(()=>{s()}),Ee(()=>{S()}),Wt(()=>{S()}),Gt(()=>{w()}),st(()=>{w()}),()=>{if(l.default===void 0){console.error("QVirtualScroll: default scoped slot is required for rendering");return}return e.type==="__qtable"?qt({ref:a,class:"q-table__middle "+p.value},L()):i(Io[e.type],{...t,ref:a,class:[t.class,p.value],...b.value},L)}}});function jo(e,l){const t=B(null),u=f(()=>e.disable===!0?null:i("span",{ref:t,class:"no-outline",tabindex:-1}));function a(m){const n=l.value;m!==void 0&&m.type.indexOf("key")===0?n!==null&&document.activeElement!==n&&n.contains(document.activeElement)===!0&&n.focus():t.value!==null&&(m===void 0||n!==null&&n.contains(m.target)===!0)&&t.value.focus()}return{refocusTargetEl:u,refocusTarget:a}}var Qo={xs:30,sm:35,md:40,lg:50,xl:60};const Ho={...ye,...Yt,...co,modelValue:{required:!0,default:null},val:{},trueValue:{default:!0},falseValue:{default:!1},indeterminateValue:{default:null},checkedIcon:String,uncheckedIcon:String,indeterminateIcon:String,toggleOrder:{type:String,validator:e=>e==="tf"||e==="ft"},toggleIndeterminate:Boolean,label:String,leftLabel:Boolean,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},Uo=["update:modelValue"];function Ko(e,l){const{props:t,slots:u,emit:a,proxy:m}=ae(),{$q:n}=m,s=we(t,n),c=B(null),{refocusTargetEl:h,refocusTarget:r}=jo(t,c),p=Xt(t,Qo),b=f(()=>t.val!==void 0&&Array.isArray(t.modelValue)),x=f(()=>{const v=oe(t.val);return b.value===!0?t.modelValue.findIndex(g=>oe(g)===v):-1}),q=f(()=>b.value===!0?x.value>-1:oe(t.modelValue)===oe(t.trueValue)),S=f(()=>b.value===!0?x.value===-1:oe(t.modelValue)===oe(t.falseValue)),w=f(()=>q.value===!1&&S.value===!1),L=f(()=>t.disable===!0?-1:t.tabindex||0),N=f(()=>`q-${e} cursor-pointer no-outline row inline no-wrap items-center`+(t.disable===!0?" disabled":"")+(s.value===!0?` q-${e}--dark`:"")+(t.dense===!0?` q-${e}--dense`:"")+(t.leftLabel===!0?" reverse":"")),F=f(()=>{const v=q.value===!0?"truthy":S.value===!0?"falsy":"indet",g=t.color!==void 0&&(t.keepColor===!0||(e==="toggle"?q.value===!0:S.value!==!0))?` text-${t.color}`:"";return`q-${e}__inner relative-position non-selectable q-${e}__inner--${v}${g}`}),$=f(()=>{const v={type:"checkbox"};return t.name!==void 0&&Object.assign(v,{".checked":q.value,"^checked":q.value===!0?"checked":void 0,name:t.name,value:b.value===!0?t.val:t.trueValue}),v}),T=mo($),H=f(()=>{const v={tabindex:L.value,role:e==="toggle"?"switch":"checkbox","aria-label":t.label,"aria-checked":w.value===!0?"mixed":q.value===!0?"true":"false"};return t.disable===!0&&(v["aria-disabled"]="true"),v});function Y(v){v!==void 0&&(Ye(v),r(v)),t.disable!==!0&&a("update:modelValue",Z(),v)}function Z(){if(b.value===!0){if(q.value===!0){const v=t.modelValue.slice();return v.splice(x.value,1),v}return t.modelValue.concat([t.val])}if(q.value===!0){if(t.toggleOrder!=="ft"||t.toggleIndeterminate===!1)return t.falseValue}else if(S.value===!0){if(t.toggleOrder==="ft"||t.toggleIndeterminate===!1)return t.trueValue}else return t.toggleOrder!=="ft"?t.trueValue:t.falseValue;return t.indeterminateValue}function ne(v){(v.keyCode===13||v.keyCode===32)&&Ye(v)}function j(v){(v.keyCode===13||v.keyCode===32)&&Y(v)}const C=l(q,w);return Object.assign(m,{toggle:Y}),()=>{const v=C();t.disable!==!0&&T(v,"unshift",` q-${e}__native absolute q-ma-none q-pa-none`);const g=[i("div",{class:F.value,style:p.value,"aria-hidden":"true"},v)];h.value!==null&&g.push(h.value);const O=t.label!==void 0?it(u.default,[t.label]):ie(u.default);return O!==void 0&&g.push(i("div",{class:`q-${e}__label q-anchor--skip`},O)),i("div",{ref:c,class:N.value,...H.value,onClick:Y,onKeydown:ne,onKeyup:j},g)}}const Jo=i("div",{key:"svg",class:"q-checkbox__bg absolute"},[i("svg",{class:"q-checkbox__svg fit absolute-full",viewBox:"0 0 24 24"},[i("path",{class:"q-checkbox__truthy",fill:"none",d:"M1.73,12.91 8.1,19.28 22.79,4.59"}),i("path",{class:"q-checkbox__indet",d:"M4,14H20V10H4"})])]);var Me=le({name:"QCheckbox",props:Ho,emits:Uo,setup(e){function l(t,u){const a=f(()=>(t.value===!0?e.checkedIcon:u.value===!0?e.indeterminateIcon:e.uncheckedIcon)||null);return()=>a.value!==null?[i("div",{key:"icon",class:"q-checkbox__icon-container absolute-full flex flex-center no-wrap"},[i(X,{class:"q-checkbox__icon",name:a.value})])]:[Jo]}return Ko("checkbox",l)}});let se=0;const Wo={fullscreen:Boolean,noRouteFullscreenExit:Boolean},Go=["update:fullscreen","fullscreen"];function Xo(){const e=ae(),{props:l,emit:t,proxy:u}=e;let a,m,n;const s=B(!1);Zt(e)===!0&&W(()=>u.$route.fullPath,()=>{l.noRouteFullscreenExit!==!0&&r()}),W(()=>l.fullscreen,p=>{s.value!==p&&c()}),W(s,p=>{t("update:fullscreen",p),t("fullscreen",p)});function c(){s.value===!0?r():h()}function h(){s.value!==!0&&(s.value=!0,n=u.$el.parentNode,n.replaceChild(m,u.$el),document.body.appendChild(u.$el),se++,se===1&&document.body.classList.add("q-body--fullscreen-mixin"),a={handler:r},Ze.add(a))}function r(){s.value===!0&&(a!==void 0&&(Ze.remove(a),a=void 0),n.replaceChild(u.$el,m),s.value=!1,se=Math.max(0,se-1),se===0&&(document.body.classList.remove("q-body--fullscreen-mixin"),u.$el.scrollIntoView!==void 0&&setTimeout(()=>{u.$el.scrollIntoView()})))}return rt(()=>{m=document.createElement("span")}),Ee(()=>{l.fullscreen===!0&&h()}),st(r),Object.assign(u,{toggleFullscreen:c,setFullscreen:h,exitFullscreen:r}),{inFullscreen:s,toggleFullscreen:c}}function Yo(e,l){return new Date(e)-new Date(l)}const Zo={sortMethod:Function,binaryStateSort:Boolean,columnSortOrder:{type:String,validator:e=>e==="ad"||e==="da",default:"ad"}};function el(e,l,t,u){const a=f(()=>{const{sortBy:s}=l.value;return s&&t.value.find(c=>c.name===s)||null}),m=f(()=>e.sortMethod!==void 0?e.sortMethod:(s,c,h)=>{const r=t.value.find(x=>x.name===c);if(r===void 0||r.field===void 0)return s;const p=h===!0?-1:1,b=typeof r.field=="function"?x=>r.field(x):x=>x[r.field];return s.sort((x,q)=>{let S=b(x),w=b(q);return r.rawSort!==void 0?r.rawSort(S,w,x,q)*p:S==null?-1*p:w==null?1*p:r.sort!==void 0?r.sort(S,w,x,q)*p:De(S)===!0&&De(w)===!0?(S-w)*p:et(S)===!0&&et(w)===!0?Yo(S,w)*p:typeof S=="boolean"&&typeof w=="boolean"?(S-w)*p:([S,w]=[S,w].map(L=>(L+"").toLocaleString().toLowerCase()),Sb.name===s);p!==void 0&&p.sortOrder&&(c=p.sortOrder)}let{sortBy:h,descending:r}=l.value;h!==s?(h=s,r=c==="da"):e.binaryStateSort===!0?r=!r:r===!0?c==="ad"?h=null:r=!1:c==="ad"?r=!0:h=null,u({sortBy:h,descending:r,page:1})}return{columnToSort:a,computedSortMethod:m,sort:n}}const tl={filter:[String,Object],filterMethod:Function};function ol(e,l){const t=f(()=>e.filterMethod!==void 0?e.filterMethod:(u,a,m,n)=>{const s=a?a.toLowerCase():"";return u.filter(c=>m.some(h=>{const r=n(h,c)+"";return(r==="undefined"||r==="null"?"":r.toLowerCase()).indexOf(s)!==-1}))});return W(()=>e.filter,()=>{ut(()=>{l({page:1},!0)})},{deep:!0}),{computedFilterMethod:t}}function ll(e,l){for(const t in l)if(l[t]!==e[t])return!1;return!0}function lt(e){return e.page<1&&(e.page=1),e.rowsPerPage!==void 0&&e.rowsPerPage<1&&(e.rowsPerPage=0),e}const al={pagination:Object,rowsPerPageOptions:{type:Array,default:()=>[5,7,10,15,20,25,50,0]},"onUpdate:pagination":[Function,Array]};function nl(e,l){const{props:t,emit:u}=e,a=B(Object.assign({sortBy:null,descending:!1,page:1,rowsPerPage:t.rowsPerPageOptions.length!==0?t.rowsPerPageOptions[0]:5},t.pagination)),m=f(()=>{const r=t["onUpdate:pagination"]!==void 0?{...a.value,...t.pagination}:a.value;return lt(r)}),n=f(()=>m.value.rowsNumber!==void 0);function s(r){c({pagination:r,filter:t.filter})}function c(r={}){ut(()=>{u("request",{pagination:r.pagination||m.value,filter:r.filter||t.filter,getCellValue:l})})}function h(r,p){const b=lt({...m.value,...r});if(ll(m.value,b)===!0){n.value===!0&&p===!0&&s(b);return}if(n.value===!0){s(b);return}t.pagination!==void 0&&t["onUpdate:pagination"]!==void 0?u("update:pagination",b):a.value=b}return{innerPagination:a,computedPagination:m,isServerSide:n,requestServerInteraction:c,setPagination:h}}function rl(e,l,t,u,a,m){const{props:n,emit:s,proxy:{$q:c}}=e,h=f(()=>u.value===!0?t.value.rowsNumber||0:m.value),r=f(()=>{const{page:$,rowsPerPage:T}=t.value;return($-1)*T}),p=f(()=>{const{page:$,rowsPerPage:T}=t.value;return $*T}),b=f(()=>t.value.page===1),x=f(()=>t.value.rowsPerPage===0?1:Math.max(1,Math.ceil(h.value/t.value.rowsPerPage))),q=f(()=>p.value===0?!0:t.value.page>=x.value),S=f(()=>(n.rowsPerPageOptions.includes(l.value.rowsPerPage)?n.rowsPerPageOptions:[l.value.rowsPerPage].concat(n.rowsPerPageOptions)).map(T=>({label:T===0?c.lang.table.allRows:""+T,value:T})));W(x,($,T)=>{if($===T)return;const H=t.value.page;$&&!H?a({page:1}):$1&&a({page:$-1})}function N(){const{page:$,rowsPerPage:T}=t.value;p.value>0&&$*T["single","multiple","none"].includes(e)},selected:{type:Array,default:()=>[]}},il=["update:selected","selection"];function ul(e,l,t,u){const a=f(()=>{const q={};return e.selected.map(u.value).forEach(S=>{q[S]=!0}),q}),m=f(()=>e.selection!=="none"),n=f(()=>e.selection==="single"),s=f(()=>e.selection==="multiple"),c=f(()=>t.value.length!==0&&t.value.every(q=>a.value[u.value(q)]===!0)),h=f(()=>c.value!==!0&&t.value.some(q=>a.value[u.value(q)]===!0)),r=f(()=>e.selected.length);function p(q){return a.value[q]===!0}function b(){l("update:selected",[])}function x(q,S,w,L){l("selection",{rows:S,added:w,keys:q,evt:L});const N=n.value===!0?w===!0?S:[]:w===!0?e.selected.concat(S):e.selected.filter(F=>q.includes(u.value(F))===!1);l("update:selected",N)}return{hasSelectionMode:m,singleSelection:n,multipleSelection:s,allRowsSelected:c,someRowsSelected:h,rowsSelectedNumber:r,isRowSelected:p,clearSelection:b,updateSelection:x}}function at(e){return Array.isArray(e)?e.slice():[]}const cl={expanded:Array},dl=["update:expanded"];function ml(e,l){const t=B(at(e.expanded));W(()=>e.expanded,n=>{t.value=at(n)});function u(n){return t.value.includes(n)}function a(n){e.expanded!==void 0?l("update:expanded",n):t.value=n}function m(n,s){const c=t.value.slice(),h=c.indexOf(n);s===!0?h===-1&&(c.push(n),a(c)):h!==-1&&(c.splice(h,1),a(c))}return{isRowExpanded:u,setExpanded:a,updateExpanded:m}}const fl={visibleColumns:Array};function vl(e,l,t){const u=f(()=>{if(e.columns!==void 0)return e.columns;const s=e.rows[0];return s!==void 0?Object.keys(s).map(c=>({name:c,label:c.toUpperCase(),field:c,align:De(s[c])?"right":"left",sortable:!0})):[]}),a=f(()=>{const{sortBy:s,descending:c}=l.value;return(e.visibleColumns!==void 0?u.value.filter(r=>r.required===!0||e.visibleColumns.includes(r.name)===!0):u.value).map(r=>{const p=r.align||"right",b=`text-${p}`;return{...r,align:p,__iconClass:`q-table__sort-icon q-table__sort-icon--${p}`,__thClass:b+(r.headerClasses!==void 0?" "+r.headerClasses:"")+(r.sortable===!0?" sortable":"")+(r.name===s?` sorted ${c===!0?"sort-desc":""}`:""),__tdStyle:r.style!==void 0?typeof r.style!="function"?()=>r.style:r.style:()=>null,__tdClass:r.classes!==void 0?typeof r.classes!="function"?()=>b+" "+r.classes:x=>b+" "+r.classes(x):()=>b}})}),m=f(()=>{const s={};return a.value.forEach(c=>{s[c.name]=c}),s}),n=f(()=>e.tableColspan!==void 0?e.tableColspan:a.value.length+(t.value===!0?1:0));return{colList:u,computedCols:a,computedColsMap:m,computedColspan:n}}const he="q-table__bottom row items-center",xt={};dt.forEach(e=>{xt[e]={}});var gl=le({name:"QTable",props:{rows:{type:Array,default:()=>[]},rowKey:{type:[String,Function],default:"id"},columns:Array,loading:Boolean,iconFirstPage:String,iconPrevPage:String,iconNextPage:String,iconLastPage:String,title:String,hideHeader:Boolean,grid:Boolean,gridHeader:Boolean,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:e=>["horizontal","vertical","cell","none"].includes(e)},wrapCells:Boolean,virtualScroll:Boolean,virtualScrollTarget:{default:void 0},...xt,noDataLabel:String,noResultsLabel:String,loadingLabel:String,selectedRowsLabel:Function,rowsPerPageLabel:String,paginationLabel:Function,color:{type:String,default:"grey-8"},titleClass:[String,Array,Object],tableStyle:[String,Array,Object],tableClass:[String,Array,Object],tableHeaderStyle:[String,Array,Object],tableHeaderClass:[String,Array,Object],cardContainerClass:[String,Array,Object],cardContainerStyle:[String,Array,Object],cardStyle:[String,Array,Object],cardClass:[String,Array,Object],hideBottom:Boolean,hideSelectedBanner:Boolean,hideNoData:Boolean,hidePagination:Boolean,onRowClick:Function,onRowDblclick:Function,onRowContextmenu:Function,...ye,...Wo,...fl,...tl,...al,...cl,...sl,...Zo},emits:["request","virtualScroll",...Go,...dl,...il],setup(e,{slots:l,emit:t}){const u=ae(),{proxy:{$q:a}}=u,m=we(e,a),{inFullscreen:n,toggleFullscreen:s}=Xo(),c=f(()=>typeof e.rowKey=="function"?e.rowKey:o=>o[e.rowKey]),h=B(null),r=B(null),p=f(()=>e.grid!==!0&&e.virtualScroll===!0),b=f(()=>" q-table__card"+(m.value===!0?" q-table__card--dark q-dark":"")+(e.square===!0?" q-table--square":"")+(e.flat===!0?" q-table--flat":"")+(e.bordered===!0?" q-table--bordered":"")),x=f(()=>`q-table__container q-table--${e.separator}-separator column no-wrap`+(e.grid===!0?" q-table--grid":b.value)+(m.value===!0?" q-table--dark":"")+(e.dense===!0?" q-table--dense":"")+(e.wrapCells===!1?" q-table--no-wrap":"")+(n.value===!0?" fullscreen scroll":"")),q=f(()=>x.value+(e.loading===!0?" q-table--loading":""));W(()=>e.tableStyle+e.tableClass+e.tableHeaderStyle+e.tableHeaderClass+x.value,()=>{p.value===!0&&r.value!==null&&r.value.reset()});const{innerPagination:S,computedPagination:w,isServerSide:L,requestServerInteraction:N,setPagination:F}=nl(u,ee),{computedFilterMethod:$}=ol(e,F),{isRowExpanded:T,setExpanded:H,updateExpanded:Y}=ml(e,t),Z=f(()=>{let o=e.rows;if(L.value===!0||o.length===0)return o;const{sortBy:d,descending:_}=w.value;return e.filter&&(o=$.value(o,e.filter,U.value,ee)),Tt.value!==null&&(o=Ot.value(e.rows===o?o.slice():o,d,_)),o}),ne=f(()=>Z.value.length),j=f(()=>{let o=Z.value;if(L.value===!0)return o;const{rowsPerPage:d}=w.value;return d!==0&&(ce.value===0&&e.rows!==o?o.length>de.value&&(o=o.slice(0,de.value)):o=o.slice(ce.value,de.value)),o}),{hasSelectionMode:C,singleSelection:v,multipleSelection:g,allRowsSelected:O,someRowsSelected:E,rowsSelectedNumber:Se,isRowSelected:ke,clearSelection:Ct,updateSelection:ue}=ul(e,t,j,c),{colList:Pt,computedCols:U,computedColsMap:je,computedColspan:Qe}=vl(e,w,C),{columnToSort:Tt,computedSortMethod:Ot,sort:qe}=el(e,w,Pt,F),{firstRowIndex:ce,lastRowIndex:de,isFirstPage:xe,isLastPage:Ce,pagesNumber:me,computedRowsPerPageOptions:$t,computedRowsNumber:fe,firstPage:Pe,prevPage:Te,nextPage:Oe,lastPage:$e}=rl(u,S,w,L,F,ne),Rt=f(()=>j.value.length===0),Vt=f(()=>{const o={};return dt.forEach(d=>{o[d]=e[d]}),o.virtualScrollItemSize===void 0&&(o.virtualScrollItemSize=e.dense===!0?28:48),o});function Mt(){p.value===!0&&r.value.reset()}function Dt(){if(e.grid===!0)return Ut();const o=e.hideHeader!==!0?We:null;if(p.value===!0){const _=l["top-row"],y=l["bottom-row"],k={default:V=>Ue(V.item,l.body,V.index)};if(_!==void 0){const V=i("tbody",_({cols:U.value}));k.before=o===null?()=>V:()=>[o()].concat(V)}else o!==null&&(k.before=o);return y!==void 0&&(k.after=()=>i("tbody",y({cols:U.value}))),i(Ao,{ref:r,class:e.tableClass,style:e.tableStyle,...Vt.value,scrollTarget:e.virtualScrollTarget,items:j.value,type:"__qtable",tableColspan:Qe.value,onVirtualScroll:Lt},k)}const d=[Nt()];return o!==null&&d.unshift(o()),qt({class:["q-table__middle scroll",e.tableClass],style:e.tableStyle},d)}function Bt(o,d){if(r.value!==null){r.value.scrollTo(o,d);return}o=parseInt(o,10);const _=h.value.querySelector(`tbody tr:nth-of-type(${o+1})`);if(_!==null){const y=h.value.querySelector(".q-table__middle.scroll"),k=_.offsetTop-e.virtualScrollStickySizeStart,V=k{const ge=l[`body-cell-${I.name}`],be=ge!==void 0?ge:V;return be!==void 0?be(Et({key:y,row:o,pageIndex:_,col:I})):i("td",{class:I.__tdClass(o),style:I.__tdStyle(o)},ee(I,o))});if(C.value===!0){const I=l["body-selection"],ge=I!==void 0?I(Ft({key:y,row:o,pageIndex:_})):[i(Me,{modelValue:k,color:e.color,dark:m.value,dense:e.dense,"onUpdate:modelValue":(be,Kt)=>{ue([y],[o],be,Kt)}})];R.unshift(i("td",{class:"q-table--col-auto-width"},ge))}const K={key:y,class:{selected:k}};return e.onRowClick!==void 0&&(K.class["cursor-pointer"]=!0,K.onClick=I=>{t("RowClick",I,o,_)}),e.onRowDblclick!==void 0&&(K.class["cursor-pointer"]=!0,K.onDblclick=I=>{t("RowDblclick",I,o,_)}),e.onRowContextmenu!==void 0&&(K.class["cursor-pointer"]=!0,K.onContextmenu=I=>{t("RowContextmenu",I,o,_)}),i("tr",K,R)}function Nt(){const o=l.body,d=l["top-row"],_=l["bottom-row"];let y=j.value.map((k,V)=>Ue(k,o,V));return d!==void 0&&(y=d({cols:U.value}).concat(y)),_!==void 0&&(y=y.concat(_({cols:U.value}))),i("tbody",y)}function Ke(o){return Re(o),o.cols=o.cols.map(d=>re({...d},"value",()=>ee(d,o.row))),o}function Et(o){return Re(o),re(o,"value",()=>ee(o.col,o.row)),o}function Ft(o){return Re(o),o}function Re(o){Object.assign(o,{cols:U.value,colsMap:je.value,sort:qe,rowIndex:ce.value+o.pageIndex,color:e.color,dark:m.value,dense:e.dense}),C.value===!0&&re(o,"selected",()=>ke(o.key),(d,_)=>{ue([o.key],[o.row],d,_)}),re(o,"expand",()=>T(o.key),d=>{Y(o.key,d)})}function ee(o,d){const _=typeof o.field=="function"?o.field(d):d[o.field];return o.format!==void 0?o.format(_,d):_}const te=f(()=>({pagination:w.value,pagesNumber:me.value,isFirstPage:xe.value,isLastPage:Ce.value,firstPage:Pe,prevPage:Te,nextPage:Oe,lastPage:$e,inFullscreen:n.value,toggleFullscreen:s}));function It(){const o=l.top,d=l["top-left"],_=l["top-right"],y=l["top-selection"],k=C.value===!0&&y!==void 0&&Se.value>0,V="q-table__top relative-position row items-center";if(o!==void 0)return i("div",{class:V},[o(te.value)]);let R;if(k===!0?R=y(te.value).slice():(R=[],d!==void 0?R.push(i("div",{class:"q-table__control"},[d(te.value)])):e.title&&R.push(i("div",{class:"q-table__control"},[i("div",{class:["q-table__title",e.titleClass]},e.title)]))),_!==void 0&&(R.push(i("div",{class:"q-table__separator col"})),R.push(i("div",{class:"q-table__control"},[_(te.value)]))),R.length!==0)return i("div",{class:V},R)}const Je=f(()=>E.value===!0?null:O.value);function We(){const o=zt();return e.loading===!0&&l.loading===void 0&&o.push(i("tr",{class:"q-table__progress"},[i("th",{class:"relative-position",colspan:Qe.value},He())])),i("thead",o)}function zt(){const o=l.header,d=l["header-cell"];if(o!==void 0)return o(Ve({header:!0})).slice();const _=U.value.map(y=>{const k=l[`header-cell-${y.name}`],V=k!==void 0?k:d,R=Ve({col:y});return V!==void 0?V(R):i(Lo,{key:y.name,props:R},()=>y.label)});if(v.value===!0&&e.grid!==!0)_.unshift(i("th",{class:"q-table--col-auto-width"}," "));else if(g.value===!0){const y=l["header-selection"],k=y!==void 0?y(Ve({})):[i(Me,{color:e.color,modelValue:Je.value,dark:m.value,dense:e.dense,"onUpdate:modelValue":Ge})];_.unshift(i("th",{class:"q-table--col-auto-width"},k))}return[i("tr",{class:e.tableHeaderClass,style:e.tableHeaderStyle},_)]}function Ve(o){return Object.assign(o,{cols:U.value,sort:qe,colsMap:je.value,color:e.color,dark:m.value,dense:e.dense}),g.value===!0&&re(o,"selected",()=>Je.value,Ge),o}function Ge(o){E.value===!0&&(o=!1),ue(j.value.map(c.value),j.value,o)}const ve=f(()=>{const o=[e.iconFirstPage||a.iconSet.table.firstPage,e.iconPrevPage||a.iconSet.table.prevPage,e.iconNextPage||a.iconSet.table.nextPage,e.iconLastPage||a.iconSet.table.lastPage];return a.lang.rtl===!0?o.reverse():o});function At(){if(e.hideBottom===!0)return;if(Rt.value===!0){if(e.hideNoData===!0)return;const _=e.loading===!0?e.loadingLabel||a.lang.table.loading:e.filter?e.noResultsLabel||a.lang.table.noResults:e.noDataLabel||a.lang.table.noData,y=l["no-data"],k=y!==void 0?[y({message:_,icon:a.iconSet.table.warning,filter:e.filter})]:[i(X,{class:"q-table__bottom-nodata-icon",name:a.iconSet.table.warning}),_];return i("div",{class:he+" q-table__bottom--nodata"},k)}const o=l.bottom;if(o!==void 0)return i("div",{class:he},[o(te.value)]);const d=e.hideSelectedBanner!==!0&&C.value===!0&&Se.value>0?[i("div",{class:"q-table__control"},[i("div",[(e.selectedRowsLabel||a.lang.table.selectedRecords)(Se.value)])])]:[];if(e.hidePagination!==!0)return i("div",{class:he+" justify-end"},Qt(d));if(d.length!==0)return i("div",{class:he},d)}function jt(o){F({page:1,rowsPerPage:o.value})}function Qt(o){let d;const{rowsPerPage:_}=w.value,y=e.paginationLabel||a.lang.table.pagination,k=l.pagination,V=e.rowsPerPageOptions.length>1;if(o.push(i("div",{class:"q-table__separator col"})),V===!0&&o.push(i("div",{class:"q-table__control"},[i("span",{class:"q-table__bottom-item"},[e.rowsPerPageLabel||a.lang.table.recordsPerPage]),i(go,{class:"q-table__select inline q-table__bottom-item",color:e.color,modelValue:_,options:$t.value,displayValue:_===0?a.lang.table.allRows:_,dark:m.value,borderless:!0,dense:!0,optionsDense:!0,optionsCover:!0,"onUpdate:modelValue":jt})])),k!==void 0)d=k(te.value);else if(d=[i("span",_!==0?{class:"q-table__bottom-item"}:{},[_?y(ce.value+1,Math.min(de.value,fe.value),fe.value):y(1,ne.value,fe.value)])],_!==0&&me.value>1){const R={color:e.color,round:!0,dense:!0,flat:!0};e.dense===!0&&(R.size="sm"),me.value>2&&d.push(i(G,{key:"pgFirst",...R,icon:ve.value[0],disable:xe.value,onClick:Pe})),d.push(i(G,{key:"pgPrev",...R,icon:ve.value[1],disable:xe.value,onClick:Te}),i(G,{key:"pgNext",...R,icon:ve.value[2],disable:Ce.value,onClick:Oe})),me.value>2&&d.push(i(G,{key:"pgLast",...R,icon:ve.value[3],disable:Ce.value,onClick:$e}))}return o.push(i("div",{class:"q-table__control"},d)),o}function Ht(){const o=e.gridHeader===!0?[i("table",{class:"q-table"},[We()])]:e.loading===!0&&l.loading===void 0?He():void 0;return i("div",{class:"q-table__middle"},o)}function Ut(){const o=l.item!==void 0?l.item:d=>{const _=d.cols.map(k=>i("div",{class:"q-table__grid-item-row"},[i("div",{class:"q-table__grid-item-title"},[k.label]),i("div",{class:"q-table__grid-item-value"},[k.value])]));if(C.value===!0){const k=l["body-selection"],V=k!==void 0?k(d):[i(Me,{modelValue:d.selected,color:e.color,dark:m.value,dense:e.dense,"onUpdate:modelValue":(R,K)=>{ue([d.key],[d.row],R,K)}})];_.unshift(i("div",{class:"q-table__grid-item-row"},V),i(io,{dark:m.value}))}const y={class:["q-table__grid-item-card"+b.value,e.cardClass],style:e.cardStyle};return(e.onRowClick!==void 0||e.onRowDblclick!==void 0)&&(y.class[0]+=" cursor-pointer",e.onRowClick!==void 0&&(y.onClick=k=>{t("RowClick",k,d.row,d.pageIndex)}),e.onRowDblclick!==void 0&&(y.onDblclick=k=>{t("RowDblclick",k,d.row,d.pageIndex)})),i("div",{class:"q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3"+(d.selected===!0?" q-table__grid-item--selected":"")},[i("div",y,_)])};return i("div",{class:["q-table__grid-content row",e.cardContainerClass],style:e.cardContainerStyle},j.value.map((d,_)=>o(Ke({key:c.value(d),row:d,pageIndex:_}))))}return Object.assign(u.proxy,{requestServerInteraction:N,setPagination:F,firstPage:Pe,prevPage:Te,nextPage:Oe,lastPage:$e,isRowSelected:ke,clearSelection:Ct,isRowExpanded:T,setExpanded:H,sort:qe,resetVirtualScroll:Mt,scrollTo:Bt,getCellValue:ee}),to(u.proxy,{filteredSortedRows:()=>Z.value,computedRows:()=>j.value,computedRowsNumber:()=>fe.value}),()=>{const o=[It()],d={ref:h,class:q.value};return e.grid===!0?o.push(Ht()):Object.assign(d,{class:[d.class,e.cardClass],style:e.cardStyle}),o.push(Dt(),At()),e.loading===!0&&l.loading!==void 0&&o.push(l.loading()),i("div",d,o)}}});const bl=Fe({name:"ToolItem",props:{tool:{type:Object},rank:{type:Number},size:{type:String}},emits:["openDialog"],setup(e,{emit:l}){Ae();const t=B(!1);return{props:e,goTo:()=>{window.open(e.tool.link,"_blank").focus()},emit:l,getImgUrl:n=>new URL({"../assets/small/azureml_logo.png":mt,"../assets/small/clearml_logo.png":ft,"../assets/small/dagshub_logo.png":vt,"../assets/small/databricks_logo.png":gt,"../assets/small/datarobot_logo.png":bt,"../assets/small/h2o_logo.png":ht,"../assets/small/kubeflow_logo.png":pt,"../assets/small/mlflow_logo.png":_t,"../assets/small/sagemaker_logo.png":yt,"../assets/small/vertex_logo.png":wt,"../assets/small/wandb_logo.png":St}[`../assets/small/${n}`],self.location).href,openDialog:()=>{l("openDialog",e.tool)},isHovered:t}}}),hl={class:"cursor-pointer"},pl={class:"col-2"},_l=["src"],yl={class:"col-8"},wl={class:"text-weight-bolder text-center text-h6"},Sl={class:"Text-center text-h6"},kl={class:"text-weight-bolder col-2 flex flex-center"},ql={key:1},xl={key:1};function Cl(e,l,t,u,a,m){return M(),Q("div",hl,[D(ze,{onClick:e.openDialog,class:ct(["text-center card row circle",{enlarged:e.isHovered}]),onMouseover:l[1]||(l[1]=n=>e.isHovered=!0),onMouseleave:l[2]||(l[2]=n=>e.isHovered=!1)},{default:z(()=>[P("div",pl,[P("div",null,[D(wo,{"show-value":"",modelValue:e.props.tool.percentage,"onUpdate:modelValue":l[0]||(l[0]=n=>e.props.tool.percentage=n),color:"positive",size:e.props.size,readonly:"","track-color":"negative"},{default:z(()=>[D(X,{square:""},{default:z(()=>[P("img",{src:e.getImgUrl(e.props.tool.img_link)},null,8,_l)]),_:1})]),_:1},8,["modelValue","size"])])]),P("div",yl,[P("div",wl,A(e.props.tool.title),1),P("i",Sl,A(e.props.tool.percentage.toFixed(1))+"% Match ",1)]),P("div",kl,[e.props.tool.rank===1?(M(),J(X,{key:0,size:"lg",name:"emoji_events",color:"yellow"})):(M(),Q("div",ql,[e.props.tool.rank===2||e.props.tool.rank===3?(M(),J(X,{key:0,size:"lg",name:"military_tech",color:e.props.tool.rank===2?"grey":"brown"},null,8,["color"])):(M(),Q("i",xl,A(`${e.props.tool.rank}de`),1))]))])]),_:1},8,["onClick","class"])])}var Pl=Ie(bl,[["render",Cl]]);function nt(e){if(e===!1)return 0;if(e===!0||e===void 0)return 1;const l=parseInt(e,10);return isNaN(l)?0:l}var Tl=oo({name:"close-popup",beforeMount(e,{value:l}){const t={depth:nt(l),handler(u){t.depth!==0&&setTimeout(()=>{const a=Mo(e);a!==void 0&&Do(a,u,t.depth)})},handlerKey(u){lo(u,13)===!0&&t.handler(u)}};e.__qclosepopup=t,e.addEventListener("click",t.handler),e.addEventListener("keyup",t.handlerKey)},updated(e,{value:l,oldValue:t}){l!==t&&(e.__qclosepopup.depth=nt(l))},beforeUnmount(e){const l=e.__qclosepopup;e.removeEventListener("click",l.handler),e.removeEventListener("keyup",l.handlerKey),delete e.__qclosepopup}});const Ol=Fe({name:"ToolDialog",props:["modelValue","tool","answers"],emits:["update:modelValue","showNextTool","showPreviousTool","showTool"],components:{MatchItem:bo},setup(e,{emit:l}){const t=Bo(),{t:u}=kt(),a=Ae(),m=B(a.tools),n=B(),s=b=>{l("showTool",b),n.value.scrollIntoView({behavior:"smooth"})},c=b=>new URL({"../assets/large/azureml_logo.png":So,"../assets/large/clearml_logo.png":ko,"../assets/large/dagshub_logo.png":qo,"../assets/large/databricks_logo.png":xo,"../assets/large/datarobot_logo.png":Co,"../assets/large/h2o_logo.png":Po,"../assets/large/kubeflow_logo.png":To,"../assets/large/mlflow_logo.png":Oo,"../assets/large/sagemaker_logo.png":$o,"../assets/large/vertex_logo.png":Ro,"../assets/large/wandb_logo.png":Vo}[`../assets/large/${b}`],self.location).href,h=b=>new URL({"../assets/small/azureml_logo.png":mt,"../assets/small/clearml_logo.png":ft,"../assets/small/dagshub_logo.png":vt,"../assets/small/databricks_logo.png":gt,"../assets/small/datarobot_logo.png":bt,"../assets/small/h2o_logo.png":ht,"../assets/small/kubeflow_logo.png":pt,"../assets/small/mlflow_logo.png":_t,"../assets/small/sagemaker_logo.png":yt,"../assets/small/vertex_logo.png":wt,"../assets/small/wandb_logo.png":St}[`../assets/small/${b}`],self.location).href,r=f({get(){return e.modelValue},set(b){l("update:modelValue",b)}}),p=f(()=>(e.tool.numberOfMatches/(e.tool.numberOfMatches+e.tool.numberOfClashes)*100).toFixed(2));return{props:e,t:u,getImgUrlLarge:c,q:t,getImgUrlSmall:h,emit:l,percentage:p,tools:m,value:r,ScrollToMe:n,showTool:s,answerStore:a}}}),$l={style:{position:"absolute",left:"1em",top:"1em","z-index":"100"}},Rl={class:"flex flex-center q-ma-md"},Vl=["src"],Ml={class:"text-weight-bolder text-center text-h5"},Dl={class:"text-h5 text-weight-bolder"},Bl=["href"],Ll={class:"row q-col-gutter-md q-ma-md"},Nl={class:"col-md-6 col-sm-12 col-xs-12"},El=P("div",{class:"text-h3 text-weight-bolder text-negative text-center"}," Clashes ",-1),Fl={key:0},Il={key:1},zl={class:"col-md-6 col-sm-12 col-xs-12"},Al=P("div",{class:"text-h3 text-weight-bolder text-positive text-center"}," Matches ",-1),jl={key:0},Ql={key:1};function Hl(e,l,t,u,a,m){const n=Be("match-item");return M(),J(ho,{modelValue:e.value,"onUpdate:modelValue":l[2]||(l[2]=s=>e.value=s),maximized:""},{default:z(()=>[D(ze,null,{default:z(()=>[P("div",null,[P("div",$l,[ao(D(G,{color:"negative",class:"q-mr-sm",round:"",push:"",icon:"close"},null,512),[[Tl]]),e.props.tool.rank>1?(M(),J(G,{key:0,color:"primary",round:"",push:"",icon:"navigate_before",onClick:l[0]||(l[0]=s=>e.emit("showPreviousTool"))})):tt("",!0)]),e.props.tool.ranke.emit("showNextTool")),style:{position:"absolute",right:"1em",top:"1em","z-index":"100"}})):tt("",!0),P("div",Rl,[P("img",{src:e.getImgUrlLarge(e.props.tool.img_link),style:{"max-height":"30vh","max-width":"100%",width:"auto",height:"auto"},ref:"ScrollToMe"},null,8,Vl),D(_e,null,{default:z(()=>[P("div",Ml,A(e.percentage)+" % Match ",1),D(_e,{class:"text-center"},{default:z(()=>[P("div",Dl,[P("a",{href:e.props.tool.link,target:"_blank"},A(e.props.tool.title),9,Bl)])]),_:1}),D(_e,null,{default:z(()=>[pe(A(e.props.tool.description),1)]),_:1})]),_:1}),D(uo,{align:"around"},{default:z(()=>[D(ot,{class:"float-right","text-color":"white",color:"negative"},{default:z(()=>[pe("Clashes "+A(e.props.tool.numberOfClashes)+" ",1),D(X,{class:"q-ma-sm",size:"md",name:"close"})]),_:1}),D(ot,{cl:"","text-color":"white",color:"positive"},{default:z(()=>[pe("Matches "+A(e.props.tool.numberOfMatches)+" ",1),D(X,{class:"q-ma-sm",size:"md",name:"done"})]),_:1})]),_:1})]),P("div",Ll,[P("div",Nl,[El,e.props.tool.clashes.find(s=>s.hasOwnProperty("matches"))?(M(),Q("div",Il,[(M(!0),Q(Le,null,Ne(e.props.tool.clashes,(s,c)=>(M(),J(n,{match:s,isMatch:!1,onShowTool:e.showTool,tool_id:e.props.tool.id,question_number:c,key:c,tools:e.tools},null,8,["match","onShowTool","tool_id","question_number","tools"]))),128))])):(M(),Q("div",Fl,A(e.$t("tool.no_clashes_found")),1))]),P("div",zl,[Al,e.props.tool.matches.find(s=>s.hasOwnProperty("matches"))?(M(),Q("div",Ql,[(M(!0),Q(Le,null,Ne(e.props.tool.matches,(s,c)=>(M(),J(n,{match:s,isMatch:!0,tools:e.tools,key:c,tool_id:e.props.tool.id,onShowTool:e.showTool,question_number:c,class:"q-my-md"},null,8,["match","tools","tool_id","onShowTool","question_number"]))),128))])):(M(),Q("div",jl,A(e.$t("tool.no_matches_found")),1))])])])]),_:1})]),_:1},8,["modelValue"])}var Ul=Ie(Ol,[["render",Hl]]);const Kl=[{name:"name",required:!0,label:"Tools",align:"left",field:e=>e.name,format:(e,l)=>`${e}`},{name:"rbac",align:"center",label:"RBAC",field:"rbac",sortable:!0},{name:"notebook",align:"center",label:"Notebook omgeving",field:"notebook",sortable:!0},{name:"experiment",align:"center",label:"Experiment-tracking",field:"experiment",sortable:!0},{name:"model",align:"center",label:"Model-tracking",field:"model",sortable:!0},{name:"annotator",align:"center",label:"Data-labeler",field:"annotator",sortable:!0},{name:"llmops",align:"center",label:"LLMOps",field:"llmops",sortable:!0},{name:"datadrift",align:"center",label:"Data-drift detectie",field:"datadrift",sortable:!0},{name:"modeldrift",align:"center",label:"Model-drift detectie",field:"modeldrift",sortable:!0},{name:"hyperparameter",align:"center",label:"Hyperparameter optimalisatie",field:"hyperparameter",sortable:!0},{name:"dataversioning",align:"center",label:"Data-versiebeheer",field:"dataversioning",sortable:!0},{name:"etl",align:"center",label:"ETL",field:"etl",sortable:!0},{name:"automl",align:"center",label:"AutoML",field:"automl",sortable:!0},{name:"vendorlock",align:"center",label:"Vendorlock",field:"vendorlock",sortable:!0},{name:"open-source",align:"center",label:"Opensource",field:"opensource",sortable:!0}],Jl=Fe({name:"ResultPage",setup(){const e=B([{name:"Databricks",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"x",llmops:"\u2713",datadrift:"x",modeldrift:"\u2713",hyperparameter:"x",dataversioning:"~",etl:"\u2713",automl:"\u2713",vendorlock:"Databricks, Azure, AWS, GCP",opensource:"x"},{name:"Sagemaker",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"x",dataversioning:"~",etl:"\u2713",automl:"\u2713",vendorlock:"AWS",opensource:"x"},{name:"Azure ML",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"x",dataversioning:"\u2713",etl:"\u2713",automl:"\u2713",vendorlock:"Azure",opensource:"x"},{name:"KubeFlow",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"x",llmops:"x",datadrift:"x",modeldrift:"x",hyperparameter:"\u2713",dataversioning:"~",etl:"~",automl:"\u2713",vendorlock:"Kubernetes cluster",opensource:"\u2713"},{name:"H2O.AI",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"x",dataversioning:"\u2713",etl:"x",automl:"\u2713",vendorlock:"Nee",opensource:"\u2713"},{name:"Vertex ai",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"~",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"x",dataversioning:"x",etl:"\u2713",automl:"\u2713",vendorlock:"GCP",opensource:"x"},{name:"Datarobot",rbac:"\u2713",notebook:"\u2713",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"\u2713",dataversioning:"~",etl:"x",automl:"\u2713",vendorlock:"Ja",opensource:"x"},{name:"Weights and biases",rbac:"\u2713",notebook:"x",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"x",modeldrift:"\u2713",hyperparameter:"\u2713",dataversioning:"\u2713",etl:"\u2713",automl:"\u2713",vendorlock:"Nee",opensource:"\u2713"},{name:"MLflow",rbac:"x",notebook:"x",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"x",modeldrift:"x",hyperparameter:"x",dataversioning:"x",etl:"x",automl:"x",vendorlock:"Nee",opensource:"\u2713"},{name:"Dagshub",rbac:"\u2713",notebook:"x",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"x",modeldrift:"x",hyperparameter:"x",dataversioning:"\u2713",etl:"x",automl:"x",vendorlock:"Ja",opensource:"x"},{name:"ClearML",rbac:"\u2713",notebook:"x",experiment:"\u2713",model:"\u2713",annotator:"\u2713",llmops:"\u2713",datadrift:"\u2713",modeldrift:"\u2713",hyperparameter:"\u2713",dataversioning:"\u2713",etl:"x",automl:"x",vendorlock:"Nee",opensource:"\u2713"}]),l=no(),{t}=kt(),u=ro(),a=Ae();let m=a.results[a.results.length-1];u.query.hasOwnProperty("result_id")&&(m=a.results.find(C=>C.id===u.query.result_id)),m.length===0&&l.push("/");const n=m.answers,s=m.id,c=m.timestamp,h=a.tools,r=a.questions,p=B(-1),b=B([]),x=C=>{let v=JSON.parse(JSON.stringify(C));return v.forEach(g=>{g.matches=S(g),g.clashes=L(g),g.numberOfMatches=N(g),g.numberOfClashes=F(g),g.percentage=g.numberOfMatches/(g.numberOfMatches+g.numberOfClashes)*100}),v.sort((g,O)=>O.percentage===g.percentage?O.numberOfMatches-g.numberOfMatches:O.percentage-g.percentage).map((g,O)=>({...g,rank:O+1}))},q=200;Ee(()=>{b.value=x(h),b.value.forEach((C,v)=>{setTimeout(()=>{p.value=v},v*q)})});const S=C=>{let v=JSON.parse(JSON.stringify(r));return C.good_compatible.forEach(g=>{let O=v.find(E=>E.id===g.question_id);n.forEach(E=>{E.question_id===g.question_id&&E.answers.includes(g.answer_id)&&g.explanation!==""&&(O.hasOwnProperty("matches")||(O.matches=[]),O.matches.push(g))})}),v},w=f(()=>e.value.slice().sort((C,v)=>{let g=b.value.find(E=>E.title===C.name),O=b.value.find(E=>E.title===v.name);return g&&g.hasOwnProperty("percentage")&&O&&O.hasOwnProperty("percentage")?O.percentage===g.percentage?O.numberOfMatches-g.numberOfMatches:O.percentage-g.percentage:-1})),L=C=>{let v=JSON.parse(JSON.stringify(r));return C.bad_compatible.forEach(g=>{let O=v.find(E=>E.id===g.question_id);n.forEach(E=>{E.question_id===g.question_id&&E.answers.includes(g.answer_id)&&g.explanation!==""&&(O.hasOwnProperty("matches")||(O.matches=[]),O.matches.push(g))})}),v},N=C=>{let v=0;return C.matches.forEach(g=>{g.hasOwnProperty("matches")&&(v+=g.matches.length)}),v},F=C=>{let v=0;return C.clashes.forEach(g=>{g.hasOwnProperty("matches")&&(v+=g.matches.length)}),v},$=B([]),T=B(null),H=B(!1);return{router:l,tools:h,answers:n,showPreviousTool:C=>{T.value.rank-1>=1&&(T.value=b.value.find(v=>v.rank===T.value.rank-1))},showNextTool:C=>{T.value.rank+1<=b.value.length&&(T.value=b.value.find(v=>v.rank===T.value.rank+1))},showTool:C=>{T.value=b.value.find(v=>v.id===C)},chosenTool:T,showDialog:H,openDialog:C=>{T.value=C,H.value=!0},t,sortedTools:b,rows:e,columns:Kl,itemRefs:$,currentIndex:p,delay:q,sortedRows:w,id:s,timestamp:c}},components:{ToolItem:Pl,ToolDialog:Ul}}),Wl={class:"q-ma-md"},Gl={class:"flex"},Xl={class:"text-h3 text-weight-bolder text-primary"},Yl={class:"text-weight-bolder"},Zl={style:{"font-size":"small"}},ea=["innerHTML"],ta={class:"row q-col-gutter-md items-center q-my-md"},oa={class:"text-h3 text-weight-bolder text-primary q-my-md"},la={class:"row q-ma-sm"};function aa(e,l,t,u,a,m){const n=Be("tool-item"),s=Be("tool-dialog");return M(),J(yo,null,{default:z(()=>[P("div",Wl,[P("div",Gl,[P("div",Xl,[pe(A(e.$t("results.ranking.title"))+" - ",1),P("span",Yl,A(new Date(e.timestamp).toLocaleDateString("en-CA",{year:"numeric",month:"2-digit",day:"2-digit"})),1),P("div",Zl,A(e.id),1)])]),P("span",{innerHTML:e.$t("results.ranking.explanation")},null,8,ea),P("div",ta,[(M(!0),Q(Le,null,Ne(e.sortedTools,(c,h)=>(M(),J(n,{style:so({transitionDelay:h*e.delay+"ms"}),class:ct([{show_tool:e.currentIndex>=h},"col-xl-2 col-lg-3 col-md-3 col-xs-12 col-sm-6 hide_tool"]),tool:c,size:"60px",key:c.id,ref_for:!0,ref:"itemRefs",onOpenDialog:e.openDialog},null,8,["style","class","tool","onOpenDialog"]))),128))]),P("div",oa,A(e.$t("results.ranking.graph")),1),D(ze,{class:"card q-my-md"},{default:z(()=>[D(_e,null,{default:z(()=>[D(gl,{flat:"",rows:e.sortedRows,columns:e.columns,"row-key":"name"},null,8,["rows","columns"])]),_:1})]),_:1}),D(s,{modelValue:e.showDialog,"onUpdate:modelValue":l[0]||(l[0]=c=>e.showDialog=c),answers:e.answers,tool:e.chosenTool,onShowPreviousTool:e.showPreviousTool,onShowNextTool:e.showNextTool,onShowTool:e.showTool},null,8,["modelValue","answers","tool","onShowPreviousTool","onShowNextTool","onShowTool"]),P("div",la,[D(G,{"no-caps":"",onClick:l[1]||(l[1]=c=>e.router.push({name:"index"})),label:"Doe de quiz opnieuw",rounded:"",push:"",color:"accent"})])])]),_:1})}var wa=Ie(Jl,[["render",aa]]);export{wa as default}; diff --git a/docs/assets/ToolQuestionItem.708210ee.js b/docs/assets/ToolQuestionItem.708210ee.js new file mode 100644 index 0000000..460c019 --- /dev/null +++ b/docs/assets/ToolQuestionItem.708210ee.js @@ -0,0 +1 @@ +import{_ as M,a as y,b as H,c as C,d as T,e as w,f as $,g as q,h as L,i as Q,j as z}from"./wandb_logo.127f2d59.js";import{a as I,r as O,f as c,_ as V,l as t,m as n,t as o,k as f,q as d,a7 as B,p as D,ab as i,F as h,ac as b,x as u,ad as S}from"./index.ab4869ca.js";import{Q as N}from"./format.43d1c739.js";import{Q as U}from"./QKnob.9e532b29.js";import{u as j}from"./answerStore.972bc172.js";import{u as F}from"./vue-i18n.db8d47ce.js";const A=I({name:"ToolQuestionItem",props:{tool:{type:Object},rank:{type:Number},size:{type:String},question:{type:Object},noHover:{type:Boolean,default:!1}},emits:["openDialog"],setup(e,{emit:s}){const{t:_}=F(),p=j(),m=O(!1),g=r=>new URL({"../assets/small/azureml_logo.png":M,"../assets/small/clearml_logo.png":y,"../assets/small/dagshub_logo.png":H,"../assets/small/databricks_logo.png":C,"../assets/small/datarobot_logo.png":T,"../assets/small/h2o_logo.png":w,"../assets/small/kubeflow_logo.png":$,"../assets/small/mlflow_logo.png":q,"../assets/small/sagemaker_logo.png":L,"../assets/small/vertex_logo.png":Q,"../assets/small/wandb_logo.png":z}[`../assets/small/${r}`],self.location).href,l=()=>{s("openDialog",e.tool)},a=()=>{window.open(e.tool.link,"_blank").focus()},v=c(()=>e.question?e.tool.matches.find(r=>r.id===e.question.id).matches:null),k=c(()=>e.question?e.tool.clashes.find(r=>r.id===e.question.id).matches:null);return{props:e,goTo:a,t:_,emit:s,currentMatches:v,currentClashes:k,answerStore:p,getImgUrl:g,openDialog:l,isHovered:m}}}),E={class:"cursor-pointer"},K=["src"],R={class:"text-h5 text-weight-bolder"},G={key:0},J=["innerHTML"],P=["innerHTML"],W={key:1},X=["innerHTML"],Y={key:2},Z=["innerHTML"],x=o("b",null," {$t('tool.matches_found'){}}",-1);function ee(e,s,_,p,m,g){return t(),n("div",null,[o("div",{class:S(["q-pa-md text-center circle",{enlarged:e.isHovered&!e.props.noHover}]),onMouseover:s[1]||(s[1]=l=>e.isHovered=!0),onMouseleave:s[2]||(s[2]=l=>e.isHovered=!1)},[o("div",E,[f(U,{onClick:e.openDialog,"show-value":"",modelValue:e.props.tool.percentage,"onUpdate:modelValue":s[0]||(s[0]=l=>e.props.tool.percentage=l),color:"positive",size:e.props.size,readonly:"","track-color":"negative"},{default:d(()=>[f(B,{square:""},{default:d(()=>[o("img",{src:e.getImgUrl(e.props.tool.img_link)},null,8,K)]),_:1}),e.props.question?(t(),D(N,{key:0,style:{height:"fit-content !important"},class:"card q-pa-lg"},{default:d(()=>[o("div",R,i(e.props.tool.title),1),e.currentClashes?(t(),n("div",G,[o("span",{innerHTML:e.$t("tool.clashes_found")},null,8,J),o("ul",null,[(t(!0),n(h,null,b(e.currentClashes,(l,a)=>(t(),n("li",{key:a},[o("div",{innerHTML:l.explanation},null,8,P)]))),128))])])):u("",!0),e.currentMatches?(t(),n("div",W,[o("span",{innerHTML:e.$t("tool.matches_found")},null,8,X),o("ul",null,[(t(!0),n(h,null,b(e.currentMatches,(l,a)=>(t(),n("li",{key:a},i(l.explanation),1))),128))])])):u("",!0),!e.currentMatches&&!e.currentClashes?(t(),n("div",Y,[o("span",{innerHTML:e.$t("tool.select_info")},null,8,Z)])):u("",!0),x,o("div",null," Clashes: "+i(e.props.tool.numberOfClaches?e.props.tool.numberOfClaches:0),1),o("div",null," Matches: "+i(e.props.tool.numberOfMatches?e.props.tool.numberOfMatches:0),1),o("div",null,"Score: "+i(e.props.tool.percentage.toFixed(0))+"%",1)]),_:1})):u("",!0)]),_:1},8,["onClick","modelValue","size"])])],34)])}var re=V(A,[["render",ee]]);export{re as T}; diff --git a/docs/assets/ToolQuestionItem.7d4396e6.js b/docs/assets/ToolQuestionItem.7d4396e6.js deleted file mode 100644 index 3b40562..0000000 --- a/docs/assets/ToolQuestionItem.7d4396e6.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as w,a as y,b as C,c as M,d as q,e as z,f as T,g as H,h as D,i as O,j as V}from"./wandb_logo.43daca0d.js";import{a as $,r as j,k as h,_ as N,o as l,M as n,g as s,f as v,w as g,T as Q,e as S,L as i,h as u,O as f,N as b,i as d,U as B}from"./index.0ed11181.js";import{Q as I,a as L}from"./QKnob.af0fb19d.js";import{u as U}from"./answerStore.1c70fbbb.js";const F=$({name:"ToolQuestionItem",props:{tool:{type:Object},rank:{type:Number},size:{type:String},question:{type:Object},noHover:{type:Boolean,default:!1}},emits:["openDialog"],setup(e,{emit:o}){const _=U(),p=j(!1),c=r=>new URL({"../assets/small/azureml_logo.png":w,"../assets/small/clearml_logo.png":y,"../assets/small/dagshub_logo.png":C,"../assets/small/databricks_logo.png":M,"../assets/small/datarobot_logo.png":q,"../assets/small/h2o_logo.png":z,"../assets/small/kubeflow_logo.png":T,"../assets/small/mlflow_logo.png":H,"../assets/small/sagemaker_logo.png":D,"../assets/small/vertex_logo.png":O,"../assets/small/wandb_logo.png":V}[`../assets/small/${r}`],self.location).href,m=()=>{o("openDialog",e.tool)},t=()=>{window.open(e.tool.link,"_blank").focus()},a=h(()=>e.question?e.tool.matches.find(r=>r.id===e.question.id).matches:null),k=h(()=>e.question?e.tool.clashes.find(r=>r.id===e.question.id).matches:null);return{props:e,goTo:t,emit:o,currentMatches:a,currentClashes:k,answerStore:_,getImgUrl:c,openDialog:m,isHovered:p}}}),A={class:"cursor-pointer"},E=["src"],K={class:"text-h5 text-weight-bolder"},R={key:0},G=s("span",{class:"text-negative text-weight-bold"},"clashes",-1),J=["innerHTML"],P={key:1},W=s("span",{class:"text-positive text-weight-bold"},"matches",-1),X={key:2},Y=s("b",null,[s("i",null,"Selecteer")],-1),Z=s("b",null," Tusssenstand",-1);function x(e,o,_,p,c,m){return l(),n("div",null,[s("div",{class:B(["q-pa-md text-center circle",{enlarged:e.isHovered&!e.props.noHover}]),onMouseover:o[1]||(o[1]=t=>e.isHovered=!0),onMouseleave:o[2]||(o[2]=t=>e.isHovered=!1)},[s("div",A,[v(L,{onClick:e.openDialog,"show-value":"",modelValue:e.props.tool.percentage,"onUpdate:modelValue":o[0]||(o[0]=t=>e.props.tool.percentage=t),color:"positive",size:e.props.size,readonly:"","track-color":"negative"},{default:g(()=>[v(Q,{square:""},{default:g(()=>[s("img",{src:e.getImgUrl(e.props.tool.img_link)},null,8,E)]),_:1}),e.props.question?(l(),S(I,{key:0,style:{height:"fit-content !important"},class:"card q-pa-lg"},{default:g(()=>[s("div",K,i(e.props.tool.title),1),e.currentClashes?(l(),n("div",R,[u(" De volgende "),G,u(" zijn gevonden: "),s("ul",null,[(l(!0),n(f,null,b(e.currentClashes,(t,a)=>(l(),n("li",{key:a},[s("div",{innerHTML:t.explanation},null,8,J)]))),128))])])):d("",!0),e.currentMatches?(l(),n("div",P,[u(" De volgende "),W,u(" zijn gevonden: "),s("ul",null,[(l(!0),n(f,null,b(e.currentMatches,(t,a)=>(l(),n("li",{key:a},i(t.explanation),1))),128))])])):d("",!0),!e.currentMatches&&!e.currentClashes?(l(),n("div",X,[Y,u(" een vraag om een beschrijving per tool te kunnen zien ")])):d("",!0),Z,s("div",null," Clashes: "+i(e.props.tool.numberOfClaches?e.props.tool.numberOfClaches:0),1),s("div",null," Matches: "+i(e.props.tool.numberOfMatches?e.props.tool.numberOfMatches:0),1),s("div",null,"Score: "+i(e.props.tool.percentage.toFixed(0))+"%",1)]),_:1})):d("",!0)]),_:1},8,["onClick","modelValue","size"])])],34)])}var le=N(F,[["render",x]]);export{le as T}; diff --git a/docs/assets/ToolsMakerPage.b9f90735.js b/docs/assets/ToolsMakerPage.b9f90735.js new file mode 100644 index 0000000..78e330b --- /dev/null +++ b/docs/assets/ToolsMakerPage.b9f90735.js @@ -0,0 +1 @@ +import{_ as N}from"./lg_saxion_wit.4b1b1f5e.js";import{u as T,_ as C,a as O,b as $,c as B}from"./answerStore.972bc172.js";import{_ as j,a as E,b as G,c as I,d as P,e as z,f as F,g as L,h as M,i as R,j as A}from"./wandb_logo.5799faed.js";import{_ as D,a as H,b as K,c as W,d as X,e as Y,f as Z,g as ee,h as oe,i as ae,j as le}from"./wandb_logo.127f2d59.js";import{Q as m}from"./QInput.3944fa04.js";import{_ as se,a as te,u as ne,r as _e,f as de,l as r,p as S,q as d,m as b,ac as w,F as k,t as u,k as t,aw as V,v as q,ab as h}from"./index.ab4869ca.js";import{a as U,Q as v}from"./QCard.eb99e114.js";import{Q as ie}from"./QChip.f74b9a82.js";import{Q as re}from"./QPage.d12e44a1.js";import{u as ge}from"./index.esm.f0b860bb.js";import"./use-key-composition.7c536e3b.js";var pe="./assets/lg_saxion_rgb.e67a2693.png",ue="./assets/quasar-logo-vertical.55e9c854.svg";const ce=te({name:"ToolsMakerPage",setup(){const i=ge,g=ne(),f=T(),y=a=>new URL({"../assets/lg_saxion_rgb.png":pe,"../assets/lg_saxion_wit.png":N,"../assets/quasar-logo-vertical.svg":ue,"../assets/questions.en.json":C,"../assets/questions.nl.json":O,"../assets/tools.en.json":$,"../assets/tools.nl.json":B,"../assets/large/azureml_logo.png":j,"../assets/large/clearml_logo.png":E,"../assets/large/dagshub_logo.png":G,"../assets/large/databricks_logo.png":I,"../assets/large/datarobot_logo.png":P,"../assets/large/h2o_logo.png":z,"../assets/large/kubeflow_logo.png":F,"../assets/large/mlflow_logo.png":L,"../assets/large/sagemaker_logo.png":M,"../assets/large/vertex_logo.png":R,"../assets/large/wandb_logo.png":A,"../assets/small/azureml_logo.png":D,"../assets/small/clearml_logo.png":H,"../assets/small/dagshub_logo.png":K,"../assets/small/databricks_logo.png":W,"../assets/small/datarobot_logo.png":X,"../assets/small/h2o_logo.png":Y,"../assets/small/kubeflow_logo.png":Z,"../assets/small/mlflow_logo.png":ee,"../assets/small/sagemaker_logo.png":oe,"../assets/small/vertex_logo.png":ae,"../assets/small/wandb_logo.png":le}[`../assets/${a}`],self.location).href;let p=_e(JSON.parse(JSON.stringify(f.tools)));const x=de(()=>{let a=p.value,n=JSON.parse(JSON.stringify(f.questions));return a.forEach(s=>{console.log("tool",s),n.forEach(e=>{e.answers.forEach(_=>{let J=s.bad_compatible.find(c=>_.id===c.answer_id&&e.id===c.question);s.good_compatible.find(c=>_.id===c.answer_id&&e.id===c.question)||s.good_compatible.push({question_id:e.id,answer_id:_.id,explanation:""}),J||s.bad_compatible.push({question_id:e.id,answer_id:_.id,explanation:""})})})}),a});return{router:g,copyJson:async()=>{const a=JSON.parse(JSON.stringify(x.value));a.forEach(n=>{n.good_compatible=n.good_compatible.filter(s=>s.explanation!==""&&s.explanation!==null),n.bad_compatible=n.bad_compatible.filter(s=>s.explanation!==""&&s.explanation!==null)}),await navigator.clipboard.writeText(JSON.stringify({tools:a}))},removeTool:a=>{const n=p.value.findIndex(s=>s.id===a);n>-1&&p.value.splice(n,1)},addTool:()=>{p.value.push({id:i.v4(),title:"temp",description:"temp",link:"https://cloud.google.com/vertex-ai?hl=nl",img_link:"vertex_logo.png",bad_compatible:[],good_compatible:[]})},tools:x,ts:p,getImgUrl:y,answerStore:f}}}),me={class:"text-h5 text-weight-bolder row"},be={class:"col-4"},fe={class:"row q-col-gutter-sm"},ve={class:"col-2 text-center"},xe={class:"col-12"};function we(i,g,f,y,p,x){return r(),S(re,{class:"flex flex-center row q-col-gutter-sm"},{default:d(()=>[(r(!0),b(k,null,w(i.tools,l=>(r(),b("div",{key:l.id,class:"col-10"},[u("div",me,[t(m,{filled:"",rounded:"",modelValue:l.title,"onUpdate:modelValue":o=>l.title=o,label:"Tool name",class:"col-8"},null,8,["modelValue","onUpdate:modelValue"]),u("div",be,[t(V,{color:"negative",dense:"",round:"",flat:"",class:"float-right",icon:"delete",onClick:o=>i.removeTool(l.id)},null,8,["onClick"])])]),u("div",null,[t(U,{class:"q-mb-sm questioncard"},{default:d(()=>[t(v,null,{default:d(()=>[t(m,{label:"description",modelValue:l.description,"onUpdate:modelValue":o=>l.description=o,clearable:"",rounded:"",outlined:"",autogrow:""},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),t(v,null,{default:d(()=>[t(m,{label:"link",modelValue:l.link,"onUpdate:modelValue":o=>l.link=o,clearable:"",rounded:"",outlined:"",autogrow:""},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)]),_:2},1024)]),u("div",fe,[(r(!0),b(k,null,w(i.answerStore.questions,(o,Q)=>(r(),b("div",{key:o.id,class:"col-12"},[t(U,{class:"card"},{default:d(()=>[t(v,{class:"text-center text-h6"},{default:d(()=>[t(ie,{color:"primary text-white"},{default:d(()=>[q(h(Q+1),1)]),_:2},1024),q(h(o.question_text),1)]),_:2},1024),(r(!0),b(k,null,w(o.answers,a=>(r(),S(v,{key:a.id,class:"row col-12"},{default:d(()=>{var n,s;return[t(m,{class:"col-5",clearable:"",rounded:"",outlined:"",autogrow:"",disable:((n=l.good_compatible.find(e=>e.question_id===o.id&&e.answer_id===a.id).explanation)==null?void 0:n.length)>0,label:"Bad match",modelValue:l.bad_compatible.find(e=>e.question_id===o.id&&e.answer_id===a.id).explanation,"onUpdate:modelValue":e=>l.bad_compatible.find(_=>_.question_id===o.id&&_.answer_id===a.id).explanation=e},null,8,["disable","modelValue","onUpdate:modelValue"]),u("div",ve,h(a.answer_text),1),t(m,{class:"col-5",clearable:"",rounded:"",outlined:"",autogrow:"",label:"Good match",modelValue:l.good_compatible.find(e=>e.question_id===o.id&&e.answer_id===a.id).explanation,"onUpdate:modelValue":e=>l.good_compatible.find(_=>_.question_id===o.id&&_.answer_id===a.id).explanation=e,disable:((s=l.bad_compatible.find(e=>e.question_id===o.id&&e.answer_id===a.id).explanation)==null?void 0:s.length)>0},null,8,["modelValue","onUpdate:modelValue","disable"])]}),_:2},1024))),128))]),_:2},1024)]))),128))]),t(V,{class:"q-ma-sm",rounded:"",color:"primary","no-caps":"",label:"Copy all JSON",onClick:g[0]||(g[0]=o=>i.copyJson())})]))),128)),u("div",xe,[t(V,{rounded:"",color:"primary","no-caps":"",label:"add new tool",onClick:g[1]||(g[1]=l=>i.addTool())})])]),_:1})}var Oe=se(ce,[["render",we]]);export{Oe as default}; diff --git a/docs/assets/ToolsMakerPage.f7488164.js b/docs/assets/ToolsMakerPage.f7488164.js deleted file mode 100644 index 7466646..0000000 --- a/docs/assets/ToolsMakerPage.f7488164.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as J}from"./lg_saxion_wit.4b1b1f5e.js";import{q as T,t as C}from"./tools.2a9c17e9.js";import{_ as O,a as $,b as B,c as E,d as j,e as G,f as I,g as L,h as M,i as P,j as z,Q as R}from"./wandb_logo.549270dc.js";import{_ as A,a as D,b as F,c as H,d as K,e as W,f as X,g as Y,h as Z,i as ee,j as oe}from"./wandb_logo.43daca0d.js";import{Q as m}from"./QInput.c63abfb0.js";import{_ as ae,a as le,u as se,r as te,k as ne,o as r,e as S,w as i,M as b,N as w,O as k,g as u,f as t,Q as V,h as q,L as h}from"./index.0ed11181.js";import{a as N,Q as v}from"./use-form.ff3f77cb.js";import{Q as de}from"./QPage.9c21063d.js";import{u as ie}from"./answerStore.1c70fbbb.js";import{u as _e}from"./index.esm.f0b860bb.js";import"./use-key-composition.deb261a7.js";var re="./assets/lg_saxion_rgb.e67a2693.png",ge="./assets/quasar-logo-vertical.55e9c854.svg";const pe=le({name:"ToolsMakerPage",setup(){const _=_e,g=se(),f=ie(),y=a=>new URL({"../assets/lg_saxion_rgb.png":re,"../assets/lg_saxion_wit.png":J,"../assets/quasar-logo-vertical.svg":ge,"../assets/questions.json":T,"../assets/tools.json":C,"../assets/large/azureml_logo.png":O,"../assets/large/clearml_logo.png":$,"../assets/large/dagshub_logo.png":B,"../assets/large/databricks_logo.png":E,"../assets/large/datarobot_logo.png":j,"../assets/large/h2o_logo.png":G,"../assets/large/kubeflow_logo.png":I,"../assets/large/mlflow_logo.png":L,"../assets/large/sagemaker_logo.png":M,"../assets/large/vertex_logo.png":P,"../assets/large/wandb_logo.png":z,"../assets/small/azureml_logo.png":A,"../assets/small/clearml_logo.png":D,"../assets/small/dagshub_logo.png":F,"../assets/small/databricks_logo.png":H,"../assets/small/datarobot_logo.png":K,"../assets/small/h2o_logo.png":W,"../assets/small/kubeflow_logo.png":X,"../assets/small/mlflow_logo.png":Y,"../assets/small/sagemaker_logo.png":Z,"../assets/small/vertex_logo.png":ee,"../assets/small/wandb_logo.png":oe}[`../assets/${a}`],self.location).href;let p=te(JSON.parse(JSON.stringify(f.tools)));const x=ne(()=>{let a=p.value,n=JSON.parse(JSON.stringify(f.questions));return a.forEach(s=>{console.log("tool",s),n.forEach(e=>{e.answers.forEach(d=>{let U=s.bad_compatible.find(c=>d.id===c.answer_id&&e.id===c.question);s.good_compatible.find(c=>d.id===c.answer_id&&e.id===c.question)||s.good_compatible.push({question_id:e.id,answer_id:d.id,explanation:""}),U||s.bad_compatible.push({question_id:e.id,answer_id:d.id,explanation:""})})})}),a});return{router:g,copyJson:async()=>{const a=JSON.parse(JSON.stringify(x.value));a.forEach(n=>{n.good_compatible=n.good_compatible.filter(s=>s.explanation!==""&&s.explanation!==null),n.bad_compatible=n.bad_compatible.filter(s=>s.explanation!==""&&s.explanation!==null)}),await navigator.clipboard.writeText(JSON.stringify({tools:a}))},removeTool:a=>{const n=p.value.findIndex(s=>s.id===a);n>-1&&p.value.splice(n,1)},addTool:()=>{p.value.push({id:_.v4(),title:"temp",description:"temp",link:"https://cloud.google.com/vertex-ai?hl=nl",img_link:"vertex_logo.png",bad_compatible:[],good_compatible:[]})},tools:x,ts:p,getImgUrl:y,answerStore:f}}}),ue={class:"text-h5 text-weight-bolder row"},ce={class:"col-4"},me={class:"row q-col-gutter-sm"},be={class:"col-2 text-center"},fe={class:"col-12"};function ve(_,g,f,y,p,x){return r(),S(de,{class:"flex flex-center row q-col-gutter-sm"},{default:i(()=>[(r(!0),b(k,null,w(_.tools,l=>(r(),b("div",{key:l.id,class:"col-10"},[u("div",ue,[t(m,{filled:"",rounded:"",modelValue:l.title,"onUpdate:modelValue":o=>l.title=o,label:"Tool name",class:"col-8"},null,8,["modelValue","onUpdate:modelValue"]),u("div",ce,[t(V,{color:"negative",dense:"",round:"",flat:"",class:"float-right",icon:"delete",onClick:o=>_.removeTool(l.id)},null,8,["onClick"])])]),u("div",null,[t(N,{class:"q-mb-sm questioncard"},{default:i(()=>[t(v,null,{default:i(()=>[t(m,{label:"description",modelValue:l.description,"onUpdate:modelValue":o=>l.description=o,clearable:"",rounded:"",outlined:"",autogrow:""},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),t(v,null,{default:i(()=>[t(m,{label:"link",modelValue:l.link,"onUpdate:modelValue":o=>l.link=o,clearable:"",rounded:"",outlined:"",autogrow:""},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)]),_:2},1024)]),u("div",me,[(r(!0),b(k,null,w(_.answerStore.questions,(o,Q)=>(r(),b("div",{key:o.id,class:"col-12"},[t(N,{class:"card"},{default:i(()=>[t(v,{class:"text-center text-h6"},{default:i(()=>[t(R,{color:"primary text-white"},{default:i(()=>[q(h(Q+1),1)]),_:2},1024),q(h(o.question_text),1)]),_:2},1024),(r(!0),b(k,null,w(o.answers,a=>(r(),S(v,{key:a.id,class:"row col-12"},{default:i(()=>{var n,s;return[t(m,{class:"col-5",clearable:"",rounded:"",outlined:"",autogrow:"",disable:((n=l.good_compatible.find(e=>e.question_id===o.id&&e.answer_id===a.id).explanation)==null?void 0:n.length)>0,label:"Bad match",modelValue:l.bad_compatible.find(e=>e.question_id===o.id&&e.answer_id===a.id).explanation,"onUpdate:modelValue":e=>l.bad_compatible.find(d=>d.question_id===o.id&&d.answer_id===a.id).explanation=e},null,8,["disable","modelValue","onUpdate:modelValue"]),u("div",be,h(a.answer_text),1),t(m,{class:"col-5",clearable:"",rounded:"",outlined:"",autogrow:"",label:"Good match",modelValue:l.good_compatible.find(e=>e.question_id===o.id&&e.answer_id===a.id).explanation,"onUpdate:modelValue":e=>l.good_compatible.find(d=>d.question_id===o.id&&d.answer_id===a.id).explanation=e,disable:((s=l.bad_compatible.find(e=>e.question_id===o.id&&e.answer_id===a.id).explanation)==null?void 0:s.length)>0},null,8,["modelValue","onUpdate:modelValue","disable"])]}),_:2},1024))),128))]),_:2},1024)]))),128))]),t(V,{class:"q-ma-sm",rounded:"",color:"primary","no-caps":"",label:"Copy all JSON",onClick:g[0]||(g[0]=o=>_.copyJson())})]))),128)),u("div",fe,[t(V,{rounded:"",color:"primary","no-caps":"",label:"add new tool",onClick:g[1]||(g[1]=l=>_.addTool())})])]),_:1})}var Te=ae(pe,[["render",ve]]);export{Te as default}; diff --git a/docs/assets/answerStore.1c70fbbb.js b/docs/assets/answerStore.1c70fbbb.js deleted file mode 100644 index e09e057..0000000 --- a/docs/assets/answerStore.1c70fbbb.js +++ /dev/null @@ -1 +0,0 @@ -import{d as s}from"./index.0ed11181.js";const t=s("answer",{state:()=>({results:[],selectedAnswers:[],answers:[],questions:[],tools:[]}),persist:!0,getters:{},actions:{resetQuiz(){this.selectedAnswers=[],this.answers=[]}}});export{t as u}; diff --git a/docs/assets/answerStore.972bc172.js b/docs/assets/answerStore.972bc172.js new file mode 100644 index 0000000..75b49a1 --- /dev/null +++ b/docs/assets/answerStore.972bc172.js @@ -0,0 +1,39 @@ +import{d as a}from"./index.ab4869ca.js";const n=[{id:"963aaa51-8a46-4d213e-9808-d25ea810560c",title:"Databricks",description:"Databricks is een krachtig en ge\xEFntegreerd analytics-platform dat is gebouwd bovenop Apache Spark. Het biedt een gebruiksvriendelijke interface voor het uitvoeren van data-engineering, data science, en machine learning-taken. Databricks maakt het eenvoudig om grote hoeveelheden data te verwerken, te analyseren en inzichten te verkrijgen door middel van samenwerking, geavanceerde visualisaties en de mogelijkheid om verschillende programmeertalen te gebruiken, zoals Python, Scala, SQL en R. Het platform wordt vaak gebruikt voor real-time data-analyse, het bouwen van data pipelines en het versnellen van de ontwikkeling van machine learning-modellen.",link:"https://www.databricks.com/",img_link:"databricks_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"Databricks is goed in het visualiseren van data vanwege de naadloze integratie met populaire data-analysetools zoals Apache Spark en SQL. Het platform biedt gebruikers de mogelijkheid om krachtige grafieken en visualisaties te maken met behulp van tools zoals Matplotlib, Seaborn en Databricks' eigen visualisatiebibliotheek. Met de ondersteuning van verschillende programmeertalen zoals Python, Scala en R, kunnen gebruikers complexe analyses uitvoeren en deze gemakkelijk visualiseren voor beter inzicht en interpretatie van gegevens."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"e3e1cc59-5923-483a-94e7-986c96b757e0",explanation:'"Databricks wordt gehost op cloudplatforms zoals Amazon Web Services (AWS), Microsoft Azure en Google Cloud Platform (GCP)'},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"6b3b3542-9081-48c6-8e45-2e0556b25f67",explanation:'"Databricks wordt gehost op cloudplatforms zoals Amazon Web Services (AWS), Microsoft Azure en Google Cloud Platform (GCP)'},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"2ae2f467-4e22-47ba-9e0f-0d46a62c4f46",explanation:'"Databricks wordt gehost op cloudplatforms zoals Amazon Web Services (AWS), Microsoft Azure en Google Cloud Platform (GCP)'},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Databricks excelleert in ETL vanwege zijn schaalbaarheid met Apache Spark, ge\xEFntegreerde omgeving voor diverse databronnen, diverse datatransformatiemogelijkheden, automatisering en ondersteuning voor zowel batch- als streamingverwerking van gegevens."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Databricks excelleert in MLOps vanwege zijn ge\xEFntegreerde platform, schaalbaarheid, geavanceerde machine learning-mogelijkheden, automatisering en orkestratiefunctionaliteiten, en geavanceerde monitoring en beheermogelijkheden."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Wanneer u al gebruikt maakt van Databricks raden wij u aan om de functionaliteiten die al geimplementeerd zijn in databricks te gebruiken. Databricks is een volledig pakket en biedt out-of-the-box een groot scala aan functionaliteit omtremt MLops, DataOps, visualisatie en orkestratie."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:'Databricks kan gehost worden op AWS. U kunt gebruik blijven maken van alle functies die AWS u biedt en gemakkelijk Databricks aan uw huidige workflow toevoegen. Installatie en gebruik is makkelijk zie: link. '},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:`Databricks kan gehost worden op AZURE. U kunt gebruik blijven maken van alle functies die azure u biedt en gemakkelijk Databricks aan uw huidige workflow toevoegen. Installatie en gebruik is makkelijk zie: + link. `},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:`Databricks kan gehost worden op GCP. U kunt gebruik blijven maken van alle functies die GCP u biedt en gemakkelijk Databricks aan uw huidige workflow toevoegen. Installatie en gebruik is makkelijk zie: link. +`},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Databricks excelleert in DataOps vanwege zijn ge\xEFntegreerde platform, dat schaalbaarheid, automatisering, samenwerking en geavanceerde mogelijkheden voor data-engineering combineert, waardoor organisaties effectiever kunnen werken aan het beheren, transformeren en analyseren van data."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Databricks excelleert in business intelligence door zijn ge\xEFntegreerde platform dat geavanceerde data-analyse, visualisatie en rapportage mogelijk maakt, terwijl het ook schaalbaarheid, snelheid en samenwerking biedt, waardoor organisaties sneller inzichten kunnen genereren en betere beslissingen kunnen nemen op basis van hun data."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Databricks is niet open-source; het is een commercieel platform met gesloten broncode."},{question_id:"8aadcd11-ca15-4c09-b2d2-3159a318118b",answer_id:"735d232e-e287-4732-9728-d00c324343be",explanation:"Databricks beschikt over de mogelijkheid om taken te orchistreren via Airflow. Hierdoor heeft u minder nieuwe kennis nodig om Databricks toe te passen."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"De MLflow-variant van Databricks biedt u een intu\xEFtief overzicht van uw experimenten, en dankzij de toevoegingen van Databricks beschikt u over tal van extra functionaliteiten die niet beschikbaar zijn in de standaard open source variant."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'Dankzij Lakehouse monitoring is het nu mogelijk om model drift te detecteren. Voor meer informatie, zie: deze link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'De MLflow-variant van Databricks is verrijkt met extra functionaliteiten die specifiek zijn ontworpen voor LLMOps. Raadpleeg deze link voor meer details.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Met de krachtige combinatie van Apache Airflow en MLflow kunt u moeiteloos pipelines orkestreren, waardoor een naadloze en ge\xEFntegreerde workflow ontstaat voor het beheren van machine learning-experimenten en taken."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:'Dankzij Databricks AutoML kunnen machine learning modellen eenvoudig getraind en geselecteerd worden met slechts \xE9\xE9n druk op de knop. Voor meer informatie, zie: deze link.'},{question_id:"563dcdf3-985d-4e1b-b5c7-b7b24d2330a2",answer_id:"26449ee9-91a7-412e-ae0f-e43aaa744659",explanation:"Dankzij de robuuste Spark-integratie en ETL-mogelijkheden van Databricks is het real-time verwerken en weergeven van gegevens naadloos mogelijk."},{question_id:"563dcdf3-985d-4e1b-b5c7-b7b24d2330a2",answer_id:"76bf60df-0e36-4013-aa63-c11fd5a38eaa",explanation:"Door middel van orkestratie kunnen eenvoudig batchtaken worden ingesteld en uitgevoerd, waardoor het bijvoorbeeld moeiteloos is om een machine learning-model opnieuw te trainen en te publiceren."},{question_id:"563dcdf3-985d-4e1b-b5c7-b7b24d2330a2",answer_id:"1241c1e4-b038-42f1-be01-06f45bbb2179",explanation:"Databricks maakt gebruik van een aangepaste variant van MLflow met tal van extra functionaliteiten. Dit maakt Databricks een ideaal dataplatform voor een volledige end-to-end gegevensworkflow."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Databricks is ontworpen om te draaien op cloudinfrastructuur vanwege de complexe vereisten van schaalbaarheid, rekenkracht en opslag die nodig zijn voor het verwerken en analyseren van grote hoeveelheden gegevens. Het maakt gebruik van de cloud om flexibiliteit, resources en gemakkelijke toegang tot verschillende databronnen te bieden, waardoor het niet on-premise kan worden uitgevoerd."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'Het annoteren van data via Databricks is niet direct mogelijk. Voor data-annotatie wordt aanbevolen om gebruik te maken van externe tools, zoals Labelbox. Raadpleeg deze link voor meer details.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'Het annoteren van data via Databricks is niet direct mogelijk. Voor data-annotatie wordt aanbevolen om gebruik te maken van externe tools, zoals Labelbox. Raadpleeg deze link voor meer details.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Wanneer uw bedrijf nog niet actief is op een cloud platform is Databricks een goeie keuze om in gedachte te nemen. Het is een groot en compleet platform en biedt functionaliteiten voor MLOps maar ook voor het verwerken van grootschalige data."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'Dankzij de datalake van Databricks genaamd delta lake is het mogelijk om data drift te detecteren. Voor meer informatie, zie: deze link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Het publiceren en in gebruik nemen van machine learning modellen is mogelijk door het gebruiken van de MLflow model registry."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Databricks biedt geavanceerde samenwerkingsfuncties zoals real-time samenwerking in notebooks, gedeelde libraries en versiebeheer, waardoor teams effici\xEBnt kunnen samenwerken aan analyses en machine learning modellen. Role-Based Access Control (RBAC) is mogelijk in Databricks, waardoor gebruikersrechten kunnen worden beheerd op basis van rollen en verantwoordelijkheden. Databricks is geschikt voor teams van 5 of meer personen, waarbij de samenwerkingsfuncties optimaal kunnen worden benut, maar kan ook worden gebruikt door individuele gebruikers voor kleinere projecten."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Databricks biedt geavanceerde samenwerkingsfuncties zoals real-time samenwerking in notebooks, gedeelde libraries en versiebeheer, waardoor teams effici\xEBnt kunnen samenwerken aan analyses en machine learning modellen. Role-Based Access Control (RBAC) is mogelijk in Databricks, waardoor gebruikersrechten kunnen worden beheerd op basis van rollen en verantwoordelijkheden. Databricks is geschikt voor teams van 5 of meer personen, waarbij de samenwerkingsfuncties optimaal kunnen worden benut, maar kan ook worden gebruikt door individuele gebruikers voor kleinere projecten."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Databricks biedt geavanceerde samenwerkingsfuncties zoals real-time samenwerking in notebooks, gedeelde libraries en versiebeheer, waardoor teams effici\xEBnt kunnen samenwerken aan analyses en machine learning modellen. Role-Based Access Control (RBAC) is mogelijk in Databricks, waardoor gebruikersrechten kunnen worden beheerd op basis van rollen en verantwoordelijkheden. Databricks is geschikt voor teams van 5 of meer personen, waarbij de samenwerkingsfuncties optimaal kunnen worden benut, maar kan ook worden gebruikt door individuele gebruikers voor kleinere projecten."}],bad_compatible:[{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Databricks is niet open-source; het is een commercieel platform met gesloten broncode."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Databricks is ontworpen om te draaien op cloudinfrastructuur vanwege de complexe vereisten van schaalbaarheid, rekenkracht en opslag die nodig zijn voor het verwerken en analyseren van grote hoeveelheden gegevens. Het maakt gebruik van de cloud om flexibiliteit, resources en gemakkelijke toegang tot verschillende databronnen te bieden, waardoor het niet on-premise kan worden uitgevoerd."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Wanneer u zelf of via een provider kubernetes host, kan Databricks niet makkelijk aan uw huidige systeem toegevoegd worden. Wel kunt u Databricks hosten via Databricks, AWS, Azure of GCP en dat verbinden met uw Kubernetes oplossing."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Wanneer u niet van AWS, Azure of GCP gebruik maakt kan Databricks niet makkelijk aan u huidige systeem toegevoegd worden. Wel kunt u Databricks hosten via Databricks, AWS, Azure of GCP en dat verbinden met uw huidige oplossing."},{question_id:"8aadcd11-ca15-4c09-b2d2-3159a318118b",answer_id:"cb13fb65-7db4-4d52-b67f-39e885d023d4",explanation:"Wanneer u al van een datalake of warehouse oplossing gebruik maakt zal Databricks een overbodig pakket als functies bevatten zoals ETL en DataOps"},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:'Automatisch de optimale hyperparameters vinden is niet standaard ingebouwd in Databricks, maar het is vrij eenvoudig om dit te implementeren via code. Raadpleeg deze link voor gedetailleerde instructies.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'Het annoteren van data via Databricks is niet direct mogelijk. Voor data-annotatie wordt aanbevolen om gebruik te maken van externe tools, zoals Labelbox. Raadpleeg deze link voor meer details.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"Standaard ondersteunt Databricks geen data versioning, maar het is aanzienlijk eenvoudig om DVC te installeren en te integreren in de Databricks workflow voor effectieve data versioning."}]},{id:"963aaa51-8a46-4d4e-9808-d25ea81053210c",title:"Sagemaker",description:"Amazon SageMaker is een krachtig en volledig beheerd machine learning-platform dat wordt aangeboden door Amazon Web Services (AWS). Het stelt gebruikers in staat om gemakkelijk machine learning-modellen te bouwen, te trainen en te implementeren op schaal. SageMaker biedt een ge\xEFntegreerde ontwikkelomgeving met ingebouwde tools voor data labeling, modeltraining en modeldeployment, waardoor het proces van het ontwikkelen van machine learning-toepassingen vereenvoudigd wordt. Met SageMaker kunnen gebruikers verschillende algoritmen en frameworks gebruiken, zoals TensorFlow, PyTorch en Scikit-learn, en profiteren van schaalbare computingresources om snel en effici\xEBnt modellen te trainen. Bovendien maakt SageMaker het mogelijk om modellen gemakkelijk in productie te brengen met beheerde endpoints, waardoor ze naadloos kunnen worden ge\xEFntegreerd in operationele systemen en toepassingen.",link:"https://aws.amazon.com/sagemaker/",img_link:"sagemaker_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Hoewel ETL niet rechtstreeks mogelijk is in Amazon SageMaker, kunt u gebruikmaken van AWS-functies om ETL-taken uit te voeren, aangezien SageMaker een integraal onderdeel is van het AWS-ecosysteem."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS. SageMaker is gebouwd en geoptimaliseerd om te werken binnen het AWS-ecosysteem, waarbij gebruik wordt gemaakt van de AWS-infrastructuur, -services en API's. Het is nauw ge\xEFntegreerd met AWS-services zoals S3, IAM en andere."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"SageMaker vormt de kern van AWS' MLOps-aanbod en voorziet in alle essenti\xEBle functionaliteiten die nodig zijn voor het vlot en schaalbaar beheren van machine learning-processen. Met ge\xEFntegreerde tools en services biedt SageMaker ondersteuning bij diverse fasen van het end-to-end machine learning-traject, zoals datasetbeheer, modeltraining, hyperparameteroptimalisatie, implementatie en monitoring. Het dient als een krachtige oplossing binnen het brede spectrum van AWS-services. "},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"DataOps is niet direct mogelijk in Amazon SageMaker, maar aangezien SageMaker deel uitmaakt van AWS, kunt u gebruikmaken van AWS-functionaliteiten om DataOps-taken uit te voeren."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Directe visualisatie en inzicht in gegevens zijn niet ingebouwd in Amazon SageMaker. U zou echter gebruik kunnen maken van diverse AWS-functies om deze taken uit te voeren, aangezien SageMaker deel uitmaakt van het brede AWS-ecosysteem."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Het is mogelijk om met SageMaker ongelabelde data of foto's op een gestructureerde wijze te annoteren. Zie: link `},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"SageMaker beschikt over eigen functionaliteit voor het beheren en uitvoeren van experimenten, genaamd SageMaker Experiments. Bovendien biedt het de flexibiliteit om te integreren met MLflow, mocht dat de voorkeur hebben."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'SageMaker biedt functionaliteit voor het detecteren van datadrift. Meer informatie hierover is beschikbaar op: deze link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'SageMaker biedt functionaliteit voor het detecteren van model drift. Meer informatie hierover is beschikbaar op: deze link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'SageMaker biedt specifieke tools voor Large Language Model (LLM) operations. Voor meer gedetailleerde informatie over het operationeel maken van LLM-evaluatie op schaal met Amazon SageMaker Clarify en MLOps-services, kunt u de volgende link raadplegen link'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Het is mogelijk om met Sagemaker geavanceerde pipelines te orkestreren. Sagemaker is verbonden met het AWS ecosysteem wat het mogelijk maakt om state-of-the-art pipeline te cre\xEBren voor zowel uw data als machine learning vraagstukken,"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Met SageMaker is het mogelijk om met slechts \xE9\xE9n druk op de knop meerdere machine learning modellen te trainen. Deze functionaliteit maakt het effici\xEBnt en eenvoudig om diverse modellen te ontwikkelen en te vergelijken"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Het is niet mogelijk om een AWS- of SageMaker-instantie on-premise te draaien. Het is belangrijk om goed na te denken over de lokale capaciteiten, aangezien het schalen van instanties on-premise vaak uitdagender is en machine learning doorgaans aanzienlijke resources vereist."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS en is dus niet opensource of gratis."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Het is mogelijk om met SageMaker ongelabelde data of foto's op een gestructureerde wijze te annoteren. Zie: link `},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Het is mogelijk om met SageMaker ongelabelde data of foto's op een gestructureerde wijze te annoteren. Zie: link `},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS),. SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS. Het AWS ecosysteem is een goeie keuze om in gedachte te nemen als u nog niet gebruik maakt van een data platform aangezien het een gigantisch aantal functionaliteiten aanbied voor al uw data en machine learning vraagstukken."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Met SageMaker is het makkelijk om een een model te publiceren, computer kracht te geven en in gebruik te nemen."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Amazon SageMaker biedt functionaliteiten zoals het delen van notebooks, model artifacts en datasets, wat samenwerking binnen teams bevordert door het gemakkelijk maken om code en resultaten te delen. Echter, het mist native ondersteuning voor real-time samenwerking aan dezelfde notebook of documenten, wat de samenwerking van een team kan bemoeilijken. Role-Based Access Control (RBAC) is mogelijk in SageMaker, waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers binnen het platform. Gezien deze mogelijkheden zou SageMaker geschikt zijn voor teams van 5 of meer personen."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Amazon SageMaker biedt functionaliteiten zoals het delen van notebooks, model artifacts en datasets, wat samenwerking binnen teams bevordert door het gemakkelijk maken om code en resultaten te delen. Echter, het mist native ondersteuning voor real-time samenwerking aan dezelfde notebook of documenten, wat de samenwerking van een team kan bemoeilijken. Role-Based Access Control (RBAC) is mogelijk in SageMaker, waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers binnen het platform. Gezien deze mogelijkheden zou SageMaker geschikt zijn voor teams van 5 of meer personen."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Amazon SageMaker biedt functionaliteiten zoals het delen van notebooks, model artifacts en datasets, wat samenwerking binnen teams bevordert door het gemakkelijk maken om code en resultaten te delen. Echter, het mist native ondersteuning voor real-time samenwerking aan dezelfde notebook of documenten, wat de samenwerking van een team kan bemoeilijken. Role-Based Access Control (RBAC) is mogelijk in SageMaker, waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers binnen het platform. Gezien deze mogelijkheden zou SageMaker geschikt zijn voor teams van 5 of meer personen."}],bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), terwijl Databricks een cloud computing-platform is dat wordt aangeboden door Databricks . SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), terwijl Azure een cloud computing-platform is dat wordt aangeboden door Microsoft. SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), terwijl GCP een cloud computing-platform is dat wordt aangeboden door Google. SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS),. SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS). SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Het is niet mogelijk om een AWS- of SageMaker-instantie on-premise te gebruiken. Het is belangrijk om goed na te denken over de lokale capaciteiten, aangezien het schalen van instanties on-premise vaak uitdagender is en machine learning doorgaans aanzienlijke resources vereist."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS en is dus niet opensource of gratis."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Out-of-the-box ondersteunt SageMaker geen data versioning, maar u kunt dit zelf implementeren. Raadpleeg de volgende link voor meer informatie over het implementeren van data versioning in combinatie met SageMaker: link. '},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Standaard biedt SageMaker geen ingebouwde mogelijkheid om automatisch de optimale hyperparameters te vinden. U dient dit zelf te implementeren door bijvoorbeeld hyperparameter tuning-scripts te schrijven en te gebruiken."}],match:{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"Het is mogelijk om met Sagemaker ongelabelde data of fotos te annoterern. Zie: https://docs.aws.amazon.com/sagemaker/latest/dg/sms.html"}},{id:"963abb12-8a46-4d4e-9808-d25ea810560c",title:"Azure ML",description:"Azure Machine Learning (Azure ML) is een uitgebreid cloudgebaseerd platform van Microsoft voor het bouwen, trainen en implementeren van machine learning-modellen. Het biedt een reeks tools en services die ontwikkelaars en datawetenschappers ondersteunen bij het cre\xEBren van geavanceerde oplossingen voor data-analyse en AI. Met Azure ML kunnen gebruikers eenvoudig experimenten uitvoeren, modellen bouwen met populaire frameworks zoals TensorFlow, PyTorch, en scikit-learn, en deze modellen opschalen met behulp van krachtige rekenbronnen in de cloud. Het platform biedt functionaliteiten voor geautomatiseerde machine learning (AutoML) die het proces van modelselectie, -training en -implementatie vereenvoudigen voor gebruikers zonder uitgebreide expertise op het gebied van machine learning. Azure ML ondersteunt ook de implementatie van modellen met behulp van gecontaineriseerde oplossingen en biedt mogelijkheden voor het monitoren van modelprestaties en het beheren van de levenscyclus van machine learning-modellen. Door integratie met andere Azure-services kunnen gebruikers profiteren van een breed scala aan mogelijkheden voor gegevensbeheer, beveiliging en schaalbaarheid, waardoor ze end-to-end oplossingen kunnen bouwen voor hun machine learning- en AI-projecten in de cloud.",link:"https://azure.microsoft.com/nl-nl/products/machine-learning",img_link:"azureml_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"Nice"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"6b3b3542-9081-48c6-8e45-2e0556b25f67",explanation:"Perfecte match"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en is de makkelijkste en beste optie wanneer u als gebruik maakt van azure vanwege een dichte en goede integratie van functionaliteiten in beide."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Hoewel ETL niet direct ingebouwd is in Azure Machine Learning, kunt u gebruikmaken van de uitgebreide mogelijkheden binnen het Azure-ecosysteem om ETL-taken uit te voeren. Hierbij kunt u specifieke Azure-services benutten voor effectieve Extract, Transform, Load (ETL)-processen."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Azure Machine Learning (Azure ML) vormt het kerncomponent voor MLOps binnen het uitgebreide Azure-ecosysteem. Met een uitgebreide reeks functionaliteiten biedt Azure ML ondersteuning voor het naadloos en schaalbaar beheren van diverse machine learning-processen. Ingebouwd met essenti\xEBle tools en services, begeleidt Azure ML gebruikers door het gehele end-to-end machine learning-traject, inclusief datasetbeheer, modeltraining, hyperparameteroptimalisatie, implementatie en monitoring. Als een krachtige en ge\xEFntegreerde oplossing binnen het brede spectrum van Azure-services, stelt Azure ML gebruikers in staat geavanceerde machine learning-modellen te ontwikkelen en operationeel te maken."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"DataOps is niet direct ingebouwd in Azure Machine Learning, maar omdat Azure ML deel uitmaakt van het bredere Azure-ecosysteem, kunt u gebruikmaken van functies binnen Azure om DataOps-taken uit te voeren en uw gegevensworkflow te beheren."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Directe visualisatie en inzicht verkrijgen in gegevens is niet ingebouwd in Azure Machine Learning. U dient echter gebruik te maken van de rijke functionaliteiten binnen het bredere Azure-ecosysteem om data-visualisatie en inzichten te genereren."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Het is mogelijk om via Azure Machine Learning uw data of foto's te annoteren. Voor gedetailleerde informatie over het labelen van data kunt u de volgende link raadplegen: Zie: link.`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Het is mogelijk om met behulp van tools binnen Azure Machine Learning experimenten te cre\xEBren en uitgebreide inzichten te verkrijgen. Hiermee kunt u diepgaande analyses uitvoeren en de resultaten van uw machine learning-experimenten effectief beoordelen."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:`Data drift kan worden gedetecteerd met behulp van Azure Machine Learning. Voor gedetailleerde informatie over het monitoren van datasets en het detecteren van data drift, kunt u de volgende link raadplegen: +link.`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"Azure Machine Learning (Azure ML) biedt de mogelijkheid om model drift te detecteren door middel van een visuele indicatie in hun dashboard. Hierdoor kunnen gebruikers eenvoudig en effectief veranderingen in de prestaties van machine learning-modellen waarnemen en evalueren via een overzichtelijk en intu\xEFtief interface. Deze functie draagt bij aan het proactief beheren en onderhouden van modellen in productie, waardoor organisaties de nauwkeurigheid en relevantie van hun modellen over de tijd kunnen monitoren en handhaven."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'Azure Machine Learning biedt specifieke functionaliteit die gericht is op het operationeel maken en trainen van Large Language Models. Voor een introductie en meer informatie over LLMOps, kunt u de volgende link raadplegen: link .'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Azure Machine Learning biedt tools om de versies van uw datasets bij te houden en op te slaan. Voor meer informatie over het versiebeheer en bijhouden van datasets kunt u de volgende link raadplegen: link . '},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Binnen het uitgebreide ecosysteem van Azure is het mogelijk om pipelines te cre\xEBren voor zowel DataOps als MLOps. Deze pipelines bieden een gestroomlijnde en geautomatiseerde workflow voor het beheren van zowel gegevensbewerking als machine learning-operaties. Door gebruik te maken van de diverse services en tools binnen Azure, kunnen gebruikers end-to-end processen opzetten, waaronder gegevensverwerking, modeltraining, implementatie en monitoring. "},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Azure ML stelt gebruikers in staat om met slechts \xE9\xE9n klik op de knop meerdere machine learning-modellen te trainen en te testen, zonder dat hiervoor aanvullende code geschreven hoeft te worden. Deze geautomatiseerde mogelijkheid vereenvoudigt en versnelt het experimenteerproces, waardoor gebruikers snel inzicht kunnen krijgen in de prestaties van verschillende modellen zonder uitgebreide handmatige interventies. "},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Het is mogelijk om machine learning-modellen in Azure Machine Learning te publiceren. De gepubliceerde modellen zijn eenvoudig toegankelijk via API-calls, waardoor gebruikers een gestroomlijnde en flexibele manier hebben om hun machine learning-modellen in productieomgevingen te integreren."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op azure. Het is dus niet mogelijk om lokaal een variant hiervan te gebruiken"},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op azure. het is niet opensource en niet gratis."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar gaat wel vaak ten kosten van functionaliteit"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Het is mogelijk om via Azure Machine Learning uw data of foto's te annoteren. Voor gedetailleerde informatie over het labelen van data kunt u de volgende link raadplegen: Zie: link.`},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Het is mogelijk om via Azure Machine Learning uw data of foto's te annoteren. Voor gedetailleerde informatie over het labelen van data kunt u de volgende link raadplegen: Zie: link.`},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op Azure. Het Azure ecosysteem is een goeie keuze om in gedachte te nemen als u nog niet gebruik maakt van een data platform aangezien het een gigantisch aantal functionaliteiten aanbied voor al uw data en machine learning vraagstukken."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Azure ML biedt functionaliteiten zoals versiebeheer van modellen, collaboratieve experimenten en gedeelde datasets, die samenwerking binnen teams bevorderen. Echter, het mist mogelijkheden voor real-time samenwerking in code-editing om gelijktijdige aanpassingen te faciliteren. Role-Based Access Control (RBAC) is mogelijk in Azure ML. Het systeem is geschikt voor teams van alle groottes, inclusief teams van 1, 5 of meer dan 10 personen, vanwege de schaalbaarheid en flexibiliteit van de dienst."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Azure ML biedt functionaliteiten zoals versiebeheer van modellen, collaboratieve experimenten en gedeelde datasets, die samenwerking binnen teams bevorderen. Echter, het mist mogelijkheden voor real-time samenwerking in code-editing om gelijktijdige aanpassingen te faciliteren. Role-Based Access Control (RBAC) is mogelijk in Azure ML. Het systeem is geschikt voor teams van alle groottes, inclusief teams van 1, 5 of meer dan 10 personen, vanwege de schaalbaarheid en flexibiliteit van de dienst."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Azure Machine Learning (Azure ML) biedt functionaliteiten zoals versiebeheer van modellen, collaboratieve experimenten en gedeelde datasets, die samenwerking binnen teams bevorderen. Echter, het mist mogelijkheden voor real-time samenwerking in code-editing om gelijktijdige aanpassingen te faciliteren. Role-Based Access Control (RBAC) is mogelijk in Azure ML. Het systeem is geschikt voor teams van alle groottes, inclusief teams van 1, 5 of meer dan 10 personen, vanwege de schaalbaarheid en flexibiliteit van de dienst."}],bad_compatible:[{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"e3e1cc59-5923-483a-94e7-986c96b757e0",explanation:"Kan niet"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"2ae2f467-4e22-47ba-9e0f-0d46a62c4f46",explanation:"Kan niet"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan niet gebruikt worden in databricks. Het is mogelijk om een Azure variant van Databricks te gebruiken."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan niet gebruikt worden in AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan niet gebruikt worden in GCP."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan niet gebruikt worden in op een gehoste kubernetes architectuur."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op Azure."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op azure. Het is dus niet mogelijk om lokaal een variant hiervan te gebruiken"},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar gaat wel vaak ten kosten van functionaliteit"},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op azure. het is niet opensource en niet gratis."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Het is niet mogelijk om automatisch de optimale hyperparameters te vinden in Azure Machine Learning. Voor het optimaliseren van hyperparameters is aanvullend werk en mogelijk het gebruik van hyperparameter tuning-technieken vereist."}],match:{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"Het is mogelijk om via Azure ML uw data of fotos te annoteren. Zie: https://learn.microsoft.com/en-us/azure/machine-learning/how-to-label-data?view=azureml-api-2"}},{id:"964aaa51-8a46-4d4e-9808-d25ea810560c",title:"Vertex ai",description:"Vertex AI is een uitgebreid machine learning-platform van Google Cloud voor het bouwen, trainen en implementeren van AI-modellen in de cloud. Het biedt een scala aan tools en services die ontwikkelaars en datawetenschappers ondersteunen bij het cre\xEBren van geavanceerde oplossingen voor data-analyse en AI. Met Vertex AI kunnen gebruikers moeiteloos experimenten uitvoeren, modellen bouwen met populaire frameworks zoals TensorFlow en scikit-learn, en deze schalen met behulp van krachtige cloudrekenbronnen. Het platform omvat functionaliteiten voor geautomatiseerd machine learning (AutoML), waardoor het proces van modelselectie, -training en -implementatie wordt vereenvoudigd voor gebruikers zonder diepgaande expertise op het gebied van machine learning. Vertex AI ondersteunt ook de implementatie van modellen met behulp van gecontaineriseerde oplossingen en biedt mogelijkheden voor het monitoren van modelprestaties en het beheren van de levenscyclus van AI-modellen. Met integratie met andere Google Cloud-services kunnen gebruikers profiteren van een breed scala aan mogelijkheden voor gegevensbeheer, beveiliging en schaalbaarheid, waardoor ze end-to-end oplossingen kunnen bouwen voor hun AI- en machine learning-projecten in de cloud.",link:"https://cloud.google.com/vertex-ai?hl=nl",img_link:"vertex_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"Nice"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"2ae2f467-4e22-47ba-9e0f-0d46a62c4f46",explanation:"Yes"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"c7e8fbb4-936d-47e7-b2fe-6d21b0be5235",explanation:"Yes"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Vertex AI, de vooruitstrevende cloudgebaseerde machine learning-service van Google, is nauwgezet ontworpen om naadloos te integreren met het Google Cloud Platform (GCP). Hierdoor biedt het een perfecte synergie met de uitgebreide cloudservices van Google."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Google Cloud biedt een ge\xEFntegreerde Kubernetes-service genaamd Google Kubernetes Engine (GKE), die speciaal is ontworpen om Kubernetes-clusters eenvoudig te maken en te beheren in de cloud. Hoewel Vertex AI geen specifieke ondersteuning biedt voor het uitvoeren van Kubernetes-clusters zoals Google Kubernetes Engine (GKE), kan Kubernetes worden gebruikt in combinatie met Vertex AI voor het implementeren en beheren van machine learning-workloads."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Hoewel ETL niet rechtstreeks mogelijk is met Vertex AI, aangezien het een integraal onderdeel is van Google Cloud Platform (GCP), kunt u gebruikmaken van de diverse functies binnen GCP om effectief Extract, Transform, Load (ETL)-taken uit te voeren."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Vertex AI is de geavanceerde MLops-tool binnen het ecosysteem van Google Cloud Platform (GCP). Deze krachtige tool is specifiek ontworpen om het volledige spectrum van machine learning-operaties te ondersteunen, van data-invoer tot modelimplementatie."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Terwijl DataOps niet direct ingebouwd is in Vertex AI, als een essentieel onderdeel van Google Cloud Platform (GCP), kunt u gebruikmaken van de diverse functies binnen GCP om DataOps-taken uit te voeren en uw gegevensworkflow effectief te beheren."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Hoewel het verkrijgen van inzichten en het maken van visualisaties niet direct ingebouwd is in Vertex AI, als een ge\xEFntegreerd onderdeel van Google Cloud Platform (GCP), kunt u gebruikmaken van de diverse functies binnen GCP om deze taken effectief uit te voeren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Het is mogelijk om experimenten te volgen via TensorBoard in Vertex AI."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'Het is mogelijk om datadrift te detecteren in uw data met behulp van Vertex AI. Zie: link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'Het is mogelijk om modeldrift te detecteren met behulp van Vertex AI. Zie: link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Binnen Vertex AI en de uitgebreide functionaliteiten van Google Cloud Platform (GCP) is het mogelijk om zowel DataOps-pipelines als MLOps-pipelines te cre\xEBren en uit te voeren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Met Vertex AI is het mogelijk om met \xE9\xE9n druk op de knop meerdere machine learning modellen te trainen zonder de noodzaak van handmatige codering."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Het is mogelijk om met Vertex AI data, objecten of foto's te annoteren. Voor gedetailleerde instructies, zie link.`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Met Vertex AI is het mogelijk om machine learning-modellen te publiceren en eenvoudig aan te roepen via API-calls. "},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en is exclusief beschikbaar op het Google Cloud Platform (GCP). Het is daarom niet mogelijk om een lokale variant van Vertex AI te gebruiken."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en is exclusief beschikbaar op het Google Cloud Platform (GCP). Het is daarom niet mogelijk om een lokale of gratis variant van Vertex AI te gebruiken."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar gaat ten kosten van functionaliteit"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Het is mogelijk om met Vertex AI data, objecten of foto's te annoteren. Voor gedetailleerde instructies, zie link.`},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Het is mogelijk om met Vertex AI data, objecten of foto's te annoteren. Voor gedetailleerde instructies, zie link.`},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Vertex AI, de cloudgebaseerde machine learning-service van Google, is exclusief ontwikkeld voor gebruik binnen het Google Cloud Platform (GCP) en kan niet worden ge\xEFnstalleerd of uitgevoerd op andere cloudproviders. Het GCP ecosysteem is een goeie keuze om in gedachte te nemen als u nog niet gebruik maakt van een data platform aangezien het een gigantisch aantal functionaliteiten aanbied voor al uw data en machine learning vraagstukken."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Vertex AI bevordert samenwerking door middel van ge\xEFntegreerde tools voor modelversiebeheer, waardoor teams gemakkelijk modellen kunnen delen, controleren en implementeren. Het ontbreken van ingebouwde collaboratieve documentatie- en notitiefunctionaliteit kan echter de samenwerking bemoeilijken. Role-Based Access Control (RBAC) is mogelijk in Vertex AI, waardoor teams toegangsrechten kunnen beheren op basis van rollen en verantwoordelijkheden. Dit systeem kan effectief worden gebruikt voor teams van 5 personen of meer, waarbij de structuur en controle van RBAC van grotere waarde zijn."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Vertex AI bevordert samenwerking door middel van ge\xEFntegreerde tools voor modelversiebeheer, waardoor teams gemakkelijk modellen kunnen delen, controleren en implementeren. Role-Based Access Control (RBAC) is mogelijk in Vertex AI, waardoor teams toegangsrechten kunnen beheren op basis van rollen en verantwoordelijkheden. Dit systeem kan effectief worden gebruikt voor teams van 5 personen of meer, waarbij de structuur en controle van RBAC van grotere waarde zijn."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Vertex AI bevordert samenwerking door middel van ge\xEFntegreerde tools voor modelversiebeheer, waardoor teams gemakkelijk modellen kunnen delen, controleren en implementeren. Role-Based Access Control (RBAC) is mogelijk in Vertex AI, waardoor teams toegangsrechten kunnen beheren op basis van rollen en verantwoordelijkheden. Dit systeem kan effectief worden gebruikt voor teams van 5 personen of meer, waarbij de structuur en controle van RBAC van grotere waarde zijn."}],bad_compatible:[{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"e3e1cc59-5923-483a-94e7-986c96b757e0",explanation:"Nope"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"6b3b3542-9081-48c6-8e45-2e0556b25f67",explanation:"Nope"},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en is exclusief beschikbaar op het Google Cloud Platform (GCP). Het is daarom niet mogelijk om een lokale of gratis variant van Vertex AI te gebruiken."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en kan niet worden ge\xEFnstalleerd of uitgevoerd op Databricks, aangezien deze platformen van verschillende cloudproviders zijn."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en kan niet worden ge\xEFnstalleerd of uitgevoerd op AWS, aangezien deze platformen van verschillende cloudproviders zijn."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en kan niet worden ge\xEFnstalleerd of uitgevoerd op Azure, aangezien deze platformen van verschillende cloudproviders zijn."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Vertex AI, de cloudgebaseerde machine learning-service van Google, is exclusief ontwikkeld voor gebruik binnen het Google Cloud Platform (GCP) en kan niet worden ge\xEFnstalleerd of uitgevoerd op andere cloudproviders."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en is exclusief beschikbaar op het Google Cloud Platform (GCP). Het is daarom niet mogelijk om een lokale variant van Vertex AI te gebruiken."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar gaat ten kosten van functionaliteit"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:"GCP, inclusief Vertex AI, biedt op dit moment geen specifieke functionaliteit voor het operationeel maken of trainen van Large Language Models. Echter, deze taken kunnen wel worden uitgevoerd via MLops, waarbij gebruik wordt gemaakt van bredere machine learning-operationele praktijken."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"Data versioning is momenteel niet ingebouwd in Vertex AI of GCP, maar er zijn mogelijkheden om dit zelf te implementeren en te beheren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Automatisch de optimale hyperparameters vinden is momenteel niet direct ingebouwd in Vertex AI, maar het is nog steeds mogelijk om dit te implementeren via aangepaste code."}]},{id:"ee8b301a-22ab-4e40-9ad7-3e38cc9e3723",title:"KubeFlow",description:"Kubeflow is een open-source platform dat is ontworpen om machine learning workflows te orkestreren en te beheren op Kubernetes, waardoor het eenvoudiger wordt om schaalbare, draagbare en reproduceerbare AI-modellen te ontwikkelen, trainen en implementeren in productieomgevingen.",link:"https://www.kubeflow.org/",img_link:"kubeflow_logo.png",bad_compatible:[{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Databricks ondersteunt momenteel geen uitvoering van een Kubernetes-cluster."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"KubeFlow's MLOps-tooling omvat momenteel geen functionaliteit voor het detecteren van Data Drift."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"De MLOps-tooling van KubeFlow omvat op dit moment geen functionaliteit voor het detecteren van Model Drift."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:"KubeFlow biedt geen out-of-the-box tooling voor Large Language Model Operations (LLMOps). Het is echter wel mogelijk om de reguliere MLOps-functionaliteit te gebruiken voor het ontwikkelen van een Large Language Model."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"KubeFlow biedt geen out-of-the-box tooling voor data versioning. Niettemin is het wel mogelijk om gebruik te maken van de reguliere MLOps-functionaliteit voor het ontwikkelen van een Large Language Model."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Het is momenteel niet mogelijk om automatisch de optimale hyperparameters te vinden via KubeFlow. Desalniettemin kan deze functionaliteit nog steeds worden ge\xEFmplementeerd met behulp van aangepaste code."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"Hoewel het niet mogelijk is om met de beschikbare tools in KubeFlow data te annoteren, is het wel eenvoudig om zelf tools te installeren door gebruik te maken van containerisatie in Kubernetes."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Helaas biedt KubeFlow niet de mogelijkheid om diepgaande inzichten in uw data te verkrijgen voor het nemen van weloverwogen zakelijke beslissingen. Het is echter wel mogelijk om dit zelf toe te voegen door zelf de tooling aan Kubernetes toe te voegen."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Kubeflow biedt functionaliteiten zoals gedeelde Jupyter Notebooks en geautomatiseerde modeldeployments die de samenwerking binnen teams bevorderen. Het mist echter een ge\xEFntegreerde functie voor code review en collaboratieve modelversiebeheer, wat de samenwerking kan belemmeren. Role-Based Access Control (RBAC) is mogelijk. Kubeflow kan effectief worden gebruikt voor teams van 5 of meer personen, maar voor kleinere teams van 1-4 personen kan het mogelijk te uitgebreid zijn."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Wanneer u een Kubernetes-cluster op AWS uitvoert, is het mogelijk om KubeFlow te gebruiken. Het wordt aanbevolen om KubeFlow te overwegen als uw bedrijf diep ge\xEFntegreerd is met Kubernetes. Als u echter veel gebruik maakt van AWS-functionaliteiten, is Amazon SageMaker ook een geschikte oplossing."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Wanneer u een Kubernetes-cluster op Azure draait, is het mogelijk om KubeFlow te gebruiken. Het wordt aanbevolen om KubeFlow te overwegen als uw bedrijf diep ge\xEFntegreerd is met Kubernetes. Als u echter veel gebruik maakt van Azure-functionaliteiten, is Azure Machine Learning ook een geschikte oplossing."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Wanneer u een Kubernetes-cluster op GCP draait, is het mogelijk om KubeFlow te gebruiken. Het wordt aanbevolen om KubeFlow te overwegen als uw bedrijf diep ge\xEFntegreerd is met Kubernetes. Als u echter veel gebruik maakt van GCP-functionaliteiten, is Vertex AI ook een geschikte oplossing."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Indien u al gebruikmaakt van Kubernetes, is Kubeflow een uitstekende keuze om naadloos te integreren in uw bestaande workflow."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Kubeflow maakt gebruik van Argo, waardoor de integratie van ETL in uw workflow mogelijk is. Dankzij containerisatie in Kubernetes heeft u tevens de flexibiliteit om zelf een ETL-bibliotheek te implementeren en te koppelen, bijvoorbeeld met tools zoals Airflow."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Met Kubeflow heeft u toegang tot een divers scala aan MLOps-tools. Wat het onderscheidt van andere tools is de mogelijkheid om, dankzij de containerisatie in Kubernetes, zelf gewenste MLOps-functionaliteit toe te voegen."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Kubeflow maakt gebruik van Argo, wat de integratie van ETL in uw workflow mogelijk maakt. Dankzij de containerisatie in Kubernetes heeft u bovendien de mogelijkheid om zelf een DataOps-bibliotheek te implementeren en te koppelen, bijvoorbeeld met tools zoals Airflow."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Kubeflow kan uitsluitend worden ge\xEFntegreerd in Kubernetes. Omdat Kubernetes niet specifiek gebonden is aan een bepaald platform, kan het op diverse manieren worden ingezet. Wanneer een Kubernetes-instantie draait in de cloud, kan Kubeflow worden ge\xEFnstalleerd."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Kubeflow is een opensource-project en kan alleen worden ge\xEFntegreerd in Kubernetes. Als u lokaal Kubernetes draait, kan Kubeflow eenvoudig worden ge\xEFnstalleerd en ge\xEFntegreerd in uw lokale omgeving."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:'Kubeflow is een gratis en open-source platform. Zie: link.'},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:'Kubeflow is een gratis en open-source platform. Zie: link.'},{question_id:"8aadcd11-ca15-4c09-b2d2-3159a318118b",answer_id:"d8d29384-8b01-47ab-848a-c5ae13cc5baa",explanation:"Indien u reeds gebruikmaakt van Kubernetes, vormt Kubeflow een uitstekende keuze, waardoor het naadloos integreert in uw bestaande workflow en zo een geoptimaliseerde ervaring biedt."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Dankzij KubeFlow pipelines kunt u op een moeiteloze wijze uw experimenten traceren en beheren, waardoor het proces van experimentatie en beheer aanzienlijk wordt vereenvoudigd."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Met KubeFlow pipelines is het mogelijk om pipelines te orkestreren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Met KubeFlow AutoML kun je met \xE9\xE9n druk op de knop moeiteloos meerdere machine learning modellen trainen en testen, zonder dat je code hoeft te schrijven."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:"Hoewel het niet mogelijk is om met de beschikbare tools in KubeFlow data te annoteren, is het wel eenvoudig om zelf tools te installeren door gebruik te maken van containerisatie in Kubernetes."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:"Hoewel het niet mogelijk is om met de beschikbare tools in KubeFlow data te annoteren, is het wel eenvoudig om zelf tools te installeren door gebruik te maken van containerisatie in Kubernetes."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Als u van Kubeflow gebruik wilt maken dat moet u onderliggend van Kubernetes gebruik maken. Wanneer u dit doet dan is Kubeflow een uitstekende keuze om te gebruiken als een dataplatform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Als u een cloud platform heeft gekozen kijk dan goed of u van Kubernetes gebruik wilt maken. Zo ja, dan is Kubeflow een uitstekende keuze."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:'Met de Kubeflow tool genaamd MLRun serving kunt in getrainde modellen publiceren en in gebruik nemen. Zie link.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Kubeflow biedt functionaliteiten zoals gedeelde Jupyter Notebooks en geautomatiseerde modeldeployments die de samenwerking binnen teams bevorderen. Het mist echter een ge\xEFntegreerde functie voor code review en collaboratieve modelversiebeheer, wat de samenwerking kan belemmeren. Role-Based Access Control (RBAC) is mogelijk. Kubeflow kan effectief worden gebruikt voor teams van 5 of meer personen, maar voor kleinere teams van 1-4 personen kan het mogelijk te uitgebreid zijn."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Kubeflow biedt functionaliteiten zoals gedeelde Jupyter Notebooks en geautomatiseerde modeldeployments die de samenwerking binnen teams bevorderen. Het mist echter een ge\xEFntegreerde functie voor code review en collaboratieve modelversiebeheer, wat de samenwerking kan belemmeren. Based Access Control (RBAC) is mogelijk. Kubeflow kan effectief worden gebruikt voor teams van 5 of meer personen, maar voor kleinere teams van 1-4 personen kan het mogelijk te uitgebreid zijn."}]},{id:"994c4786-2a83-40e6-9ada-72b4f80268ee",title:"H2O.AI",description:"H2O.ai democratiseert machine learning voor zakelijke gebruikers door een suite van tools aan te bieden. Hun primaire platform, H2O, maakt het mogelijk ML-modellen te bouwen en in te zetten met een gebruiksvriendelijke webinterface. Deep Water breidt dit uit met een hechtere integratie voor GPU-gebaseerd deep learning, Sparkling Water integreert met Apache Spark en Steam is een bedrijfsoplossing voor het inzetten van ML-modellen via API's. Driverless AI vereenvoudigt modelontwikkeling voor niet-technische gebruikers door taken als feature engineering en algoritmeselectie te automatiseren.",link:"https://h2o.ai/",img_link:"h2o_logo.png",bad_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"H2O.AI biedt geen specifieke mogelijkheden voor DataOps. Wel hebben ze partnerships met verschillende bedrijven die dit wel aanbieden."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Hoewel H2O.AI geen ingebouwde functionaliteit biedt om automatisch optimale hyperparameters te vinden, kan dit nog steeds ge\xEFmplementeerd worden via code."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Databricks fungeert als een geavanceerd dataplatform en is een serviceprovider. Het is momenteel niet mogelijk om H2O.AI rechtstreeks op Databricks te installeren."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"H2O.AI biedt geen specifieke mogelijkheden voor ETL (Extract, Transform, Load). Wel hebben ze een partnership met KNIME wat een opensource ETL tool is. Dit maakt het wel mogelijk maar heeft wel extra tooling dus nodig,"},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:'H2O.AIO biedt mogelijkheden voor BI maar dit vereist wel veel programmeer werk. Het biedt geen visualisatie mogelijkheden. Zie de link voor meer informatie.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"H2O.ai mist echter mogelijkheden voor geavanceerde model interpretatie en samenwerkingsfuncties zoals ge\xEFntegreerde codeversiebeheer, wat de samenwerking kan tegenzitten. Role-Based Access Control (RBAC) is mogelijk via integratie met externe tools zoals LDAP of Active Directory. H2O.ai is geschikt voor teams van 5 personen of meer, waarbij het schaalbaarheid biedt voor grotere teams, maar mogelijk te uitgebreid is voor een individueel gebruiker."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"H2O.AI is een opensource-oplossing en daardoor niet beperkt tot een specifieke leverancier. Het kan worden ingezet op verschillende cloud-instanties."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"H2O.AI is een gespecialiseerde tool voor MLOps, ontworpen om machine learning workflows effici\xEBnt te beheren en te optimaliseren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'Het is mogelijk om via H2O.AI drift in de data te detecteren. Raadpleeg de link voor meer gedetailleerde informatie.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"H2O.AI maakt het mogelijk om model drift te detecteren. Hiermee kun je veranderingen in data identificeren en proactief reageren op verschuivingen in de gegevensdistributie, om de modelprestaties te handhaven."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Met de H2O.AI Feature Store kunt u eenvoudig versies van uw dataset bijhouden. Zie de link voor meer informatie.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"H2O.AI is een opensource-oplossing en daardoor niet beperkt tot een specifieke leverancier. Het kan worden ingezet op verschillende cloud-instanties."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"H2O.AI is een opensource-oplossing en daardoor niet beperkt tot een specifieke leverancier. Het kan worden ingezet op verschillende cloud-instanties."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"H2O.AI is een opensource-oplossing en daardoor niet beperkt tot een specifieke leverancier. Het kan worden ingezet op verschillende cloud-instanties."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"H2O.AI is een opensource-oplossing en daardoor niet beperkt tot een specifieke leverancier. Het kan worden ingezet op verschillende cloud-instanties."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"H2O.AI is een opensource-tool die zowel on-premise als in de cloud kan worden ge\xEFnstalleerd en uitgevoerd. Daarnaast biedt H2O.AI de optie om tegen betaling gebruik te maken van hun servers, waardoor gebruikers flexibiliteit hebben in hun implementatiekeuzes."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"H2O.AI is een opensource-tool die zowel on-premise als in de cloud kan worden ge\xEFnstalleerd en uitgevoerd. Daarnaast biedt H2O.AI de optie om tegen betaling gebruik te maken van hun servers, waardoor gebruikers flexibiliteit hebben in hun implementatiekeuzes."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"H2O.AI is een opensource-tool die zowel on-premise als in de cloud kan worden ge\xEFnstalleerd en uitgevoerd. Daarnaast biedt H2O.AI de optie om tegen betaling gebruik te maken van hun servers, waardoor gebruikers flexibiliteit hebben in hun implementatiekeuzes."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"H2O.AI is een opensource-tool die zowel on-premise als in de cloud kan worden ge\xEFnstalleerd en uitgevoerd. Daarnaast biedt H2O.AI de optie om tegen betaling gebruik te maken van hun servers, waardoor gebruikers flexibiliteit hebben in hun implementatiekeuzes."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"H2O.AI onderscheidt zich door zijn gebruiksvriendelijkheid, met een installatieproces dat aanzienlijk eenvoudiger is in vergelijking met andere tools in hetzelfde domein. Deze toegankelijkheid strekt zich ook uit tot het gebruik, waarbij H2O.AI intu\xEFtieve functies biedt die het gemakkelijker maken voor gebruikers om effectief met de tool te werken. Deze focus op gebruiksgemak maakt H2O.AI een aantrekkelijke keuze voor diegenen die op zoek zijn naar een krachtig maar toch toegankelijk platform voor machine learning."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Het opzetten van experimenten met H2O.AI kan op verschillende manieren worden uitgevoerd. H2O.AI biedt afzonderlijke experimentele tools voor elk van hun componenten, zoals driverless.ai of Hydrogen Torch. Deze benadering stelt gebruikers in staat om specifieke tools te kiezen die het beste aansluiten bij hun behoeften, en biedt flexibiliteit in het aanpakken van diverse machine learning-experimenten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'H2O.AI heeft aanzienlijk ge\xEFnvesteerd in LLMOps (Large Language Model Operations) en is daardoor uitgegroeid tot een van de beste tools voor het ontwikkelen en implementeren van LLM. Raadpleeg de link voor meer informatie.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Het gebruik van H2O.ASSEMBLY en Scikit-pipelines maakt het mogelijk om pipelines te orkestreren. Weinig documentatie is hierover te vinden hoe geavanceerd deze functionaliteit is.."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:'H2O.AI biedt een krachtige tool genaamd Driverless AI, waarmee met \xE9\xE9n druk op de knop meerdere machine learning modellen kunnen worden getraind en getest. Zie de link voor meer informatie.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`H2O.AI biedt geavanceerde tooling voor het annoteren van zowel data als foto's. Voor meer informatie, raadpleeg de link.`},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"H2O.AI onderscheidt zich door zijn gebruiksvriendelijkheid, met een installatieproces dat aanzienlijk eenvoudiger is in vergelijking met andere tools in hetzelfde domein. Deze toegankelijkheid strekt zich ook uit tot het gebruik, waarbij H2O.AI intu\xEFtieve functies biedt die het gemakkelijker maken voor gebruikers om effectief met de tool te werken. Deze focus op gebruiksgemak maakt H2O.AI een aantrekkelijke keuze voor diegenen die op zoek zijn naar een krachtig maar toch toegankelijk platform voor machine learning."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`H2O.AI biedt geavanceerde tooling voor het annoteren van zowel data als foto's. Voor meer informatie, raadpleeg de link.`},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`H2O.AI biedt geavanceerde tooling voor het annoteren van zowel data als foto's. Voor meer informatie, raadpleeg de link.`},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"H2O.AI is opensource en dus niet afhankelijk van een cloudplatform. Doe onderzoek of u gebruik wilt maken van het cloud platform van H2O.AI of dat u gebruik wilt maken van een ander cloud platform en hier H2O.AI op wilt configureren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:'Met H2O.AI MLOps is het mogelijk om machine learning modellen in productie te nemen en te gebruiken. Zie de link voor meer informatie.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"H2O.ai mist echter mogelijkheden voor geavanceerde model interpretatie en samenwerkingsfuncties zoals ge\xEFntegreerde codeversiebeheer, wat de samenwerking kan tegenzitten. Role-Based Access Control (RBAC) is mogelijk via integratie met externe tools zoals LDAP of Active Directory. H2O.ai is geschikt voor teams van 5 personen of meer, waarbij het schaalbaarheid biedt voor grotere teams, maar mogelijk te uitgebreid is voor een individueel gebruiker."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"H2O.ai mist echter mogelijkheden voor geavanceerde model interpretatie en samenwerkingsfuncties zoals ge\xEFntegreerde codeversiebeheer, wat de samenwerking kan tegenzitten. Role-Based Access Control (RBAC) is mogelijk via integratie met externe tools zoals LDAP of Active Directory. H2O.ai is geschikt voor teams van 5 personen of meer, waarbij het schaalbaarheid biedt voor grotere teams, maar mogelijk te uitgebreid is voor een individueel gebruiker."}],match:{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"dwa"}},{id:"d5cfa187-4147-4177-8091-491f244f6344",title:"Datarobot",description:"DataRobot is een geautomatiseerd machine learning platform dat bedrijven helpt bij het bouwen, implementeren en beheren van krachtige AI-modellen zonder uitgebreide programmeerkennis. Het biedt een intu\xEFtieve interface en geavanceerde automatiseringstools die het proces van modelontwikkeling versnellen en optimaliseren, waardoor gebruikers snel en nauwkeurig voorspellende modellen kunnen bouwen voor diverse zakelijke behoeften.",link:"https://www.datarobot.com/",img_link:"datarobot_logo.png",bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Het is niet mogelijk om DataRobot op externe cloudplatforms uit te voeren. Het is raadzaam om te onderzoeken of DataRobot functionaliteiten biedt om uw specifieke opgeslagen data te lezen en te gebruiken."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"DataRobot is primair gericht op MLOps en biedt geen specifieke ondersteuning voor DataOps. DataOps-gerelateerde taken dienen te worden uitgevoerd voordat de data in DataRobot wordt ingelezen. Het platform richt zich op het beheer van machine learning operations."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"DataRobot is primair ontworpen voor MLOps, en ondersteunt geen ETL-operaties. Deze bewerkingen moeten worden uitgevoerd voordat de gegevens in DataRobot worden ingelezen."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"DataRobot is primair bedoeld voor MLOps en biedt geen specifieke functionaliteiten voor BI. Het platform richt zich op het beheer van machine learning operations."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Het gebruik van DataRobot on-premise is niet mogelijk. Toegang tot DataRobot is uitsluitend mogelijk via hun servers en tegen een vergoeding."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Datarobot is niet opensource en moet aangeschaft worden via een periodiek abonnement. Eveneens brengt het gebruik van meer resources ook extra kosten met zich mee."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:`Het bijhouden van versies van data is niet direct mogelijk met DataRobot; hiervoor zou extra functionaliteit buiten DataRobot moeten worden toegevoegd. Voor meer informatie over het versiebeheer van productiemodellen in machine learning, kunt u de link raadplegen . +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"DataRobot biedt op zichzelf geen functionaliteit voor het orkestreren van pipelines, maar blinkt uit in integratie met verschillende pipelining-tools. Hierdoor kunnen gebruikers profiteren van een naadloze samenwerking tussen DataRobot en geavanceerde pipelining-tools voor een effici\xEBnt beheer van end-to-end machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Het is niet mogelijk om DataRobot rechtstreeks op kubernetes uit te voeren. Er moeten andere manieren gevonden worden om data uit een kubernetes cluset in te laden op Datarobot,."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"DataRobot bevordert samenwerking door functionaliteiten zoals de mogelijkheid om modellen te delen en te versiebeheren, waardoor teamleden gemakkelijk kunnen samenwerken aan machine learning-projecten. Role-Based Access Control (RBAC) is mogelijk in DataRobot, waardoor teams van verschillende grootte veilig toegang hebben tot de benodigde bronnen en functionaliteiten. DataRobot is geschikt voor teams van 1, 5 of meer dan 10 personen, maar grotere teams zouden mogelijk meer baat hebben bij aanvullende samenwerkingsfuncties."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Het is niet mogelijk om DataRobot rechtstreeks op GCP uit te voeren. Desondanks heeft DataRobot functionaliteiten die het eenvoudig maken om gegevens uit GCP te lezen en te gebruiken."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"DataRobot legt sterk de nadruk op MLOps en biedt geavanceerde functionaliteiten om machine learning operations doeltreffend te beheren, waaronder het automatiseren van modelimplementatie, het bewaken van prestaties en het vergemakkelijken van samenwerking tussen datawetenschappers en operationele teams."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:'Het direct draaien van DataRobot op Databricks is niet mogelijk. Niettemin is er een effici\xEBnte samenwerking tussen DataRobot en Databricks, waardoor data eenvoudig vanuit Databricks kan worden ingelezen door DataRobot. Voor meer gedetailleerde informatie kun je de linkraadplegen.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Het direct uitvoeren van DataRobot op AWS is niet mogelijk. Niettemin biedt DataRobot functionaliteiten waarmee het gegevens kan lezen en gebruiken van bijvoorbeeld een AWS-bucket."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Het is niet mogelijk om DataRobot rechtstreeks op Azure uit te voeren. Echter, DataRobot heeft functionaliteiten die het gemakkelijk maken om gegevens uit Azure te lezen en te gebruiken."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Het draaien van DataRobot in de cloud is de enige een optie, maar het is belangrijk op te merken dat DataRobot een particulier bedrijf is. Toegang tot hun diensten is enkel beschikbaar via door hen aangeboden services en tegen betaling."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Wij vinden persoonlijk DataRobot de meest gebruiksvriendelijke optie voor MLOps. Het is snel ge\xEFnstalleerd en stelt u in staat om snel aan de slag te gaan met het trainen van machine learning modellen. De nadruk op AutoML maakt het proces nog toegankelijker. Het is echter belangrijk op te merken dat hoewel de eenvoudige installatie en AutoML-functionaliteiten een snelle start mogelijk maken, dit ten koste kan gaan van diepgaandere functionaliteiten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Het is eenvoudig om in DataRobot experimenten op te zetten en de resultaten in te zien, waardoor het platform intu\xEFtief is voor het cre\xEBren en beheren van machine learning experimenten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:`DataRobot biedt uitgebreide mogelijkheden voor het volgen van data drift, waardoor gebruikers in staat zijn veranderingen in de inputgegevens nauwlettend te observeren en te begrijpen. Voor een gedetailleerde uitleg over het monitoren van data drift, kunt u de informatie raadplegen via deze link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'DataRobot biedt mogelijkheden voor het volgen van model drift, waardoor gebruikers in staat zijn veranderingen in de prestaties van hun machine learning modellen nauwlettend te volgen. Voor gedetailleerde informatie over het monitoren van model drift, kunt u de link. raadplegen.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:`DataRobot biedt een breed scala aan functionaliteiten voor het ontwikkelen van een volledig ge\xEFntegreerd generatief machine learning model. Voor meer details over Large Language Model Operations (LLMOps), kunt u de link raadplegen.`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:'Het automatisch vinden van optimale hyperparameters is mogelijk binnen DataRobot, waardoor het afstemmen van hyperparameters effici\xEBnt en gestroomlijnd wordt. Voor gedetailleerde informatie over het tunen van hyperparameters in DataRobot, kunt u de link voor meer informatie raadplegen.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Naar onze mening is DataRobot de meest toegankelijke tool om te starten met machine learning, dankzij zijn uitgebreide en gebruiksvriendelijke AutoML-functionaliteit. Dit stelt gebruikers in staat om snel en effectief machine learning modellen te ontwikkelen, zelfs zonder diepgaande technische expertise."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'DataRobot biedt een krachtige tool waarmee data en afbeeldingen kunnen worden geannoteerd door middel van een samenwerking met Labelbox. Zie de link voor meer informatie.'},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Datarobot is niet opensource en moet aangeschaft worden via een periodiek abonnement. Eveneens brengt het gebruik van meer resources ook extra kosten met zich mee."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Wij vinden persoonlijk DataRobot de meest gebruiksvriendelijke optie voor MLOps. Het is snel ge\xEFnstalleerd en stelt u in staat om snel aan de slag te gaan met het trainen van machine learning modellen. De nadruk op AutoML maakt het proces nog toegankelijker. Het is echter belangrijk op te merken dat hoewel de eenvoudige installatie en AutoML-functionaliteiten een snelle start mogelijk maken, dit ten koste kan gaan van diepgaandere functionaliteiten."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'DataRobot biedt een krachtige tool waarmee data en afbeeldingen kunnen worden geannoteerd door middel van een samenwerking met Labelbox. Zie de link voor meer informatie.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'DataRobot biedt een krachtige tool waarmee data en afbeeldingen kunnen worden geannoteerd door middel van een samenwerking met Labelbox. Zie de link voor meer informatie.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Wanneer uw bedrijf nog niet actief is op een cloudplatform, voornamelijk het platform wil gebruiken om machine learning te verkennen en geen know-how heeft over het effectief configureren van een platform, dan is Datarobot een goeie keuze om mee te beginnen. Dit komt doordat datarobot een simpele tool is om mee te beginnen met experimenteren met machine learning."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:'Het is mogelijk om modellen te publiceren naar verschillende andere cloudplatforms zoals AWS en Azure. DataRobot biedt ook de mogelijkheid om dit via hun eigen servers te doen. Zie link voor meer informatie.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"DataRobot bevordert samenwerking door functionaliteiten zoals de mogelijkheid om modellen te delen en te versiebeheren, waardoor teamleden gemakkelijk kunnen samenwerken aan machine learning-projecten. Role-Based Access Control (RBAC) is mogelijk in DataRobot, waardoor teams van verschillende grootte veilig toegang hebben tot de benodigde bronnen en functionaliteiten. DataRobot is geschikt voor teams van 1, 5 of meer dan 10 personen, maar grotere teams zouden mogelijk meer baat hebben bij aanvullende samenwerkingsfuncties."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"DataRobot bevordert samenwerking door functionaliteiten zoals de mogelijkheid om modellen te delen en te versiebeheren, waardoor teamleden gemakkelijk kunnen samenwerken aan machine learning-projecten. Role-Based Access Control (RBAC) is mogelijk in DataRobot, waardoor teams van verschillende grootte veilig toegang hebben tot de benodigde bronnen en functionaliteiten. DataRobot is geschikt voor teams van 1, 5 of meer dan 10 personen, maar grotere teams zouden mogelijk meer baat hebben bij aanvullende samenwerkingsfuncties."}],match:{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"dwad"}},{id:"c4cd4364-2611-4b47-a61f-c357e3163da1",title:"Weights and biases",description:"Weights and Biases is een platform voor experiment tracking en visualisatie in machine learning. Het biedt tools waarmee onderzoekers en datawetenschappers hun machine learning-experimenten kunnen bijhouden, analyseren en delen. Het platform legt belangrijke parameters, resultaten en visualisaties vast om inzicht te bieden in de prestaties van modellen, waardoor teams effectiever kunnen samenwerken en beter ge\xEFnformeerde beslissingen kunnen nemen tijdens het ontwikkelingsproces van AI-modellen.",link:"https://wandb.ai/site",img_link:"wandb_logo.png",bad_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Weights and Biases is ontworpen voor MLOps, wat betekent dat gegevens al verwerkt moeten zijn voordat het door Weights and Biases kan worden gebruikt."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Weights and Biases is ontwikkeld voor MLOps, waarbij het vanuit dit perspectief een uitgebreid scala aan tools en functionaliteiten biedt. Het is echter belangrijk op te merken dat de data vooraf verwerkt moet zijn alvorens het door Weights and Biases kan worden gebruikt."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Weights and Biases is ontworpen voor MLOps, en daarom vereist het dat data al verwerkt is voordat het kan worden gebruikt. Voor Business Intelligence doeleinden zullen andere tools nodig zijn die specifiek zijn afgestemd op die toepassing."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:'Weights and Biases is een semi-opensource programma, maar bedrijven mogen het niet gratis on-premise hosten. Raadpleeg de link voor het prijsmodel.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"Weights and Biases heeft geen kant-en-klare functionaliteit om data drift te detecteren. Het benadrukt echter samenwerkingen met andere gespecialiseerde tools en frameworks, waardoor gebruikers de mogelijkheid hebben om aanvullende functionaliteiten voor het monitoren van data drift te integreren in hun machine learning workflows."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Het is niet mogelijk om uitgebreide pipelines te orkestreren met Weights and Biases; hiervoor moet een aanvullende tool zoals MLflow worden gebruikt. Hoewel Weights and Biases uitblinkt in experimentbeheer en visualisatie, is het integreren van MLflow een strategische aanpak om end-to-end machine learning workflows te ondersteunen met uitgebreide pipeline-orkestratie."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Weights and Biases heeft geen ingebouwde functionaliteit om meerdere machine learning modellen met \xE9\xE9n knop te trainen en te testen."}],good_compatible:[{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Weights and Biases is veelzijdig inzetbaar en kan zowel on-premise als in de cloud worden gebruikt, waardoor gebruikers flexibiliteit hebben bij het implementeren van hun machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:'Het is mogelijk om Weights & Biases (w&b) te integreren met Databricks door Weights & Biases te installeren in een Databricks-notebook. Zie de link voor meer details.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:'Het is mogelijk om Weights & Biases op AWS te draaien. Voor meer informatie over de integratie van Weights & Biases met AWS, kunt u de link raadplegen. '},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:'Het is mogelijk om Weights & Biases op Azure te draaien. Zie de link voor meer informatie.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:'Het is mogelijk om Weights & Biases op Azure te draaien. Zie de link voor meer informatie.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Dankzij containerisatie in Kubernetes is het eenvoudig om Weights and Biases te installeren en te gebruiken."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Weights and Biases is een uitstekend startpunt voor het experimenteren met machine learning, omdat het zowel on-premise als op meerdere computers kan worden toegepast, waardoor flexibiliteit en schaalbaarheid mogelijk zijn."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Weights and Biases is een gespecialiseerd platform dat zich specifiek richt op MLOps, waarmee het een uitgebreide set tools en functionaliteiten biedt om het end-to-end proces van machine learning operations te stroomlijnen en te optimaliseren."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Weights and Biases is veelzijdig inzetbaar en kan zowel on-premise als in de cloud worden gebruikt, waardoor gebruikers flexibiliteit hebben bij het implementeren van hun machine learning workflows."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Weights and Biases is een uiterst effectief platform voor het volgen en beheren van experimenten, waarbij het niet alleen uitblinkt in het registreren van modelprestaties, maar ook in het verstrekken van diepgaande inzichten en visualisaties die de analyse van experimentresultaten vergemakkelijken, waardoor het een waardevolle aanwinst is voor het optimaliseren van machine learning workflows."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'Het is mogelijk om model drift in productie te detecteren via een uitgebreid dashboard in Weights and Biases. Gedetailleerde informatie over het monitoren van model drift in productie is beschikbaar in de link .'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'Weights and Biases biedt een tool genaamd Traces, waarin Large Language Model Operations (LLMOps) zijn verwerkt. Zie de link voor meer informatie.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Het is mogelijk om versies van data bij te houden met Weights and Biases via de functionaliteit genaamd Artifacts. Deze feature biedt gebruikers een gestructureerde en traceerbare manier om verschillende versies van data op te slaan en te beheren, wat bijdraagt aan een nauwkeurig en reproduceerbaar experimenteerproces. Zie de link voor meer details.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:'"Weights and Biases biedt een krachtige tool genaamd Sweeps, waarmee gebruikers automatisch de optimale hyperparameters kunnen bepalen. Deze functionaliteit stroomlijnt het proces van hyperparameter tuning, waardoor het eenvoudig wordt om de beste configuraties te ontdekken voor verbeterde modelprestaties. Zie de link voor meer informatie.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Het is mogelijk om getrainde modellen te publiceren met Weights and Biases. Deze functionaliteit maakt het gemakkelijk om resultaten en modellen te delen, wat de samenwerking tussen teamleden en stakeholders bevordert."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Het is mogelijk om met een tool genaamd Prodigy data en foto's te annoteren. Zie de link voor meer informatie.`},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"In vergelijking met andere dataplatforms op deze lijst is Weights and Biases eenvoudig op te zetten, waardoor gebruikers snel en moeiteloos toegang krijgen tot zijn functionaliteiten."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:'Weights and Biases is een semi-opensource programma, maar bedrijven mogen het niet gratis on-premise hosten. Raadpleeg de link voor het prijsmodel.'},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"In vergelijking met andere dataplatforms op deze lijst is Weights and Biases eenvoudig op te zetten, waardoor gebruikers snel en moeiteloos toegang krijgen tot zijn functionaliteiten."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Het is mogelijk om met een tool genaamd Prodigy data en foto's te annoteren. Zie de link voor meer informatie.`},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Het is mogelijk om met een tool genaamd Prodigy data en foto's te annoteren. Zie de link voor meer informatie.`},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"het is mogelijk om Weights & Biases op de meeste cloudplatform te gebruiken aan gezien de code ervan openbaar beschikbaar is. Houd er wel rekening mee dat Weights & biases aangeschaft moet worden om in gebruik te nemen."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Weights & Biases bevordert samenwerking door functies zoals het delen van experimenten en resultaten met teamleden, het toevoegen van opmerkingen en notities aan specifieke runs, en het faciliteren van discussies via opgeslagen commentaren. Het mist echter directe mogelijkheden voor realtime samenwerking aan gedeelde projecten, zoals gelijktijdige bewerking van documenten. Role-Based Access Control (RBAC) is mogelijk in Weights & Biases, waardoor beheerders verschillende rechten aan teamleden kunnen toewijzen op basis van hun rollen. Het systeem is geschikt voor teams van elke grootte, maar kan vooral handig zijn voor teams van 5 of meer personen vanwege de behoefte aan geco\xF6rdineerde samenwerking en beheer van projecten."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Weights & Biases bevordert samenwerking door functies zoals het delen van experimenten en resultaten met teamleden, het toevoegen van opmerkingen en notities aan specifieke runs, en het faciliteren van discussies via opgeslagen commentaren. Het mist echter directe mogelijkheden voor realtime samenwerking aan gedeelde projecten, zoals gelijktijdige bewerking van documenten. Role-Based Access Control (RBAC) is mogelijk in Weights & Biases, waardoor beheerders verschillende rechten aan teamleden kunnen toewijzen op basis van hun rollen. Het systeem is geschikt voor teams van elke grootte, maar kan vooral handig zijn voor teams van 5 of meer personen vanwege de behoefte aan geco\xF6rdineerde samenwerking en beheer van projecten."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Weights & Biases bevordert samenwerking door functies zoals het delen van experimenten en resultaten met teamleden, het toevoegen van opmerkingen en notities aan specifieke runs, en het faciliteren van discussies via opgeslagen commentaren. Het mist echter directe mogelijkheden voor realtime samenwerking aan gedeelde projecten, zoals gelijktijdige bewerking van documenten. Role-Based Access Control (RBAC) is mogelijk in Weights & Biases, waardoor beheerders verschillende rechten aan teamleden kunnen toewijzen op basis van hun rollen. Het systeem is geschikt voor teams van elke grootte, maar kan vooral handig zijn voor teams van 5 of meer personen vanwege de behoefte aan geco\xF6rdineerde samenwerking en beheer van projecten."}]},{id:"eeb904f2-67d4-40ea-a992-f09f5a2d1358",title:"MLflow",description:"MLflow is een open-source platform voor het beheren experimenten en pipelines van machine learning-modellen. Het biedt tools voor experiment tracking, het organiseren van code, het reproduceren van modellen en het samenwerken binnen teams. MLflow stelt gebruikers in staat om gemakkelijk experimenten te registreren, modellen te vergelijken, modelversies te beheren en ze naadloos in productie te implementeren, wat resulteert in meer gestroomlijnde en reproduceerbare machine learning-workflows. MLflow is volledig open-source en kan op vrijwel elke machine en cloud provider simpel ge\xEFnstalleerd worden. MLFlow wordt beheerd door Databricks. Wanneer u voor MLflow kiest moet u op passen dat de Databricks versie van MLflow meer functionaliteiten biedt dan de opensource variant. Veel cloud providers gebruiken MLflow onderwater wat een testament is hoe veelzijdig het gebruikt kan worden.",link:"https://mlflow.org/",img_link:"mlflow_logo.png",bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Wanneer u al gebruikmaakt van Databricks, is het beheren van een aparte MLflow-instantie overbodig. Databricks beheert zijn eigen versie van MLflow met extra functionaliteit, waardoor een ge\xEFntegreerde en naadloze ervaring wordt geboden voor het beheren van machine learning workflows binnen het Databricks-platform."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Het is belangrijk op te merken dat MLflow niet is ontworpen voor het uitvoeren van ETL-operaties. Voor dergelijke taken is aanvullende tooling buiten MLflow vereist. MLflow richt zich voornamelijk op het beheren van machine learning workflows, experimenten en modellen, terwijl ETL-functionaliteit wordt ondersteund door gespecialiseerde tools."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Het is belangrijk op te merken dat MLflow niet is ontworpen voor het uitvoeren van DataOps. Voor dergelijke taken is aanvullende tooling buiten MLflow vereist. MLflow richt zich voornamelijk op het beheren van machine learning workflows, experimenten en modellen, terwijl ETL-functionaliteit wordt ondersteund door gespecialiseerde tools."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Voor het verkrijgen van diepgaande inzichten in uw bedrijfsprestaties is het niet mogelijk om uitsluitend MLflow te gebruiken; hiervoor is aanvullende tooling buiten MLflow vereist. MLflow is met name gericht op het beheren van machine learning workflows en experimenten, terwijl uitgebreidere zakelijke inzichten vaak worden verkregen door integratie met specifieke business intelligence- en analysetools."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"Het is belangrijk op te merken dat het in MLflow niet mogelijk is om data drift automatisch te detecteren. Het detecteren van data drift meestal wordt afgehandeld door gespecialiseerde tools en methoden buiten MLflow."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"Het is belangrijk op te merken dat het in MLflow niet mogelijk is om model drift automatisch te detecteren. Het detecteren van model drift meestal wordt afgehandeld door gespecialiseerde tools en methoden buiten MLflow."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"Het is niet mogelijk om versiebeheer op uw data te hebben binnen MLflow; hiervoor moet een aanvullende tool zoals Data Version Control (DVC) worden toegevoegd. DVC biedt specifieke functionaliteiten voor het beheren van versies en het bijhouden van wijzigingen in datasets, waardoor een nauwkeurig en controleerbaar versiebeheer voor data mogelijk is."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Het is belangrijk op te merken dat MLflow niet automatisch optimale hyperparameters kan vinden; dit vereist handmatige afstemming en experimentatie. MLflow biedt echter integratie met hyperparameter tuning bibliotheken zoals Optuna en Hyperopt, waardoor gebruikers handmatig optimalisatieprocessen kunnen uitvoeren om de beste hyperparameters te identificeren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"MLflow heeft geen ingebouwde mogelijkheid om met een knop meerdere machine learning modellen te trainen en te testen. Voor dergelijke automatisering van experimenten is aanvullende scripting en tooling nodig, zoals bijvoorbeeld het gebruik van hyperparameter tuning bibliotheken in combinatie met MLflow om effici\xEBnte en geautomatiseerde modeltrainingen te realiseren."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"MLflow is niet ontworpen voor het annoteren van data of foto's. Voor taken zoals annotatie is het nodig om andere gespecialiseerde tools te gebruiken die specifiek zijn ontwikkeld voor data annotatie, zoals Labelbox of vergelijkbare tools."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Dankzij containerisatie in Kubernetes is het eenvoudig om MLflow te gebruiken, wat bijdraagt aan een gestroomlijnde implementatie en beheer van machine learning workflows. Deze aanpak biedt flexibiliteit en schaalbaarheid bij het draaien van MLflow in verschillende omgevingen."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"AWS biedt uitstekende mogelijkheden voor de integratie van MLflow, vaak in combinatie met hun bestaande MLOps-platform SageMaker. Hierdoor kunnen gebruikers profiteren van een uitgebreide omgeving voor het beheren en schalen van hun machine learning workflows op het AWS-cloudplatform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Azure biedt uitstekende mogelijkheden om MLflow te integreren, vaak in combinatie met hun bestaande MLOps-platform Azure ML. Dit biedt gebruikers een krachtige en ge\xEFntegreerde omgeving voor het beheren en schalen van machine learning workflows op het Azure-cloudplatform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"GCP biedt uitstekende mogelijkheden om MLflow te integreren, vaak in combinatie met hun bestaande MLOps-platform Vertex AI. Hierdoor kunnen gebruikers profiteren van een ge\xEFntegreerde en schaalbare omgeving voor het beheren en optimaliseren van machine learning workflows op het Google Cloud-platform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Het is eenvoudig om te beginnen met experimenteren wanneer u nog geen gebruikmaakt van een cloudplatform. MLflow kan worden uitgevoerd op een computer of server en is niet afhankelijk van een specifieke cloud provider, waardoor het een flexibele keuze is. Dit maakt het mogelijk voor gebruikers om on-premise te starten en later, indien gewenst, over te stappen naar een cloudgebaseerde omgeving."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"MLflow is ontwikkeld voor MLOps, en is al vaak ge\xEFntegreerd met de meeste dataplatforms in een aangepaste vorm. Deze integratie stelt gebruikers in staat om machine learning workflows effectief te beheren en te optimaliseren binnen diverse data- en cloudomgevingen."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"MLflow biedt een uitstekende integratie met alle grote cloudproviders, waardoor gebruikers flexibiliteit hebben bij het implementeren en beheren van machine learning workflows in diverse cloudomgevingen. Deze veelzijdige ondersteuning maakt het mogelijk om optimaal te profiteren van de specifieke mogelijkheden en services die elke cloudprovider biedt."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"MLflow is uitermate gebruiksvriendelijk en gemakkelijk te installeren op lokaal niveau, wat een naadloze ervaring biedt voor gebruikers die on-premise willen experimenteren en ontwikkelen binnen hun machine learning projecten. Deze toegankelijkheid draagt bij aan een snelle start en effici\xEBnt gebruik van MLflow-functionaliteiten."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:'MLflow is niet alleen gratis en opensource, maar biedt ook een transparante en actieve gemeenschap via de link, waardoor gebruikers toegang hebben tot voortdurende updates, ondersteuning en bijdragen van de bredere community.'},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:'MLflow is niet alleen gratis en opensource, maar biedt ook een transparante en actieve gemeenschap via de link, waardoor gebruikers toegang hebben tot voortdurende updates, ondersteuning en bijdragen van de bredere community.'},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"MLflow is een compact pakket met een focus op eenvoud, en biedt geen uitgebreide functionaliteiten voor DataOps of ETL. Hierdoor is het gemakkelijk te installeren en ideaal voor gebruikers die snel willen experimenteren binnen hun machine learning projecten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"In MLflow kunt u gemakkelijk uw experimenten bekijken en beheren. De intu\xEFtieve gebruikersinterface maakt het eenvoudig om experimentresultaten te volgen, modellen te beheren en inzicht te krijgen in de prestaties van verschillende iteraties van uw machine learning projecten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'MLflow heeft functionaliteiten specifiek ontwikkeld voor het cre\xEBren en onderhouden van large language en generatieve modellen. Zie link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"MLflow is uitermate geschikt voor het orkestreren van MLOps pipelines. Wanneer u echter meer wilt doen met DataOps, zoals het beheren van end-to-end data workflows, kan het gebruik van tools zoals Apache Airflow een waardevolle aanvulling zijn op uw toolkit. Samen bieden ze een ge\xEFntegreerde oplossing voor het effectief beheren van zowel machine learning- als data-operaties."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Het is mogelijk om modellen met MLflow te publiceren en statistieken ervan in te zien. MLflow biedt functies voor het loggen en bijhouden van experimentresultaten, waardoor gebruikers inzicht krijgen in de prestaties van getrainde modellen en de mogelijkheid hebben om deze resultaten te delen en te bekijken via de MLflow Tracking UI."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"MLflow is opensource en dus niet afhankelijk waar het ge\xEFnstalleerd wordt. Kijk zorgvuldig of het mogelijk is om het in uw huidige cloudplatform te installeren."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"MLflow is een compact pakket met een focus op eenvoud, en biedt geen uitgebreide functionaliteiten voor DataOps of ETL. Hierdoor is het gemakkelijk te installeren en ideaal voor gebruikers die snel willen experimenteren binnen hun machine learning projecten."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:"MLflow is niet ontworpen voor het annoteren van data of foto's. Voor taken zoals annotatie is het nodig om andere gespecialiseerde tools te gebruiken die specifiek zijn ontwikkeld voor data annotatie, zoals Labelbox of vergelijkbare tools."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:"MLflow is niet ontworpen voor het annoteren van data of foto's. Voor taken zoals annotatie is het nodig om andere gespecialiseerde tools te gebruiken die specifiek zijn ontwikkeld voor data annotatie, zoals Labelbox of vergelijkbare tools."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:`MLflow bevordert samenwerking binnen teams door functies zoals experiment tracking, model versioning en model deployment. Experiment tracking maakt het mogelijk om experimenten te documenteren en resultaten te delen, terwijl model versioning het beheer van modelversies vergemakkelijkt. Echter, MLflow mist ingebouwde ondersteuning voor Role-Based Access Control (RBAC), wat de samenwerking van teams kan belemmeren door het ontbreken van gedetailleerde toegangscontrole. + +Hoewel RBAC niet standaard wordt ondersteund, kunnen teams van 1, 5 of meer dan 10 personen MLflow nog steeds effectief gebruiken. Voor teams van 1 persoon biedt MLflow een handige manier om experimenten te beheren en modellen te volgen. Voor teams van 5 of meer personen kunnen aanvullende maatregelen voor toegangscontrole buiten MLflow nodig zijn om veilige samenwerking te garanderen. Bij teams van meer dan 10 personen kan het gebrek aan ingebouwde RBAC-functionaliteit echter een beperking vormen en kan het nodig zijn om uit te kijken naar aanvullende tools of oplossingen die dit bieden.`},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:`MLflow bevordert samenwerking binnen teams door functies zoals experiment tracking, model versioning en model deployment. Experiment tracking maakt het mogelijk om experimenten te documenteren en resultaten te delen, terwijl model versioning het beheer van modelversies vergemakkelijkt. Echter, MLflow mist ingebouwde ondersteuning voor Role-Based Access Control (RBAC), wat de samenwerking van teams kan belemmeren door het ontbreken van gedetailleerde toegangscontrole. + +Hoewel RBAC niet standaard wordt ondersteund, kunnen teams van 1, 5 of meer dan 10 personen MLflow nog steeds effectief gebruiken. Voor teams van 1 persoon biedt MLflow een handige manier om experimenten te beheren en modellen te volgen. Voor teams van 5 of meer personen kunnen aanvullende maatregelen voor toegangscontrole buiten MLflow nodig zijn om veilige samenwerking te garanderen. Bij teams van meer dan 10 personen kan het gebrek aan ingebouwde RBAC-functionaliteit echter een beperking vormen en kan het nodig zijn om uit te kijken naar aanvullende tools of oplossingen die dit bieden.`},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:`MLflow bevordert samenwerking binnen teams door functies zoals experiment tracking, model versioning en model deployment. Experiment tracking maakt het mogelijk om experimenten te documenteren en resultaten te delen, terwijl model versioning het beheer van modelversies vergemakkelijkt. Echter, MLflow mist ingebouwde ondersteuning voor Role-Based Access Control (RBAC), wat de samenwerking van teams kan belemmeren door het ontbreken van gedetailleerde toegangscontrole. + +Hoewel RBAC niet standaard wordt ondersteund, kunnen teams van 1, 5 of meer dan 10 personen MLflow nog steeds effectief gebruiken. Voor teams van 1 persoon biedt MLflow een handige manier om experimenten te beheren en modellen te volgen. Voor teams van 5 of meer personen kunnen aanvullende maatregelen voor toegangscontrole buiten MLflow nodig zijn om veilige samenwerking te garanderen. Bij teams van meer dan 10 personen kan het gebrek aan ingebouwde RBAC-functionaliteit echter een beperking vormen en kan het nodig zijn om uit te kijken naar aanvullende tools of oplossingen die dit bieden.`}]},{id:"340dcd09-44de-4ff6-bddf-0503b575f5cc",title:"ClearML",description:"ClearML is een end-to-end platform voor het beheren van machine learning workflows. Het biedt krachtige tools voor experiment tracking, automatisering, modelversiebeheer en samenwerking. Met functies voor het bijhouden van experimenten, het visualiseren van resultaten en het optimaliseren van modellen, stelt ClearML gebruikers in staat om effici\xEBnter te werken en beter inzicht te krijgen in hun machine learning-projecten, waardoor teams effectiever kunnen samenwerken en modellen sneller naar productie kunnen brengen.",link:"https://clear.ml/",img_link:"clearml_logo.png",bad_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"dwa"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Het wordt niet aangeraden om Databricks met ClearML te gebruiken. Databricks maakt gebruik van een eigen variant van MLflow, die qua functionaliteiten bijna identiek is aan ClearML. Het gebruik van ClearML zou duplicatie van functionaliteiten kunnen veroorzaken en mogelijk conflicteren met de ingebouwde MLflow-functionaliteiten in Databricks."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"ClearML is geoptimaliseerd voor Machine Learning Operations (MLOps) en ondersteunt momenteel geen Extract, Transform, Load (ETL) operaties. Voor dergelijke taken wordt aanbevolen om gebruik te maken van een specifieke tool die is ontworpen voor ETL-processen."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"ClearML is geoptimaliseerd voor Machine Learning Operations (MLOps) en ondersteunt momenteel geen Business Intelligence. Voor dergelijke taken wordt aanbevolen om gebruik te maken van een specifieke tool die is ontworpen voor BI-processen."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"ClearML biedt op dit moment geen out-of-the-box mogelijkheid om met \xE9\xE9n druk op de knop meerdere machine learning-modellen te trainen en te testen. Voor dit soort functionaliteiten kunt u gebruikmaken van aanvullende automatiseringstools of scripts om uw workflow aan te passen aan uw specifieke behoeften."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"ClearML is open source en kan daarom eenvoudig worden ge\xEFntegreerd in uw huidige AWS-omgeving. Dit biedt flexibiliteit en de mogelijkheid om ClearML aan te passen aan de specifieke behoeften van uw AWS-gebaseerde machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"ClearML is open source en kan dus eenvoudig worden ge\xEFntegreerd in uw huidige Azure-omgeving. Dit geeft u de flexibiliteit om ClearML aan te passen aan de specifieke behoeften van uw Azure-gebaseerde machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"ClearML is open source en kan dus eenvoudig worden ge\xEFntegreerd in uw huidige Google Cloud Platform (GCP)-omgeving. Deze openheid biedt flexibiliteit en aanpasbaarheid om ClearML te integreren in uw bestaande GCP-gebaseerde machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"ClearML is open source en kan daarom eenvoudig worden ge\xEFntegreerd in uw huidige Kubernetes-omgeving. Deze flexibiliteit maakt het mogelijk om ClearML aan te passen aan de specifieke behoeften van uw Kubernetes-gebaseerde machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"ClearML is open source en kan dus eenvoudig worden ge\xEFntegreerd in uw huidige omgeving. Deze openheid biedt flexibiliteit en aanpasbaarheid om ClearML te integreren in uw bestaande machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"ClearML kan eenvoudig on-premise worden gedraaid op een computer om te beginnen met experimenteren. Bovendien is het ook makkelijk om ClearML Flow op de cloud te hosten, waardoor meerdere datascientists eenvoudig toegang hebben tot de functionaliteiten en experimenten binnen hun lokale ontwikkelingsomgeving."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"ClearML is een geavanceerd platform speciaal ontwikkeld voor het stroomlijnen van Machine Learning Operations (MLOps)."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"ClearML is een open-source platform, waardoor het niet gebonden is aan een specifieke leverancier. Hoewel ClearML zelfstandig kan opereren, bieden sommige leveranciers integratiemogelijkheden om bijvoorbeeld gegevens beter te verwerken."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"ClearML is een opensource-platform dat eenvoudig on-premise kan worden ge\xEFnstalleerd op uw eigen systeem."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"ClearML is een opensource-platform, wat betekent dat het gratis te gebruiken is wanneer u ervoor kiest om het zelf te hosten."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"ClearML is opensource en daardoor kosteloos in gebruik. Voor extra functionaliteit en verbeterde ondersteuning bestaat de mogelijkheid om virtuele priv\xE9cloud (VPC) of on-premises servers aan te schaffen."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"ClearML beschikt over uitstekende functionaliteiten voor het bijhouden van experimenten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:`Het is mogelijk om data drift te detecteren in ClearML met behulp van aanvullende dashboarding. Meer informatie hierover is te vinden op de volgende link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:` Het is mogelijk om in ClearMl drift in modellen te detecteren met behulp van extra dashboarding. Zie link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:`ClearML heeft functionaliteiten specifiek ontwikkeld voor het cre\xEBren en onderhouden van large language en generatieve modellen. Meer informatie hierover is beschikbaar via deze link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:`ClearML biedt de mogelijkheid om verschillende versies van data bij te houden met behulp van hyperdatasets. Meer informatie hierover is beschikbaar op de volgende link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:`Met ClearML heeft u de mogelijkheid om optimalisatietaken uit te voeren voor het automatisch vinden van optimale hyperparameters. Raadpleeg de volgende link voor meer informatie. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Het is mogelijk om MLOps-pipelines te orkestreren met ClearML. ClearML biedt functionaliteiten voor het beheren en automatiseren van end-to-end machine learning workflows, waaronder het opzetten van MLOps-pipelines. Hiermee kunt u taken zoals gegevensvoorbereiding, modeltraining, evaluatie en implementatie in een ge\xEFntegreerde en geautomatiseerde workflow organiseren en beheren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Het is mogelijk om modellen in ClearML te publiceren. Gepubliceerde modellen kunnen aangeroepen worden door specifieke api-call er naar toe te sturen. ClearML geeft uitgebreide statistieken over het gebruik en de prestatie van de gepubliceerde modellen,"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Via de 'annotations'-tab in ClearML kunt u eenvoudig uw data of foto's voorzien van annotaties. Voor meer gedetailleerde informatie, kunt u de volgende link raadplegen. `},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"ClearML biedt robuuste dataops-functionaliteit, waardoor het gehele data-operatieproces wordt gestroomlijnd en verbeterd. Deze uitgebreide reeks functies binnen ClearML omvat databeheer, versiebeheer, het volgen van datalijnen en samenwerkingsworkflows, waardoor datawetenschappers en machine learning-teams hun databronnen effici\xEBnt kunnen beheren en benutten gedurende de gehele levenscyclus van hun projecten."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Via de 'annotations'-tab in ClearML kunt u eenvoudig uw data of foto's voorzien van annotaties. Voor meer gedetailleerde informatie, kunt u de volgende link raadplegen. `},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Via de 'annotations'-tab in ClearML kunt u eenvoudig uw data of foto's voorzien van annotaties. Voor meer gedetailleerde informatie, kunt u de volgende link raadplegen. `},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"ClearML bevordert samenwerking door het mogelijk te maken om experimenten te delen, te volgen en te reproduceren, waardoor teamleden gemakkelijk samen kunnen werken aan projecten. Het mist echter directe ondersteuning voor realtime samenwerking, zoals gelijktijdige bewerking van scripts of notebooks. Role-Based Access Control (RBAC) is beschikbaar, waardoor toegangscontrole mogelijk is op basis van rollen en rechten. ClearML is geschikt voor teams van 1, 5 of meer dan 10 personen, afhankelijk van de behoeften van het team en de schaal van het project."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"ClearML bevordert samenwerking door het mogelijk te maken om experimenten te delen, te volgen en te reproduceren, waardoor teamleden gemakkelijk samen kunnen werken aan projecten. Het mist echter directe ondersteuning voor realtime samenwerking, zoals gelijktijdige bewerking van scripts of notebooks. Role-Based Access Control (RBAC) is beschikbaar, waardoor toegangscontrole mogelijk is op basis van rollen en rechten. ClearML is geschikt voor teams van 1, 5 of meer dan 10 personen, afhankelijk van de behoeften van het team en de schaal van het project."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"ClearML bevordert samenwerking door het mogelijk te maken om experimenten te delen, te volgen en te reproduceren, waardoor teamleden gemakkelijk samen kunnen werken aan projecten. Het mist echter directe ondersteuning voor realtime samenwerking, zoals gelijktijdige bewerking van scripts of notebooks. Role-Based Access Control (RBAC) is beschikbaar, waardoor toegangscontrole mogelijk is op basis van rollen en rechten. ClearML is geschikt voor teams van 1, 5 of meer dan 10 personen, afhankelijk van de behoeften van het team en de schaal van het project."}]},{id:"f98aea21-f356-40ca-b064-1995ad04f720",title:"Dagshub",description:"DAGsHub is een ge\xEFntegreerd platform dat het proces van het beheren en versioneren van machine learning-modellen, datasets en code vereenvoudigt. Met zijn gebruiksvriendelijke interface en krachtige functies vergemakkelijkt DAGsHub samenwerking tussen datawetenschappers, waardoor ze hun werk kunnen delen en wijzigingen in realtime kunnen bijhouden.",link:"https://dagshub.com/",img_link:"dagshub_logo.png",bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Dagshub heeft momenteel geen directe mogelijkheid om data te benutten die beschikbaar is gesteld in Databricks; echter, het ondersteunt wel het gebruik van S3-compatibele opslag als een alternatieve methode om toegang te krijgen tot data in Databricks. Het platform zelf kan niet worden gehost op Databricks, maar biedt de keuze om on-premise of in de cloud van Dagshub ge\xEFnstalleerd te worden, zij het tegen een specifieke prijs."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Dagshub heeft de mogelijkheid om gebruik te maken van data die beschikbaar is gesteld in AWS, maar het platform kan niet draaien op AWS. In plaats daarvan biedt Dagshub de optie om on-premise of in de cloud van Dagshub zelf te worden ge\xEFnstalleerd, uiteraard tegen een bepaalde prijs."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Dagshub heeft de mogelijkheid om gebruik te maken van data die beschikbaar is gesteld in Azure, maar het platform kan niet draaien op Azure. In plaats daarvan biedt Dagshub de optie om on-premise of in de cloud van Dagshub zelf te worden ge\xEFnstalleerd, uiteraard tegen een bepaalde prijs."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Dagshub heeft de mogelijkheid om gebruik te maken van data die beschikbaar is gesteld in GCP, maar het platform kan niet draaien op GCP. In plaats daarvan biedt Dagshub de optie om on-premise of in de cloud van Dagshub zelf te worden ge\xEFnstalleerd, uiteraard tegen een bepaalde prijs."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Dagshub heeft de mogelijkheid om gebruik te maken van data die beschikbaar is gesteld in kubernetes, maar het platform kan niet draaien op kubernetes. In plaats daarvan biedt Dagshub de optie om on-premise of in de cloud van Dagshub zelf te worden ge\xEFnstalleerd, uiteraard tegen een bepaalde prijs."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Binnen Dagshub is het niet mogelijk om ETL-operaties uit te voeren, aangezien Dagshub exclusief is ontworpen voor ML Ops-functionaliteiten."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Binnen Dagshub is het niet mogelijk om Data Ops-operaties uit te voeren, aangezien Dagshub exclusief is ontworpen voor ML Ops-functionaliteiten."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Binnen Dagshub is het niet mogelijk om Business Intelligence-operaties , aangezien Dagshub exclusief is ontworpen voor ML Ops-functionaliteiten."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Dagshub, als niet-open-source platform, is exclusief beschikbaar voor bedrijven die bereid zijn ervoor te betalen."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"Dagshub, hoewel een krachtig platform voor Machine Learning Operations, ondersteunt momenteel geen automatische detectie van data drift, waardoor gebruikers zelf verantwoordelijk zijn voor het monitoren van eventuele veranderingen in de datasets."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"Dagshub, hoewel een krachtig platform voor Machine Learning Operations, biedt op dit moment geen ingebouwde functionaliteit voor het automatisch detecteren van model drift, waardoor gebruikers zelf verantwoordelijk zijn voor het proactief monitoren van veranderingen in de prestaties van modellen over de tijd."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Het automatisch vinden van optimale hyperparameters wordt momenteel niet ondersteund door Dagshub en zou vereisen dat extra code wordt geschreven om dit te implementeren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Voor het gelijktijdig trainen en testen van meerdere machine learning modellen met een druk op de knop is momenteel geen ingebouwde functionaliteit beschikbaar in Dagshub. Om dit te realiseren, zou het noodzakelijk zijn extra code te schrijven."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Dagshub heeft de mogelijkheid om gebruik te maken van data die beschikbaar is gesteld uit verschillende cloudplatforms, maar het is niet opensource en kan dus niet draaien op andere cloudplatforms. In plaats daarvan biedt Dagshub de optie om on-premise of in de cloud van Dagshub zelf te worden ge\xEFnstalleerd, uiteraard tegen een bepaalde prijs."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Dagshub kan worden beschouwd als het equivalent van GitHub voor machine learning, waarbij het de bestaande functionaliteiten van GitHub behoudt en aanvult met specifieke capaciteiten en functionaliteiten gericht op machine learning. Vooral voor bedrijven die nog niet actief zijn op een cloudplatform, vormt Dagshub een uitstekende startkeuze vanwege de eenvoud waarmee men ermee kan beginnen en waar samenwerking centraal staat."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Dagshub biedt een alternatief platform voor GitHub dat specifiek is afgestemd op machine learning. Dankzij de gebruikersinterface is het eenvoudig om gegevens te annoteren, experimenten op te zetten en modellen te publiceren."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Dagshub is een betaalde tool die bedrijven de flexibiliteit biedt om te opereren in de cloud, op een Virtual Private Cloud (VPC), of on-premise."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Dagshub is een betaalde tool die bedrijven de flexibiliteit biedt om te opereren in de cloud, op een Virtual Private Cloud (VPC), of on-premise."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Wanneer uw bedrijf al bekend is met platforms zoals GitHub of GitLab, zal de overgang naar Dagshub naadloos verlopen. Hoewel het gebruik van Dagshub vergelijkbaar is met dat van GitHub of GitLab, vereist het wel enige kennis van data science en machine learning. Het platform biedt een geavanceerde omgeving voor het beheren en delen van data science-projecten, waardoor het essentieel is om vertrouwd te zijn met de basisprincipes van deze disciplines om er optimaal gebruik van te maken."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Dagshub biedt ook repositories die vergelijkbaar zijn met GitHub. Wat Dagshub onderscheidt, is de introductie van een speciaal tabblad voor experimenten, waar gebruikers experimenten kunnen bekijken en eenvoudig nieuwe experimenten kunnen aanmaken."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:`Dagshub heeft functionaliteiten specifiek ontwikkeld voor het cre\xEBren en onderhouden van large language en generatieve modellen. Voor meer informatie, zie: link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Dagshub biedt een uitstekende dataversioning tool genaamd Dagshub DDA, en bovendien is het mogelijk om gebruik te maken van DVC (Data Version Control). Voor meer informatie, raadpleeg deze link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Dagshub biedt tooling genaamd Dagshub pipelines wat het mogelijk maakt om elementaire data-operaties uit te voeren. Door de integratie met MLflow wordt het mogelijk om de orkestratie tooling van MLflow te gebruiken,."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Dagshub biedt de mogelijkheid om uw machine learning modellen eenvoudig te publiceren, waardoor deze toegankelijk zijn via API-calls voor naadloze integratie en implementatie in verschillende toepassingen."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"Dagshub introduceert een annotatietabblad, waarmee gebruikers op een moeiteloze manier annotaties kunnen toevoegen aan zowel data als foto's, waardoor het annotatieproces effici\xEBnt en gebruiksvriendelijk wordt."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Dagshub, als niet-open-source platform, is exclusief beschikbaar voor bedrijven die bereid zijn ervoor te betalen."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Wanneer uw bedrijf al bekend is met platforms zoals GitHub of GitLab, zal de overgang naar Dagshub naadloos verlopen. Hoewel het gebruik van Dagshub vergelijkbaar is met dat van GitHub of GitLab, vereist het wel enige kennis van data science en machine learning. Het platform biedt een geavanceerde omgeving voor het beheren en delen van data science-projecten, waardoor het essentieel is om vertrouwd te zijn met de basisprincipes van deze disciplines om er optimaal gebruik van te maken."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:"Dagshub introduceert een annotatietabblad, waarmee gebruikers op een moeiteloze manier annotaties kunnen toevoegen aan zowel data als foto's, waardoor het annotatieproces effici\xEBnt en gebruiksvriendelijk wordt."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:"Dagshub introduceert een annotatietabblad, waarmee gebruikers op een moeiteloze manier annotaties kunnen toevoegen aan zowel data als foto's, waardoor het annotatieproces effici\xEBnt en gebruiksvriendelijk wordt."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Dagshub bevordert samenwerking door middel van real-time updates, projectmanagementtools en integratie met populaire platforms zoals GitHub en Slack. Het platform ondersteunt Role-Based Access Control (RBAC), waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers op basis van hun rollen. Ik zou Dagshub aanbevelen voor teams van 5 of meer personen, waar de behoefte aan gestructureerde samenwerking en co\xF6rdinatie groter is."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Dagshub bevordert samenwerking door middel van real-time updates, projectmanagementtools en integratie met populaire platforms zoals GitHub en Slack. H Het platform ondersteunt Role-Based Access Control (RBAC), waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers op basis van hun rollen. Ik zou Dagshub aanbevelen voor teams van 5 of meer personen, waar de behoefte aan gestructureerde samenwerking en co\xF6rdinatie groter is."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Dagshub bevordert samenwerking door middel van real-time updates, projectmanagementtools en integratie met populaire platforms zoals GitHub en Slack. Het platform ondersteunt Role-Based Access Control (RBAC), waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers op basis van hun rollen. Ik zou Dagshub aanbevelen voor teams van 5 of meer personen, waar de behoefte aan gestructureerde samenwerking en co\xF6rdinatie groter is."}]}];var i={tools:n};const t=[{id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",question_text:"Bent u actief op een van de volgende cloudplatforms?",type:"single",answers:[{id:"963aaa51-8a46-4d4e-9808-d25ea810560c",answer_text:"Databricks",explanation_text:""},{id:"ee245bf1-0447-4460-beb0-26ce8987a59a",answer_text:"AWS",explanation_text:""},{id:"03c4d074-2773-41cd-962a-892d13882ef4",answer_text:"Azure",explanation_text:""},{id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",answer_text:"GCP (Google cloud platform)",explanation_text:""},{id:"af017d7a-6e66-467a-87ad-1765a07563f3",answer_text:"Hosted Kubernetes",explanation_text:""},{id:"1f3396cf-8727-43c8-912d-0911517dc894",answer_text:"Anders",explanation_text:"Indien u of uw bedrijf geen gebruikmaakt van het hierboven genoemde cloudplatform, kan het zijn dat bepaalde dataplatforms mogelijk niet naadloos kunnen integreren."},{id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",answer_text:"Ik ben nog niet actief op een cloudplatform",explanation_text:"Wanneer u of uw bedrijf geen gebruikmaakt van een cloudplatform, kan het positief zijn dat het de volledige controle over de infrastructuur behoudt. Echter, als nadeel kan dit beperkte integratiemogelijkheden met cloud-gebaseerde dataplatforms met zich meebrengen, wat van invloed kan zijn op schaalbaarheid en toegankelijkheid."}],explanation_text:" Wanneer u of uw bedrijf reeds betrokken is bij specifieke cloudplatforms, kan dit de flexibiliteit van uw keuze met betrekking tot het gebruik van dataplatforms beperken."},{id:"fea3fc01-144d-4f41-b99e-0f556f6da751",question_text:"Welke functionaliteiten dienen ge\xEFntegreerd te zijn in het dataplatform?",type:"multi",answers:[{id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",answer_text:"ETL",explanation_text:" ETL staat voor Extract, Transform, Load, en het verwijst naar het proces van het extraheren, transformeren en laden van gegevens vanuit verschillende bronnen naar een bestemming, zoals een database, om ze bruikbaar en toegankelijk te maken voor analyses."},{id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",answer_text:"MLOps",explanation_text:"MLOps, of Machine Learning Operations, is een methodologie die gericht is op het integreren van machine learning-modellen in het ontwikkelings- en operationele proces, om een effici\xEBnte implementatie, monitoring en onderhoud van deze modellen mogelijk te maken."},{id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",answer_text:"DataOps",explanation_text:"DataOps (afkorting van data operations) is een datamanagementpraktijk wat zich bezig houd met die het bouwen, testen, implementeren en beheren van dataproducten. Het combineert technologie\xEBn en processen om het vertrouwen in data te verbeteren en de time-to-value van de dataproducten van uw bedrijf te verkorten."},{id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",answer_text:"Business intelligence",explanation_text:"Business Intelligence (BI) omvat het proces van het verzamelen, analyseren en presenteren van zakelijke gegevens om organisaties te ondersteunen bij het nemen van datagestuurde beslissingen."}],explanation_text:"Dataplatforms bieden verschillende functionaliteiten aan. Een dataplatform is meer gericht op het in ontwikkelingen en in gerbuik nemen van machine learning modellen (MLOps). Andere dataplatforms kunnen meer een een focus hebben op het real-time verwerken van grote aantallen data. "},{id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",question_text:"Waar moet het dataplatform draaien?",type:"single",answers:[{id:"37aff572-f1a8-4401-ac52-51183844c06c",answer_text:"Op de cloud",explanation_text:"Wanneer het platform op de cloud moet draaien, bijvoorbeeld op AWS, Azure of GCP, betekent dit dat de gegevens ook in de cloud worden opgeslagen en verwerkt. Een mogelijk nadeel van het gebruik van een dataplatform in de cloud zijn de doorlopende kosten, waaronder abonnements- en verbruikskosten, die op lange termijn van invloed kunnen zijn op de totale gebruikskosten. Niettemin worden de gegevens veilig online opgeslagen en verwerkt."},{id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",answer_text:"On-premise",explanation_text:"Als het dataplatform on-premise moet worden ingezet, impliceert dit dat u zelf de nodige capaciteiten moet hebben om veeleisende taken zoals machine learning uit te voeren, en dat uw gegevens on-premise worden opgeslagen en verwerkt. Dit beperkt de beschikbare opties, aangezien sommige dataplatforms uitsluitend online beschikbaar zijn, wat van invloed kan zijn op de keuze van een geschikt dataplatform."}],explanation_text:"Het is belangrijk om na te denken waar het dataplatform moet draaien, omdat dit de keuze be\xEFnvloedt tussen on-premises, cloud of hybride oplossingen, wat impact heeft op kosten, schaalbaarheid en toegankelijkheid van het dataplatform."},{id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",question_text:"Dient de gebruikte tool kosteloos te zijn en/of open-source?",type:"single",answers:[{id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",answer_text:"Ja, de tool moet gratis en/of open-source zijn",explanation_text:"Gratis tools bieden meestal geen offici\xEBle ondersteuning en zijn afhankelijk van community's en forums voor hulp, wat belangrijk is om te overwegen bij het kiezen van een dataplatform."},{id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",answer_text:"Nee, de tool mag betaald en hoeft niet open-source zijn ",explanation_text:"Betaalde tools bieden doorgaans ondersteuning en extra functionaliteiten aan in tegenstelling tot gratis varianten"}],explanation_text:"Het is belangrijk om te overwegen of de gebruikte tool kosteloos en/of open-source moet zijn bij het kiezen van een dataplatform, omdat dit direct invloed heeft op de totale kosten, flexibiliteit en onafhankelijkheid van de gebruikte technologie."},{id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",question_text:"Ben u of beschikt uw bedrijf momenteel over een data engineer en wilt u een aanzienlijke tijd investeren om een dataplatform op te zetten?",type:"single",answers:[{id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",answer_text:"Ja, het dataplatform moet daarom helemaal in te stellen zijn met mijn wensen en geavanceerde functionaliteiten moeten mogelijk zijn.",explanation_text:"Indien u veel de tijd kunt nemen voor de implementatie van dataplatforms, wordt het mogelijk om voor meer geavanceerde platformen te kiezen, die nauwkeuriger kunnen worden ge\xEFntegreerd in uw bestaande omgeving."},{id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",answer_text:"Nee, het dataplatform moet daarom makkelijk in gebruik en overzichtelijk blijven.",explanation_text:" Indien u niet bereid bent aanzienlijk te investeren in een dataplatform, is het raadzaam te kiezen voor een platform dat eenvoudig te configureren is, ook al kan dit ten koste gaan van bepaalde geavanceerde functionaliteiten."}],explanation_text:"Deze vraag wordt gesteld om inzicht te krijgen in de beschikbaarheid van technische vaardigheden en de bereidheid tot tijdsinvestering, omdat dit cruciale factoren zijn bij het beoordelen van de haalbaarheid en implementatie van een dataplatform binnen het bedrijf."},{id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",question_text:"Wat voor Machine learning functionaliteit moet beschikbaar zijn in het dataplatform?",type:"multi",answers:[{id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",answer_text:"Experiment tracking",explanation_text:"Experiment tracking is het proces van systematisch bijhouden, organiseren en analyseren van experimentele gegevens en resultaten binnen een dataproject."},{id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",answer_text:"Data Drift Tracking",explanation_text:"Data drift tracking is het voortdurend monitoren en analyseren van veranderingen in de distributie van data om ongewenste afwijkingen en inconsistenties te identificeren in machine learning-modellen."},{id:"83b528f4-3ea9-427e-9ce5-772685655d43",answer_text:"Model Drift Tracking",explanation_text:"Model drift tracking is het continu monitoren van prestatieafwijkingen in machine learning-modellen ten opzichte van de oorspronkelijke trainingsdata, om tijdig aanpassingen te maken en de nauwkeurigheid te behouden."},{id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",answer_text:"Large Language Model Ops(LLMOps)",explanation_text:"Large Language Model Ops (LLM Ops) is een benadering die zich richt op het effici\xEBnt ontwikkelen, implementeren en beheren van grote taalmodellen om de prestaties en schaalbaarheid in diverse toepassingen te optimaliseren."},{id:"265f2953-f37c-4c0b-8f61-e2a15118291e",answer_text:"Data versioning",explanation_text:"Data versioning is het proces van het systematisch bijhouden en beheren van verschillende versies van datasets, waardoor traceerbaarheid, reproduceerbaarheid en samenwerking in data-gerelateerde projecten worden verbeterd."},{id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",answer_text:"Automatische hyperparameter tuning",explanation_text:"Automatische hyperparameter tuning is een geoptimaliseerd proces waarbij machine learning-modellen automatisch worden aangepast door verschillende hyperparametercombinaties te verkennen en te evalueren om de beste prestaties te bereiken."},{id:"3a85d010-e8c4-4a29-a3dd-330376caf110",answer_text:"Orkestreren van datapijplijnen",explanation_text:"Het orkestreren van datapijplijnen is het geautomatiseerd plannen, co\xF6rdineren en uitvoeren van verschillende stappen binnen een data- of machine learning-pipeline om een gestroomlijnd en effici\xEBnt proces te waarborgen."},{id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",answer_text:"AutoML",explanation_text:"AutoML, of Automated Machine Learning, is een benadering waarbij machine learning-modellen automatisch worden gebouwd en geoptimaliseerd met minimale menselijke tussenkomst, met als doel het vereenvoudigen van het modelleerproces en het versnellen van de ontwikkeling van effectieve modellen."},{id:"3e6a8487-1793-4062-aee3-271c6e435818",answer_text:"Publiceren en in productie nemen van modellen",explanation_text:"Het publiceren van machine learning modellen is het proces van het beschikbaar stellen en toegankelijk maken van getrainde modellen voor gebruik in productieomgevingen of door externe gebruikers."}],explanation_text:"Deze vraag beoogt inzicht te verkrijgen in de specifieke machine learning-functionaliteiten die de gebruiker wenst te benutten binnen het dataplatform."},{id:"c8775160-e498-4292-a464-b45e222f5aa7",question_text:"Hoeveel dataspecialisten moeten gebruik maken van het platform?",type:"single",answers:[{id:"3e29d8d1-aef4-45a9-9728-606880731d87",answer_text:"1",explanation_text:"Indien uw organisatie slechts \xE9\xE9n data scientist of AI/data engineer heeft, is de keuze van het dataplatform wellicht minder belangrijk."},{id:"7ca2debe-b701-4e89-958d-6d3cff385de0",answer_text:"2-5",explanation_text:" Bij een teamgrootte van 2-5 data scientists of AI/data engineers is de keuze van het dataplatform belangrijker en dient rekening te houden met samenwerkingsvereisten en beveiligingsaspecten."},{id:"6687720c-ef4d-4663-8e79-a98694bb10d9",answer_text:"10+",explanation_text:"Bij een teamgrootte van 10 of meer data scientists of AI/data engineers wordt de keuze van het dataplatform van groter belang, waarbij schaalbaarheid, samenwerking, beveiliging en andere geavanceerde functionaliteiten van cruciaal belang zijn voor een effici\xEBnte en effectieve data-infrastructuur."}],explanation_text:"Deze vraag is bedoeld om inzicht te krijgen in het aantal data scientists en AI/data engineers dat gebruik zal maken van het platform, met bijzondere aandacht voor aspecten zoals beveiliging, samenwerking en andere functionaliteiten."},{id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",question_text:"Zijn de gegevens gelabeld, wat betekent dat ze zijn ge\xEFdentificeerd of gekenmerkt met specifieke categorie\xEBn of kenmerken?",type:"single",answers:[{id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",answer_text:"Ja, de data is voorzien van labels",explanation_text:"Volledig geannoteerde data is van essentieel belang is voor effectieve machine learning-modellen en analyses."},{id:"629c3eda-64d2-4768-a26d-e5a901c4e170",answer_text:"Nee, de data moet nog gelabeled worden",explanation_text:"Wanneer uw data nog gelabeled moet worden, wordt het aangeraden om van een annotatie tool gebruik te maken."},{id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",answer_text:"Ik weet niet of mijn data van een goede kwaliteit is",explanation_text:"Indien u niet weet of uw data goed geannoteerd is, kan het raadzaam zijn een grondige evaluatie uit te voeren, bij voorkeur met behulp van annotatietools of expertise, om de kwaliteit van de labels te verifi\xEBren voordat u een dataplatform kiest dat afhankelijk is van nauwkeurige annotaties."}],explanation_text:"Labels zijn essentieel voor machine learning-algoritmen om patronen te herkennen en taken zoals classificatie of voorspelling uit te voeren."}];var o={questions:t};const r=[{id:"963aaa51-8a46-4d213e-9808-d25ea810560c",title:"Databricks",description:"Databricks is a powerful and integrated analytics platform built on top of Apache Spark. It provides an easy-to-use interface for performing data engineering, data science, and machine learning tasks. Databricks makes it easy to process data, analyze it and gain insights through collaboration, advanced visualizations and the ability to use different programming languages \u200B\u200Bsuch as Python, Scala, SQL and R. The platform is often used for real-time data analysis, building of data pipelines and accelerating the development of machine learning models.",link:"https://www.databricks.com/",img_link:"databricks_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"Databricks is good at visualizing data due to its seamless integration with popular data analysis tools such as Apache Spark and SQL. The platform allows users to create powerful graphs and visualizations using tools such as Matplotlib, Seaborn and Databricks' proprietary visualization library. With the support of various programming languages \u200B\u200Bsuch as Python, Scala and R, users can perform complex analyzes and easily visualize them for better understanding and interpretation of data."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"e3e1cc59-5923-483a-94e7-986c96b757e0",explanation:'"Databricks is hosted on cloud platforms such as Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP)'},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"6b3b3542-9081-48c6-8e45-2e0556b25f67",explanation:'"Databricks is hosted on cloud platforms such as Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP)'},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"2ae2f467-4e22-47ba-9e0f-0d46a62c4f46",explanation:'"Databricks is hosted on cloud platforms such as Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP)'},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Databricks excels in ETL because of its scalability with Apache Spark, integrated environment for various data sources, various data transformation capabilities, automation and support for both batch and streaming processing of data."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Databricks excels at MLOps because of its integrated platform, scalability, advanced machine learning capabilities, automation and orchestration capabilities, and advanced monitoring and management capabilities."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"If you are already using Databricks, we recommend that you use the functionalities that have already been implemented in Databricks. Databricks is a complete package and offers out-of-the-box a wide range of functionality regarding MLops, DataOps, visualization and orchestration."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:'Databricks can be hosted on AWS. You can continue to use all the features that AWS offers and easily add Databricks to your current workflow. Installation and use is easy see: link. '},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:`Databricks can be hosted on AZURE. You can continue to use all the features that Azure offers and easily add Databricks to your current workflow. Installation and use is easy see: + link. `},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:`Databricks can be hosted on GCP. You can continue to use all the features that GCP offers and easily add Databricks to your current workflow. Installation and use is easy see: link. +`},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Databricks excels in DataOps because of its integrated platform, which combines scalability, automation, collaboration and advanced data engineering capabilities, allowing organizations to more effectively manage, transform and analyze data."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Databricks excels in business intelligence through its integrated platform that enables advanced data analysis, visualization and reporting, while also providing scalability, speed and collaboration, helping organizations generate faster insights and make better decisions based on their dates."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Databricks is not open source; it is a closed source commercial platform."},{question_id:"8aadcd11-ca15-4c09-b2d2-3159a318118b",answer_id:"735d232e-e287-4732-9728-d00c324343be",explanation:"Databricks has the ability to orchestrate tasks via Airflow. This means you need less new knowledge to apply Databricks."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"The MLflow variant of Databricks gives you an intuitive overview of your experiments, and thanks to the additions of Databricks you have many additional functionalities that are not available in the standard open source variant."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'Thanks to Lakehouse monitoring it is now possible to detect model drift. For more information, see: this link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'The MLflow variant of Databricks has been enriched with additional functionalities specifically designed for LLMOps. See this link for more details.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"The powerful combination of Apache Airflow and MLflow lets you effortlessly orchestrate pipelines, creating a seamless and integrated workflow for managing machine learning experiments and jobs."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:'Thanks to Databricks AutoML, machine learning models can be easily trained and selected with just the touch of a button. For more information, see: this link.'},{question_id:"563dcdf3-985d-4e1b-b5c7-b7b24d2330a2",answer_id:"26449ee9-91a7-412e-ae0f-e43aaa744659",explanation:"Databricks' robust Spark integration and ETL capabilities enable seamless real-time processing and display of data."},{question_id:"563dcdf3-985d-4e1b-b5c7-b7b24d2330a2",answer_id:"76bf60df-0e36-4013-aa63-c11fd5a38eaa",explanation:"Orchestration makes it easy to set up and run batch jobs, making it effortless to retrain and publish a machine learning model, for example."},{question_id:"563dcdf3-985d-4e1b-b5c7-b7b24d2330a2",answer_id:"1241c1e4-b038-42f1-be01-06f45bbb2179",explanation:"Databricks uses a modified variant of MLflow with numerous additional functionalities. This makes Databricks an ideal data platform for a complete end-to-end data workflow."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Databricks is designed to run on cloud infrastructure due to the complex requirements of scalability, computing power and storage required to process and analyze large amounts of data. It leverages the cloud to provide flexibility, resources and easy access to provide different data sources, which means it cannot be run on-premise."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'Annotating data via Databricks is not directly possible. For data annotation it is recommended to use external tools, such as Labelbox. Consult this link for more details.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'Annotating data via Databricks is not directly possible. For data annotation it is recommended to use external tools, such as Labelbox. Consult this link for more details.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"If your company is not yet active on a cloud platform, Databricks is a good choice to consider. It is a large and complete platform and offers functionalities for MLOps but also for processing large-scale data."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:`Thanks to Databricks' data lake called delta lake, it is possible to detect data drift. For more information, see: this link.`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Publishing and deploying machine learning models is possible using the MLflow model registry."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Databricks offers advanced collaboration features such as real-time collaboration in notebooks, shared libraries and version control, allowing teams to efficiently collaborate on analytics and machine learning models. Role-Based Access Control (RBAC) is enabled in Databricks, which allows user permissions are managed based on roles and responsibilities. Databricks is suitable for teams of 5 or more people, taking full advantage of the collaboration features, but can also be used by individual users for smaller projects."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Databricks offers advanced collaboration features such as real-time collaboration in notebooks, shared libraries and version control, allowing teams to efficiently collaborate on analytics and machine learning models. Role-Based Access Control (RBAC) is enabled in Databricks, which allows user permissions are managed based on roles and responsibilities. Databricks is suitable for teams of 5 or more people, taking full advantage of the collaboration features, but can also be used by individual users for smaller projects."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Databricks offers advanced collaboration features such as real-time collaboration in notebooks, shared libraries and version control, allowing teams to efficiently collaborate on analytics and machine learning models. Role-Based Access Control (RBAC) is enabled in Databricks, which allows user permissions are managed based on roles and responsibilities. Databricks is suitable for teams of 5 or more people, taking full advantage of the collaboration features, but can also be used by individual users for smaller projects."}],bad_compatible:[{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Databricks is not open source; it is a closed source commercial platform."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Databricks is designed to run on cloud infrastructure due to the complex requirements of scalability, computing power and storage required to process and analyze large amounts of data. It leverages the cloud to provide flexibility, resources and easy access to provide different data sources, which means it cannot be run on-premise."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"If you host Kubernetes yourself or through a provider, Databricks cannot easily be added to your current system. However, you can host Databricks via Databricks, AWS, Azure or GCP and connect it to your Kubernetes solution."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"If you do not use AWS, Azure or GCP, Databricks cannot easily be added to your current system. However, you can host Databricks via Databricks, AWS, Azure or GCP and connect it to your current solution."},{question_id:"8aadcd11-ca15-4c09-b2d2-3159a318118b",answer_id:"cb13fb65-7db4-4d52-b67f-39e885d023d4",explanation:"If you are already using a data lake or warehouse solution, Databricks will contain an unnecessary package of functions such as ETL and DataOps"},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:'Automatically finding the optimal hyperparameters is not built into Databricks by default, but it is quite easy to implement this via code. See this link for detailed instructions.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'Annotating data via Databricks is not directly possible. For data annotation it is recommended to use external tools, such as Labelbox. Consult this link for more details.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"By default, Databricks does not support data versioning, but it is considerably easy to install and integrate DVC into the Databricks workflow for effective data versioning."}]},{id:"963aaa51-8a46-4d4e-9808-d25ea81053210c",title:"Sagemaker",description:"Amazon SageMaker is a powerful and fully managed machine learning platform offered by Amazon Web Services (AWS). It allows users to easily build, train, and deploy machine learning models at scale. SageMaker provides an integrated development environment with built-in tools for data labeling, model training, and model deployment, simplifying the process of developing machine learning applications. SageMaker allows users to use various algorithms and frameworks, such as TensorFlow, PyTorch, and Scikit-learn, and take advantage of scalable computing resources to quickly and efficiently train models. Additionally, SageMaker enables models to be easily deployed into production with managed endpoints, allowing them to be seamlessly integrated into operational systems and applications.",link:"https://aws.amazon.com/sagemaker/",img_link:"sagemaker_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Although ETL is not possible directly in Amazon SageMaker, you can leverage AWS features to perform ETL tasks as SageMaker is an integral part of the AWS ecosystem."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Amazon SageMaker is a machine learning (ML) service provided by Amazon Web Services (AWS), SageMaker is a proprietary service specifically designed and managed by AWS. SageMaker is built and optimized to work within the AWS ecosystem, leveraging AWS infrastructure, services, and APIs. It is tightly integrated with AWS services such as S3, IAM, and others."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"SageMaker is at the core of AWS's MLOps offering, providing all the essential capabilities needed to manage machine learning processes smoothly and at scale. With integrated tools and services, SageMaker supports various phases of the end -to-end machine learning journey, such as dataset management, model training, hyperparameter optimization, deployment and monitoring It serves as a powerful solution across the broad spectrum of AWS services."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"DataOps is not directly possible in Amazon SageMaker, but since SageMaker is part of AWS, you can leverage AWS capabilities to perform DataOps tasks."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Direct visualization and data insights are not built into Amazon SageMaker. However, you could use various AWS features to perform these tasks since SageMaker is part of the broader AWS ecosystem."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'It is possible to annotate unlabeled data or photos in a structured way with SageMaker. See: link '},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"SageMaker has its own functionality for managing and running experiments, called SageMaker Experiments. Additionally, it offers the flexibility to integrate with MLflow, if preferred."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'SageMaker provides data drift detection functionality. More information about this is available at: this link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'SageMaker provides functionality for detecting model drift. More information about this is available at: this link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'SageMaker provides specific tools for Large Language Model (LLM) operations. For more detailed information on operationalizing LLM evaluation at scale with Amazon SageMaker Clarify and MLOps services, please see the following link link'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"It is possible to orchestrate advanced pipelines with Sagemaker. Sagemaker is connected to the AWS ecosystem which makes it possible to create state-of-the-art pipelines for both your data and machine learning issues,"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"With SageMaker it is possible to train multiple machine learning models with just one push of a button. This functionality makes it efficient and easy to develop and compare various models"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"It is not possible to run an AWS or SageMaker instance on-premise. It is important to carefully consider local capabilities as scaling instances on-premise is often more challenging and machine learning typically requires significant resources."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Amazon SageMaker is a machine learning (ML) service provided by Amazon Web Services (AWS), SageMaker is a proprietary service specifically designed and managed by AWS and is therefore not open source or free."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'It is possible to annotate unlabeled data or photos in a structured way with SageMaker. See: link '},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'It is possible to annotate unlabeled data or photos in a structured way with SageMaker. See: link '},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Amazon SageMaker is a machine learning (ML) service offered by Amazon Web Services (AWS). SageMaker is a proprietary service specifically designed and managed by AWS. The AWS ecosystem is a good choice for to keep in mind if you are not yet using a data platform as it offers a huge number of functionalities for all your data and machine learning issues."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"With SageMaker it's easy to publish, power up, and deploy a model."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Amazon SageMaker offers features such as sharing notebooks, model artifacts, and datasets, which promotes collaboration within teams by making it easy to share code and results. However, it lacks native support for real-time collaboration on the same notebook or documents, which can complicate team collaboration. Role-Based Access Control (RBAC) is possible in SageMaker, allowing administrators to assign specific access rights to users within the platform persons."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Amazon SageMaker offers features such as sharing notebooks, model artifacts, and datasets, which promotes collaboration within teams by making it easy to share code and results. However, it lacks native support for real-time collaboration on the same notebook or documents, which can complicate team collaboration. Role-Based Access Control (RBAC) is possible in SageMaker, allowing administrators to assign specific access rights to users within the platform persons."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Amazon SageMaker offers features such as sharing notebooks, model artifacts, and datasets, which promotes collaboration within teams by making it easy to share code and results. However, it lacks native support for real-time collaboration on the same notebook or documents, which can complicate team collaboration. Role-Based Access Control (RBAC) is possible in SageMaker, allowing administrators to assign specific access rights to users within the platform persons."}],bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Amazon SageMaker is a machine learning (ML) service offered by Amazon Web Services (AWS), while Databricks is a cloud computing platform offered by Databricks. SageMaker is a proprietary service designed specifically and managed by AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Amazon SageMaker is a machine learning (ML) service offered by Amazon Web Services (AWS), while Azure is a cloud computing platform offered by Microsoft. SageMaker is a proprietary service designed specifically and managed by AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Amazon SageMaker is a machine learning (ML) service offered by Amazon Web Services (AWS), while GCP is a cloud computing platform offered by Google. SageMaker is a proprietary service designed specifically and managed by AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Amazon SageMaker is a machine learning (ML) service provided by Amazon Web Services (AWS). SageMaker is a proprietary service specifically designed and managed by AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Amazon SageMaker is a machine learning (ML) service provided by Amazon Web Services (AWS). SageMaker is a proprietary service specifically designed and managed by AWS."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"It is not possible to use an AWS or SageMaker instance on-premise. It is important to carefully consider local capabilities as scaling instances on-premise is often more challenging and machine learning typically requires significant resources."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Amazon SageMaker is a machine learning (ML) service provided by Amazon Web Services (AWS), SageMaker is a proprietary service specifically designed and managed by AWS and is therefore not open source or free."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Out-of-the-box, SageMaker does not support data versioning, but you can implement it yourself. For more information on implementing data versioning with SageMaker, see the following link: link. '},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"By default, SageMaker does not provide a built-in ability to automatically find the optimal hyperparameters. You will need to implement this yourself, for example by writing and using hyperparameter tuning scripts."}],match:{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"It is possible to annotate unlabeled data or photos with Sagemaker. See: https://docs.aws.amazon.com/sagemaker/latest/dg/sms.html"}},{id:"963abb12-8a46-4d4e-9808-d25ea810560c",title:"Azure ML",description:"Azure Machine Learning (Azure ML) is a comprehensive cloud-based platform from Microsoft for building, training, and deploying machine learning models. It provides a suite of tools and services that support developers and data scientists in creating cutting-edge solutions for data analysis and AI. With Azure ML, users can easily run experiments, build models with popular frameworks such as TensorFlow, PyTorch, and scikit-learn, and scale these models using powerful computing resources in the cloud machine learning (AutoML) that simplify the process of model selection, training, and deployment for users without extensive machine learning expertise. Azure ML also supports model deployment using containerized solutions and provides model performance monitoring capabilities and managing the lifecycle of machine learning models. By integrating with other Azure services, users can take advantage of a wide range of data management, security, and scalability capabilities, allowing them to build end-to-end solutions for their machine learning and AI projects in the cloud.",link:"https://azure.microsoft.com/nl-nl/products/machine-learning",img_link:"azureml_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"Nice"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"6b3b3542-9081-48c6-8e45-2e0556b25f67",explanation:"Perfect match"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and is the easiest and best option when using Azure due to a close and good integration of functionalities in both."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Although ETL is not built directly into Azure Machine Learning, you can leverage the extensive capabilities within the Azure ecosystem to perform ETL tasks, leveraging specific Azure services for effective Extract, Transform, Load (ETL) processes."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Azure Machine Learning (Azure ML) is the core component for MLOps within the extensive Azure ecosystem. With a comprehensive set of capabilities, Azure ML supports managing diverse machine learning processes seamlessly and at scale. Built-in with essential tools and services, Azure ML guides users through the entire end-to-end machine learning journey, including dataset management, model training, hyperparameter optimization, deployment, and monitoring. As a powerful and integrated solution across the broad spectrum of Azure services, Azure ML empowers users able to develop and operationalize advanced machine learning models."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"DataOps is not built directly into Azure Machine Learning, but because Azure ML is part of the broader Azure ecosystem, you can leverage features within Azure to perform DataOps tasks and manage your data workflow."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Direct visualization and insights from data are not built into Azure Machine Learning. However, you should leverage the rich features within the broader Azure ecosystem to generate data visualization and insights."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'It is possible to annotate your data or photos via Azure Machine Learning. For detailed information about labeling data, please refer to the following link: See: link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"It is possible to create experiments and gain deep insights using tools within Azure Machine Learning. This allows you to perform deep analysis and effectively assess the results of your machine learning experiments."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:`Data drift can be detected using Azure Machine Learning. For detailed information on monitoring datasets and detecting data drift, please refer to the following link: +link. `},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"Azure Machine Learning (Azure ML) provides the ability to detect model drift through a visual indicator in their dashboard. This allows users to easily and effectively observe and evaluate changes in the performance of machine learning models through a clean and intuitive interface. This feature helps proactively manage and maintain models in production, enabling organizations to monitor and maintain the accuracy and relevance of their models over time."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'Azure Machine Learning provides specific functionality aimed at operationalizing and training Large Language Models. For an introduction and more information about LLMOps, please see the following link: link< /a> .'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Azure Machine Learning provides tools to track and store the versions of your datasets. For more information about versioning and tracking datasets, see the following link: link . '},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Within Azure's extensive ecosystem, it is possible to create pipelines for both DataOps and MLOps. These pipelines provide a streamlined and automated workflow for managing both data editing and machine learning operations. By leveraging the various services and tools within Azure, users can set up end-to-end processes including data processing, model training, deployment and monitoring."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Azure ML allows users to train and test multiple machine learning models with just the click of a button, without having to write additional code. This automated capability simplifies and accelerates the experimentation process, helping users can quickly understand the performance of different models without extensive manual interventions."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"It is possible to publish machine learning models in Azure Machine Learning. The published models are easily accessible via API calls, giving users a streamlined and flexible way to integrate their machine learning models into production environments. "},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure, so it is not possible to use a variant of it locally"},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure. It is not open source and not free."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible, but often comes at the expense of functionality"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'It is possible to annotate your data or photos via Azure Machine Learning. For detailed information about labeling data, please refer to the following link: See: link.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'It is possible to annotate your data or photos via Azure Machine Learning. For detailed information about labeling data, please refer to the following link: See: link.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure. The Azure ecosystem is a good choice to consider if you are not yet using a data platform as it offers a huge number of functionalities for all your data and machine learning issues."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Azure ML offers features such as model versioning, collaborative experimentation, and shared datasets, which promote collaboration within teams. However, it lacks real-time code editing collaboration capabilities to facilitate concurrent changes. Role-Based Access Control (RBAC) is possible in Azure ML. The system is suitable for teams of all sizes, including teams of 1, 5 or more than 10 people, due to the scalability and flexibility of the service."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Azure ML offers features such as model versioning, collaborative experimentation, and shared datasets, which promote collaboration within teams. However, it lacks real-time code editing collaboration capabilities to facilitate concurrent changes. Role-Based Access Control (RBAC) is possible in Azure ML. The system is suitable for teams of all sizes, including teams of 1, 5 or more than 10 people, due to the scalability and flexibility of the service."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Azure Machine Learning (Azure ML) provides features such as model versioning, collaborative experimentation, and shared datasets, which promote collaboration within teams. However, it lacks capabilities for real-time collaboration in code editing to facilitate concurrent changes . Role-Based Access Control (RBAC) is possible in Azure ML. The system is suitable for teams of all sizes, including teams of 1, 5 or more than 10 people, due to the scalability and flexibility of the service."}],bad_compatible:[{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"e3e1cc59-5923-483a-94e7-986c96b757e0",explanation:"Can't"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"2ae2f467-4e22-47ba-9e0f-0d46a62c4f46",explanation:"Can't"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and cannot be used in Databricks. It is possible to use an Azure variant of Databricks."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and cannot be used in AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and cannot be used in GCP."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and cannot be used in a hosted Kubernetes architecture."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure, so it is not possible to use a variant of it locally"},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible, but often comes at the expense of functionality"},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure. It is not open source and not free."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"It is not possible to automatically find optimal hyperparameters in Azure Machine Learning. Optimizing hyperparameters requires additional work and may require the use of hyperparameter tuning techniques."}],match:{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"It is possible to annotate your data or photos via Azure ML. See: https://learn.microsoft.com/en-us/azure/machine-learning/how-to-label-data?view =azureml-api-2"}},{id:"964aaa51-8a46-4d4e-9808-d25ea810560c",title:"Vertex ai",description:"Vertex AI is a comprehensive machine learning platform from Google Cloud for building, training, and deploying AI models in the cloud. It offers a range of tools and services that support developers and data scientists in creating advanced data analytics and AI solutions. Vertex AI allows users to effortlessly run experiments, build models with popular frameworks such as TensorFlow and scikit-learn, and scale them using powerful cloud computing resources. The platform includes automated machine learning (AutoML) capabilities. simplifying the process of model selection, training and deployment for users without deep machine learning expertise. Vertex AI also supports model deployment using containerized solutions and provides model performance monitoring and management capabilities. the lifecycle of AI models. With integration with other Google Cloud services, users can take advantage of a wide range of data management, security, and scalability capabilities, helping them build end-to-end solutions for their AI and machine learning projects. in the cloud.",link:"https://cloud.google.com/vertex-ai?hl=nl",img_link:"vertex_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"Nice"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"2ae2f467-4e22-47ba-9e0f-0d46a62c4f46",explanation:"Yes"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"c7e8fbb4-936d-47e7-b2fe-6d21b0be5235",explanation:"Yes"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Vertex AI, Google's cutting-edge cloud-based machine learning service, has been meticulously designed to integrate seamlessly with the Google Cloud Platform (GCP), providing perfect synergy with Google's extensive cloud services."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Google Cloud offers an integrated Kubernetes service called Google Kubernetes Engine (GKE), which is specifically designed to make Kubernetes clusters easy to create and manage in the cloud. Although Vertex AI does not specifically support running Kubernetes clusters such as Google Kubernetes Engine (GKE), Kubernetes can be used in combination with Vertex AI to deploy and manage machine learning workloads."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Although ETL is not directly possible with Vertex AI, as it is an integral part of Google Cloud Platform (GCP), you can leverage the various features within GCP to effectively perform Extract, Transform, Load (ETL) tasks to carry out."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Vertex AI is the advanced MLops tool within the Google Cloud Platform (GCP) ecosystem. This powerful tool is specifically designed to support the full spectrum of machine learning operations, from data entry to model deployment."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"While DataOps is not built directly into Vertex AI, as an essential part of Google Cloud Platform (GCP), you can leverage the various features within GCP to perform DataOps tasks and effectively manage your data workflow. "},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Although gaining insights and creating visualizations is not built directly into Vertex AI, as an integrated part of Google Cloud Platform (GCP), you can leverage the various features within GCP to perform these tasks effectively feed."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"It is possible to track experiments via TensorBoard in Vertex AI."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'It is possible to detect data drift in your data using Vertex AI. See: link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'It is possible to detect model drift using Vertex AI. See: link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Within Vertex AI and the extensive functionalities of Google Cloud Platform (GCP), it is possible to create and execute both DataOps pipelines and MLOps pipelines."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"With Vertex AI it is possible to train multiple machine learning models at the touch of a button without the need for manual coding."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'It is possible to annotate data, objects or photos with Vertex AI. For detailed instructions, see link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"With Vertex AI it is possible to publish machine learning models and easily invoke them via API calls."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Vertex AI is Google's cloud-based machine learning service and is available exclusively on the Google Cloud Platform (GCP). Therefore, it is not possible to use a local variant of Vertex AI."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Vertex AI is Google's cloud-based machine learning service and is available exclusively on the Google Cloud Platform (GCP). Therefore, it is not possible to use a local or free variant of Vertex AI."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but at the expense of functionality"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'It is possible to annotate data, objects or photos with Vertex AI. For detailed instructions, see link.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'It is possible to annotate data, objects or photos with Vertex AI. For detailed instructions, see link.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Vertex AI, Google's cloud-based machine learning service, is designed exclusively for use within the Google Cloud Platform (GCP) and cannot be installed or run on other cloud providers. The GCP ecosystem is a good choice for This is something to consider if you are not yet using a data platform as it offers a huge number of functionalities for all your data and machine learning issues."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Vertex AI promotes collaboration through integrated model versioning tools, allowing teams to easily share, monitor, and deploy models. However, the lack of built-in collaborative documentation and note-taking functionality can complicate collaboration. Role-Based Access Control (RBAC ) is possible in Vertex AI, allowing teams to manage access rights based on roles and responsibilities. This system can be used effectively for teams of 5 people or more, where the structure and control of RBAC are of greater value."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Vertex AI promotes collaboration through integrated model versioning tools, allowing teams to easily share, monitor, and deploy models. Role-Based Access Control (RBAC) is enabled in Vertex AI, allowing teams to manage access rights based on roles and responsibilities. This system can be used effectively for teams of 5 people or more, where the structure and control of RBAC are of greater value."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Vertex AI promotes collaboration through integrated model versioning tools, allowing teams to easily share, monitor, and deploy models. Role-Based Access Control (RBAC) is enabled in Vertex AI, allowing teams to manage access rights based on roles and responsibilities. This system can be used effectively for teams of 5 people or more, where the structure and control of RBAC are of greater value."}],bad_compatible:[{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"e3e1cc59-5923-483a-94e7-986c96b757e0",explanation:"Nope"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"6b3b3542-9081-48c6-8e45-2e0556b25f67",explanation:"Nope"},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Vertex AI is Google's cloud-based machine learning service and is available exclusively on the Google Cloud Platform (GCP). Therefore, it is not possible to use a local or free variant of Vertex AI."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Vertex AI is Google's cloud-based machine learning service and cannot be installed or run on Databricks as these platforms are from different cloud providers."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Vertex AI is Google's cloud-based machine learning service and cannot be installed or run on AWS as these platforms are from different cloud providers."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Vertex AI is Google's cloud-based machine learning service and cannot be installed or run on Azure as these platforms are from different cloud providers."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Vertex AI, Google's cloud-based machine learning service, is designed exclusively for use within the Google Cloud Platform (GCP) and cannot be installed or run on other cloud providers."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Vertex AI is Google's cloud-based machine learning service and is available exclusively on the Google Cloud Platform (GCP). Therefore, it is not possible to use a local variant of Vertex AI."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but at the expense of functionality"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:"GCP, including Vertex AI, does not currently provide specific functionality for operationalizing or training Large Language Models. However, these tasks can be accomplished through MLops, using broader machine learning operational capabilities practices."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"Data versioning is not currently built into Vertex AI or GCP, but there are options to implement and manage this yourself."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Automatically finding the optimal hyperparameters is not currently built directly into Vertex AI, but it is still possible to implement this through custom code."}]},{id:"ee8b301a-22ab-4e40-9ad7-3e38cc9e3723",title:"KubeFlow",description:"Kubeflow is an open-source platform designed to orchestrate and manage machine learning workflows on Kubernetes, making it easier to develop, train, and deploy scalable, portable, and reproducible AI models in production environments.",link:"https://www.kubeflow.org/",img_link:"kubeflow_logo.png",bad_compatible:[{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Databricks does not currently support running a Kubernetes cluster."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"KubeFlow's MLOps tooling currently does not include Data Drift detection functionality."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"KubeFlow's MLOps tooling does not currently include Model Drift detection functionality."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:"KubeFlow does not provide out-of-the-box tooling for Large Language Model Operations (LLMOps). However, it is possible to use the regular MLOps functionality to develop a Large Language Model."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"KubeFlow does not provide out-of-the-box tooling for data versioning. Nevertheless, it is possible to use the regular MLOps functionality to develop a Large Language Model."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"It is currently not possible to automatically find the optimal hyperparameters through KubeFlow. Nevertheless, this functionality can still be implemented using custom code."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"Although it is not possible to annotate data with the available tools in KubeFlow, it is easy to install tools yourself using containerization in Kubernetes."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Unfortunately, KubeFlow does not provide the ability to gain deep insights into your data to make informed business decisions. However, it is possible to add this yourself by adding the tooling to Kubernetes yourself."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Kubeflow offers features like shared Jupyter Notebooks and automated model deployments that promote team collaboration. However, it lacks integrated code review and collaborative model versioning, which can hinder collaboration. Role-Based Access Control (RBAC) is Kubeflow can be used effectively for teams of 5 or more people, but for smaller teams of 1-4 people it may be too extensive."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"When running a Kubernetes cluster on AWS, it is possible to use KubeFlow. It is recommended to consider KubeFlow if your business is deeply integrated with Kubernetes. However, if you use AWS features extensively, Amazon SageMaker is also a suitable solution."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"When running a Kubernetes cluster on Azure, it is possible to use KubeFlow. It is recommended to consider KubeFlow if your company is deeply integrated with Kubernetes. However, if you use Azure features extensively, Azure Machine Learning is also a suitable solution."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"When running a Kubernetes cluster on GCP, it is possible to use KubeFlow. It is recommended to consider KubeFlow if your business is deeply integrated with Kubernetes. However, if you use GCP features extensively, Vertex AI is also a suitable solution."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"If you are already using Kubernetes, Kubeflow is an excellent choice to integrate seamlessly into your existing workflow."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Kubeflow uses Argo, which allows the integration of ETL into your workflow. Thanks to containerization in Kubernetes, you also have the flexibility to implement and connect an ETL library yourself, for example with tools such as Airflow."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"With Kubeflow you have access to a diverse range of MLOps tools. What sets it apart from other tools is the ability to add desired MLOps functionality yourself, thanks to containerization in Kubernetes."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Kubeflow uses Argo, which enables the integration of ETL into your workflow. Thanks to containerization in Kubernetes, you also have the option to implement and connect a DataOps library yourself, for example with tools such as Airflow. "},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Kubeflow can only be integrated into Kubernetes. Because Kubernetes is not specifically tied to a particular platform, it can be deployed in a variety of ways. When a Kubernetes instance is running in the cloud, Kubeflow can be installed."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Kubeflow is an open-source project and can only be integrated into Kubernetes. If you are running Kubernetes locally, Kubeflow can be easily installed and integrated into your local environment."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:'Kubeflow is a free and open-source platform. See: link. '},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:'Kubeflow is a free and open-source platform. See: link. '},{question_id:"8aadcd11-ca15-4c09-b2d2-3159a318118b",answer_id:"d8d29384-8b01-47ab-848a-c5ae13cc5baa",explanation:"If you are already using Kubernetes, Kubeflow is an excellent choice, integrating seamlessly into your existing workflow to provide an optimized experience."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"KubeFlow pipelines allow you to effortlessly track and manage your experiments, greatly simplifying the process of experimentation and management."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"With KubeFlow pipelines it is possible to orchestrate pipelines."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"With KubeFlow AutoML, you can effortlessly train and test multiple machine learning models at the touch of a button, without having to write any code."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:"Although it is not possible to annotate data with the available tools in KubeFlow, it is easy to install tools yourself using containerization in Kubernetes."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:"Although it is not possible to annotate data with the available tools in KubeFlow, it is easy to install tools yourself using containerization in Kubernetes."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"If you want to use Kubeflow, you must use Kubernetes underlying it. If you do this, Kubeflow is an excellent choice to use as a data platform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"If you have chosen a cloud platform, check carefully whether you want to use Kubernetes. If so, Kubeflow is an excellent choice."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:'The Kubeflow tool called MLRun serving allows you to publish and deploy trained models. See link.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Kubeflow offers features like shared Jupyter Notebooks and automated model deployments that promote team collaboration. However, it lacks integrated code review and collaborative model versioning, which can hinder collaboration. Role-Based Access Control (RBAC) is Kubeflow can be used effectively for teams of 5 or more people, but for smaller teams of 1-4 people it may be too extensive."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Kubeflow offers features such as shared Jupyter Notebooks and automated model deployments that promote collaboration within teams. However, it lacks an integrated feature for code review and collaborative model versioning, which can hinder collaboration. Based Access Control (RBAC) is possible. Kubeflow can be used effectively for teams of 5 or more people, but for smaller teams of 1-4 people it may be too extensive."}]},{id:"994c4786-2a83-40e6-9ada-72b4f80268ee",title:"H2O.AI",description:"H2O.ai democratizes machine learning for business users by offering a suite of tools. Their primary platform, H2O, enables building and deploying ML models with an easy-to-use web interface. Deep Water extends this out with tighter integration for GPU-based deep learning, Sparkling Water integrates with Apache Spark and Steam is an enterprise solution for deploying ML models via APIs. Driverless AI simplifies model development for non-technical users by simplifying tasks like feature engineering and algorithm selection automate.",link:"https://h2o.ai/",img_link:"h2o_logo.png",bad_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"H2O.AI does not offer specific capabilities for DataOps. However, they do have partnerships with several companies that do offer this."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Although H2O.AI does not provide built-in functionality to automatically find optimal hyperparameters, this can still be implemented via code."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Databricks acts as an advanced data platform and is a service provider. It is currently not possible to install H2O.AI directly on Databricks."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"H2O.AI does not offer specific options for ETL (Extract, Transform, Load). They do have a partnership with KNIME, which is an open source ETL tool. This makes it possible, but does require additional tooling,"},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:'H2O.AIO offers options for BI but this requires a lot of programming work. It does not offer visualization options. See the link for more information.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"However, H2O.ai lacks capabilities for advanced model interpretation and collaboration features such as integrated code versioning, which can hinder collaboration. Role-Based Access Control (RBAC) is possible through integration with external tools such as LDAP or Active Directory. H2O. AI is suitable for teams of 5 people or more, offering scalability for larger teams, but may be too extensive for an individual user."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"H2O.AI is an open source solution and therefore not limited to a specific vendor. It can be deployed on different cloud instances."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"H2O.AI is a specialized tool for MLOps, designed to efficiently manage and optimize machine learning workflows."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'It is possible to detect drift in the data via H2O.AI. Please refer to the link for more detailed information.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"H2O.AI enables model drift detection. This allows you to identify changes in data and proactively respond to shifts in data distribution to maintain model performance."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'The H2O.AI Feature Store makes it easy to keep track of versions of your dataset. See the link for more information.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"H2O.AI is an open source solution and therefore not limited to a specific vendor. It can be deployed on different cloud instances."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"H2O.AI is an open source solution and therefore not limited to a specific vendor. It can be deployed on different cloud instances."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"H2O.AI is an open source solution and therefore not limited to a specific vendor. It can be deployed on different cloud instances."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"H2O.AI is an open source solution and therefore not limited to a specific vendor. It can be deployed on different cloud instances."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"H2O.AI is an open source tool that can be installed and run both on-premise and in the cloud. In addition, H2O.AI offers the option to use their servers for a fee, giving users flexibility in their implementation choices."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"H2O.AI is an open source tool that can be installed and run both on-premise and in the cloud. In addition, H2O.AI offers the option to use their servers for a fee, giving users flexibility in their implementation choices."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"H2O.AI is an open source tool that can be installed and run both on-premise and in the cloud. In addition, H2O.AI offers the option to use their servers for a fee, giving users flexibility in their implementation choices."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"H2O.AI is an open source tool that can be installed and run both on-premise and in the cloud. In addition, H2O.AI offers the option to use their servers for a fee, giving users flexibility in their implementation choices."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"H2O.AI stands out for its user-friendliness, with an installation process that is significantly easier compared to other tools in the same domain. This accessibility also extends to use, with H2O.AI offering intuitive features that make it easier for users to work effectively with the tool. This focus on ease of use makes H2O.AI an attractive choice for those looking for a powerful yet accessible machine learning platform."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Setting up experiments with H2O.AI can be accomplished in several ways. H2O.AI provides separate experimental tools for each of their components, such as driverless.ai or Hydrogen Torch. This approach allows users to set up specific tools that best suit their needs, and provides flexibility in tackling various machine learning experiments."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'H2O.AI has invested significantly in LLMOps (Large Language Model Operations) and has therefore become one of the best tools for developing and deploying LLM. Please refer to the link for more information.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"The use of H2O.ASSEMBLY and Scikit pipelines makes it possible to orchestrate pipelines. There is little documentation available on how advanced this functionality is."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:'H2O.AI offers a powerful tool called Driverless AI, which can train and test multiple machine learning models at the touch of a button. See the link for more information.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'H2O.AI provides advanced tooling for annotating both data and photos. For more information, see link.'},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"H2O.AI stands out for its user-friendliness, with an installation process that is significantly easier compared to other tools in the same domain. This accessibility also extends to use, with H2O.AI offering intuitive features that make it easier for users to work effectively with the tool. This focus on ease of use makes H2O.AI an attractive choice for those looking for a powerful yet accessible machine learning platform."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'H2O.AI provides advanced tooling for annotating both data and photos. For more information, see link.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'H2O.AI provides advanced tooling for annotating both data and photos. For more information, see link.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"H2O.AI is open source and therefore not dependent on a cloud platform. Research whether you want to use the H2O.AI cloud platform or whether you want to use another cloud platform and H2O.AI on this want to configure."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:'With H2O.AI MLOps it is possible to deploy and use machine learning models in production. See the link for more information.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"However, H2O.ai lacks capabilities for advanced model interpretation and collaboration features such as integrated code versioning, which can hinder collaboration. Role-Based Access Control (RBAC) is possible through integration with external tools such as LDAP or Active Directory. H2O. AI is suitable for teams of 5 people or more, offering scalability for larger teams, but may be too extensive for an individual user."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"However, H2O.ai lacks capabilities for advanced model interpretation and collaboration features such as integrated code versioning, which can hinder collaboration. Role-Based Access Control (RBAC) is possible through integration with external tools such as LDAP or Active Directory. H2O. AI is suitable for teams of 5 people or more, offering scalability for larger teams, but may be too extensive for an individual user."}],match:{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"dwa"}},{id:"d5cfa187-4147-4177-8091-491f244f6344",title:"Data robot",description:"DataRobot is an automated machine learning platform that helps companies build, deploy, and manage powerful AI models without extensive programming knowledge. It provides an intuitive interface and advanced automation tools that accelerate and optimize the model development process, helping users can quickly and accurately build predictive models for various business needs.",link:"https://www.datarobot.com/",img_link:"datarobot_logo.png",bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"It is not possible to run DataRobot on external cloud platforms. It is advisable to investigate whether DataRobot offers functionalities to read and use your specific stored data."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"DataRobot is primarily focused on MLOps and does not provide specific support for DataOps. DataOps-related tasks must be performed before the data is read into DataRobot. The platform focuses on managing machine learning operations."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"DataRobot is primarily designed for MLOps, and does not support ETL operations. These operations must be performed before the data is read into DataRobot."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"DataRobot is primarily intended for MLOps and does not offer specific functionalities for BI. The platform focuses on managing machine learning operations."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Using DataRobot on-premise is not possible. Access to DataRobot is only possible via their servers and for a fee."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Datarobot is not open source and must be purchased via a periodic subscription. Also, using more resources also entails additional costs."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:`Data versioning is not directly possible with DataRobot; this would require adding additional functionality outside of DataRobot. For more information about versioning production models in machine learning, see link consult . + `},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"DataRobot does not provide pipeline orchestration functionality on its own, but excels at integrating with various pipelining tools. This allows users to benefit from seamless collaboration between DataRobot and advanced pipelining tools for efficient management of end- to-end machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"It is not possible to run DataRobot directly on Kubernetes. Other ways must be found to load data from a Kubernetes cluster to DataRobot."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"DataRobot promotes collaboration through features such as the ability to share and version control models, making it easy for team members to collaborate on machine learning projects. Role-Based Access Control (RBAC) is possible in DataRobot, allowing teams of different sizes securely access the necessary resources and functionality. DataRobot is suitable for teams of 1, 5 or more than 10 people, but larger teams may benefit more from additional collaboration features."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"It is not possible to run DataRobot directly on GCP. However, DataRobot has features that make it easy to read and use data from GCP."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"DataRobot places a strong emphasis on MLOps and provides advanced capabilities to effectively manage machine learning operations, including automating model deployment, monitoring performance, and facilitating collaboration between data scientists and operations teams."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:'Running DataRobot directly on Databricks is not possible. Nevertheless, there is an efficient collaboration between DataRobot and Databricks, which means that data can easily be read from Databricks by DataRobot. For more detailed information, you can read the linkconsult.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Running DataRobot directly on AWS is not possible. Nevertheless, DataRobot provides functionality that allows it to read and use data from, for example, an AWS bucket."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"It is not possible to run DataRobot directly on Azure. However, DataRobot has features that make it easy to read and use data from Azure."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Running DataRobot in the cloud is the only option, but it is important to note that DataRobot is a private company. Access to their services is only available through services offered by them and for a fee."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"We personally find DataRobot to be the most user-friendly option for MLOps. It installs quickly and allows you to quickly get started training machine learning models. The emphasis on AutoML makes the process even more accessible. However, it is important to note that while the easy installation and AutoML functionalities allow for a quick start, this may come at the expense of deeper functionality."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"DataRobot makes it easy to set up experiments and view the results, making the platform intuitive for creating and managing machine learning experiments."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:`DataRobot provides extensive data drift monitoring capabilities, allowing users to closely observe and understand changes in input data. For a detailed explanation of data drift monitoring, please refer to this information link +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'DataRobot provides model drift tracking capabilities, allowing users to closely monitor changes in the performance of their machine learning models. For detailed information on model drift monitoring, please visit the link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:`DataRobot offers a wide range of features for developing a fully integrated generative machine learning model. For more details about Large Language Model Operations (LLMOps), please visit link consult.`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:'Automatically finding optimal hyperparameters is possible within DataRobot, making hyperparameter tuning efficient and streamlined. For detailed information on hyperparameter tuning in DataRobot, please visit the link for more information.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"In our opinion, DataRobot is the most accessible tool to get started with machine learning, thanks to its extensive and easy-to-use AutoML functionality. This allows users to quickly and effectively develop machine learning models, even without deep technical expertise ."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'DataRobot provides a powerful tool to annotate data and images through collaboration with Labelbox. See the link for more information.'},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Datarobot is not open source and must be purchased via a periodic subscription. Also, using more resources also entails additional costs."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"We personally find DataRobot to be the most user-friendly option for MLOps. It installs quickly and allows you to quickly get started training machine learning models. The emphasis on AutoML makes the process even more accessible. However, it is important to note that while the easy installation and AutoML functionalities allow for a quick start, this may come at the expense of deeper functionality."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'DataRobot provides a powerful tool to annotate data and images through collaboration with Labelbox. See the link for more information.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'DataRobot provides a powerful tool to annotate data and images through collaboration with Labelbox. See the link for more information.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"If your company is not yet active on a cloud platform, mainly wants to use the platform to explore machine learning and has no know-how about configuring a platform effectively, then Datarobot is a good choice to start with This is because data robot is a simple tool to start experimenting with machine learning."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:'It is possible to publish models to several other cloud platforms such as AWS and Azure. DataRobot also offers the option to do this via their own servers. See link for more information.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"DataRobot promotes collaboration through features such as the ability to share and version control models, making it easy for team members to collaborate on machine learning projects. Role-Based Access Control (RBAC) is possible in DataRobot, allowing teams of different sizes securely access the necessary resources and functionality. DataRobot is suitable for teams of 1, 5 or more than 10 people, but larger teams may benefit more from additional collaboration features."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"DataRobot promotes collaboration through features such as the ability to share and version control models, making it easy for team members to collaborate on machine learning projects. Role-Based Access Control (RBAC) is possible in DataRobot, allowing teams of different sizes securely access the necessary resources and functionality. DataRobot is suitable for teams of 1, 5 or more than 10 people, but larger teams may benefit more from additional collaboration features."}],match:{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"dwad"}},{id:"c4cd4364-2611-4b47-a61f-c357e3163da1",title:"Weights&biases",description:"Weights and Biases is a platform for experiment tracking and visualization in machine learning. It provides tools to help researchers and data scientists track, analyze, and share their machine learning experiments. The platform captures key parameters, results, and visualizations to provide insight into model performance, allowing teams to collaborate more effectively and make more informed decisions during the AI \u200B\u200Bmodel development process.",link:"https://wandb.ai/site",img_link:"wandb_logo.png",bad_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Weights and Biases is designed for MLOps, which means that data must already have been processed before it can be used by Weights and Biases."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Weights and Biases was developed for MLOps, and from this perspective it offers an extensive range of tools and functionalities. However, it is important to note that the data must be pre-processed before it can be used by Weights and Biases ."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Weights and Biases is designed for MLOps, and therefore requires data to be processed before it can be used. For Business Intelligence purposes, other tools specifically tailored to that application will be required."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:'Weights and Biases is a semi-open source program, but companies are not allowed to host it on-premise for free. Please refer to the link for the pricing model.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"Weights and Biases does not have out-of-the-box functionality to detect data drift. However, it emphasizes collaborations with other specialized tools and frameworks, giving users the ability to integrate additional data drift monitoring functionalities into their machine learning workflows."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"It is not possible to orchestrate extensive pipelines with Weights and Biases; this requires the use of a complementary tool such as MLflow. While Weights and Biases excels at experiment management and visualization, integrating MLflow is a strategic approach to end- to support end-to-end machine learning workflows with comprehensive pipeline orchestration."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Weights and Biases does not have built-in functionality to train and test multiple machine learning models with one button."}],good_compatible:[{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Weights and Biases is versatile and can be used both on-premise and in the cloud, giving users flexibility as they implement their machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:'It is possible to integrate Weights & Biases (w&b) with Databricks by installing Weights & Biases in a Databricks notebook. See the link for more details.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:'It is possible to run Weights & Biases on AWS. For more information about integrating Weights & Biases with AWS, see link consult. '},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:'It is possible to run Weights & Biases on Azure. See the link for more information.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:'It is possible to run Weights & Biases on Azure. See the link for more information.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Containerization in Kubernetes makes it easy to install and use Weights and Biases."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Weights and Biases is an excellent starting point for experimenting with machine learning because it can be applied both on-premise and across multiple computers, allowing for flexibility and scalability."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Weights and Biases is a specialized platform specifically focused on MLOps, providing a comprehensive set of tools and functionalities to streamline and optimize the end-to-end process of machine learning operations."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Weights and Biases is versatile and can be used both on-premise and in the cloud, giving users flexibility as they implement their machine learning workflows."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Weights and Biases is a highly effective platform for tracking and managing experiments, excelling not only at logging model performance, but also at providing deep insights and visualizations that facilitate the analysis of experiment results, allowing it is a valuable asset for optimizing machine learning workflows."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'It is possible to detect model drift in production through a comprehensive dashboard in Weights and Biases. Detailed information about monitoring model drift in production is available in the link .'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'Weights and Biases provides a tool called Traces, which incorporates Large Language Model Operations (LLMOps). See the link for more information.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'It is possible to track versions of data with Weights and Biases through the functionality called Artifacts. This feature provides users with a structured and traceable way to store and manage different versions of data, contributing to a accurate and reproducible experimentation process. See the link for more details.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:'"Weights and Biases provides a powerful tool called Sweeps, which allows users to automatically determine the optimal hyperparameters. This functionality streamlines the process of hyperparameter tuning, making it easy to discover the best configurations for improved model performance. See the link for more information.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"It is possible to publish trained models with Weights and Biases. This functionality makes it easy to share results and models, which promotes collaboration between team members and stakeholders."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'It is possible to annotate data and photos with a tool called Prodigy. See the link for more information.'},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Compared to other data platforms on this list, Weights and Biases is easy to set up, allowing users to access its features quickly and effortlessly."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:'Weights and Biases is a semi-open source program, but companies are not allowed to host it on-premise for free. Please refer to the link for the pricing model.'},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Compared to other data platforms on this list, Weights and Biases is easy to set up, allowing users to access its features quickly and effortlessly."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'It is possible to annotate data and photos with a tool called Prodigy. See the link for more information.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'It is possible to annotate data and photos with a tool called Prodigy. See the link for more information.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"It is possible to use Weights & Biases on most cloud platforms as their code is publicly available. Please note that Weights & Biases must be purchased to use."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Weights & Biases promotes collaboration through features such as sharing experiments and results with team members, adding comments and notes to specific runs, and facilitating discussions through saved comments. However, it lacks direct capabilities for real-time collaboration on shared projects, such as simultaneous editing of documents. Role-Based Access Control (RBAC) is possible in Weights & Biases, allowing administrators to assign different permissions to team members based on their roles. The system is suitable for teams of any size, but can are especially useful for teams of 5 or more people due to the need for coordinated collaboration and management of projects."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Weights & Biases promotes collaboration through features such as sharing experiments and results with team members, adding comments and notes to specific runs, and facilitating discussions through saved comments. However, it lacks direct capabilities for real-time collaboration on shared projects, such as simultaneous editing of documents. Role-Based Access Control (RBAC) is possible in Weights & Biases, allowing administrators to assign different permissions to team members based on their roles. The system is suitable for teams of any size, but can are especially useful for teams of 5 or more people due to the need for coordinated collaboration and management of projects."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Weights & Biases promotes collaboration through features such as sharing experiments and results with team members, adding comments and notes to specific runs, and facilitating discussions through saved comments. However, it lacks direct capabilities for real-time collaboration on shared projects, such as simultaneous editing of documents. Role-Based Access Control (RBAC) is possible in Weights & Biases, allowing administrators to assign different permissions to team members based on their roles. The system is suitable for teams of any size, but can are especially useful for teams of 5 or more people due to the need for coordinated collaboration and management of projects."}]},{id:"eeb904f2-67d4-40ea-a992-f09f5a2d1358",title:"MLflow",description:"MLflow is an open-source platform for managing experiments and pipelines of machine learning models. It provides tools for experiment tracking, organizing code, reproducing models, and collaborating within teams. MLflow enables users allows you to easily record experiments, compare models, manage model versions, and deploy them seamlessly into production, resulting in more streamlined and reproducible machine learning workflows. MLflow is completely open-source and can run on virtually any machine and cloud provider MLFlow is managed by Databricks. If you choose MLflow you should be careful that the Databricks version of MLflow offers more functionalities than the open source version. Many cloud providers use MLflow underwater, which is a testament to how versatile it can be.",link:"https://mlflow.org/",img_link:"mlflow_logo.png",bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"If you are already using Databricks, managing a separate MLflow instance is unnecessary. Databricks manages its own version of MLflow with additional functionality, providing an integrated and seamless experience for managing machine learning workflows within the Databricks platform."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"It is important to note that MLflow is not designed to perform ETL operations. Such tasks require additional tooling outside of MLflow. MLflow focuses primarily on managing machine learning workflows, experiments, and models, while ETL functionality is supported by specialized tools."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"It is important to note that MLflow is not designed for performing DataOps. Such tasks require additional tooling outside of MLflow. MLflow focuses primarily on managing machine learning workflows, experiments, and models, while ETL functionality is supported by specialized tools."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"To gain deep insights into your business performance, it is not possible to use MLflow alone; this requires additional tooling outside of MLflow. MLflow is primarily focused on managing machine learning workflows and experiments, while more comprehensive business insights are often gained through integration with specific business intelligence and analytics tools."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"It is important to note that in MLflow it is not possible to detect data drift automatically. Detecting data drift is usually handled by specialized tools and methods outside of MLflow."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"It is important to note that in MLflow it is not possible to detect model drift automatically. Detecting model drift is usually handled by specialized tools and methods outside of MLflow."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"It is not possible to have version control on your data within MLflow; this requires the addition of an additional tool such as Data Version Control (DVC). DVC provides specific functionalities for managing versions and tracking changes to datasets , allowing for accurate and auditable data versioning."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"It is important to note that MLflow cannot automatically find optimal hyperparameters; this requires manual tuning and experimentation. However, MLflow offers integration with hyperparameter tuning libraries such as Optuna and Hyperopt, allowing users to manually perform optimization processes to find the best hyperparameters to identify."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"MLflow does not have a built-in ability to train and test multiple machine learning models with a single button. Such automation of experiments requires additional scripting and tooling, such as the use of hyperparameter tuning libraries in combination with MLflow to achieve efficient and realize automated model training."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"MLflow is not designed for annotating data or photos. For tasks such as annotation, you will need to use other specialized tools specifically designed for data annotation, such as Labelbox or similar tools."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Containerization in Kubernetes makes it easy to use MLflow, helping to streamline deployment and management of machine learning workflows. This approach provides flexibility and scalability when running MLflow in different environments."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"AWS offers excellent capabilities for integrating MLflow, often in combination with their existing MLOps platform SageMaker. This allows users to benefit from a comprehensive environment for managing and scaling their machine learning workflows on the AWS cloud platform. "},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Azure offers excellent capabilities to integrate MLflow, often in combination with their existing MLOps platform Azure ML. This provides users with a powerful and integrated environment for managing and scaling machine learning workflows on the Azure cloud platform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"GCP offers excellent capabilities to integrate MLflow, often in combination with their existing MLOps platform Vertex AI. This allows users to benefit from an integrated and scalable environment for managing and optimizing machine learning workflows on the Google Cloud platform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"It's easy to start experimenting if you're not already using a cloud platform. MLflow can run on a computer or server and isn't dependent on a specific cloud provider, making it a flexible choice. This makes it makes it possible for users to start on-premise and later, if desired, move to a cloud-based environment."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"MLflow was built for MLOps, and has been integrated with most data platforms in a custom form. This integration allows users to effectively manage and optimize machine learning workflows across diverse data and cloud environments."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"MLflow offers excellent integration with all major cloud providers, giving users flexibility in deploying and managing machine learning workflows across cloud environments. This versatile support allows them to take full advantage of the specific capabilities and services that each cloud provider offers."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"MLflow is extremely user-friendly and easy to install at a local level, providing a seamless experience for users who want to experiment and develop on-premise within their machine learning projects. This accessibility contributes to a quick start and efficient use of MLflow functionalities."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:'MLflow is not only free and open source, but also offers a transparent and active community through the link, giving users access to ongoing updates, support and contributions from the wider community.'},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:'MLflow is not only free and open source, but also offers a transparent and active community through the link, giving users access to ongoing updates, support and contributions from the wider community.'},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"MLflow is a compact package with a focus on simplicity, and does not offer extensive features for DataOps or ETL. This makes it easy to install and ideal for users who want to quickly experiment within their machine learning projects."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"MLflow makes it easy to view and manage your experiments. The intuitive user interface makes it easy to track experiment results, manage models, and understand the performance of different iterations of your machine learning projects."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'MLflow has developed functionalities specifically for creating and maintaining large language and generative models. See link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"MLflow is ideal for orchestrating MLOps pipelines. However, if you want to do more with DataOps, such as managing end-to-end data workflows, using tools such as Apache Airflow can be a valuable addition to your toolkit. Together they provide an integrated solution for effectively managing both machine learning and data operations."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"It is possible to publish models with MLflow and view statistics about them. MLflow provides features for logging and tracking experiment results, giving users insight into the performance of trained models and the ability to Share and view via the MLflow Tracking UI."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"MLflow is open source and therefore not dependent on where it is installed. Please check carefully whether it is possible to install it in your current cloud platform."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"MLflow is a compact package with a focus on simplicity, and does not offer extensive features for DataOps or ETL. This makes it easy to install and ideal for users who want to quickly experiment within their machine learning projects."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:"MLflow is not designed for annotating data or photos. For tasks such as annotation, you will need to use other specialized tools specifically designed for data annotation, such as Labelbox or similar tools."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:"MLflow is not designed for annotating data or photos. For tasks such as annotation, you will need to use other specialized tools specifically designed for data annotation, such as Labelbox or similar tools."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:`MLflow promotes team collaboration through features such as experiment tracking, model versioning, and model deployment. Experiment tracking allows you to document experiments and share results, while model versioning facilitates model version management. However, MLflow lacks built-in support for Role-Based Access Control (RBAC), which can hinder team collaboration due to the lack of granular access control. + +Although RBAC is not natively supported, teams of 1, 5, or more than 10 people can still use MLflow effectively For teams of 1 person, MLflow provides a convenient way to manage experiments and track models. For teams of 5 or more, additional access control measures beyond MLflow may be required to ensure secure collaboration However, the lack of built-in RBAC functionality may be limiting and you may need to look for additional tools or solutions that provide this.`},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:`MLflow promotes team collaboration through features such as experiment tracking, model versioning, and model deployment. Experiment tracking allows you to document experiments and share results, while model versioning facilitates model version management. However, MLflow lacks built-in support for Role-Based Access Control (RBAC), which can hinder team collaboration due to the lack of granular access control. + +Although RBAC is not natively supported, teams of 1, 5, or more than 10 people can still use MLflow effectively For teams of 1 person, MLflow provides a convenient way to manage experiments and track models. For teams of 5 or more, additional access control measures beyond MLflow may be required to ensure secure collaboration However, the lack of built-in RBAC functionality may be limiting and you may need to look for additional tools or solutions that provide this.`},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:`MLflow promotes team collaboration through features such as experiment tracking, model versioning, and model deployment. Experiment tracking allows you to document experiments and share results, while model versioning facilitates model version management. However, MLflow lacks built-in support for Role-Based Access Control (RBAC), which can hinder team collaboration due to the lack of granular access control. + +Although RBAC is not natively supported, teams of 1, 5, or more than 10 people can still use MLflow effectively For teams of 1 person, MLflow provides a convenient way to manage experiments and track models. For teams of 5 or more, additional access control measures beyond MLflow may be required to ensure secure collaboration However, the lack of built-in RBAC functionality may be limiting and you may need to look for additional tools or solutions that provide this.`}]},{id:"340dcd09-44de-4ff6-bddf-0503b575f5cc",title:"ClearML",description:"ClearML is an end-to-end platform for managing machine learning workflows. It provides powerful tools for experiment tracking, automation, model versioning, and collaboration. With features for tracking experiments, visualizing results, and optimizing models, ClearML enables users to work more efficiently and gain better insight into their machine learning projects, allowing teams to collaborate more effectively and move models to production faster.",link:"https://clear.ml/",img_link:"clearml_logo.png",bad_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"dwa"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"It is not recommended to use Databricks with ClearML. Databricks uses its own variant of MLflow, which is almost identical in functionality to ClearML. Using ClearML could cause duplication of functionalities and possibly conflict with the built-in MLflow functionalities in Databricks."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"ClearML is optimized for Machine Learning Operations (MLOps) and does not currently support Extract, Transform, Load (ETL) operations. For such tasks, it is recommended to use a specific tool designed for ETL processes. "},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"ClearML is optimized for Machine Learning Operations (MLOps) and does not currently support Business Intelligence. For such tasks, it is recommended to use a specific tool designed for BI processes."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"ClearML does not currently provide an out-of-the-box ability to train and test multiple machine learning models at the touch of a button. For these types of features, you can use additional automation tools or scripts to tailor your workflow to your specific needs."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"ClearML is open source and can therefore be easily integrated into your current AWS environment. This provides flexibility and the ability to tailor ClearML to the specific needs of your AWS-based machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"ClearML is open source so it can be easily integrated into your current Azure environment. This gives you the flexibility to tailor ClearML to the specific needs of your Azure-based machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"ClearML is open source so it can be easily integrated into your current Google Cloud Platform (GCP) environment. This openness provides flexibility and customizability to integrate ClearML into your existing GCP-based machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"ClearML is open source and can therefore be easily integrated into your current Kubernetes environment. This flexibility makes it possible to tailor ClearML to the specific needs of your Kubernetes-based machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"ClearML is open source so it can be easily integrated into your current environment. This openness provides flexibility and customizability to integrate ClearML into your existing machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"ClearML can easily be run on-premise on a computer to start experimenting. Moreover, it is also easy to host ClearML Flow on the cloud, allowing multiple data scientists to easily access the functionalities and experiments within their local development environment."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"ClearML is an advanced platform specifically designed to streamline Machine Learning Operations (MLOps)."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"ClearML is an open-source platform, so it is not tied to a specific supplier. Although ClearML can operate independently, some suppliers offer integration options to, for example, process data better."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"ClearML is an open source platform that can easily be installed on-premise on your own system."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"ClearML is an open source platform, meaning it's free to use if you choose to host it yourself."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"ClearML is open source and therefore free to use. For additional functionality and enhanced support, it is possible to purchase virtual private cloud (VPC) or on-premises servers."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"ClearML has excellent experiment tracking capabilities."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:`It is possible to detect data drift in ClearML using additional dashboarding. More information about this can be found at the following link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:` It is possible to detect drift in models in ClearMl using additional dashboarding. See link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:`ClearML has developed functionalities specifically for creating and maintaining large language and generative models. More information about this is available here link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:`ClearML provides the ability to track different versions of data using hyperdatasets. More information about this is available at the following link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:`With ClearML you have the ability to perform optimization tasks to automatically find optimal hyperparameters. Please refer to the following link for more information. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"It is possible to orchestrate MLOps pipelines with ClearML. ClearML provides capabilities to manage and automate end-to-end machine learning workflows, including setting up MLOps pipelines. It allows you to perform tasks such as data preparation, organize and manage model training, evaluation, and deployment in an integrated and automated workflow."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"It is possible to publish models in ClearML. Published models can be called by sending specific API calls to them. ClearML provides extensive statistics on the usage and performance of the published models,"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Using the 'annotations' tab in ClearML you can easily annotate your data or photos. For more detailed information, please visit the following link consult. `},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"ClearML provides robust data ops functionality, streamlining and improving the entire data operations process. This comprehensive set of features within ClearML includes data management, versioning, data lineage tracking, and collaborative workflows, allowing data scientists and machine learning teams to manage their data sources can efficiently manage and leverage throughout the entire life cycle of their projects."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Using the 'annotations' tab in ClearML you can easily annotate your data or photos. For more detailed information, please visit the following link consult. `},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Using the 'annotations' tab in ClearML you can easily annotate your data or photos. For more detailed information, please visit the following link consult. `},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"ClearML promotes collaboration by allowing sharing, tracking, and reproduction of experiments, making it easy for team members to collaborate on projects. However, it lacks direct support for real-time collaboration, such as concurrent editing of scripts or notebooks. Role-Based Access Control (RBAC) is available, allowing access control based on roles and permissions. ClearML is suitable for teams of 1, 5 or more than 10 people, depending on the needs of the team and the scale of the project. ."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"ClearML promotes collaboration by allowing sharing, tracking, and reproduction of experiments, making it easy for team members to collaborate on projects. However, it lacks direct support for real-time collaboration, such as concurrent editing of scripts or notebooks. Role-Based Access Control (RBAC) is available, allowing access control based on roles and permissions. ClearML is suitable for teams of 1, 5 or more than 10 people, depending on the needs of the team and the scale of the project. ."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"ClearML promotes collaboration by allowing sharing, tracking, and reproduction of experiments, making it easy for team members to collaborate on projects. However, it lacks direct support for real-time collaboration, such as concurrent editing of scripts or notebooks. Role-Based Access Control (RBAC) is available, allowing access control based on roles and permissions. ClearML is suitable for teams of 1, 5 or more than 10 people, depending on the needs of the team and the scale of the project. ."}]},{id:"f98aea21-f356-40ca-b064-1995ad04f720",title:"DagsHub",description:"DAGsHub is an integrated platform that simplifies the process of managing and versioning machine learning models, datasets, and code. With its easy-to-use interface and powerful features, DAGsHub facilitates collaboration among data scientists, allowing them to share their work and track changes in real time.",link:"https://dagshub.com/",img_link:"dagshub_logo.png",bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Dagshub currently has no direct ability to leverage data made available in Databricks; however, it does support the use of S3-compatible storage as an alternative method of accessing data in Databricks. The platform itself cannot be hosted on Databricks, but offers the choice of being installed on-premise or in Dagshub's cloud, albeit at a specific price."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Dagshub has the ability to use data made available in AWS, but the platform cannot run on AWS. Instead, Dagshub offers the option to run on-premise or in the cloud of Dagshub itself be installed, of course at a certain price."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Dagshub has the option to use data made available in Azure, but the platform cannot run on Azure. Instead, Dagshub offers the option to use data on-premise or in the cloud of Dagshub itself be installed, of course at a certain price."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Dagshub has the ability to use data made available in GCP, but the platform cannot run on GCP. Instead, Dagshub offers the option to use data on-premise or in the cloud of Dagshub itself be installed, of course at a certain price."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Dagshub has the ability to use data made available in kubernetes, but the platform cannot run on kubernetes. Instead, Dagshub offers the option to run on-premise or in the cloud of Dagshub itself be installed, of course at a certain price."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Within Dagshub it is not possible to perform ETL operations, as Dagshub is designed exclusively for ML Ops functionalities."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Within Dagshub it is not possible to perform Data Ops operations, as Dagshub is designed exclusively for ML Ops functionalities."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Within Dagshub it is not possible to perform Business Intelligence operations, as Dagshub is exclusively designed for ML Ops functionalities."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Dagshub, as a non-open-source platform, is available exclusively to companies willing to pay for it."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"Dagshub, while a powerful platform for Machine Learning Operations, does not currently support automatic detection of data drift, leaving users responsible for monitoring any changes in the datasets."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"Dagshub, while a powerful platform for Machine Learning Operations, does not currently provide built-in functionality for automatically detecting model drift, leaving users responsible for proactively monitoring changes in model performance over time ."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Automatically finding optimal hyperparameters is not currently supported by Dagshub and would require writing additional code to implement it."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"To simultaneously train and test multiple machine learning models at the touch of a button, there is currently no built-in functionality available in Dagshub. To realize this, it would be necessary to write additional code."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Dagshub has the ability to use data made available from various cloud platforms, but it is not open source and therefore cannot run on other cloud platforms. Instead, Dagshub offers the option to run on-premise or in the Dagshub cloud itself must be installed, of course at a certain price."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Dagshub can be considered the equivalent of GitHub for machine learning, keeping the existing functionalities of GitHub and supplementing them with specific capabilities and functionalities focused on machine learning. Especially for companies that are not yet active on a cloud platform, Dagshub is an excellent starting choice because of the simplicity with which it can be started and where collaboration is central."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Dagshub provides an alternative platform to GitHub specifically tailored for machine learning. The user interface makes it easy to annotate data, set up experiments, and publish models."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Dagshub is a paid tool that gives companies the flexibility to operate in the cloud, on a Virtual Private Cloud (VPC), or on-premise."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Dagshub is a paid tool that gives companies the flexibility to operate in the cloud, on a Virtual Private Cloud (VPC), or on-premise."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"If your company is already familiar with platforms like GitHub or GitLab, the transition to Dagshub will be seamless. While using Dagshub is similar to GitHub or GitLab, it does require some knowledge of data science and machine learning. The platform provides an advanced environment for managing and sharing data science projects, making it essential to be familiar with the basics of these disciplines to make the most of them."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Dagshub also offers repositories similar to GitHub. What sets Dagshub apart is the introduction of a dedicated tab for experiments, where users can view experiments and easily create new experiments."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:`Dagshub has developed functionalities specifically for creating and maintaining large language and generative models. For more information, see: link. +`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Dagshub offers an excellent data versioning tool called Dagshub DDA, and in addition it is possible to use DVC (Data Version Control). For more information, see this link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Dagshub provides tooling called Dagshub pipelines which makes it possible to perform basic data operations. Integration with MLflow makes it possible to use MLflow's orchestration tooling."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Dagshub provides the ability to easily publish your machine learning models, making them accessible via API calls for seamless integration and deployment across applications."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"Dagshub introduces an annotation tab, allowing users to effortlessly add annotations to both data and photos, making the annotation process efficient and easy to use."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Dagshub, as a non-open-source platform, is available exclusively to companies willing to pay for it."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"If your company is already familiar with platforms like GitHub or GitLab, the transition to Dagshub will be seamless. While using Dagshub is similar to GitHub or GitLab, it does require some knowledge of data science and machine learning. The platform provides an advanced environment for managing and sharing data science projects, making it essential to be familiar with the basics of these disciplines to make the most of them."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:"Dagshub introduces an annotation tab, allowing users to effortlessly add annotations to both data and photos, making the annotation process efficient and easy to use."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:"Dagshub introduces an annotation tab, allowing users to effortlessly add annotations to both data and photos, making the annotation process efficient and easy to use."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Dagshub promotes collaboration through real-time updates, project management tools, and integration with popular platforms such as GitHub and Slack. The platform supports Role-Based Access Control (RBAC), allowing administrators to assign specific access rights to users based on their roles. I would recommend Dagshub for teams of 5 or more people, where the need for structured collaboration and coordination is greater."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Dagshub promotes collaboration through real-time updates, project management tools, and integration with popular platforms such as GitHub and Slack. H The platform supports Role-Based Access Control (RBAC), allowing administrators to assign specific access rights to users based on of their roles. I would recommend Dagshub for teams of 5 or more people, where the need for structured collaboration and coordination is greater."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Dagshub promotes collaboration through real-time updates, project management tools, and integration with popular platforms such as GitHub and Slack. The platform supports Role-Based Access Control (RBAC), allowing administrators to assign specific access rights to users based on their roles. I would recommend Dagshub for teams of 5 or more people, where the need for structured collaboration and coordination is greater."}]}];var s={tools:r};const d=[{id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",question_text:"Are you active on any of the following cloud platforms?",type:"single",answers:[{id:"963aaa51-8a46-4d4e-9808-d25ea810560c",answer_text:"Databricks",explanation_text:""},{id:"ee245bf1-0447-4460-beb0-26ce8987a59a",answer_text:"AWS",explanation_text:""},{id:"03c4d074-2773-41cd-962a-892d13882ef4",answer_text:"Azure",explanation_text:""},{id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",answer_text:"GCP (Google cloud platform)",explanation_text:""},{id:"af017d7a-6e66-467a-87ad-1765a07563f3",answer_text:"Hosted Kubernetes",explanation_text:""},{id:"1f3396cf-8727-43c8-912d-0911517dc894",answer_text:"Other",explanation_text:"If you or your company are not using the cloud platform mentioned above, certain data platforms may not be able to integrate seamlessly."},{id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",answer_text:"I am not yet active on a cloud platform",explanation_text:"If you or your company is not using a cloud platform, the upside can be that it retains full control over the infrastructure. However, on the downside, this can mean limited integration capabilities with cloud-based data platforms, which will impact can be on scalability and accessibility."}],explanation_text:"If you or your company is already involved in specific cloud platforms, this may limit the flexibility of your choice regarding the use of data platforms."},{id:"fea3fc01-144d-4f41-b99e-0f556f6da751",question_text:"Which functionalities should be integrated into the data platform?",type:"multi",answers:[{id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",answer_text:"ETL",explanation_text:" ETL stands for Extract, Transform, Load, and it refers to the process of extracting, transforming, and loading data from different sources to a destination, such as a database, to make it usable and accessible for analytics. "},{id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",answer_text:"MLOps",explanation_text:"MLOps, or Machine Learning Operations, is a methodology aimed at integrating machine learning models into the development and operations process, to enable efficient deployment, monitoring, and maintenance of these models."},{id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",answer_text:"DataOps",explanation_text:"DataOps (short for data operations) is a data management practice that deals with building, testing, deploying and managing data products. It combines technologies and processes to improve data trust and time-to-use value of your company's data products."},{id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",answer_text:"Business intelligence",explanation_text:"Business Intelligence (BI) involves the process of collecting, analyzing and presenting business data to support organizations in making data-driven decisions."}],explanation_text:"Data platforms offer different functionalities. A data platform is more focused on the development and use of machine learning models (MLOps). Other data platforms may have more of a focus on the real-time processing of large numbers of data ."},{id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",question_text:"Where should the data platform run?",type:"single",answers:[{id:"37aff572-f1a8-4401-ac52-51183844c06c",answer_text:"On the cloud",explanation_text:"When the platform has to run on the cloud, for example on AWS, Azure or GCP, this means that the data is also stored and processed in the cloud. A possible disadvantage of using a data platform in the cloud is the ongoing costs, including subscription and usage costs, which may impact total usage costs in the long term. Nevertheless, the data is stored and processed securely online."},{id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",answer_text:"On premise",explanation_text:"If the data platform is to be deployed on-premise, this implies that you must have the necessary capabilities to perform demanding tasks such as machine learning, and that your data is stored and processed on-premise. This limits the available options, as some data platforms are only available online, which may influence the choice of a suitable data platform."}],explanation_text:"It is important to consider where the data platform should run, as this influences the choice between on-premises, cloud or hybrid solutions, impacting cost, scalability and accessibility of the data platform."},{id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",question_text:"Should the tool used be free and/or open-source?",type:"single",answers:[{id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",answer_text:"Yes, the tool must be free and/or open-source",explanation_text:"Free tools usually don't offer official support and rely on communities and forums for help, which is important to consider when choosing a data platform."},{id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",answer_text:"No, the tool can be paid and does not have to be open source ",explanation_text:"Paid tools usually offer support and extra functionalities, unlike free options"}],explanation_text:"It is important to consider whether the tool used should be free and/or open-source when choosing a data platform, as this directly impacts the overall cost, flexibility and independence of the technology used."},{id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",question_text:"Are you or does your company currently have a data engineer and are you willing to invest a significant amount of time to set up a data platform?",type:"single",answers:[{id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",answer_text:"Yes, the data platform must therefore be fully configurable to my wishes and advanced functionalities must be possible.",explanation_text:"If you can take the time to implement data platforms, it becomes possible to opt for more advanced platforms that can be more accurately integrated into your existing environment."},{id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",answer_text:"No, the data platform must therefore remain easy to use and clear.",explanation_text:" If you are not willing to invest significantly in a data platform, it is advisable to opt for a platform that is easy to configure, although this may come at the expense of some advanced functionalities."}],explanation_text:"This question is asked to understand the availability of technical skills and willingness to invest time, as these are crucial factors when assessing the feasibility and implementation of a data platform within the company."},{id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",question_text:"What kind of Machine learning functionality should be available in the data platform?",type:"multi",answers:[{id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",answer_text:"Experiment tracking",explanation_text:"Experiment tracking is the process of systematically tracking, organizing, and analyzing experimental data and results within a data project."},{id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",answer_text:"Data Drift Tracking",explanation_text:"Data drift tracking is the continuous monitoring and analysis of changes in the distribution of data to identify unwanted anomalies and inconsistencies in machine learning models."},{id:"83b528f4-3ea9-427e-9ce5-772685655d43",answer_text:"Model Drift Tracking",explanation_text:"Model drift tracking is the continuous monitoring of performance deviations in machine learning models from the original training data to make timely adjustments and maintain accuracy."},{id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",answer_text:"Large Language Model Ops(LLMOps)",explanation_text:"Large Language Model Ops (LLM Ops) is an approach that focuses on efficiently developing, deploying, and managing large language models to optimize performance and scalability in diverse applications."},{id:"265f2953-f37c-4c0b-8f61-e2a15118291e",answer_text:"Data versioning",explanation_text:"Data versioning is the process of systematically maintaining and managing different versions of datasets, improving traceability, reproducibility, and collaboration in data-related projects."},{id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",answer_text:"Automatic hyperparameter tuning",explanation_text:"Automatic hyperparameter tuning is an optimized process that automatically adjusts machine learning models by exploring and evaluating different hyperparameter combinations to achieve the best performance."},{id:"3a85d010-e8c4-4a29-a3dd-330376caf110",answer_text:"Orchestrating data pipelines",explanation_text:"Orchestrating data pipelines is the automated planning, coordination, and execution of various steps within a data or machine learning pipeline to ensure a streamlined and efficient process."},{id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",answer_text:"AutoML",explanation_text:"AutoML, or Automated Machine Learning, is an approach that automatically builds and optimizes machine learning models with minimal human intervention, with the aim of simplifying the modeling process and accelerating the development of effective models."},{id:"3e6a8487-1793-4062-aee3-271c6e435818",answer_text:"Publishing and putting models into production",explanation_text:"Publishing machine learning models is the process of making trained models available and accessible for use in production environments or by external users."}],explanation_text:"This question aims to gain insight into the specific machine learning functionalities that the user wishes to use within the data platform."},{id:"c8775160-e498-4292-a464-b45e222f5aa7",question_text:"How many data specialists should use the platform?",type:"single",answers:[{id:"3e29d8d1-aef4-45a9-9728-606880731d87",answer_text:"1",explanation_text:"If your organization has only one data scientist or AI/data engineer, the choice of data platform may be less important."},{id:"7ca2debe-b701-4e89-958d-6d3cff385de0",answer_text:"2-5",explanation_text:"For a team size of 2-5 data scientists or AI/data engineers, the choice of data platform is more important and should take into account collaboration requirements and security aspects."},{id:"6687720c-ef4d-4663-8e79-a98694bb10d9",answer_text:"10+",explanation_text:"With a team size of 10 or more data scientists or AI/data engineers, the choice of data platform becomes more important, where scalability, collaboration, security and other advanced functionalities are crucial for efficient and effective data infrastructure."}],explanation_text:"This question aims to gain insight into the number of data scientists and AI/data engineers who will use the platform, with a particular focus on aspects such as security, collaboration and other functionalities."},{id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",question_text:"Is the data labeled, meaning it is identified or characterized with specific categories or attributes?",type:"single",answers:[{id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",answer_text:"Yes, the data is labeled",explanation_text:"Fully annotated data is essential for effective machine learning models and analytics."},{id:"629c3eda-64d2-4768-a26d-e5a901c4e170",answer_text:"No, the data still needs to be labeled",explanation_text:"If your data still needs to be labeled, it is recommended to use an annotation tool."},{id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",answer_text:"I don't know if my data is of good quality",explanation_text:"If you do not know whether your data is properly annotated, it may be advisable to perform a thorough evaluation, preferably using annotation tools or expertise, to verify the quality of the labels before choosing a data platform that depends on accurate annotations."}],explanation_text:"Labels are essential for machine learning algorithms to recognize patterns and perform tasks such as classification or prediction."}];var l={questions:d};const f=a("answer",{state:()=>({results:[],selectedAnswers:[],answers:[],questions:[],tools:[],defaultLocale:"nl"}),persist:!0,getters:{},actions:{loadTools(e){this.defaultLocale=e,console.log(e),e==="en-US"?(console.log("Load english questions + answers"),this.tools=s.tools,this.questions=l.questions):(console.log("Load dutch questions + answers"),this.tools=i.tools,this.questions=o.questions)},resetQuiz(){this.selectedAnswers=[],this.answers=[]}}});export{l as _,o as a,s as b,i as c,f as u}; diff --git a/docs/assets/format.43d1c739.js b/docs/assets/format.43d1c739.js new file mode 100644 index 0000000..ef3fbb4 --- /dev/null +++ b/docs/assets/format.43d1c739.js @@ -0,0 +1 @@ +import{aj as $e,r as A,U as me,a6 as le,N as z,ak as ie,w as k,o as ve,C as B,g as D,al as Ae,I as U,am as Le,an as V,c as Fe,ao as Be,h as N,ap as De,aq as Ve,ar as ze,f as C,a2 as ge,as as pe,X,y as Re,at as Oe,z as Qe,Z as je,$ as Ke,V as Ie}from"./index.ab4869ca.js";import{r as ae,f as _e,u as Ue,b as Ne,c as Ge}from"./QCard.eb99e114.js";import{c as Xe,g as Ye}from"./scroll.270b929d.js";function Ze(){if(window.getSelection!==void 0){const e=window.getSelection();e.empty!==void 0?e.empty():e.removeAllRanges!==void 0&&(e.removeAllRanges(),$e.is.mobile!==!0&&e.addRange(document.createRange()))}else document.selection!==void 0&&document.selection.empty()}const Je={target:{default:!0},noParentEvent:Boolean,contextMenu:Boolean};function et({showing:e,avoidEmit:t,configureAnchorEl:n}){const{props:o,proxy:l,emit:c}=D(),i=A(null);let u=null;function h(a){return i.value===null?!1:a===void 0||a.touches===void 0||a.touches.length<=1}const f={};n===void 0&&(Object.assign(f,{hide(a){l.hide(a)},toggle(a){l.toggle(a),a.qAnchorHandled=!0},toggleKey(a){me(a,13)===!0&&f.toggle(a)},contextClick(a){l.hide(a),le(a),z(()=>{l.show(a),a.qAnchorHandled=!0})},prevent:le,mobileTouch(a){if(f.mobileCleanup(a),h(a)!==!0)return;l.hide(a),i.value.classList.add("non-selectable");const d=a.target;ie(f,"anchor",[[d,"touchmove","mobileCleanup","passive"],[d,"touchend","mobileCleanup","passive"],[d,"touchcancel","mobileCleanup","passive"],[i.value,"contextmenu","prevent","notPassive"]]),u=setTimeout(()=>{u=null,l.show(a),a.qAnchorHandled=!0},300)},mobileCleanup(a){i.value.classList.remove("non-selectable"),u!==null&&(clearTimeout(u),u=null),e.value===!0&&a!==void 0&&Ze()}}),n=function(a=o.contextMenu){if(o.noParentEvent===!0||i.value===null)return;let d;a===!0?l.$q.platform.is.mobile===!0?d=[[i.value,"touchstart","mobileTouch","passive"]]:d=[[i.value,"mousedown","hide","passive"],[i.value,"contextmenu","contextClick","notPassive"]]:d=[[i.value,"click","toggle","passive"],[i.value,"keyup","toggleKey","passive"]],ie(f,"anchor",d)});function r(){Ae(f,"anchor")}function g(a){for(i.value=a;i.value.classList.contains("q-anchor--skip");)i.value=i.value.parentNode;n()}function p(){if(o.target===!1||o.target===""||l.$el.parentNode===null)i.value=null;else if(o.target===!0)g(l.$el.parentNode);else{let a=o.target;if(typeof o.target=="string")try{a=document.querySelector(o.target)}catch{a=void 0}a!=null?(i.value=a.$el||a,n()):(i.value=null,console.error(`Anchor: target "${o.target}" not found`))}}return k(()=>o.contextMenu,a=>{i.value!==null&&(r(),n(a))}),k(()=>o.target,()=>{i.value!==null&&r(),p()}),k(()=>o.noParentEvent,a=>{i.value!==null&&(a===!0?r():n())}),ve(()=>{p(),t!==!0&&o.modelValue===!0&&i.value===null&&c("update:modelValue",!1)}),B(()=>{u!==null&&clearTimeout(u),r()}),{anchorEl:i,canShow:h,anchorEvents:f}}function tt(e,t){const n=A(null);let o;function l(u,h){const f=`${h!==void 0?"add":"remove"}EventListener`,r=h!==void 0?h:o;u!==window&&u[f]("scroll",r,U.passive),window[f]("scroll",r,U.passive),o=h}function c(){n.value!==null&&(l(n.value),n.value=null)}const i=k(()=>e.noParentEvent,()=>{n.value!==null&&(c(),t())});return B(i),{localScrollTarget:n,unconfigureScrollTarget:c,changeScrollEvent:l}}const nt={modelValue:{type:Boolean,default:null},"onUpdate:modelValue":[Function,Array]},ot=["beforeShow","show","beforeHide","hide"];function lt({showing:e,canShow:t,hideOnRouteChange:n,handleShow:o,handleHide:l,processOnMount:c}){const i=D(),{props:u,emit:h,proxy:f}=i;let r;function g(m){e.value===!0?d(m):p(m)}function p(m){if(u.disable===!0||m!==void 0&&m.qAnchorHandled===!0||t!==void 0&&t(m)!==!0)return;const v=u["onUpdate:modelValue"]!==void 0;v===!0&&(h("update:modelValue",!0),r=m,z(()=>{r===m&&(r=void 0)})),(u.modelValue===null||v===!1)&&a(m)}function a(m){e.value!==!0&&(e.value=!0,h("beforeShow",m),o!==void 0?o(m):h("show",m))}function d(m){if(u.disable===!0)return;const v=u["onUpdate:modelValue"]!==void 0;v===!0&&(h("update:modelValue",!1),r=m,z(()=>{r===m&&(r=void 0)})),(u.modelValue===null||v===!1)&&P(m)}function P(m){e.value!==!1&&(e.value=!1,h("beforeHide",m),l!==void 0?l(m):h("hide",m))}function w(m){u.disable===!0&&m===!0?u["onUpdate:modelValue"]!==void 0&&h("update:modelValue",!1):m===!0!==e.value&&(m===!0?a:P)(r)}k(()=>u.modelValue,w),n!==void 0&&Le(i)===!0&&k(()=>f.$route.fullPath,()=>{n.value===!0&&e.value===!0&&d()}),c===!0&&ve(()=>{w(u.modelValue)});const H={show:p,hide:d,toggle:g};return Object.assign(f,H),H}const $=[];function kt(e){return $.find(t=>t.contentEl!==null&&t.contentEl.contains(e))}function be(e,t){do{if(e.$options.name==="QMenu"){if(e.hide(t),e.$props.separateClosePopup===!0)return V(e)}else if(e.__qPortal===!0){const n=V(e);return n!==void 0&&n.$options.name==="QPopupProxy"?(e.hide(t),n):e}e=V(e)}while(e!=null)}function Pt(e,t,n){for(;n!==0&&e!==void 0&&e!==null;){if(e.__qPortal===!0){if(n--,e.$options.name==="QMenu"){e=be(e,t);continue}e.hide(t)}e=V(e)}}function it(e){for(e=e.parent;e!=null;){if(e.type.name==="QGlobalDialog")return!0;if(e.type.name==="QDialog"||e.type.name==="QMenu")return!1;e=e.parent}return!1}function at(e,t,n,o){const l=A(!1),c=A(!1);let i=null;const u={},h=o==="dialog"&&it(e);function f(g){if(g===!0){ae(u),c.value=!0;return}c.value=!1,l.value===!1&&(h===!1&&i===null&&(i=Ve(!1,o)),l.value=!0,$.push(e.proxy),_e(u))}function r(g){if(c.value=!1,g!==!0)return;ae(u),l.value=!1;const p=$.indexOf(e.proxy);p!==-1&&$.splice(p,1),i!==null&&(ze(i),i=null)}return Fe(()=>{r(!0)}),e.proxy.__qPortal=!0,Be(e.proxy,"contentEl",()=>t.value),{showPortal:f,hidePortal:r,portalIsActive:l,portalIsAccessible:c,renderPortal:()=>h===!0?n():l.value===!0?[N(De,{to:i},n())]:void 0}}const ut={transitionShow:{type:String,default:"fade"},transitionHide:{type:String,default:"fade"},transitionDuration:{type:[String,Number],default:300}};function rt(e,t=()=>{},n=()=>{}){return{transitionProps:C(()=>{const o=`q-transition--${e.transitionShow||t()}`,l=`q-transition--${e.transitionHide||n()}`;return{appear:!0,enterFromClass:`${o}-enter-from`,enterActiveClass:`${o}-enter-active`,enterToClass:`${o}-enter-to`,leaveFromClass:`${l}-leave-from`,leaveActiveClass:`${l}-leave-active`,leaveToClass:`${l}-leave-to`}}),transitionStyle:C(()=>`--q-transition-duration: ${e.transitionDuration}ms`)}}function st(){let e;const t=D();function n(){e=void 0}return ge(n),B(n),{removeTick:n,registerTick(o){e=o,z(()=>{e===o&&(pe(t)===!1&&e(),e=void 0)})}}}function ct(){let e=null;const t=D();function n(){e!==null&&(clearTimeout(e),e=null)}return ge(n),B(n),{removeTimeout:n,registerTimeout(o,l){n(),pe(t)===!1&&(e=setTimeout(o,l))}}}const S=[];let L;function ft(e){L=e.keyCode===27}function dt(){L===!0&&(L=!1)}function ht(e){L===!0&&(L=!1,me(e,27)===!0&&S[S.length-1](e))}function xe(e){window[e]("keydown",ft),window[e]("blur",dt),window[e]("keyup",ht),L=!1}function mt(e){X.is.desktop===!0&&(S.push(e),S.length===1&&xe("addEventListener"))}function ue(e){const t=S.indexOf(e);t>-1&&(S.splice(t,1),S.length===0&&xe("removeEventListener"))}const M=[];function ye(e){M[M.length-1](e)}function vt(e){X.is.desktop===!0&&(M.push(e),M.length===1&&document.body.addEventListener("focusin",ye))}function gt(e){const t=M.indexOf(e);t>-1&&(M.splice(t,1),M.length===0&&document.body.removeEventListener("focusin",ye))}const{notPassiveCapture:R}=U,q=[];function O(e){const t=e.target;if(t===void 0||t.nodeType===8||t.classList.contains("no-pointer-events")===!0)return;let n=$.length-1;for(;n>=0;){const o=$[n].$;if(o.type.name==="QTooltip"){n--;continue}if(o.type.name!=="QDialog")break;if(o.props.seamless!==!0)return;n--}for(let o=q.length-1;o>=0;o--){const l=q[o];if((l.anchorEl.value===null||l.anchorEl.value.contains(t)===!1)&&(t===document.body||l.innerRef.value!==null&&l.innerRef.value.contains(t)===!1))e.qClickOutside=!0,l.onClickOutside(e);else return}}function pt(e){q.push(e),q.length===1&&(document.addEventListener("mousedown",O,R),document.addEventListener("touchstart",O,R))}function re(e){const t=q.findIndex(n=>n===e);t>-1&&(q.splice(t,1),q.length===0&&(document.removeEventListener("mousedown",O,R),document.removeEventListener("touchstart",O,R)))}let se,ce;function fe(e){const t=e.split(" ");return t.length!==2?!1:["top","center","bottom"].includes(t[0])!==!0?(console.error("Anchor/Self position must start with one of top/center/bottom"),!1):["left","middle","right","start","end"].includes(t[1])!==!0?(console.error("Anchor/Self position must end with one of left/middle/right/start/end"),!1):!0}function bt(e){return e?!(e.length!==2||typeof e[0]!="number"||typeof e[1]!="number"):!0}const G={"start#ltr":"left","start#rtl":"right","end#ltr":"right","end#rtl":"left"};["left","middle","right"].forEach(e=>{G[`${e}#ltr`]=e,G[`${e}#rtl`]=e});function de(e,t){const n=e.split(" ");return{vertical:n[0],horizontal:G[`${n[1]}#${t===!0?"rtl":"ltr"}`]}}function xt(e,t){let{top:n,left:o,right:l,bottom:c,width:i,height:u}=e.getBoundingClientRect();return t!==void 0&&(n-=t[1],o-=t[0],c+=t[1],l+=t[0],i+=t[0],u+=t[1]),{top:n,bottom:c,height:u,left:o,right:l,width:i,middle:o+(l-o)/2,center:n+(c-n)/2}}function yt(e,t,n){let{top:o,left:l}=e.getBoundingClientRect();return o+=t.top,l+=t.left,n!==void 0&&(o+=n[1],l+=n[0]),{top:o,bottom:o+1,height:1,left:l,right:l+1,width:1,middle:l,center:o}}function wt(e,t){return{top:0,center:t/2,bottom:t,left:0,middle:e/2,right:e}}function he(e,t,n,o){return{top:e[n.vertical]-t[o.vertical],left:e[n.horizontal]-t[o.horizontal]}}function we(e,t=0){if(e.targetEl===null||e.anchorEl===null||t>5)return;if(e.targetEl.offsetHeight===0||e.targetEl.offsetWidth===0){setTimeout(()=>{we(e,t+1)},10);return}const{targetEl:n,offset:o,anchorEl:l,anchorOrigin:c,selfOrigin:i,absoluteOffset:u,fit:h,cover:f,maxHeight:r,maxWidth:g}=e;if(X.is.ios===!0&&window.visualViewport!==void 0){const W=document.body.style,{offsetLeft:x,offsetTop:y}=window.visualViewport;x!==se&&(W.setProperty("--q-pe-left",x+"px"),se=x),y!==ce&&(W.setProperty("--q-pe-top",y+"px"),ce=y)}const{scrollLeft:p,scrollTop:a}=n,d=u===void 0?xt(l,f===!0?[0,0]:o):yt(l,u,o);Object.assign(n.style,{top:0,left:0,minWidth:null,minHeight:null,maxWidth:g||"100vw",maxHeight:r||"100vh",visibility:"visible"});const{offsetWidth:P,offsetHeight:w}=n,{elWidth:H,elHeight:m}=h===!0||f===!0?{elWidth:Math.max(d.width,P),elHeight:f===!0?Math.max(d.height,w):w}:{elWidth:P,elHeight:w};let v={maxWidth:g,maxHeight:r};(h===!0||f===!0)&&(v.minWidth=d.width+"px",f===!0&&(v.minHeight=d.height+"px")),Object.assign(n.style,v);const T=wt(H,m);let b=he(d,T,c,i);if(u===void 0||o===void 0)_(b,d,T,c,i);else{const{top:W,left:x}=b;_(b,d,T,c,i);let y=!1;if(b.top!==W){y=!0;const E=2*o[1];d.center=d.top-=E,d.bottom-=E+2}if(b.left!==x){y=!0;const E=2*o[0];d.middle=d.left-=E,d.right-=E+2}y===!0&&(b=he(d,T,c,i),_(b,d,T,c,i))}v={top:b.top+"px",left:b.left+"px"},b.maxHeight!==void 0&&(v.maxHeight=b.maxHeight+"px",d.height>b.maxHeight&&(v.minHeight=v.maxHeight)),b.maxWidth!==void 0&&(v.maxWidth=b.maxWidth+"px",d.width>b.maxWidth&&(v.minWidth=v.maxWidth)),Object.assign(n.style,v),n.scrollTop!==a&&(n.scrollTop=a),n.scrollLeft!==p&&(n.scrollLeft=p)}function _(e,t,n,o,l){const c=n.bottom,i=n.right,u=Xe(),h=window.innerHeight-u,f=document.body.clientWidth;if(e.top<0||e.top+c>h)if(l.vertical==="center")e.top=t[o.vertical]>h/2?Math.max(0,h-c):0,e.maxHeight=Math.min(c,h);else if(t[o.vertical]>h/2){const r=Math.min(h,o.vertical==="center"?t.center:o.vertical===l.vertical?t.bottom:t.top);e.maxHeight=Math.min(c,r),e.top=Math.max(0,r-c)}else e.top=Math.max(0,o.vertical==="center"?t.center:o.vertical===l.vertical?t.top:t.bottom),e.maxHeight=Math.min(c,h-e.top);if(e.left<0||e.left+i>f)if(e.maxWidth=Math.min(i,f),l.horizontal==="middle")e.left=t[o.horizontal]>f/2?Math.max(0,f-i):0;else if(t[o.horizontal]>f/2){const r=Math.min(f,o.horizontal==="middle"?t.middle:o.horizontal===l.horizontal?t.right:t.left);e.maxWidth=Math.min(i,r),e.left=Math.max(0,r-e.maxWidth)}else e.left=Math.max(0,o.horizontal==="middle"?t.middle:o.horizontal===l.horizontal?t.left:t.right),e.maxWidth=Math.min(i,f-e.left)}var Ht=Re({name:"QMenu",inheritAttrs:!1,props:{...Je,...nt,...Ue,...ut,persistent:Boolean,autoClose:Boolean,separateClosePopup:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,fit:Boolean,cover:Boolean,square:Boolean,anchor:{type:String,validator:fe},self:{type:String,validator:fe},offset:{type:Array,validator:bt},scrollTarget:{default:void 0},touchPosition:Boolean,maxHeight:{type:String,default:null},maxWidth:{type:String,default:null}},emits:[...ot,"click","escapeKey"],setup(e,{slots:t,emit:n,attrs:o}){let l=null,c,i,u;const h=D(),{proxy:f}=h,{$q:r}=f,g=A(null),p=A(!1),a=C(()=>e.persistent!==!0&&e.noRouteDismiss!==!0),d=Ne(e,r),{registerTick:P,removeTick:w}=st(),{registerTimeout:H}=ct(),{transitionProps:m,transitionStyle:v}=rt(e),{localScrollTarget:T,changeScrollEvent:b,unconfigureScrollTarget:W}=tt(e,ne),{anchorEl:x,canShow:y}=et({showing:p}),{hide:E}=lt({showing:p,canShow:y,handleShow:Pe,handleHide:He,hideOnRouteChange:a,processOnMount:!0}),{showPortal:Y,hidePortal:Z,renderPortal:Te}=at(h,g,Me,"menu"),Q={anchorEl:x,innerRef:g,onClickOutside(s){if(e.persistent!==!0&&p.value===!0)return E(s),(s.type==="touchstart"||s.target.classList.contains("q-dialog__backdrop"))&&Ie(s),!0}},J=C(()=>de(e.anchor||(e.cover===!0?"center middle":"bottom start"),r.lang.rtl)),Ee=C(()=>e.cover===!0?J.value:de(e.self||"top start",r.lang.rtl)),Ce=C(()=>(e.square===!0?" q-menu--square":"")+(d.value===!0?" q-menu--dark q-dark":"")),ke=C(()=>e.autoClose===!0?{onClick:Se}:{}),ee=C(()=>p.value===!0&&e.persistent!==!0);k(ee,s=>{s===!0?(mt(K),pt(Q)):(ue(K),re(Q))});function j(){Ge(()=>{let s=g.value;s&&s.contains(document.activeElement)!==!0&&(s=s.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||s.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||s.querySelector("[autofocus], [data-autofocus]")||s,s.focus({preventScroll:!0}))})}function Pe(s){if(l=e.noRefocus===!1?document.activeElement:null,vt(oe),Y(),ne(),c=void 0,s!==void 0&&(e.touchPosition||e.contextMenu)){const I=Oe(s);if(I.left!==void 0){const{top:qe,left:We}=x.value.getBoundingClientRect();c={left:I.left-We,top:I.top-qe}}}i===void 0&&(i=k(()=>r.screen.width+"|"+r.screen.height+"|"+e.self+"|"+e.anchor+"|"+r.lang.rtl,F)),e.noFocus!==!0&&document.activeElement.blur(),P(()=>{F(),e.noFocus!==!0&&j()}),H(()=>{r.platform.is.ios===!0&&(u=e.autoClose,g.value.click()),F(),Y(!0),n("show",s)},e.transitionDuration)}function He(s){w(),Z(),te(!0),l!==null&&(s===void 0||s.qClickOutside!==!0)&&(((s&&s.type.indexOf("key")===0?l.closest('[tabindex]:not([tabindex^="-"])'):void 0)||l).focus(),l=null),H(()=>{Z(!0),n("hide",s)},e.transitionDuration)}function te(s){c=void 0,i!==void 0&&(i(),i=void 0),(s===!0||p.value===!0)&&(gt(oe),W(),re(Q),ue(K)),s!==!0&&(l=null)}function ne(){(x.value!==null||e.scrollTarget!==void 0)&&(T.value=Ye(x.value,e.scrollTarget),b(T.value,F))}function Se(s){u!==!0?(be(f,s),n("click",s)):u=!1}function oe(s){ee.value===!0&&e.noFocus!==!0&&Ke(g.value,s.target)!==!0&&j()}function K(s){n("escapeKey"),E(s)}function F(){we({targetEl:g.value,offset:e.offset,anchorEl:x.value,anchorOrigin:J.value,selfOrigin:Ee.value,absoluteOffset:c,fit:e.fit,cover:e.cover,maxHeight:e.maxHeight,maxWidth:e.maxWidth})}function Me(){return N(je,m.value,()=>p.value===!0?N("div",{role:"menu",...o,ref:g,tabindex:-1,class:["q-menu q-position-engine scroll"+Ce.value,o.class],style:[o.style,v.value],...ke.value},Qe(t.default)):null)}return B(te),Object.assign(f,{focus:j,updatePosition:F}),Te}});function St(e,t,n){return n<=t?t:Math.min(n,Math.max(t,e))}function Mt(e,t,n){if(n<=t)return t;const o=n-t+1;let l=t+(e-t)%o;return lclashes were found:',matches_found:'The following matches were found:',select_info:"Select a question to see a description per tool",score:"intermediate standings"},results:{ranking:{title:"Ranking",explanation:"Here you will see an overview of the results. Clickon a platform to see in which aspects it matches or clashes with your given answers.",graph:"Review graph"}}},r={failed:"Actie gefaald",success:"Actie succesvol",language_picker:"Taalkiezer",home:{introduction:{title:"De Quiz",text:"Welkom bij de AI platformwijzer! Als u hier bent beland, dan bent u hoogstwaarschijnlijk op zoek naar d\xE9 datapipeline tool voor uw organisatie. Goed nieuws, daarvoor bent u hier aan het goede adres!",tutorial:"Als u op onderstaande knop klikt, krijg je een aantal vragen die ons helpen te bepalen wat je nodig hebt. De vragen vari\xEBren van de aard van de dataverwerking, schaalbaarheid, gewenste functionaliteiten tot de mate van ervaring met verschillende tools en programmeertalen. Op basis van de verzamelde antwoorden en een geavanceerd algoritme, wordt een gedetailleerde aanbeveling gegenereerd die aangeeft welk dataplatform het beste aansluit bij de specifieke kenmerken en vereisten van de gebruiker. De aanbeveling omvat toonaangevende dataplatformen, zoals Amazon SageMaker, Databricks, Microsoft Azure Machine Learning, en andere relevante platforms. U krijgt niet alleen een passend dataplatform aangereikt, maar ook nuttige informatie en richtlijnen over waarom dit platform het beste bij uw behoefte past, waardoor u weloverwogen beslissingen kunt nemen voor uw data-analyse- en machine learning-projecten.",btn:{start:"Start de quiz"}},about:{title:"Over het Ambient Intelligence Lectoraat",text:"Deze tool is ontwikkeld door de onderzoeksgroep Ambient Intelligence. Ambiente Intelligentie maakt omgevingen slim. De onderzoeksgroep richt zich voornamelijk op toepassingen die verband houden met veiligheid, sport en slimme industrie. Veiligheidsprojecten worden vaak in samenwerking met de brandweer uitgevoerd. In deze projecten zijn oplossingen ontwikkeld om te bepalen waar een brandweerman zich bevindt in gebouwen zonder infrastructuur met sensoren.",btn:{more_info:"Meer Informatie"}},results:{title:"Resultaten",no_results:"Geen resultaten"},tools:{title:"De tools"}},quiz:{btn:{more_info:"Meer info per tool"},questions:"Vragen"},question:{explanation:"Vraag uitleg",no_selected_answer_error:"Selecteer minimaal 1 antwoord!",single_question_help:"Selecteer \xE9\xE9n antwoord",multiple_question_help:"Meerdere antwoorden mogelijk",btn:{next:"Volgende vraag"}},answer:{explanation:"Antwoord uitleg"},tool:{no_matches_found:"Er zijn geen matches gevonden!",no_clashes_found:"Er zijn geen clashes gevonden, deze tool voldoet voor 100% aan je aangegeven eisen!",clashes_found:'De volgende clashes zijn gevonden:',matches_found:'De volgende matches zijn gevonden:',select_info:"Selecteer een vraag om een beschrijving per tool te kunnen zien",score:"tussenstand"},results:{ranking:{title:"Ranglijst",explanation:"Hier ziet u een overzicht met de resultaten. Klik op een platform om te zien in welke aspecten het matcht of clasht met uw gegeven antwoorden.",graph:"Nakijk grafiek"}}},s={"en-US":i,nl:r},c=({app:e})=>{const t=o(),n=a({locale:t.defaultLocale,legacy:!1,messages:s});e.use(n)};export{c as default}; diff --git a/docs/assets/index.0ed11181.js b/docs/assets/index.ab4869ca.js similarity index 76% rename from docs/assets/index.0ed11181.js rename to docs/assets/index.ab4869ca.js index ac398a4..1ffdd19 100644 --- a/docs/assets/index.0ed11181.js +++ b/docs/assets/index.ab4869ca.js @@ -1,4 +1,4 @@ -const Ql=function(){const t=document.createElement("link").relList;return t&&t.supports&&t.supports("modulepreload")?"modulepreload":"preload"}(),Is={},Jl="./",ke=function(t,n){return!n||n.length===0?t():Promise.all(n.map(r=>{if(r=`${Jl}${r}`,r in Is)return;Is[r]=!0;const s=r.endsWith(".css"),o=s?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${r}"]${o}`))return;const i=document.createElement("link");if(i.rel=s?"stylesheet":Ql,s||(i.as="script",i.crossOrigin=""),i.href=r,document.head.appendChild(i),s)return new Promise((l,a)=>{i.addEventListener("load",l),i.addEventListener("error",()=>a(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())};/** +const Ql=function(){const t=document.createElement("link").relList;return t&&t.supports&&t.supports("modulepreload")?"modulepreload":"preload"}(),Is={},Jl="./",Ce=function(t,n){return!n||n.length===0?t():Promise.all(n.map(r=>{if(r=`${Jl}${r}`,r in Is)return;Is[r]=!0;const s=r.endsWith(".css"),o=s?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${r}"]${o}`))return;const i=document.createElement("link");if(i.rel=s?"stylesheet":Ql,s||(i.as="script",i.crossOrigin=""),i.href=r,document.head.appendChild(i),s)return new Promise((l,a)=>{i.addEventListener("load",l),i.addEventListener("error",()=>a(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())};/** * @vue/shared v3.4.15 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT @@ -6,15 +6,15 @@ const Ql=function(){const t=document.createElement("link").relList;return t&&t.s * @vue/reactivity v3.4.15 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Te;class di{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Te,!t&&Te&&(this.index=(Te.scopes||(Te.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Te;try{return Te=this,t()}finally{Te=n}}}on(){Te=this}off(){Te=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=2))break}this._dirtyLevel<2&&(this._dirtyLevel=0),Tt()}return this._dirtyLevel>=2}set dirty(t){this._dirtyLevel=t?2:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=ft,n=Et;try{return ft=!0,Et=this,this._runnings++,Ns(this),this.fn()}finally{Fs(this),this._runnings--,Et=n,ft=t}}stop(){var t;this.active&&(Ns(this),Fs(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function da(e){return e.value}function Ns(e){e._trackId++,e._depsLength=0}function Fs(e){if(e.deps&&e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},Dn=new WeakMap,Ct=Symbol(""),Fr=Symbol("");function Pe(e,t,n){if(ft&&Et){let r=Dn.get(e);r||Dn.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=bi(()=>r.delete(n))),vi(Et,s)}}function Xe(e,t,n,r,s,o){const i=Dn.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&U(e)){const a=Number(r);i.forEach((u,c)=>{(c==="length"||!Qt(c)&&c>=a)&&l.push(u)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":U(e)?ls(n)&&l.push(i.get("length")):(l.push(i.get(Ct)),Ht(e)&&l.push(i.get(Fr)));break;case"delete":U(e)||(l.push(i.get(Ct)),Ht(e)&&l.push(i.get(Fr)));break;case"set":Ht(e)&&l.push(i.get(Ct));break}fs();for(const a of l)a&&_i(a,2);ds()}function ha(e,t){var n;return(n=Dn.get(e))==null?void 0:n.get(t)}const pa=ss("__proto__,__v_isRef,__isVue"),wi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Qt)),qs=ga();function ga(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=ne(this);for(let o=0,i=this.length;o{e[t]=function(...n){kt(),fs();const r=ne(this)[t].apply(this,n);return ds(),Tt(),r}}),e}function ma(e){const t=ne(this);return Pe(t,"has",e),t.hasOwnProperty(e)}class xi{constructor(t=!1,n=!1){this._isReadonly=t,this._shallow=n}get(t,n,r){const s=this._isReadonly,o=this._shallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?Ta:Pi:o?Si:Ci).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=U(t);if(!s){if(i&&re(qs,n))return Reflect.get(qs,n,r);if(n==="hasOwnProperty")return ma}const l=Reflect.get(t,n,r);return(Qt(n)?wi.has(n):pa(n))||(s||Pe(t,"get",n),o)?l:ge(l)?i&&ls(n)?l:l.value:ue(l)?s?ki(l):At(l):l}}class Ei extends xi{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._shallow){const a=Vt(o);if(!Hn(r)&&!Vt(r)&&(o=ne(o),r=ne(r)),!U(t)&&ge(o)&&!ge(r))return a?!1:(o.value=r,!0)}const i=U(t)&&ls(n)?Number(n)e,tr=e=>Reflect.getPrototypeOf(e);function Sn(e,t,n=!1,r=!1){e=e.__v_raw;const s=ne(e),o=ne(t);n||(pt(t,o)&&Pe(s,"get",t),Pe(s,"get",o));const{has:i}=tr(s),l=r?hs:n?ms:fn;if(i.call(s,t))return l(e.get(t));if(i.call(s,o))return l(e.get(o));e!==s&&e.get(t)}function Pn(e,t=!1){const n=this.__v_raw,r=ne(n),s=ne(e);return t||(pt(e,s)&&Pe(r,"has",e),Pe(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function Rn(e,t=!1){return e=e.__v_raw,!t&&Pe(ne(e),"iterate",Ct),Reflect.get(e,"size",e)}function Bs(e){e=ne(e);const t=ne(this);return tr(t).has.call(t,e)||(t.add(e),Xe(t,"add",e,e)),this}function Ds(e,t){t=ne(t);const n=ne(this),{has:r,get:s}=tr(n);let o=r.call(n,e);o||(e=ne(e),o=r.call(n,e));const i=s.call(n,e);return n.set(e,t),o?pt(t,i)&&Xe(n,"set",e,t):Xe(n,"add",e,t),this}function Hs(e){const t=ne(this),{has:n,get:r}=tr(t);let s=n.call(t,e);s||(e=ne(e),s=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return s&&Xe(t,"delete",e,void 0),o}function zs(){const e=ne(this),t=e.size!==0,n=e.clear();return t&&Xe(e,"clear",void 0,void 0),n}function kn(e,t){return function(r,s){const o=this,i=o.__v_raw,l=ne(i),a=t?hs:e?ms:fn;return!e&&Pe(l,"iterate",Ct),i.forEach((u,c)=>r.call(s,a(u),a(c),o))}}function Tn(e,t,n){return function(...r){const s=this.__v_raw,o=ne(s),i=Ht(o),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,u=s[e](...r),c=n?hs:t?ms:fn;return!t&&Pe(o,"iterate",a?Fr:Ct),{next(){const{value:h,done:f}=u.next();return f?{value:h,done:f}:{value:l?[c(h[0]),c(h[1])]:c(h),done:f}},[Symbol.iterator](){return this}}}}function tt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function wa(){const e={get(o){return Sn(this,o)},get size(){return Rn(this)},has:Pn,add:Bs,set:Ds,delete:Hs,clear:zs,forEach:kn(!1,!1)},t={get(o){return Sn(this,o,!1,!0)},get size(){return Rn(this)},has:Pn,add:Bs,set:Ds,delete:Hs,clear:zs,forEach:kn(!1,!0)},n={get(o){return Sn(this,o,!0)},get size(){return Rn(this,!0)},has(o){return Pn.call(this,o,!0)},add:tt("add"),set:tt("set"),delete:tt("delete"),clear:tt("clear"),forEach:kn(!0,!1)},r={get(o){return Sn(this,o,!0,!0)},get size(){return Rn(this,!0)},has(o){return Pn.call(this,o,!0)},add:tt("add"),set:tt("set"),delete:tt("delete"),clear:tt("clear"),forEach:kn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=Tn(o,!1,!1),n[o]=Tn(o,!0,!1),t[o]=Tn(o,!1,!0),r[o]=Tn(o,!0,!0)}),[e,n,t,r]}const[xa,Ea,Ca,Sa]=wa();function ps(e,t){const n=t?e?Sa:Ca:e?Ea:xa;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(re(n,s)&&s in r?n:r,s,o)}const Pa={get:ps(!1,!1)},Ra={get:ps(!1,!0)},ka={get:ps(!0,!1)},Ci=new WeakMap,Si=new WeakMap,Pi=new WeakMap,Ta=new WeakMap;function Aa(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Oa(e){return e.__v_skip||!Object.isExtensible(e)?0:Aa(Zl(e))}function At(e){return Vt(e)?e:gs(e,!1,_a,Pa,Ci)}function Ri(e){return gs(e,!1,ba,Ra,Si)}function ki(e){return gs(e,!0,ya,ka,Pi)}function gs(e,t,n,r,s){if(!ue(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=Oa(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function dt(e){return Vt(e)?dt(e.__v_raw):!!(e&&e.__v_isReactive)}function Vt(e){return!!(e&&e.__v_isReadonly)}function Hn(e){return!!(e&&e.__v_isShallow)}function Ti(e){return dt(e)||Vt(e)}function ne(e){const t=e&&e.__v_raw;return t?ne(t):e}function mt(e){return Bn(e,"__v_skip",!0),e}const fn=e=>ue(e)?At(e):e,ms=e=>ue(e)?ki(e):e;class Ai{constructor(t,n,r,s){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new us(()=>t(this._value),()=>Mn(this,1),()=>this.dep&&yi(this.dep)),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=ne(this);return(!t._cacheable||t.effect.dirty)&&pt(t._value,t._value=t.effect.run())&&Mn(t,2),Oi(t),t.effect._dirtyLevel>=1&&Mn(t,1),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function La(e,t,n=!1){let r,s;const o=Y(e);return o?(r=e,s=Ae):(r=e.get,s=e.set),new Ai(r,s,o||!s,n)}function Oi(e){ft&&Et&&(e=ne(e),vi(Et,e.dep||(e.dep=bi(()=>e.dep=void 0,e instanceof Ai?e:void 0))))}function Mn(e,t=2,n){e=ne(e);const r=e.dep;r&&_i(r,t)}function ge(e){return!!(e&&e.__v_isRef===!0)}function Pt(e){return Li(e,!1)}function $a(e){return Li(e,!0)}function Li(e,t){return ge(e)?e:new Ma(e,t)}class Ma{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ne(t),this._value=n?t:fn(t)}get value(){return Oi(this),this._value}set value(t){const n=this.__v_isShallow||Hn(t)||Vt(t);t=n?t:ne(t),pt(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:fn(t),Mn(this,2))}}function St(e){return ge(e)?e.value:e}const Ia={get:(e,t,n)=>St(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return ge(s)&&!ge(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function $i(e){return dt(e)?e:new Proxy(e,Ia)}function ja(e){const t=U(e)?new Array(e.length):{};for(const n in e)t[n]=Fa(e,n);return t}class Na{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return ha(ne(this._object),this._key)}}function Fa(e,t,n){const r=e[t];return ge(r)?r:new Na(e,t,n)}/** +**/let Te;class di{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Te,!t&&Te&&(this.index=(Te.scopes||(Te.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Te;try{return Te=this,t()}finally{Te=n}}}on(){Te=this}off(){Te=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=2))break}this._dirtyLevel<2&&(this._dirtyLevel=0),Tt()}return this._dirtyLevel>=2}set dirty(t){this._dirtyLevel=t?2:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=ft,n=Et;try{return ft=!0,Et=this,this._runnings++,Ns(this),this.fn()}finally{Fs(this),this._runnings--,Et=n,ft=t}}stop(){var t;this.active&&(Ns(this),Fs(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function da(e){return e.value}function Ns(e){e._trackId++,e._depsLength=0}function Fs(e){if(e.deps&&e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},Dn=new WeakMap,Ct=Symbol(""),Fr=Symbol("");function Re(e,t,n){if(ft&&Et){let r=Dn.get(e);r||Dn.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=bi(()=>r.delete(n))),vi(Et,s)}}function Xe(e,t,n,r,s,o){const i=Dn.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&U(e)){const a=Number(r);i.forEach((u,c)=>{(c==="length"||!Qt(c)&&c>=a)&&l.push(u)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":U(e)?ls(n)&&l.push(i.get("length")):(l.push(i.get(Ct)),Ht(e)&&l.push(i.get(Fr)));break;case"delete":U(e)||(l.push(i.get(Ct)),Ht(e)&&l.push(i.get(Fr)));break;case"set":Ht(e)&&l.push(i.get(Ct));break}fs();for(const a of l)a&&_i(a,2);ds()}function ha(e,t){var n;return(n=Dn.get(e))==null?void 0:n.get(t)}const pa=ss("__proto__,__v_isRef,__isVue"),wi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Qt)),qs=ga();function ga(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=ne(this);for(let o=0,i=this.length;o{e[t]=function(...n){kt(),fs();const r=ne(this)[t].apply(this,n);return ds(),Tt(),r}}),e}function ma(e){const t=ne(this);return Re(t,"has",e),t.hasOwnProperty(e)}class xi{constructor(t=!1,n=!1){this._isReadonly=t,this._shallow=n}get(t,n,r){const s=this._isReadonly,o=this._shallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?Ta:Pi:o?Si:Ci).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=U(t);if(!s){if(i&&re(qs,n))return Reflect.get(qs,n,r);if(n==="hasOwnProperty")return ma}const l=Reflect.get(t,n,r);return(Qt(n)?wi.has(n):pa(n))||(s||Re(t,"get",n),o)?l:ge(l)?i&&ls(n)?l:l.value:ue(l)?s?ki(l):At(l):l}}class Ei extends xi{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._shallow){const a=Vt(o);if(!Hn(r)&&!Vt(r)&&(o=ne(o),r=ne(r)),!U(t)&&ge(o)&&!ge(r))return a?!1:(o.value=r,!0)}const i=U(t)&&ls(n)?Number(n)e,tr=e=>Reflect.getPrototypeOf(e);function Sn(e,t,n=!1,r=!1){e=e.__v_raw;const s=ne(e),o=ne(t);n||(pt(t,o)&&Re(s,"get",t),Re(s,"get",o));const{has:i}=tr(s),l=r?hs:n?ms:fn;if(i.call(s,t))return l(e.get(t));if(i.call(s,o))return l(e.get(o));e!==s&&e.get(t)}function Pn(e,t=!1){const n=this.__v_raw,r=ne(n),s=ne(e);return t||(pt(e,s)&&Re(r,"has",e),Re(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function Rn(e,t=!1){return e=e.__v_raw,!t&&Re(ne(e),"iterate",Ct),Reflect.get(e,"size",e)}function Bs(e){e=ne(e);const t=ne(this);return tr(t).has.call(t,e)||(t.add(e),Xe(t,"add",e,e)),this}function Ds(e,t){t=ne(t);const n=ne(this),{has:r,get:s}=tr(n);let o=r.call(n,e);o||(e=ne(e),o=r.call(n,e));const i=s.call(n,e);return n.set(e,t),o?pt(t,i)&&Xe(n,"set",e,t):Xe(n,"add",e,t),this}function Hs(e){const t=ne(this),{has:n,get:r}=tr(t);let s=n.call(t,e);s||(e=ne(e),s=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return s&&Xe(t,"delete",e,void 0),o}function zs(){const e=ne(this),t=e.size!==0,n=e.clear();return t&&Xe(e,"clear",void 0,void 0),n}function kn(e,t){return function(r,s){const o=this,i=o.__v_raw,l=ne(i),a=t?hs:e?ms:fn;return!e&&Re(l,"iterate",Ct),i.forEach((u,c)=>r.call(s,a(u),a(c),o))}}function Tn(e,t,n){return function(...r){const s=this.__v_raw,o=ne(s),i=Ht(o),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,u=s[e](...r),c=n?hs:t?ms:fn;return!t&&Re(o,"iterate",a?Fr:Ct),{next(){const{value:h,done:f}=u.next();return f?{value:h,done:f}:{value:l?[c(h[0]),c(h[1])]:c(h),done:f}},[Symbol.iterator](){return this}}}}function tt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function wa(){const e={get(o){return Sn(this,o)},get size(){return Rn(this)},has:Pn,add:Bs,set:Ds,delete:Hs,clear:zs,forEach:kn(!1,!1)},t={get(o){return Sn(this,o,!1,!0)},get size(){return Rn(this)},has:Pn,add:Bs,set:Ds,delete:Hs,clear:zs,forEach:kn(!1,!0)},n={get(o){return Sn(this,o,!0)},get size(){return Rn(this,!0)},has(o){return Pn.call(this,o,!0)},add:tt("add"),set:tt("set"),delete:tt("delete"),clear:tt("clear"),forEach:kn(!0,!1)},r={get(o){return Sn(this,o,!0,!0)},get size(){return Rn(this,!0)},has(o){return Pn.call(this,o,!0)},add:tt("add"),set:tt("set"),delete:tt("delete"),clear:tt("clear"),forEach:kn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=Tn(o,!1,!1),n[o]=Tn(o,!0,!1),t[o]=Tn(o,!1,!0),r[o]=Tn(o,!0,!0)}),[e,n,t,r]}const[xa,Ea,Ca,Sa]=wa();function ps(e,t){const n=t?e?Sa:Ca:e?Ea:xa;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(re(n,s)&&s in r?n:r,s,o)}const Pa={get:ps(!1,!1)},Ra={get:ps(!1,!0)},ka={get:ps(!0,!1)},Ci=new WeakMap,Si=new WeakMap,Pi=new WeakMap,Ta=new WeakMap;function Aa(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Oa(e){return e.__v_skip||!Object.isExtensible(e)?0:Aa(Zl(e))}function At(e){return Vt(e)?e:gs(e,!1,_a,Pa,Ci)}function Ri(e){return gs(e,!1,ba,Ra,Si)}function ki(e){return gs(e,!0,ya,ka,Pi)}function gs(e,t,n,r,s){if(!ue(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=Oa(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function dt(e){return Vt(e)?dt(e.__v_raw):!!(e&&e.__v_isReactive)}function Vt(e){return!!(e&&e.__v_isReadonly)}function Hn(e){return!!(e&&e.__v_isShallow)}function Ti(e){return dt(e)||Vt(e)}function ne(e){const t=e&&e.__v_raw;return t?ne(t):e}function mt(e){return Bn(e,"__v_skip",!0),e}const fn=e=>ue(e)?At(e):e,ms=e=>ue(e)?ki(e):e;class Ai{constructor(t,n,r,s){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new us(()=>t(this._value),()=>Mn(this,1),()=>this.dep&&yi(this.dep)),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=ne(this);return(!t._cacheable||t.effect.dirty)&&pt(t._value,t._value=t.effect.run())&&Mn(t,2),Oi(t),t.effect._dirtyLevel>=1&&Mn(t,1),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function La(e,t,n=!1){let r,s;const o=Y(e);return o?(r=e,s=Ae):(r=e.get,s=e.set),new Ai(r,s,o||!s,n)}function Oi(e){ft&&Et&&(e=ne(e),vi(Et,e.dep||(e.dep=bi(()=>e.dep=void 0,e instanceof Ai?e:void 0))))}function Mn(e,t=2,n){e=ne(e);const r=e.dep;r&&_i(r,t)}function ge(e){return!!(e&&e.__v_isRef===!0)}function Pt(e){return Li(e,!1)}function $a(e){return Li(e,!0)}function Li(e,t){return ge(e)?e:new Ma(e,t)}class Ma{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ne(t),this._value=n?t:fn(t)}get value(){return Oi(this),this._value}set value(t){const n=this.__v_isShallow||Hn(t)||Vt(t);t=n?t:ne(t),pt(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:fn(t),Mn(this,2))}}function St(e){return ge(e)?e.value:e}const Ia={get:(e,t,n)=>St(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return ge(s)&&!ge(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function $i(e){return dt(e)?e:new Proxy(e,Ia)}function ja(e){const t=U(e)?new Array(e.length):{};for(const n in e)t[n]=Fa(e,n);return t}class Na{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return ha(ne(this._object),this._key)}}function Fa(e,t,n){const r=e[t];return ge(r)?r:new Na(e,t,n)}/** * @vue/runtime-core v3.4.15 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function ht(e,t,n,r){let s;try{s=r?e(...r):e()}catch(o){nr(o,t,n)}return s}function Me(e,t,n,r){if(Y(e)){const o=ht(e,t,n,r);return o&&ii(o)&&o.catch(i=>{nr(i,t,n)}),o}const s=[];for(let o=0;o>>1,s=be[r],o=hn(s);oWe&&be.splice(t,1)}function Ha(e){U(e)?zt.push(...e):(!it||!it.includes(e,e.allowRecurse?bt+1:bt))&&zt.push(e),Ii()}function Vs(e,t,n=dn?We+1:0){for(;nhn(n)-hn(r));if(zt.length=0,it){it.push(...t);return}for(it=t,bt=0;bte.id==null?1/0:e.id,za=(e,t)=>{const n=hn(e)-hn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Ni(e){qr=!1,dn=!0,be.sort(za);const t=Ae;try{for(We=0;Wehe(g)?g.trim():g)),h&&(s=n.map(na))}let l,a=r[l=vr(t)]||r[l=vr(Ge(t))];!a&&o&&(a=r[l=vr(Jt(t))]),a&&Me(a,e,6,s);const u=r[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Me(u,e,6,s)}}function Fi(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!Y(e)){const a=u=>{const c=Fi(u,t,!0);c&&(l=!0,pe(i,c))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(ue(e)&&r.set(e,null),null):(U(o)?o.forEach(a=>i[a]=null):pe(i,o),ue(e)&&r.set(e,i),i)}function rr(e,t){return!e||!Yn(t)?!1:(t=t.slice(2).replace(/Once$/,""),re(e,t[0].toLowerCase()+t.slice(1))||re(e,Jt(t))||re(e,t))}let we=null,qi=null;function zn(e){const t=we;return we=e,qi=e&&e.type.__scopeId||null,t}function Ka(e,t=we,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&so(-1);const o=zn(t);let i;try{i=e(...s)}finally{zn(o),r._d&&so(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function br(e){const{type:t,vnode:n,proxy:r,withProxy:s,props:o,propsOptions:[i],slots:l,attrs:a,emit:u,render:c,renderCache:h,data:f,setupState:g,ctx:_,inheritAttrs:E}=e;let x,R;const F=zn(e);try{if(n.shapeFlag&4){const H=s||r,O=H;x=Ue(c.call(O,H,h,o,g,f,_)),R=a}else{const H=t;x=Ue(H.length>1?H(o,{attrs:a,slots:l,emit:u}):H(o,null)),R=t.props?a:Ua(a)}}catch(H){ln.length=0,nr(H,e,1),x=Se(De)}let q=x;if(R&&E!==!1){const H=Object.keys(R),{shapeFlag:O}=q;H.length&&O&7&&(i&&H.some(os)&&(R=Wa(R,i)),q=gt(q,R))}return n.dirs&&(q=gt(q),q.dirs=q.dirs?q.dirs.concat(n.dirs):n.dirs),n.transition&&(q.transition=n.transition),x=q,zn(F),x}const Ua=e=>{let t;for(const n in e)(n==="class"||n==="style"||Yn(n))&&((t||(t={}))[n]=e[n]);return t},Wa=(e,t)=>{const n={};for(const r in e)(!os(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ga(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:a}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return r?Ks(r,i,u):!!i;if(a&8){const c=t.dynamicProps;for(let h=0;he.__isSuspense;function ec(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):Ha(e)}const tc=Symbol.for("v-scx"),nc=()=>Ie(tc),An={};function rn(e,t,n){return Di(e,t,n)}function Di(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=ce){if(t&&o){const $=t;t=(...V)=>{$(...V),O()}}const a=ve,u=$=>r===!0?$:xt($,r===!1?1:void 0);let c,h=!1,f=!1;if(ge(e)?(c=()=>e.value,h=Hn(e)):dt(e)?(c=()=>u(e),h=!0):U(e)?(f=!0,h=e.some($=>dt($)||Hn($)),c=()=>e.map($=>{if(ge($))return $.value;if(dt($))return u($);if(Y($))return ht($,a,2)})):Y(e)?t?c=()=>ht(e,a,2):c=()=>(g&&g(),Me(e,a,3,[_])):c=Ae,t&&r){const $=c;c=()=>xt($())}let g,_=$=>{g=q.onStop=()=>{ht($,a,4),g=q.onStop=void 0}},E;if(cr)if(_=Ae,t?n&&Me(t,a,3,[c(),f?[]:void 0,_]):c(),s==="sync"){const $=nc();E=$.__watcherHandles||($.__watcherHandles=[])}else return Ae;let x=f?new Array(e.length).fill(An):An;const R=()=>{if(!(!q.active||!q.dirty))if(t){const $=q.run();(r||h||(f?$.some((V,S)=>pt(V,x[S])):pt($,x)))&&(g&&g(),Me(t,a,3,[$,x===An?void 0:f&&x[0]===An?[]:x,_]),x=$)}else q.run()};R.allowRecurse=!!t;let F;s==="sync"?F=R:s==="post"?F=()=>Ce(R,a&&a.suspense):(R.pre=!0,a&&(R.id=a.uid),F=()=>ys(R));const q=new us(c,Ae,F),H=pi(),O=()=>{q.stop(),H&&is(H.effects,q)};return t?n?R():x=q.run():s==="post"?Ce(q.run.bind(q),a&&a.suspense):q.run(),E&&E.push(O),O}function rc(e,t,n){const r=this.proxy,s=he(e)?e.includes(".")?Hi(r,e):()=>r[e]:e.bind(r,r);let o;Y(t)?o=t:(o=t.handler,n=t);const i=xn(this),l=Di(s,o.bind(r),n);return i(),l}function Hi(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s0){if(n>=t)return e;n++}if(r=r||new Set,r.has(e))return e;if(r.add(e),ge(e))xt(e.value,t,n,r);else if(U(e))for(let s=0;s{xt(s,t,n,r)});else if(ai(e))for(const s in e)xt(e[s],t,n,r);return e}function zi(e,t){if(we===null)return e;const n=ur(we)||we.proxy,r=e.dirs||(e.dirs=[]);for(let s=0;s{e.isMounted=!0}),ws(()=>{e.isUnmounting=!0}),e}const Oe=[Function,Array],Ki={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Oe,onEnter:Oe,onAfterEnter:Oe,onEnterCancelled:Oe,onBeforeLeave:Oe,onLeave:Oe,onAfterLeave:Oe,onLeaveCancelled:Oe,onBeforeAppear:Oe,onAppear:Oe,onAfterAppear:Oe,onAppearCancelled:Oe},sc={name:"BaseTransition",props:Ki,setup(e,{slots:t}){const n=wn(),r=Vi();let s;return()=>{const o=t.default&&bs(t.default(),!0);if(!o||!o.length)return;let i=o[0];if(o.length>1){for(const E of o)if(E.type!==De){i=E;break}}const l=ne(e),{mode:a}=l;if(r.isLeaving)return wr(i);const u=Ws(i);if(!u)return wr(i);const c=pn(u,l,r,n);gn(u,c);const h=n.subTree,f=h&&Ws(h);let g=!1;const{getTransitionKey:_}=u.type;if(_){const E=_();s===void 0?s=E:E!==s&&(s=E,g=!0)}if(f&&f.type!==De&&(!wt(u,f)||g)){const E=pn(f,l,r,n);if(gn(f,E),a==="out-in")return r.isLeaving=!0,E.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},wr(i);a==="in-out"&&u.type!==De&&(E.delayLeave=(x,R,F)=>{const q=Ui(r,f);q[String(f.key)]=f,x[lt]=()=>{R(),x[lt]=void 0,delete c.delayedLeave},c.delayedLeave=F})}return i}}},oc=sc;function Ui(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function pn(e,t,n,r){const{appear:s,mode:o,persisted:i=!1,onBeforeEnter:l,onEnter:a,onAfterEnter:u,onEnterCancelled:c,onBeforeLeave:h,onLeave:f,onAfterLeave:g,onLeaveCancelled:_,onBeforeAppear:E,onAppear:x,onAfterAppear:R,onAppearCancelled:F}=t,q=String(e.key),H=Ui(n,e),O=(S,M)=>{S&&Me(S,r,9,M)},$=(S,M)=>{const K=M[1];O(S,M),U(S)?S.every(J=>J.length<=1)&&K():S.length<=1&&K()},V={mode:o,persisted:i,beforeEnter(S){let M=l;if(!n.isMounted)if(s)M=E||l;else return;S[lt]&&S[lt](!0);const K=H[q];K&&wt(e,K)&&K.el[lt]&&K.el[lt](),O(M,[S])},enter(S){let M=a,K=u,J=c;if(!n.isMounted)if(s)M=x||a,K=R||u,J=F||c;else return;let L=!1;const Z=S[On]=N=>{L||(L=!0,N?O(J,[S]):O(K,[S]),V.delayedLeave&&V.delayedLeave(),S[On]=void 0)};M?$(M,[S,Z]):Z()},leave(S,M){const K=String(e.key);if(S[On]&&S[On](!0),n.isUnmounting)return M();O(h,[S]);let J=!1;const L=S[lt]=Z=>{J||(J=!0,M(),Z?O(_,[S]):O(g,[S]),S[lt]=void 0,H[K]===e&&delete H[K])};H[K]=e,f?$(f,[S,L]):L()},clone(S){return pn(S,t,n,r)}};return V}function wr(e){if(or(e))return e=gt(e),e.children=null,e}function Ws(e){return or(e)?e.children?e.children[0]:void 0:e}function gn(e,t){e.shapeFlag&6&&e.component?gn(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function bs(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;ope({name:e.name},t,{setup:e}))():e}const In=e=>!!e.type.__asyncLoader,or=e=>e.type.__isKeepAlive;function ic(e,t){Wi(e,"a",t)}function lc(e,t){Wi(e,"da",t)}function Wi(e,t,n=ve){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(ir(t,r,n),n){let s=n.parent;for(;s&&s.parent;)or(s.parent.vnode)&&ac(r,t,n,s),s=s.parent}}function ac(e,t,n,r){const s=ir(t,e,r,!0);Ji(()=>{is(r[t],s)},n)}function ir(e,t,n=ve,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;kt();const l=xn(n),a=Me(t,n,e,i);return l(),Tt(),a});return r?s.unshift(o):s.push(o),o}}const Ze=e=>(t,n=ve)=>(!cr||e==="sp")&&ir(e,(...r)=>t(...r),n),cc=Ze("bm"),Gi=Ze("m"),uc=Ze("bu"),Qi=Ze("u"),ws=Ze("bum"),Ji=Ze("um"),fc=Ze("sp"),dc=Ze("rtg"),hc=Ze("rtc");function pc(e,t=ve){ir("ec",e,t)}function Ch(e,t,n,r){let s;const o=n&&n[r];if(U(e)||he(e)){s=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,o&&o[l]));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,a=i.length;le?fl(e)?ur(e)||e.proxy:Br(e.parent):null,sn=pe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Br(e.parent),$root:e=>Br(e.root),$emit:e=>e.emit,$options:e=>xs(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,ys(e.update)}),$nextTick:e=>e.n||(e.n=_s.bind(e.proxy)),$watch:e=>rc.bind(e)}),xr=(e,t)=>e!==ce&&!e.__isScriptSetup&&re(e,t),gc={get({_:e},t){const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:a}=e;let u;if(t[0]!=="$"){const g=i[t];if(g!==void 0)switch(g){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(xr(r,t))return i[t]=1,r[t];if(s!==ce&&re(s,t))return i[t]=2,s[t];if((u=e.propsOptions[0])&&re(u,t))return i[t]=3,o[t];if(n!==ce&&re(n,t))return i[t]=4,n[t];Dr&&(i[t]=0)}}const c=sn[t];let h,f;if(c)return t==="$attrs"&&Pe(e,"get",t),c(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ce&&re(n,t))return i[t]=4,n[t];if(f=a.config.globalProperties,re(f,t))return f[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return xr(s,t)?(s[t]=n,!0):r!==ce&&re(r,t)?(r[t]=n,!0):re(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:o}},i){let l;return!!n[i]||e!==ce&&re(e,i)||xr(t,i)||(l=o[0])&&re(l,i)||re(r,i)||re(sn,i)||re(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:re(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Gs(e){return U(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Dr=!0;function mc(e){const t=xs(e),n=e.proxy,r=e.ctx;Dr=!1,t.beforeCreate&&Qs(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:a,inject:u,created:c,beforeMount:h,mounted:f,beforeUpdate:g,updated:_,activated:E,deactivated:x,beforeDestroy:R,beforeUnmount:F,destroyed:q,unmounted:H,render:O,renderTracked:$,renderTriggered:V,errorCaptured:S,serverPrefetch:M,expose:K,inheritAttrs:J,components:L,directives:Z,filters:N}=t;if(u&&vc(u,r,null),i)for(const le in i){const se=i[le];Y(se)&&(r[le]=se.bind(n))}if(s){const le=s.call(n,n);ue(le)&&(e.data=At(le))}if(Dr=!0,o)for(const le in o){const se=o[le],Qe=Y(se)?se.bind(n,n):Y(se.get)?se.get.bind(n,n):Ae,et=!Y(se)&&Y(se.set)?se.set.bind(n):Ae,ze=G({get:Qe,set:et});Object.defineProperty(r,le,{enumerable:!0,configurable:!0,get:()=>ze.value,set:Ee=>ze.value=Ee})}if(l)for(const le in l)Yi(l[le],r,n,le);if(a){const le=Y(a)?a.call(n):a;Reflect.ownKeys(le).forEach(se=>{jn(se,le[se])})}c&&Qs(c,e,"c");function X(le,se){U(se)?se.forEach(Qe=>le(Qe.bind(n))):se&&le(se.bind(n))}if(X(cc,h),X(Gi,f),X(uc,g),X(Qi,_),X(ic,E),X(lc,x),X(pc,S),X(hc,$),X(dc,V),X(ws,F),X(Ji,H),X(fc,M),U(K))if(K.length){const le=e.exposed||(e.exposed={});K.forEach(se=>{Object.defineProperty(le,se,{get:()=>n[se],set:Qe=>n[se]=Qe})})}else e.exposed||(e.exposed={});O&&e.render===Ae&&(e.render=O),J!=null&&(e.inheritAttrs=J),L&&(e.components=L),Z&&(e.directives=Z)}function vc(e,t,n=Ae){U(e)&&(e=Hr(e));for(const r in e){const s=e[r];let o;ue(s)?"default"in s?o=Ie(s.from||r,s.default,!0):o=Ie(s.from||r):o=Ie(s),ge(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function Qs(e,t,n){Me(U(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Yi(e,t,n,r){const s=r.includes(".")?Hi(n,r):()=>n[r];if(he(e)){const o=t[e];Y(o)&&rn(s,o)}else if(Y(e))rn(s,e.bind(n));else if(ue(e))if(U(e))e.forEach(o=>Yi(o,t,n,r));else{const o=Y(e.handler)?e.handler.bind(n):t[e.handler];Y(o)&&rn(s,o,e)}}function xs(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let a;return l?a=l:!s.length&&!n&&!r?a=t:(a={},s.length&&s.forEach(u=>Vn(a,u,i,!0)),Vn(a,t,i)),ue(t)&&o.set(t,a),a}function Vn(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&Vn(e,o,n,!0),s&&s.forEach(i=>Vn(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=_c[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const _c={data:Js,props:Ys,emits:Ys,methods:tn,computed:tn,beforeCreate:xe,created:xe,beforeMount:xe,mounted:xe,beforeUpdate:xe,updated:xe,beforeDestroy:xe,beforeUnmount:xe,destroyed:xe,unmounted:xe,activated:xe,deactivated:xe,errorCaptured:xe,serverPrefetch:xe,components:tn,directives:tn,watch:bc,provide:Js,inject:yc};function Js(e,t){return t?e?function(){return pe(Y(e)?e.call(this,this):e,Y(t)?t.call(this,this):t)}:t:e}function yc(e,t){return tn(Hr(e),Hr(t))}function Hr(e){if(U(e)){const t={};for(let n=0;n1)return n&&Y(t)?t.call(r&&r.proxy):t}}function Ec(){return!!(ve||we||mn)}function Cc(e,t,n,r=!1){const s={},o={};Bn(o,ar,1),e.propsDefaults=Object.create(null),Zi(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:Ri(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function Sc(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=ne(s),[a]=e.propsOptions;let u=!1;if((r||i>0)&&!(i&16)){if(i&8){const c=e.vnode.dynamicProps;for(let h=0;h{a=!0;const[f,g]=el(h,t,!0);pe(i,f),g&&l.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!o&&!a)return ue(e)&&r.set(e,Dt),Dt;if(U(o))for(let c=0;c-1,g[1]=E<0||_-1||re(g,"default"))&&l.push(h)}}}const u=[i,l];return ue(e)&&r.set(e,u),u}function Xs(e){return e[0]!=="$"}function Zs(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function eo(e,t){return Zs(e)===Zs(t)}function to(e,t){return U(t)?t.findIndex(n=>eo(n,e)):Y(t)&&eo(t,e)?0:-1}const tl=e=>e[0]==="_"||e==="$stable",Es=e=>U(e)?e.map(Ue):[Ue(e)],Pc=(e,t,n)=>{if(t._n)return t;const r=Ka((...s)=>Es(t(...s)),n);return r._c=!1,r},nl=(e,t,n)=>{const r=e._ctx;for(const s in e){if(tl(s))continue;const o=e[s];if(Y(o))t[s]=Pc(s,o,r);else if(o!=null){const i=Es(o);t[s]=()=>i}}},rl=(e,t)=>{const n=Es(t);e.slots.default=()=>n},Rc=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ne(t),Bn(t,"_",n)):nl(t,e.slots={})}else e.slots={},t&&rl(e,t);Bn(e.slots,ar,1)},kc=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=ce;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:(pe(s,t),!n&&l===1&&delete s._):(o=!t.$stable,nl(t,s)),i=t}else t&&(rl(e,t),i={default:1});if(o)for(const l in s)!tl(l)&&i[l]==null&&delete s[l]};function Vr(e,t,n,r,s=!1){if(U(e)){e.forEach((f,g)=>Vr(f,t&&(U(t)?t[g]:t),n,r,s));return}if(In(r)&&!s)return;const o=r.shapeFlag&4?ur(r.component)||r.component.proxy:r.el,i=s?null:o,{i:l,r:a}=e,u=t&&t.r,c=l.refs===ce?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==a&&(he(u)?(c[u]=null,re(h,u)&&(h[u]=null)):ge(u)&&(u.value=null)),Y(a))ht(a,l,12,[i,c]);else{const f=he(a),g=ge(a),_=e.f;if(f||g){const E=()=>{if(_){const x=f?re(h,a)?h[a]:c[a]:a.value;s?U(x)&&is(x,o):U(x)?x.includes(o)||x.push(o):f?(c[a]=[o],re(h,a)&&(h[a]=c[a])):(a.value=[o],e.k&&(c[e.k]=a.value))}else f?(c[a]=i,re(h,a)&&(h[a]=i)):g&&(a.value=i,e.k&&(c[e.k]=i))};s||_?E():(E.id=-1,Ce(E,n))}}}const Ce=ec;function Tc(e){return Ac(e)}function Ac(e,t){const n=ci();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:a,setText:u,setElementText:c,parentNode:h,nextSibling:f,setScopeId:g=Ae,insertStaticContent:_}=e,E=(d,p,m,b=null,v=null,P=null,A=void 0,C=null,k=!!p.dynamicChildren)=>{if(d===p)return;d&&!wt(d,p)&&(b=y(d),Ee(d,v,P,!0),d=null),p.patchFlag===-2&&(k=!1,p.dynamicChildren=null);const{type:w,ref:j,shapeFlag:z}=p;switch(w){case lr:x(d,p,m,b);break;case De:R(d,p,m,b);break;case Cr:d==null&&F(p,m,b,A);break;case qe:L(d,p,m,b,v,P,A,C,k);break;default:z&1?O(d,p,m,b,v,P,A,C,k):z&6?Z(d,p,m,b,v,P,A,C,k):(z&64||z&128)&&w.process(d,p,m,b,v,P,A,C,k,B)}j!=null&&v&&Vr(j,d&&d.ref,P,p||d,!p)},x=(d,p,m,b)=>{if(d==null)r(p.el=l(p.children),m,b);else{const v=p.el=d.el;p.children!==d.children&&u(v,p.children)}},R=(d,p,m,b)=>{d==null?r(p.el=a(p.children||""),m,b):p.el=d.el},F=(d,p,m,b)=>{[d.el,d.anchor]=_(d.children,p,m,b,d.el,d.anchor)},q=({el:d,anchor:p},m,b)=>{let v;for(;d&&d!==p;)v=f(d),r(d,m,b),d=v;r(p,m,b)},H=({el:d,anchor:p})=>{let m;for(;d&&d!==p;)m=f(d),s(d),d=m;s(p)},O=(d,p,m,b,v,P,A,C,k)=>{p.type==="svg"?A="svg":p.type==="math"&&(A="mathml"),d==null?$(p,m,b,v,P,A,C,k):M(d,p,v,P,A,C,k)},$=(d,p,m,b,v,P,A,C)=>{let k,w;const{props:j,shapeFlag:z,transition:D,dirs:Q}=d;if(k=d.el=i(d.type,P,j&&j.is,j),z&8?c(k,d.children):z&16&&S(d.children,k,null,b,v,Er(d,P),A,C),Q&&vt(d,null,b,"created"),V(k,d,d.scopeId,A,b),j){for(const ae in j)ae!=="value"&&!$n(ae)&&o(k,ae,null,j[ae],P,d.children,b,v,_e);"value"in j&&o(k,"value",null,j.value,P),(w=j.onVnodeBeforeMount)&&Ke(w,b,d)}Q&&vt(d,null,b,"beforeMount");const te=Oc(v,D);te&&D.beforeEnter(k),r(k,p,m),((w=j&&j.onVnodeMounted)||te||Q)&&Ce(()=>{w&&Ke(w,b,d),te&&D.enter(k),Q&&vt(d,null,b,"mounted")},v)},V=(d,p,m,b,v)=>{if(m&&g(d,m),b)for(let P=0;P{for(let w=k;w{const C=p.el=d.el;let{patchFlag:k,dynamicChildren:w,dirs:j}=p;k|=d.patchFlag&16;const z=d.props||ce,D=p.props||ce;let Q;if(m&&_t(m,!1),(Q=D.onVnodeBeforeUpdate)&&Ke(Q,m,p,d),j&&vt(p,d,m,"beforeUpdate"),m&&_t(m,!0),w?K(d.dynamicChildren,w,C,m,b,Er(p,v),P):A||se(d,p,C,null,m,b,Er(p,v),P,!1),k>0){if(k&16)J(C,p,z,D,m,b,v);else if(k&2&&z.class!==D.class&&o(C,"class",null,D.class,v),k&4&&o(C,"style",z.style,D.style,v),k&8){const te=p.dynamicProps;for(let ae=0;ae{Q&&Ke(Q,m,p,d),j&&vt(p,d,m,"updated")},b)},K=(d,p,m,b,v,P,A)=>{for(let C=0;C{if(m!==b){if(m!==ce)for(const C in m)!$n(C)&&!(C in b)&&o(d,C,m[C],null,A,p.children,v,P,_e);for(const C in b){if($n(C))continue;const k=b[C],w=m[C];k!==w&&C!=="value"&&o(d,C,w,k,A,p.children,v,P,_e)}"value"in b&&o(d,"value",m.value,b.value,A)}},L=(d,p,m,b,v,P,A,C,k)=>{const w=p.el=d?d.el:l(""),j=p.anchor=d?d.anchor:l("");let{patchFlag:z,dynamicChildren:D,slotScopeIds:Q}=p;Q&&(C=C?C.concat(Q):Q),d==null?(r(w,m,b),r(j,m,b),S(p.children||[],m,j,v,P,A,C,k)):z>0&&z&64&&D&&d.dynamicChildren?(K(d.dynamicChildren,D,m,v,P,A,C),(p.key!=null||v&&p===v.subTree)&&Cs(d,p,!0)):se(d,p,m,j,v,P,A,C,k)},Z=(d,p,m,b,v,P,A,C,k)=>{p.slotScopeIds=C,d==null?p.shapeFlag&512?v.ctx.activate(p,m,b,A,k):N(p,m,b,v,P,A,k):ee(d,p,k)},N=(d,p,m,b,v,P,A)=>{const C=d.component=zc(d,b,v);if(or(d)&&(C.ctx.renderer=B),Vc(C),C.asyncDep){if(v&&v.registerDep(C,X),!d.el){const k=C.subTree=Se(De);R(null,k,p,m)}}else X(C,d,p,m,v,P,A)},ee=(d,p,m)=>{const b=p.component=d.component;if(Ga(d,p,m))if(b.asyncDep&&!b.asyncResolved){le(b,p,m);return}else b.next=p,Da(b.update),b.effect.dirty=!0,b.update();else p.el=d.el,b.vnode=p},X=(d,p,m,b,v,P,A)=>{const C=()=>{if(d.isMounted){let{next:j,bu:z,u:D,parent:Q,vnode:te}=d;{const $t=sl(d);if($t){j&&(j.el=te.el,le(d,j,A)),$t.asyncDep.then(()=>{d.isUnmounted||C()});return}}let ae=j,de;_t(d,!1),j?(j.el=te.el,le(d,j,A)):j=te,z&&_r(z),(de=j.props&&j.props.onVnodeBeforeUpdate)&&Ke(de,Q,j,te),_t(d,!0);const me=br(d),je=d.subTree;d.subTree=me,E(je,me,h(je.el),y(je),d,v,P),j.el=me.el,ae===null&&Qa(d,me.el),D&&Ce(D,v),(de=j.props&&j.props.onVnodeUpdated)&&Ce(()=>Ke(de,Q,j,te),v)}else{let j;const{el:z,props:D}=p,{bm:Q,m:te,parent:ae}=d,de=In(p);if(_t(d,!1),Q&&_r(Q),!de&&(j=D&&D.onVnodeBeforeMount)&&Ke(j,ae,p),_t(d,!0),z&&fe){const me=()=>{d.subTree=br(d),fe(z,d.subTree,d,v,null)};de?p.type.__asyncLoader().then(()=>!d.isUnmounted&&me()):me()}else{const me=d.subTree=br(d);E(null,me,m,b,d,v,P),p.el=me.el}if(te&&Ce(te,v),!de&&(j=D&&D.onVnodeMounted)){const me=p;Ce(()=>Ke(j,ae,me),v)}(p.shapeFlag&256||ae&&In(ae.vnode)&&ae.vnode.shapeFlag&256)&&d.a&&Ce(d.a,v),d.isMounted=!0,p=m=b=null}},k=d.effect=new us(C,Ae,()=>ys(w),d.scope),w=d.update=()=>{k.dirty&&k.run()};w.id=d.uid,_t(d,!0),w()},le=(d,p,m)=>{p.component=d;const b=d.vnode.props;d.vnode=p,d.next=null,Sc(d,p.props,b,m),kc(d,p.children,m),kt(),Vs(d),Tt()},se=(d,p,m,b,v,P,A,C,k=!1)=>{const w=d&&d.children,j=d?d.shapeFlag:0,z=p.children,{patchFlag:D,shapeFlag:Q}=p;if(D>0){if(D&128){et(w,z,m,b,v,P,A,C,k);return}else if(D&256){Qe(w,z,m,b,v,P,A,C,k);return}}Q&8?(j&16&&_e(w,v,P),z!==w&&c(m,z)):j&16?Q&16?et(w,z,m,b,v,P,A,C,k):_e(w,v,P,!0):(j&8&&c(m,""),Q&16&&S(z,m,b,v,P,A,C,k))},Qe=(d,p,m,b,v,P,A,C,k)=>{d=d||Dt,p=p||Dt;const w=d.length,j=p.length,z=Math.min(w,j);let D;for(D=0;Dj?_e(d,v,P,!0,!1,z):S(p,m,b,v,P,A,C,k,z)},et=(d,p,m,b,v,P,A,C,k)=>{let w=0;const j=p.length;let z=d.length-1,D=j-1;for(;w<=z&&w<=D;){const Q=d[w],te=p[w]=k?at(p[w]):Ue(p[w]);if(wt(Q,te))E(Q,te,m,null,v,P,A,C,k);else break;w++}for(;w<=z&&w<=D;){const Q=d[z],te=p[D]=k?at(p[D]):Ue(p[D]);if(wt(Q,te))E(Q,te,m,null,v,P,A,C,k);else break;z--,D--}if(w>z){if(w<=D){const Q=D+1,te=QD)for(;w<=z;)Ee(d[w],v,P,!0),w++;else{const Q=w,te=w,ae=new Map;for(w=te;w<=D;w++){const Re=p[w]=k?at(p[w]):Ue(p[w]);Re.key!=null&&ae.set(Re.key,w)}let de,me=0;const je=D-te+1;let $t=!1,Ls=0;const Yt=new Array(je);for(w=0;w=je){Ee(Re,v,P,!0);continue}let Ve;if(Re.key!=null)Ve=ae.get(Re.key);else for(de=te;de<=D;de++)if(Yt[de-te]===0&&wt(Re,p[de])){Ve=de;break}Ve===void 0?Ee(Re,v,P,!0):(Yt[Ve-te]=w+1,Ve>=Ls?Ls=Ve:$t=!0,E(Re,p[Ve],m,null,v,P,A,C,k),me++)}const $s=$t?Lc(Yt):Dt;for(de=$s.length-1,w=je-1;w>=0;w--){const Re=te+w,Ve=p[Re],Ms=Re+1{const{el:P,type:A,transition:C,children:k,shapeFlag:w}=d;if(w&6){ze(d.component.subTree,p,m,b);return}if(w&128){d.suspense.move(p,m,b);return}if(w&64){A.move(d,p,m,B);return}if(A===qe){r(P,p,m);for(let z=0;zC.enter(P),v);else{const{leave:z,delayLeave:D,afterLeave:Q}=C,te=()=>r(P,p,m),ae=()=>{z(P,()=>{te(),Q&&Q()})};D?D(P,te,ae):ae()}else r(P,p,m)},Ee=(d,p,m,b=!1,v=!1)=>{const{type:P,props:A,ref:C,children:k,dynamicChildren:w,shapeFlag:j,patchFlag:z,dirs:D}=d;if(C!=null&&Vr(C,null,m,d,!0),j&256){p.ctx.deactivate(d);return}const Q=j&1&&D,te=!In(d);let ae;if(te&&(ae=A&&A.onVnodeBeforeUnmount)&&Ke(ae,p,d),j&6)Cn(d.component,m,b);else{if(j&128){d.suspense.unmount(m,b);return}Q&&vt(d,null,p,"beforeUnmount"),j&64?d.type.remove(d,p,m,v,B,b):w&&(P!==qe||z>0&&z&64)?_e(w,p,m,!1,!0):(P===qe&&z&384||!v&&j&16)&&_e(k,p,m),b&&Ot(d)}(te&&(ae=A&&A.onVnodeUnmounted)||Q)&&Ce(()=>{ae&&Ke(ae,p,d),Q&&vt(d,null,p,"unmounted")},m)},Ot=d=>{const{type:p,el:m,anchor:b,transition:v}=d;if(p===qe){Lt(m,b);return}if(p===Cr){H(d);return}const P=()=>{s(m),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(d.shapeFlag&1&&v&&!v.persisted){const{leave:A,delayLeave:C}=v,k=()=>A(m,P);C?C(d.el,P,k):k()}else P()},Lt=(d,p)=>{let m;for(;d!==p;)m=f(d),s(d),d=m;s(p)},Cn=(d,p,m)=>{const{bum:b,scope:v,update:P,subTree:A,um:C}=d;b&&_r(b),v.stop(),P&&(P.active=!1,Ee(A,d,p,m)),C&&Ce(C,p),Ce(()=>{d.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},_e=(d,p,m,b=!1,v=!1,P=0)=>{for(let A=P;Ad.shapeFlag&6?y(d.component.subTree):d.shapeFlag&128?d.suspense.next():f(d.anchor||d.el);let I=!1;const T=(d,p,m)=>{d==null?p._vnode&&Ee(p._vnode,null,null,!0):E(p._vnode||null,d,p,null,null,null,m),I||(I=!0,Vs(),ji(),I=!1),p._vnode=d},B={p:E,um:Ee,m:ze,r:Ot,mt:N,mc:S,pc:se,pbc:K,n:y,o:e};let oe,fe;return t&&([oe,fe]=t(B)),{render:T,hydrate:oe,createApp:xc(T,oe)}}function Er({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function _t({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Oc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Cs(e,t,n=!1){const r=e.children,s=t.children;if(U(r)&&U(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function sl(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:sl(t)}const $c=e=>e.__isTeleport,on=e=>e&&(e.disabled||e.disabled===""),no=e=>typeof SVGElement!="undefined"&&e instanceof SVGElement,ro=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Kr=(e,t)=>{const n=e&&e.to;return he(n)?t?t(n):null:n},Mc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,a,u){const{mc:c,pc:h,pbc:f,o:{insert:g,querySelector:_,createText:E,createComment:x}}=u,R=on(t.props);let{shapeFlag:F,children:q,dynamicChildren:H}=t;if(e==null){const O=t.el=E(""),$=t.anchor=E("");g(O,n,r),g($,n,r);const V=t.target=Kr(t.props,_),S=t.targetAnchor=E("");V&&(g(S,V),i==="svg"||no(V)?i="svg":(i==="mathml"||ro(V))&&(i="mathml"));const M=(K,J)=>{F&16&&c(q,K,J,s,o,i,l,a)};R?M(n,$):V&&M(V,S)}else{t.el=e.el;const O=t.anchor=e.anchor,$=t.target=e.target,V=t.targetAnchor=e.targetAnchor,S=on(e.props),M=S?n:$,K=S?O:V;if(i==="svg"||no($)?i="svg":(i==="mathml"||ro($))&&(i="mathml"),H?(f(e.dynamicChildren,H,M,s,o,i,l),Cs(e,t,!0)):a||h(e,t,M,K,s,o,i,l,!1),R)S?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Ln(t,n,O,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const J=t.target=Kr(t.props,_);J&&Ln(t,J,null,u,0)}else S&&Ln(t,$,V,u,1)}ol(t)},remove(e,t,n,r,{um:s,o:{remove:o}},i){const{shapeFlag:l,children:a,anchor:u,targetAnchor:c,target:h,props:f}=e;if(h&&o(c),i&&o(u),l&16){const g=i||!on(f);for(let _=0;_0?Be||Dt:null,jc(),vn>0&&Be&&Be.push(e),e}function Ph(e,t,n,r,s,o){return ll(ul(e,t,n,r,s,o,!0))}function al(e,t,n,r,s){return ll(Se(e,t,n,r,s,!0))}function Ur(e){return e?e.__v_isVNode===!0:!1}function wt(e,t){return e.type===t.type&&e.key===t.key}const ar="__vInternal",cl=({key:e})=>e!=null?e:null,Nn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?he(e)||ge(e)||Y(e)?{i:we,r:e,k:t,f:!!n}:e:null);function ul(e,t=null,n=null,r=0,s=null,o=e===qe?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&cl(t),ref:t&&Nn(t),scopeId:qi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:we};return l?(Ss(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=he(n)?8:16),vn>0&&!i&&Be&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&Be.push(a),a}const Se=Nc;function Nc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Ya)&&(e=De),Ur(e)){const l=gt(e,t,!0);return n&&Ss(l,n),vn>0&&!o&&Be&&(l.shapeFlag&6?Be[Be.indexOf(e)]=l:Be.push(l)),l.patchFlag|=-2,l}if(Qc(e)&&(e=e.__vccOpts),t){t=Fc(t);let{class:l,style:a}=t;l&&!he(l)&&(t.class=cs(l)),ue(a)&&(Ti(a)&&!U(a)&&(a=pe({},a)),t.style=as(a))}const i=he(e)?1:Za(e)?128:$c(e)?64:ue(e)?4:Y(e)?2:0;return ul(e,t,n,r,s,i,o,!0)}function Fc(e){return e?Ti(e)||ar in e?pe({},e):e:null}function gt(e,t,n=!1){const{props:r,ref:s,patchFlag:o,children:i}=e,l=t?Bc(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&cl(l),ref:t&&t.ref?n&&s?U(s)?s.concat(Nn(t)):[s,Nn(t)]:Nn(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==qe?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&>(e.ssContent),ssFallback:e.ssFallback&>(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function qc(e=" ",t=0){return Se(lr,null,e,t)}function Rh(e="",t=!1){return t?(il(),al(De,null,e)):Se(De,null,e)}function Ue(e){return e==null||typeof e=="boolean"?Se(De):U(e)?Se(qe,null,e.slice()):typeof e=="object"?at(e):Se(lr,null,String(e))}function at(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:gt(e)}function Ss(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(U(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Ss(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!(ar in t)?t._ctx=we:s===3&&we&&(we.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Y(t)?(t={default:t,_ctx:we},n=32):(t=String(t),r&64?(n=16,t=[qc(t)]):n=8);e.children=t,e.shapeFlag|=n}function Bc(...e){const t={};for(let n=0;nve||we;let Kn,Wr;{const e=ci(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};Kn=t("__VUE_INSTANCE_SETTERS__",n=>ve=n),Wr=t("__VUE_SSR_SETTERS__",n=>cr=n)}const xn=e=>{const t=ve;return Kn(e),e.scope.on(),()=>{e.scope.off(),Kn(t)}},oo=()=>{ve&&ve.scope.off(),Kn(null)};function fl(e){return e.vnode.shapeFlag&4}let cr=!1;function Vc(e,t=!1){t&&Wr(t);const{props:n,children:r}=e.vnode,s=fl(e);Cc(e,n,s,t),Rc(e,r);const o=s?Kc(e,t):void 0;return t&&Wr(!1),o}function Kc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=mt(new Proxy(e.ctx,gc));const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?Wc(e):null,o=xn(e);kt();const i=ht(r,e,0,[e.props,s]);if(Tt(),o(),ii(i)){if(i.then(oo,oo),t)return i.then(l=>{io(e,l,t)}).catch(l=>{nr(l,e,0)});e.asyncDep=i}else io(e,i,t)}else dl(e,t)}function io(e,t,n){Y(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ue(t)&&(e.setupState=$i(t)),dl(e,n)}let lo;function dl(e,t,n){const r=e.type;if(!e.render){if(!t&&lo&&!r.render){const s=r.template||xs(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:a}=r,u=pe(pe({isCustomElement:o,delimiters:l},i),a);r.render=lo(s,u)}}e.render=r.render||Ae}{const s=xn(e);kt();try{mc(e)}finally{Tt(),s()}}}function Uc(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return Pe(e,"get","$attrs"),t[n]}}))}function Wc(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Uc(e)},slots:e.slots,emit:e.emit,expose:t}}function ur(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy($i(mt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in sn)return sn[n](e)},has(t,n){return n in t||n in sn}}))}function Gc(e,t=!0){return Y(e)?e.displayName||e.name:e.name||t&&e.__name}function Qc(e){return Y(e)&&"__vccOpts"in e}const G=(e,t)=>La(e,t,cr);function W(e,t,n){const r=arguments.length;return r===2?ue(t)&&!U(t)?Ur(t)?Se(e,null,[t]):Se(e,t):Se(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Ur(n)&&(n=[n]),Se(e,t,n))}const Jc="3.4.15";/** +**/function ht(e,t,n,r){let s;try{s=r?e(...r):e()}catch(o){nr(o,t,n)}return s}function Me(e,t,n,r){if(Y(e)){const o=ht(e,t,n,r);return o&&ii(o)&&o.catch(i=>{nr(i,t,n)}),o}const s=[];for(let o=0;o>>1,s=be[r],o=hn(s);oWe&&be.splice(t,1)}function Ha(e){U(e)?zt.push(...e):(!it||!it.includes(e,e.allowRecurse?bt+1:bt))&&zt.push(e),Ii()}function Vs(e,t,n=dn?We+1:0){for(;nhn(n)-hn(r));if(zt.length=0,it){it.push(...t);return}for(it=t,bt=0;bte.id==null?1/0:e.id,za=(e,t)=>{const n=hn(e)-hn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Ni(e){qr=!1,dn=!0,be.sort(za);const t=Ae;try{for(We=0;Wehe(g)?g.trim():g)),h&&(s=n.map(na))}let l,a=r[l=vr(t)]||r[l=vr(Ge(t))];!a&&o&&(a=r[l=vr(Jt(t))]),a&&Me(a,e,6,s);const u=r[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Me(u,e,6,s)}}function Fi(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!Y(e)){const a=u=>{const c=Fi(u,t,!0);c&&(l=!0,pe(i,c))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(ue(e)&&r.set(e,null),null):(U(o)?o.forEach(a=>i[a]=null):pe(i,o),ue(e)&&r.set(e,i),i)}function rr(e,t){return!e||!Yn(t)?!1:(t=t.slice(2).replace(/Once$/,""),re(e,t[0].toLowerCase()+t.slice(1))||re(e,Jt(t))||re(e,t))}let we=null,qi=null;function zn(e){const t=we;return we=e,qi=e&&e.type.__scopeId||null,t}function Ka(e,t=we,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&so(-1);const o=zn(t);let i;try{i=e(...s)}finally{zn(o),r._d&&so(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function br(e){const{type:t,vnode:n,proxy:r,withProxy:s,props:o,propsOptions:[i],slots:l,attrs:a,emit:u,render:c,renderCache:h,data:f,setupState:g,ctx:_,inheritAttrs:E}=e;let x,R;const F=zn(e);try{if(n.shapeFlag&4){const H=s||r,O=H;x=Ue(c.call(O,H,h,o,g,f,_)),R=a}else{const H=t;x=Ue(H.length>1?H(o,{attrs:a,slots:l,emit:u}):H(o,null)),R=t.props?a:Ua(a)}}catch(H){ln.length=0,nr(H,e,1),x=Pe(De)}let q=x;if(R&&E!==!1){const H=Object.keys(R),{shapeFlag:O}=q;H.length&&O&7&&(i&&H.some(os)&&(R=Wa(R,i)),q=gt(q,R))}return n.dirs&&(q=gt(q),q.dirs=q.dirs?q.dirs.concat(n.dirs):n.dirs),n.transition&&(q.transition=n.transition),x=q,zn(F),x}const Ua=e=>{let t;for(const n in e)(n==="class"||n==="style"||Yn(n))&&((t||(t={}))[n]=e[n]);return t},Wa=(e,t)=>{const n={};for(const r in e)(!os(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ga(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:a}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return r?Ks(r,i,u):!!i;if(a&8){const c=t.dynamicProps;for(let h=0;he.__isSuspense;function ec(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):Ha(e)}const tc=Symbol.for("v-scx"),nc=()=>Ie(tc),An={};function rn(e,t,n){return Di(e,t,n)}function Di(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=ce){if(t&&o){const $=t;t=(...V)=>{$(...V),O()}}const a=ve,u=$=>r===!0?$:xt($,r===!1?1:void 0);let c,h=!1,f=!1;if(ge(e)?(c=()=>e.value,h=Hn(e)):dt(e)?(c=()=>u(e),h=!0):U(e)?(f=!0,h=e.some($=>dt($)||Hn($)),c=()=>e.map($=>{if(ge($))return $.value;if(dt($))return u($);if(Y($))return ht($,a,2)})):Y(e)?t?c=()=>ht(e,a,2):c=()=>(g&&g(),Me(e,a,3,[_])):c=Ae,t&&r){const $=c;c=()=>xt($())}let g,_=$=>{g=q.onStop=()=>{ht($,a,4),g=q.onStop=void 0}},E;if(cr)if(_=Ae,t?n&&Me(t,a,3,[c(),f?[]:void 0,_]):c(),s==="sync"){const $=nc();E=$.__watcherHandles||($.__watcherHandles=[])}else return Ae;let x=f?new Array(e.length).fill(An):An;const R=()=>{if(!(!q.active||!q.dirty))if(t){const $=q.run();(r||h||(f?$.some((V,S)=>pt(V,x[S])):pt($,x)))&&(g&&g(),Me(t,a,3,[$,x===An?void 0:f&&x[0]===An?[]:x,_]),x=$)}else q.run()};R.allowRecurse=!!t;let F;s==="sync"?F=R:s==="post"?F=()=>Se(R,a&&a.suspense):(R.pre=!0,a&&(R.id=a.uid),F=()=>ys(R));const q=new us(c,Ae,F),H=pi(),O=()=>{q.stop(),H&&is(H.effects,q)};return t?n?R():x=q.run():s==="post"?Se(q.run.bind(q),a&&a.suspense):q.run(),E&&E.push(O),O}function rc(e,t,n){const r=this.proxy,s=he(e)?e.includes(".")?Hi(r,e):()=>r[e]:e.bind(r,r);let o;Y(t)?o=t:(o=t.handler,n=t);const i=xn(this),l=Di(s,o.bind(r),n);return i(),l}function Hi(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s0){if(n>=t)return e;n++}if(r=r||new Set,r.has(e))return e;if(r.add(e),ge(e))xt(e.value,t,n,r);else if(U(e))for(let s=0;s{xt(s,t,n,r)});else if(ai(e))for(const s in e)xt(e[s],t,n,r);return e}function zi(e,t){if(we===null)return e;const n=ur(we)||we.proxy,r=e.dirs||(e.dirs=[]);for(let s=0;s{e.isMounted=!0}),ws(()=>{e.isUnmounting=!0}),e}const Oe=[Function,Array],Ki={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Oe,onEnter:Oe,onAfterEnter:Oe,onEnterCancelled:Oe,onBeforeLeave:Oe,onLeave:Oe,onAfterLeave:Oe,onLeaveCancelled:Oe,onBeforeAppear:Oe,onAppear:Oe,onAfterAppear:Oe,onAppearCancelled:Oe},sc={name:"BaseTransition",props:Ki,setup(e,{slots:t}){const n=wn(),r=Vi();let s;return()=>{const o=t.default&&bs(t.default(),!0);if(!o||!o.length)return;let i=o[0];if(o.length>1){for(const E of o)if(E.type!==De){i=E;break}}const l=ne(e),{mode:a}=l;if(r.isLeaving)return wr(i);const u=Ws(i);if(!u)return wr(i);const c=pn(u,l,r,n);gn(u,c);const h=n.subTree,f=h&&Ws(h);let g=!1;const{getTransitionKey:_}=u.type;if(_){const E=_();s===void 0?s=E:E!==s&&(s=E,g=!0)}if(f&&f.type!==De&&(!wt(u,f)||g)){const E=pn(f,l,r,n);if(gn(f,E),a==="out-in")return r.isLeaving=!0,E.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},wr(i);a==="in-out"&&u.type!==De&&(E.delayLeave=(x,R,F)=>{const q=Ui(r,f);q[String(f.key)]=f,x[lt]=()=>{R(),x[lt]=void 0,delete c.delayedLeave},c.delayedLeave=F})}return i}}},oc=sc;function Ui(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function pn(e,t,n,r){const{appear:s,mode:o,persisted:i=!1,onBeforeEnter:l,onEnter:a,onAfterEnter:u,onEnterCancelled:c,onBeforeLeave:h,onLeave:f,onAfterLeave:g,onLeaveCancelled:_,onBeforeAppear:E,onAppear:x,onAfterAppear:R,onAppearCancelled:F}=t,q=String(e.key),H=Ui(n,e),O=(S,M)=>{S&&Me(S,r,9,M)},$=(S,M)=>{const K=M[1];O(S,M),U(S)?S.every(J=>J.length<=1)&&K():S.length<=1&&K()},V={mode:o,persisted:i,beforeEnter(S){let M=l;if(!n.isMounted)if(s)M=E||l;else return;S[lt]&&S[lt](!0);const K=H[q];K&&wt(e,K)&&K.el[lt]&&K.el[lt](),O(M,[S])},enter(S){let M=a,K=u,J=c;if(!n.isMounted)if(s)M=x||a,K=R||u,J=F||c;else return;let L=!1;const Z=S[On]=N=>{L||(L=!0,N?O(J,[S]):O(K,[S]),V.delayedLeave&&V.delayedLeave(),S[On]=void 0)};M?$(M,[S,Z]):Z()},leave(S,M){const K=String(e.key);if(S[On]&&S[On](!0),n.isUnmounting)return M();O(h,[S]);let J=!1;const L=S[lt]=Z=>{J||(J=!0,M(),Z?O(_,[S]):O(g,[S]),S[lt]=void 0,H[K]===e&&delete H[K])};H[K]=e,f?$(f,[S,L]):L()},clone(S){return pn(S,t,n,r)}};return V}function wr(e){if(or(e))return e=gt(e),e.children=null,e}function Ws(e){return or(e)?e.children?e.children[0]:void 0:e}function gn(e,t){e.shapeFlag&6&&e.component?gn(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function bs(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;ope({name:e.name},t,{setup:e}))():e}const In=e=>!!e.type.__asyncLoader,or=e=>e.type.__isKeepAlive;function ic(e,t){Wi(e,"a",t)}function lc(e,t){Wi(e,"da",t)}function Wi(e,t,n=ve){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(ir(t,r,n),n){let s=n.parent;for(;s&&s.parent;)or(s.parent.vnode)&&ac(r,t,n,s),s=s.parent}}function ac(e,t,n,r){const s=ir(t,e,r,!0);Ji(()=>{is(r[t],s)},n)}function ir(e,t,n=ve,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;kt();const l=xn(n),a=Me(t,n,e,i);return l(),Tt(),a});return r?s.unshift(o):s.push(o),o}}const Ze=e=>(t,n=ve)=>(!cr||e==="sp")&&ir(e,(...r)=>t(...r),n),cc=Ze("bm"),Gi=Ze("m"),uc=Ze("bu"),Qi=Ze("u"),ws=Ze("bum"),Ji=Ze("um"),fc=Ze("sp"),dc=Ze("rtg"),hc=Ze("rtc");function pc(e,t=ve){ir("ec",e,t)}function Ch(e,t,n,r){let s;const o=n&&n[r];if(U(e)||he(e)){s=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,o&&o[l]));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,a=i.length;le?fl(e)?ur(e)||e.proxy:Br(e.parent):null,sn=pe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Br(e.parent),$root:e=>Br(e.root),$emit:e=>e.emit,$options:e=>xs(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,ys(e.update)}),$nextTick:e=>e.n||(e.n=_s.bind(e.proxy)),$watch:e=>rc.bind(e)}),xr=(e,t)=>e!==ce&&!e.__isScriptSetup&&re(e,t),gc={get({_:e},t){const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:a}=e;let u;if(t[0]!=="$"){const g=i[t];if(g!==void 0)switch(g){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(xr(r,t))return i[t]=1,r[t];if(s!==ce&&re(s,t))return i[t]=2,s[t];if((u=e.propsOptions[0])&&re(u,t))return i[t]=3,o[t];if(n!==ce&&re(n,t))return i[t]=4,n[t];Dr&&(i[t]=0)}}const c=sn[t];let h,f;if(c)return t==="$attrs"&&Re(e,"get",t),c(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ce&&re(n,t))return i[t]=4,n[t];if(f=a.config.globalProperties,re(f,t))return f[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return xr(s,t)?(s[t]=n,!0):r!==ce&&re(r,t)?(r[t]=n,!0):re(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:o}},i){let l;return!!n[i]||e!==ce&&re(e,i)||xr(t,i)||(l=o[0])&&re(l,i)||re(r,i)||re(sn,i)||re(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:re(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Gs(e){return U(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Dr=!0;function mc(e){const t=xs(e),n=e.proxy,r=e.ctx;Dr=!1,t.beforeCreate&&Qs(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:a,inject:u,created:c,beforeMount:h,mounted:f,beforeUpdate:g,updated:_,activated:E,deactivated:x,beforeDestroy:R,beforeUnmount:F,destroyed:q,unmounted:H,render:O,renderTracked:$,renderTriggered:V,errorCaptured:S,serverPrefetch:M,expose:K,inheritAttrs:J,components:L,directives:Z,filters:N}=t;if(u&&vc(u,r,null),i)for(const le in i){const se=i[le];Y(se)&&(r[le]=se.bind(n))}if(s){const le=s.call(n,n);ue(le)&&(e.data=At(le))}if(Dr=!0,o)for(const le in o){const se=o[le],Qe=Y(se)?se.bind(n,n):Y(se.get)?se.get.bind(n,n):Ae,et=!Y(se)&&Y(se.set)?se.set.bind(n):Ae,ze=G({get:Qe,set:et});Object.defineProperty(r,le,{enumerable:!0,configurable:!0,get:()=>ze.value,set:Ee=>ze.value=Ee})}if(l)for(const le in l)Yi(l[le],r,n,le);if(a){const le=Y(a)?a.call(n):a;Reflect.ownKeys(le).forEach(se=>{jn(se,le[se])})}c&&Qs(c,e,"c");function X(le,se){U(se)?se.forEach(Qe=>le(Qe.bind(n))):se&&le(se.bind(n))}if(X(cc,h),X(Gi,f),X(uc,g),X(Qi,_),X(ic,E),X(lc,x),X(pc,S),X(hc,$),X(dc,V),X(ws,F),X(Ji,H),X(fc,M),U(K))if(K.length){const le=e.exposed||(e.exposed={});K.forEach(se=>{Object.defineProperty(le,se,{get:()=>n[se],set:Qe=>n[se]=Qe})})}else e.exposed||(e.exposed={});O&&e.render===Ae&&(e.render=O),J!=null&&(e.inheritAttrs=J),L&&(e.components=L),Z&&(e.directives=Z)}function vc(e,t,n=Ae){U(e)&&(e=Hr(e));for(const r in e){const s=e[r];let o;ue(s)?"default"in s?o=Ie(s.from||r,s.default,!0):o=Ie(s.from||r):o=Ie(s),ge(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function Qs(e,t,n){Me(U(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Yi(e,t,n,r){const s=r.includes(".")?Hi(n,r):()=>n[r];if(he(e)){const o=t[e];Y(o)&&rn(s,o)}else if(Y(e))rn(s,e.bind(n));else if(ue(e))if(U(e))e.forEach(o=>Yi(o,t,n,r));else{const o=Y(e.handler)?e.handler.bind(n):t[e.handler];Y(o)&&rn(s,o,e)}}function xs(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let a;return l?a=l:!s.length&&!n&&!r?a=t:(a={},s.length&&s.forEach(u=>Vn(a,u,i,!0)),Vn(a,t,i)),ue(t)&&o.set(t,a),a}function Vn(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&Vn(e,o,n,!0),s&&s.forEach(i=>Vn(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=_c[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const _c={data:Js,props:Ys,emits:Ys,methods:tn,computed:tn,beforeCreate:xe,created:xe,beforeMount:xe,mounted:xe,beforeUpdate:xe,updated:xe,beforeDestroy:xe,beforeUnmount:xe,destroyed:xe,unmounted:xe,activated:xe,deactivated:xe,errorCaptured:xe,serverPrefetch:xe,components:tn,directives:tn,watch:bc,provide:Js,inject:yc};function Js(e,t){return t?e?function(){return pe(Y(e)?e.call(this,this):e,Y(t)?t.call(this,this):t)}:t:e}function yc(e,t){return tn(Hr(e),Hr(t))}function Hr(e){if(U(e)){const t={};for(let n=0;n1)return n&&Y(t)?t.call(r&&r.proxy):t}}function Ec(){return!!(ve||we||mn)}function Cc(e,t,n,r=!1){const s={},o={};Bn(o,ar,1),e.propsDefaults=Object.create(null),Zi(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:Ri(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function Sc(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=ne(s),[a]=e.propsOptions;let u=!1;if((r||i>0)&&!(i&16)){if(i&8){const c=e.vnode.dynamicProps;for(let h=0;h{a=!0;const[f,g]=el(h,t,!0);pe(i,f),g&&l.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!o&&!a)return ue(e)&&r.set(e,Dt),Dt;if(U(o))for(let c=0;c-1,g[1]=E<0||_-1||re(g,"default"))&&l.push(h)}}}const u=[i,l];return ue(e)&&r.set(e,u),u}function Xs(e){return e[0]!=="$"}function Zs(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function eo(e,t){return Zs(e)===Zs(t)}function to(e,t){return U(t)?t.findIndex(n=>eo(n,e)):Y(t)&&eo(t,e)?0:-1}const tl=e=>e[0]==="_"||e==="$stable",Es=e=>U(e)?e.map(Ue):[Ue(e)],Pc=(e,t,n)=>{if(t._n)return t;const r=Ka((...s)=>Es(t(...s)),n);return r._c=!1,r},nl=(e,t,n)=>{const r=e._ctx;for(const s in e){if(tl(s))continue;const o=e[s];if(Y(o))t[s]=Pc(s,o,r);else if(o!=null){const i=Es(o);t[s]=()=>i}}},rl=(e,t)=>{const n=Es(t);e.slots.default=()=>n},Rc=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ne(t),Bn(t,"_",n)):nl(t,e.slots={})}else e.slots={},t&&rl(e,t);Bn(e.slots,ar,1)},kc=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=ce;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:(pe(s,t),!n&&l===1&&delete s._):(o=!t.$stable,nl(t,s)),i=t}else t&&(rl(e,t),i={default:1});if(o)for(const l in s)!tl(l)&&i[l]==null&&delete s[l]};function Vr(e,t,n,r,s=!1){if(U(e)){e.forEach((f,g)=>Vr(f,t&&(U(t)?t[g]:t),n,r,s));return}if(In(r)&&!s)return;const o=r.shapeFlag&4?ur(r.component)||r.component.proxy:r.el,i=s?null:o,{i:l,r:a}=e,u=t&&t.r,c=l.refs===ce?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==a&&(he(u)?(c[u]=null,re(h,u)&&(h[u]=null)):ge(u)&&(u.value=null)),Y(a))ht(a,l,12,[i,c]);else{const f=he(a),g=ge(a),_=e.f;if(f||g){const E=()=>{if(_){const x=f?re(h,a)?h[a]:c[a]:a.value;s?U(x)&&is(x,o):U(x)?x.includes(o)||x.push(o):f?(c[a]=[o],re(h,a)&&(h[a]=c[a])):(a.value=[o],e.k&&(c[e.k]=a.value))}else f?(c[a]=i,re(h,a)&&(h[a]=i)):g&&(a.value=i,e.k&&(c[e.k]=i))};s||_?E():(E.id=-1,Se(E,n))}}}const Se=ec;function Tc(e){return Ac(e)}function Ac(e,t){const n=ci();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:a,setText:u,setElementText:c,parentNode:h,nextSibling:f,setScopeId:g=Ae,insertStaticContent:_}=e,E=(d,p,m,b=null,v=null,P=null,A=void 0,C=null,k=!!p.dynamicChildren)=>{if(d===p)return;d&&!wt(d,p)&&(b=y(d),Ee(d,v,P,!0),d=null),p.patchFlag===-2&&(k=!1,p.dynamicChildren=null);const{type:w,ref:j,shapeFlag:z}=p;switch(w){case lr:x(d,p,m,b);break;case De:R(d,p,m,b);break;case Cr:d==null&&F(p,m,b,A);break;case qe:L(d,p,m,b,v,P,A,C,k);break;default:z&1?O(d,p,m,b,v,P,A,C,k):z&6?Z(d,p,m,b,v,P,A,C,k):(z&64||z&128)&&w.process(d,p,m,b,v,P,A,C,k,B)}j!=null&&v&&Vr(j,d&&d.ref,P,p||d,!p)},x=(d,p,m,b)=>{if(d==null)r(p.el=l(p.children),m,b);else{const v=p.el=d.el;p.children!==d.children&&u(v,p.children)}},R=(d,p,m,b)=>{d==null?r(p.el=a(p.children||""),m,b):p.el=d.el},F=(d,p,m,b)=>{[d.el,d.anchor]=_(d.children,p,m,b,d.el,d.anchor)},q=({el:d,anchor:p},m,b)=>{let v;for(;d&&d!==p;)v=f(d),r(d,m,b),d=v;r(p,m,b)},H=({el:d,anchor:p})=>{let m;for(;d&&d!==p;)m=f(d),s(d),d=m;s(p)},O=(d,p,m,b,v,P,A,C,k)=>{p.type==="svg"?A="svg":p.type==="math"&&(A="mathml"),d==null?$(p,m,b,v,P,A,C,k):M(d,p,v,P,A,C,k)},$=(d,p,m,b,v,P,A,C)=>{let k,w;const{props:j,shapeFlag:z,transition:D,dirs:Q}=d;if(k=d.el=i(d.type,P,j&&j.is,j),z&8?c(k,d.children):z&16&&S(d.children,k,null,b,v,Er(d,P),A,C),Q&&vt(d,null,b,"created"),V(k,d,d.scopeId,A,b),j){for(const ae in j)ae!=="value"&&!$n(ae)&&o(k,ae,null,j[ae],P,d.children,b,v,_e);"value"in j&&o(k,"value",null,j.value,P),(w=j.onVnodeBeforeMount)&&Ke(w,b,d)}Q&&vt(d,null,b,"beforeMount");const te=Oc(v,D);te&&D.beforeEnter(k),r(k,p,m),((w=j&&j.onVnodeMounted)||te||Q)&&Se(()=>{w&&Ke(w,b,d),te&&D.enter(k),Q&&vt(d,null,b,"mounted")},v)},V=(d,p,m,b,v)=>{if(m&&g(d,m),b)for(let P=0;P{for(let w=k;w{const C=p.el=d.el;let{patchFlag:k,dynamicChildren:w,dirs:j}=p;k|=d.patchFlag&16;const z=d.props||ce,D=p.props||ce;let Q;if(m&&_t(m,!1),(Q=D.onVnodeBeforeUpdate)&&Ke(Q,m,p,d),j&&vt(p,d,m,"beforeUpdate"),m&&_t(m,!0),w?K(d.dynamicChildren,w,C,m,b,Er(p,v),P):A||se(d,p,C,null,m,b,Er(p,v),P,!1),k>0){if(k&16)J(C,p,z,D,m,b,v);else if(k&2&&z.class!==D.class&&o(C,"class",null,D.class,v),k&4&&o(C,"style",z.style,D.style,v),k&8){const te=p.dynamicProps;for(let ae=0;ae{Q&&Ke(Q,m,p,d),j&&vt(p,d,m,"updated")},b)},K=(d,p,m,b,v,P,A)=>{for(let C=0;C{if(m!==b){if(m!==ce)for(const C in m)!$n(C)&&!(C in b)&&o(d,C,m[C],null,A,p.children,v,P,_e);for(const C in b){if($n(C))continue;const k=b[C],w=m[C];k!==w&&C!=="value"&&o(d,C,w,k,A,p.children,v,P,_e)}"value"in b&&o(d,"value",m.value,b.value,A)}},L=(d,p,m,b,v,P,A,C,k)=>{const w=p.el=d?d.el:l(""),j=p.anchor=d?d.anchor:l("");let{patchFlag:z,dynamicChildren:D,slotScopeIds:Q}=p;Q&&(C=C?C.concat(Q):Q),d==null?(r(w,m,b),r(j,m,b),S(p.children||[],m,j,v,P,A,C,k)):z>0&&z&64&&D&&d.dynamicChildren?(K(d.dynamicChildren,D,m,v,P,A,C),(p.key!=null||v&&p===v.subTree)&&Cs(d,p,!0)):se(d,p,m,j,v,P,A,C,k)},Z=(d,p,m,b,v,P,A,C,k)=>{p.slotScopeIds=C,d==null?p.shapeFlag&512?v.ctx.activate(p,m,b,A,k):N(p,m,b,v,P,A,k):ee(d,p,k)},N=(d,p,m,b,v,P,A)=>{const C=d.component=zc(d,b,v);if(or(d)&&(C.ctx.renderer=B),Vc(C),C.asyncDep){if(v&&v.registerDep(C,X),!d.el){const k=C.subTree=Pe(De);R(null,k,p,m)}}else X(C,d,p,m,v,P,A)},ee=(d,p,m)=>{const b=p.component=d.component;if(Ga(d,p,m))if(b.asyncDep&&!b.asyncResolved){le(b,p,m);return}else b.next=p,Da(b.update),b.effect.dirty=!0,b.update();else p.el=d.el,b.vnode=p},X=(d,p,m,b,v,P,A)=>{const C=()=>{if(d.isMounted){let{next:j,bu:z,u:D,parent:Q,vnode:te}=d;{const $t=sl(d);if($t){j&&(j.el=te.el,le(d,j,A)),$t.asyncDep.then(()=>{d.isUnmounted||C()});return}}let ae=j,de;_t(d,!1),j?(j.el=te.el,le(d,j,A)):j=te,z&&_r(z),(de=j.props&&j.props.onVnodeBeforeUpdate)&&Ke(de,Q,j,te),_t(d,!0);const me=br(d),je=d.subTree;d.subTree=me,E(je,me,h(je.el),y(je),d,v,P),j.el=me.el,ae===null&&Qa(d,me.el),D&&Se(D,v),(de=j.props&&j.props.onVnodeUpdated)&&Se(()=>Ke(de,Q,j,te),v)}else{let j;const{el:z,props:D}=p,{bm:Q,m:te,parent:ae}=d,de=In(p);if(_t(d,!1),Q&&_r(Q),!de&&(j=D&&D.onVnodeBeforeMount)&&Ke(j,ae,p),_t(d,!0),z&&fe){const me=()=>{d.subTree=br(d),fe(z,d.subTree,d,v,null)};de?p.type.__asyncLoader().then(()=>!d.isUnmounted&&me()):me()}else{const me=d.subTree=br(d);E(null,me,m,b,d,v,P),p.el=me.el}if(te&&Se(te,v),!de&&(j=D&&D.onVnodeMounted)){const me=p;Se(()=>Ke(j,ae,me),v)}(p.shapeFlag&256||ae&&In(ae.vnode)&&ae.vnode.shapeFlag&256)&&d.a&&Se(d.a,v),d.isMounted=!0,p=m=b=null}},k=d.effect=new us(C,Ae,()=>ys(w),d.scope),w=d.update=()=>{k.dirty&&k.run()};w.id=d.uid,_t(d,!0),w()},le=(d,p,m)=>{p.component=d;const b=d.vnode.props;d.vnode=p,d.next=null,Sc(d,p.props,b,m),kc(d,p.children,m),kt(),Vs(d),Tt()},se=(d,p,m,b,v,P,A,C,k=!1)=>{const w=d&&d.children,j=d?d.shapeFlag:0,z=p.children,{patchFlag:D,shapeFlag:Q}=p;if(D>0){if(D&128){et(w,z,m,b,v,P,A,C,k);return}else if(D&256){Qe(w,z,m,b,v,P,A,C,k);return}}Q&8?(j&16&&_e(w,v,P),z!==w&&c(m,z)):j&16?Q&16?et(w,z,m,b,v,P,A,C,k):_e(w,v,P,!0):(j&8&&c(m,""),Q&16&&S(z,m,b,v,P,A,C,k))},Qe=(d,p,m,b,v,P,A,C,k)=>{d=d||Dt,p=p||Dt;const w=d.length,j=p.length,z=Math.min(w,j);let D;for(D=0;Dj?_e(d,v,P,!0,!1,z):S(p,m,b,v,P,A,C,k,z)},et=(d,p,m,b,v,P,A,C,k)=>{let w=0;const j=p.length;let z=d.length-1,D=j-1;for(;w<=z&&w<=D;){const Q=d[w],te=p[w]=k?at(p[w]):Ue(p[w]);if(wt(Q,te))E(Q,te,m,null,v,P,A,C,k);else break;w++}for(;w<=z&&w<=D;){const Q=d[z],te=p[D]=k?at(p[D]):Ue(p[D]);if(wt(Q,te))E(Q,te,m,null,v,P,A,C,k);else break;z--,D--}if(w>z){if(w<=D){const Q=D+1,te=QD)for(;w<=z;)Ee(d[w],v,P,!0),w++;else{const Q=w,te=w,ae=new Map;for(w=te;w<=D;w++){const ke=p[w]=k?at(p[w]):Ue(p[w]);ke.key!=null&&ae.set(ke.key,w)}let de,me=0;const je=D-te+1;let $t=!1,Ls=0;const Yt=new Array(je);for(w=0;w=je){Ee(ke,v,P,!0);continue}let Ve;if(ke.key!=null)Ve=ae.get(ke.key);else for(de=te;de<=D;de++)if(Yt[de-te]===0&&wt(ke,p[de])){Ve=de;break}Ve===void 0?Ee(ke,v,P,!0):(Yt[Ve-te]=w+1,Ve>=Ls?Ls=Ve:$t=!0,E(ke,p[Ve],m,null,v,P,A,C,k),me++)}const $s=$t?Lc(Yt):Dt;for(de=$s.length-1,w=je-1;w>=0;w--){const ke=te+w,Ve=p[ke],Ms=ke+1{const{el:P,type:A,transition:C,children:k,shapeFlag:w}=d;if(w&6){ze(d.component.subTree,p,m,b);return}if(w&128){d.suspense.move(p,m,b);return}if(w&64){A.move(d,p,m,B);return}if(A===qe){r(P,p,m);for(let z=0;zC.enter(P),v);else{const{leave:z,delayLeave:D,afterLeave:Q}=C,te=()=>r(P,p,m),ae=()=>{z(P,()=>{te(),Q&&Q()})};D?D(P,te,ae):ae()}else r(P,p,m)},Ee=(d,p,m,b=!1,v=!1)=>{const{type:P,props:A,ref:C,children:k,dynamicChildren:w,shapeFlag:j,patchFlag:z,dirs:D}=d;if(C!=null&&Vr(C,null,m,d,!0),j&256){p.ctx.deactivate(d);return}const Q=j&1&&D,te=!In(d);let ae;if(te&&(ae=A&&A.onVnodeBeforeUnmount)&&Ke(ae,p,d),j&6)Cn(d.component,m,b);else{if(j&128){d.suspense.unmount(m,b);return}Q&&vt(d,null,p,"beforeUnmount"),j&64?d.type.remove(d,p,m,v,B,b):w&&(P!==qe||z>0&&z&64)?_e(w,p,m,!1,!0):(P===qe&&z&384||!v&&j&16)&&_e(k,p,m),b&&Ot(d)}(te&&(ae=A&&A.onVnodeUnmounted)||Q)&&Se(()=>{ae&&Ke(ae,p,d),Q&&vt(d,null,p,"unmounted")},m)},Ot=d=>{const{type:p,el:m,anchor:b,transition:v}=d;if(p===qe){Lt(m,b);return}if(p===Cr){H(d);return}const P=()=>{s(m),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(d.shapeFlag&1&&v&&!v.persisted){const{leave:A,delayLeave:C}=v,k=()=>A(m,P);C?C(d.el,P,k):k()}else P()},Lt=(d,p)=>{let m;for(;d!==p;)m=f(d),s(d),d=m;s(p)},Cn=(d,p,m)=>{const{bum:b,scope:v,update:P,subTree:A,um:C}=d;b&&_r(b),v.stop(),P&&(P.active=!1,Ee(A,d,p,m)),C&&Se(C,p),Se(()=>{d.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},_e=(d,p,m,b=!1,v=!1,P=0)=>{for(let A=P;Ad.shapeFlag&6?y(d.component.subTree):d.shapeFlag&128?d.suspense.next():f(d.anchor||d.el);let I=!1;const T=(d,p,m)=>{d==null?p._vnode&&Ee(p._vnode,null,null,!0):E(p._vnode||null,d,p,null,null,null,m),I||(I=!0,Vs(),ji(),I=!1),p._vnode=d},B={p:E,um:Ee,m:ze,r:Ot,mt:N,mc:S,pc:se,pbc:K,n:y,o:e};let oe,fe;return t&&([oe,fe]=t(B)),{render:T,hydrate:oe,createApp:xc(T,oe)}}function Er({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function _t({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Oc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Cs(e,t,n=!1){const r=e.children,s=t.children;if(U(r)&&U(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function sl(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:sl(t)}const $c=e=>e.__isTeleport,on=e=>e&&(e.disabled||e.disabled===""),no=e=>typeof SVGElement!="undefined"&&e instanceof SVGElement,ro=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Kr=(e,t)=>{const n=e&&e.to;return he(n)?t?t(n):null:n},Mc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,a,u){const{mc:c,pc:h,pbc:f,o:{insert:g,querySelector:_,createText:E,createComment:x}}=u,R=on(t.props);let{shapeFlag:F,children:q,dynamicChildren:H}=t;if(e==null){const O=t.el=E(""),$=t.anchor=E("");g(O,n,r),g($,n,r);const V=t.target=Kr(t.props,_),S=t.targetAnchor=E("");V&&(g(S,V),i==="svg"||no(V)?i="svg":(i==="mathml"||ro(V))&&(i="mathml"));const M=(K,J)=>{F&16&&c(q,K,J,s,o,i,l,a)};R?M(n,$):V&&M(V,S)}else{t.el=e.el;const O=t.anchor=e.anchor,$=t.target=e.target,V=t.targetAnchor=e.targetAnchor,S=on(e.props),M=S?n:$,K=S?O:V;if(i==="svg"||no($)?i="svg":(i==="mathml"||ro($))&&(i="mathml"),H?(f(e.dynamicChildren,H,M,s,o,i,l),Cs(e,t,!0)):a||h(e,t,M,K,s,o,i,l,!1),R)S?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Ln(t,n,O,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const J=t.target=Kr(t.props,_);J&&Ln(t,J,null,u,0)}else S&&Ln(t,$,V,u,1)}ol(t)},remove(e,t,n,r,{um:s,o:{remove:o}},i){const{shapeFlag:l,children:a,anchor:u,targetAnchor:c,target:h,props:f}=e;if(h&&o(c),i&&o(u),l&16){const g=i||!on(f);for(let _=0;_0?Be||Dt:null,jc(),vn>0&&Be&&Be.push(e),e}function Ph(e,t,n,r,s,o){return ll(ul(e,t,n,r,s,o,!0))}function al(e,t,n,r,s){return ll(Pe(e,t,n,r,s,!0))}function Ur(e){return e?e.__v_isVNode===!0:!1}function wt(e,t){return e.type===t.type&&e.key===t.key}const ar="__vInternal",cl=({key:e})=>e!=null?e:null,Nn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?he(e)||ge(e)||Y(e)?{i:we,r:e,k:t,f:!!n}:e:null);function ul(e,t=null,n=null,r=0,s=null,o=e===qe?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&cl(t),ref:t&&Nn(t),scopeId:qi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:we};return l?(Ss(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=he(n)?8:16),vn>0&&!i&&Be&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&Be.push(a),a}const Pe=Nc;function Nc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Ya)&&(e=De),Ur(e)){const l=gt(e,t,!0);return n&&Ss(l,n),vn>0&&!o&&Be&&(l.shapeFlag&6?Be[Be.indexOf(e)]=l:Be.push(l)),l.patchFlag|=-2,l}if(Qc(e)&&(e=e.__vccOpts),t){t=Fc(t);let{class:l,style:a}=t;l&&!he(l)&&(t.class=cs(l)),ue(a)&&(Ti(a)&&!U(a)&&(a=pe({},a)),t.style=as(a))}const i=he(e)?1:Za(e)?128:$c(e)?64:ue(e)?4:Y(e)?2:0;return ul(e,t,n,r,s,i,o,!0)}function Fc(e){return e?Ti(e)||ar in e?pe({},e):e:null}function gt(e,t,n=!1){const{props:r,ref:s,patchFlag:o,children:i}=e,l=t?Bc(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&cl(l),ref:t&&t.ref?n&&s?U(s)?s.concat(Nn(t)):[s,Nn(t)]:Nn(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==qe?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&>(e.ssContent),ssFallback:e.ssFallback&>(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function qc(e=" ",t=0){return Pe(lr,null,e,t)}function Rh(e="",t=!1){return t?(il(),al(De,null,e)):Pe(De,null,e)}function Ue(e){return e==null||typeof e=="boolean"?Pe(De):U(e)?Pe(qe,null,e.slice()):typeof e=="object"?at(e):Pe(lr,null,String(e))}function at(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:gt(e)}function Ss(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(U(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Ss(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!(ar in t)?t._ctx=we:s===3&&we&&(we.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Y(t)?(t={default:t,_ctx:we},n=32):(t=String(t),r&64?(n=16,t=[qc(t)]):n=8);e.children=t,e.shapeFlag|=n}function Bc(...e){const t={};for(let n=0;nve||we;let Kn,Wr;{const e=ci(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};Kn=t("__VUE_INSTANCE_SETTERS__",n=>ve=n),Wr=t("__VUE_SSR_SETTERS__",n=>cr=n)}const xn=e=>{const t=ve;return Kn(e),e.scope.on(),()=>{e.scope.off(),Kn(t)}},oo=()=>{ve&&ve.scope.off(),Kn(null)};function fl(e){return e.vnode.shapeFlag&4}let cr=!1;function Vc(e,t=!1){t&&Wr(t);const{props:n,children:r}=e.vnode,s=fl(e);Cc(e,n,s,t),Rc(e,r);const o=s?Kc(e,t):void 0;return t&&Wr(!1),o}function Kc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=mt(new Proxy(e.ctx,gc));const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?Wc(e):null,o=xn(e);kt();const i=ht(r,e,0,[e.props,s]);if(Tt(),o(),ii(i)){if(i.then(oo,oo),t)return i.then(l=>{io(e,l,t)}).catch(l=>{nr(l,e,0)});e.asyncDep=i}else io(e,i,t)}else dl(e,t)}function io(e,t,n){Y(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ue(t)&&(e.setupState=$i(t)),dl(e,n)}let lo;function dl(e,t,n){const r=e.type;if(!e.render){if(!t&&lo&&!r.render){const s=r.template||xs(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:a}=r,u=pe(pe({isCustomElement:o,delimiters:l},i),a);r.render=lo(s,u)}}e.render=r.render||Ae}{const s=xn(e);kt();try{mc(e)}finally{Tt(),s()}}}function Uc(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return Re(e,"get","$attrs"),t[n]}}))}function Wc(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Uc(e)},slots:e.slots,emit:e.emit,expose:t}}function ur(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy($i(mt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in sn)return sn[n](e)},has(t,n){return n in t||n in sn}}))}function Gc(e,t=!0){return Y(e)?e.displayName||e.name:e.name||t&&e.__name}function Qc(e){return Y(e)&&"__vccOpts"in e}const G=(e,t)=>La(e,t,cr);function W(e,t,n){const r=arguments.length;return r===2?ue(t)&&!U(t)?Ur(t)?Pe(e,null,[t]):Pe(e,t):Pe(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Ur(n)&&(n=[n]),Pe(e,t,n))}const Jc="3.4.15";/** * @vue/runtime-dom v3.4.15 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const Yc="http://www.w3.org/2000/svg",Xc="http://www.w3.org/1998/Math/MathML",ct=typeof document!="undefined"?document:null,ao=ct&&ct.createElement("template"),Zc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?ct.createElementNS(Yc,e):t==="mathml"?ct.createElementNS(Xc,e):ct.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>ct.createTextNode(e),createComment:e=>ct.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ct.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{ao.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=ao.content;if(r==="svg"||r==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},nt="transition",Xt="animation",Kt=Symbol("_vtc"),Ps=(e,{slots:t})=>W(oc,pl(e),t);Ps.displayName="Transition";const hl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},eu=Ps.props=pe({},Ki,hl),yt=(e,t=[])=>{U(e)?e.forEach(n=>n(...t)):e&&e(...t)},co=e=>e?U(e)?e.some(t=>t.length>1):e.length>1:!1;function pl(e){const t={};for(const L in e)L in hl||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=o,appearActiveClass:u=i,appearToClass:c=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,_=tu(s),E=_&&_[0],x=_&&_[1],{onBeforeEnter:R,onEnter:F,onEnterCancelled:q,onLeave:H,onLeaveCancelled:O,onBeforeAppear:$=R,onAppear:V=F,onAppearCancelled:S=q}=t,M=(L,Z,N)=>{st(L,Z?c:l),st(L,Z?u:i),N&&N()},K=(L,Z)=>{L._isLeaving=!1,st(L,h),st(L,g),st(L,f),Z&&Z()},J=L=>(Z,N)=>{const ee=L?V:F,X=()=>M(Z,L,N);yt(ee,[Z,X]),uo(()=>{st(Z,L?a:o),Ye(Z,L?c:l),co(ee)||fo(Z,r,E,X)})};return pe(t,{onBeforeEnter(L){yt(R,[L]),Ye(L,o),Ye(L,i)},onBeforeAppear(L){yt($,[L]),Ye(L,a),Ye(L,u)},onEnter:J(!1),onAppear:J(!0),onLeave(L,Z){L._isLeaving=!0;const N=()=>K(L,Z);Ye(L,h),ml(),Ye(L,f),uo(()=>{!L._isLeaving||(st(L,h),Ye(L,g),co(H)||fo(L,r,x,N))}),yt(H,[L,N])},onEnterCancelled(L){M(L,!1),yt(q,[L])},onAppearCancelled(L){M(L,!0),yt(S,[L])},onLeaveCancelled(L){K(L),yt(O,[L])}})}function tu(e){if(e==null)return null;if(ue(e))return[Sr(e.enter),Sr(e.leave)];{const t=Sr(e);return[t,t]}}function Sr(e){return ra(e)}function Ye(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Kt]||(e[Kt]=new Set)).add(t)}function st(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Kt];n&&(n.delete(t),n.size||(e[Kt]=void 0))}function uo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let nu=0;function fo(e,t,n,r){const s=e._endId=++nu,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:a}=gl(e,t);if(!i)return r();const u=i+"end";let c=0;const h=()=>{e.removeEventListener(u,f),o()},f=g=>{g.target===e&&++c>=a&&h()};setTimeout(()=>{c(n[_]||"").split(", "),s=r(`${nt}Delay`),o=r(`${nt}Duration`),i=ho(s,o),l=r(`${Xt}Delay`),a=r(`${Xt}Duration`),u=ho(l,a);let c=null,h=0,f=0;t===nt?i>0&&(c=nt,h=i,f=o.length):t===Xt?u>0&&(c=Xt,h=u,f=a.length):(h=Math.max(i,u),c=h>0?i>u?nt:Xt:null,f=c?c===nt?o.length:a.length:0);const g=c===nt&&/\b(transform|all)(,|$)/.test(r(`${nt}Property`).toString());return{type:c,timeout:h,propCount:f,hasTransform:g}}function ho(e,t){for(;e.lengthpo(n)+po(e[r])))}function po(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ml(){return document.body.offsetHeight}function ru(e,t,n){const r=e[Kt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const su=Symbol("_vod"),ou=Symbol("");function iu(e,t,n){const r=e.style,s=r.display,o=he(n);if(n&&!o){if(t&&!he(t))for(const i in t)n[i]==null&&Gr(r,i,"");for(const i in n)Gr(r,i,n[i])}else if(o){if(t!==n){const i=r[ou];i&&(n+=";"+i),r.cssText=n}}else t&&e.removeAttribute("style");su in e&&(r.display=s)}const go=/\s*!important$/;function Gr(e,t,n){if(U(n))n.forEach(r=>Gr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=lu(e,t);go.test(n)?e.setProperty(Jt(r),n.replace(go,""),"important"):e[r]=n}}const mo=["Webkit","Moz","ms"],Pr={};function lu(e,t){const n=Pr[t];if(n)return n;let r=Ge(t);if(r!=="filter"&&r in e)return Pr[t]=r;r=er(r);for(let s=0;sRr||(pu.then(()=>Rr=0),Rr=Date.now());function mu(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Me(vu(r,n.value),t,5,[r])};return n.value=e,n.attached=gu(),n}function vu(e,t){if(U(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const bo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,_u=(e,t,n,r,s,o,i,l,a)=>{const u=s==="svg";t==="class"?ru(e,r,u):t==="style"?iu(e,n,r):Yn(t)?os(t)||du(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):yu(e,t,r,u))?cu(e,t,r,o,i,l,a):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),au(e,t,r,u))};function yu(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&bo(t)&&Y(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return bo(t)&&he(n)?!1:t in e}const vl=new WeakMap,_l=new WeakMap,Un=Symbol("_moveCb"),wo=Symbol("_enterCb"),yl={name:"TransitionGroup",props:pe({},eu,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=wn(),r=Vi();let s,o;return Qi(()=>{if(!s.length)return;const i=e.moveClass||`${e.name||"v"}-move`;if(!Su(s[0].el,n.vnode.el,i))return;s.forEach(xu),s.forEach(Eu);const l=s.filter(Cu);ml(),l.forEach(a=>{const u=a.el,c=u.style;Ye(u,i),c.transform=c.webkitTransform=c.transitionDuration="";const h=u[Un]=f=>{f&&f.target!==u||(!f||/transform$/.test(f.propertyName))&&(u.removeEventListener("transitionend",h),u[Un]=null,st(u,i))};u.addEventListener("transitionend",h)})}),()=>{const i=ne(e),l=pl(i);let a=i.tag||qe;s=o,o=t.default?bs(t.default()):[];for(let u=0;udelete e.mode;yl.props;const wu=yl;function xu(e){const t=e.el;t[Un]&&t[Un](),t[wo]&&t[wo]()}function Eu(e){_l.set(e,e.el.getBoundingClientRect())}function Cu(e){const t=vl.get(e),n=_l.get(e),r=t.left-n.left,s=t.top-n.top;if(r||s){const o=e.el.style;return o.transform=o.webkitTransform=`translate(${r}px,${s}px)`,o.transitionDuration="0s",e}}function Su(e,t,n){const r=e.cloneNode(),s=e[Kt];s&&s.forEach(l=>{l.split(/\s+/).forEach(a=>a&&r.classList.remove(a))}),n.split(/\s+/).forEach(l=>l&&r.classList.add(l)),r.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(r);const{hasTransform:i}=gl(r);return o.removeChild(r),i}const Pu=["ctrl","shift","alt","meta"],Ru={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Pu.some(n=>e[`${n}Key`]&&!t.includes(n))},kh=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const t=Tu().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Ou(r);if(!s)return;const o=t._component;!Y(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,Au(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t};function Au(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Ou(e){return he(e)?document.querySelector(e):e}function fr(e,t,n,r){return Object.defineProperty(e,t,{get:n,set:r,enumerable:!0}),e}function Th(e,t){for(const n in t)fr(e,n,t[n]);return e}const Ut=Pt(!1);let dr;function Lu(e,t){const n=/(edg|edge|edga|edgios)\/([\w.]+)/.exec(e)||/(opr)[\/]([\w.]+)/.exec(e)||/(vivaldi)[\/]([\w.]+)/.exec(e)||/(chrome|crios)[\/]([\w.]+)/.exec(e)||/(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(e)||/(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(e)||/(firefox|fxios)[\/]([\w.]+)/.exec(e)||/(webkit)[\/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[\/]([\w.]+)/.exec(e)||[];return{browser:n[5]||n[3]||n[1]||"",version:n[2]||n[4]||"0",versionNumber:n[4]||n[2]||"0",platform:t[0]||""}}function $u(e){return/(ipad)/.exec(e)||/(ipod)/.exec(e)||/(windows phone)/.exec(e)||/(iphone)/.exec(e)||/(kindle)/.exec(e)||/(silk)/.exec(e)||/(android)/.exec(e)||/(win)/.exec(e)||/(mac)/.exec(e)||/(linux)/.exec(e)||/(cros)/.exec(e)||/(playbook)/.exec(e)||/(bb)/.exec(e)||/(blackberry)/.exec(e)||[]}const wl="ontouchstart"in window||window.navigator.maxTouchPoints>0;function Mu(e){dr={is:{...e}},delete e.mac,delete e.desktop;const t=Math.min(window.innerHeight,window.innerWidth)>414?"ipad":"iphone";Object.assign(e,{mobile:!0,ios:!0,platform:t,[t]:!0})}function Iu(e){const t=e.toLowerCase(),n=$u(t),r=Lu(t,n),s={};r.browser&&(s[r.browser]=!0,s.version=r.version,s.versionNumber=parseInt(r.versionNumber,10)),r.platform&&(s[r.platform]=!0);const o=s.android||s.ios||s.bb||s.blackberry||s.ipad||s.iphone||s.ipod||s.kindle||s.playbook||s.silk||s["windows phone"];return o===!0||t.indexOf("mobile")>-1?(s.mobile=!0,s.edga||s.edgios?(s.edge=!0,r.browser="edge"):s.crios?(s.chrome=!0,r.browser="chrome"):s.fxios&&(s.firefox=!0,r.browser="firefox")):s.desktop=!0,(s.ipod||s.ipad||s.iphone)&&(s.ios=!0),s["windows phone"]&&(s.winphone=!0,delete s["windows phone"]),(s.chrome||s.opr||s.safari||s.vivaldi||s.mobile===!0&&s.ios!==!0&&o!==!0)&&(s.webkit=!0),s.edg&&(r.browser="edgechromium",s.edgeChromium=!0),(s.safari&&s.blackberry||s.bb)&&(r.browser="blackberry",s.blackberry=!0),s.safari&&s.playbook&&(r.browser="playbook",s.playbook=!0),s.opr&&(r.browser="opera",s.opera=!0),s.safari&&s.android&&(r.browser="android",s.android=!0),s.safari&&s.kindle&&(r.browser="kindle",s.kindle=!0),s.safari&&s.silk&&(r.browser="silk",s.silk=!0),s.vivaldi&&(r.browser="vivaldi",s.vivaldi=!0),s.name=r.browser,s.platform=r.platform,t.indexOf("electron")>-1?s.electron=!0:document.location.href.indexOf("-extension://")>-1?s.bex=!0:(window.Capacitor!==void 0?(s.capacitor=!0,s.nativeMobile=!0,s.nativeMobileWrapper="capacitor"):(window._cordovaNative!==void 0||window.cordova!==void 0)&&(s.cordova=!0,s.nativeMobile=!0,s.nativeMobileWrapper="cordova"),wl===!0&&s.mac===!0&&(s.desktop===!0&&s.safari===!0||s.nativeMobile===!0&&s.android!==!0&&s.ios!==!0&&s.ipad!==!0)&&Mu(s)),s}const Eo=navigator.userAgent||navigator.vendor||window.opera,ju={has:{touch:!1,webStorage:!1},within:{iframe:!1}},$e={userAgent:Eo,is:Iu(Eo),has:{touch:wl},within:{iframe:window.self!==window.top}},Qr={install(e){const{$q:t}=e;Ut.value===!0?(e.onSSRHydrated.push(()=>{Object.assign(t.platform,$e),Ut.value=!1,dr=void 0}),t.platform=At(this)):t.platform=this}};{let e;fr($e.has,"webStorage",()=>{if(e!==void 0)return e;try{if(window.localStorage)return e=!0,!0}catch{}return e=!1,!1}),$e.is.ios===!0&&window.navigator.vendor.toLowerCase().indexOf("apple"),Ut.value===!0?Object.assign(Qr,$e,dr,ju):Object.assign(Qr,$e)}var hr=(e,t)=>{const n=At(e);for(const r in e)fr(t,r,()=>n[r],s=>{n[r]=s});return t};const Rt={hasPassive:!1,passiveCapture:!0,notPassiveCapture:!0};try{const e=Object.defineProperty({},"passive",{get(){Object.assign(Rt,{hasPassive:!0,passive:{passive:!0},notPassive:{passive:!1},passiveCapture:{passive:!0,capture:!0},notPassiveCapture:{passive:!1,capture:!0}})}});window.addEventListener("qtest",null,e),window.removeEventListener("qtest",null,e)}catch{}function _n(){}function Ah(e){return e.button===0}function Nu(e){return e.touches&&e.touches[0]?e=e.touches[0]:e.changedTouches&&e.changedTouches[0]?e=e.changedTouches[0]:e.targetTouches&&e.targetTouches[0]&&(e=e.targetTouches[0]),{top:e.clientY,left:e.clientX}}function Oh(e){if(e.path)return e.path;if(e.composedPath)return e.composedPath();const t=[];let n=e.target;for(;n;){if(t.push(n),n.tagName==="HTML")return t.push(document),t.push(window),t;n=n.parentElement}}function xl(e){e.stopPropagation()}function Jr(e){e.cancelable!==!1&&e.preventDefault()}function Mt(e){e.cancelable!==!1&&e.preventDefault(),e.stopPropagation()}function Lh(e,t){if(e===void 0||t===!0&&e.__dragPrevented===!0)return;const n=t===!0?r=>{r.__dragPrevented=!0,r.addEventListener("dragstart",Jr,Rt.notPassiveCapture)}:r=>{delete r.__dragPrevented,r.removeEventListener("dragstart",Jr,Rt.notPassiveCapture)};e.querySelectorAll("a, img").forEach(n)}function Fu(e,t,n){const r=`__q_${t}_evt`;e[r]=e[r]!==void 0?e[r].concat(n):n,n.forEach(s=>{s[0].addEventListener(s[1],e[s[2]],Rt[s[3]])})}function qu(e,t){const n=`__q_${t}_evt`;e[n]!==void 0&&(e[n].forEach(r=>{r[0].removeEventListener(r[1],e[r[2]],Rt[r[3]])}),e[n]=void 0)}function Bu(e,t=250,n){let r=null;function s(){const o=arguments,i=()=>{r=null,n!==!0&&e.apply(this,o)};r!==null?clearTimeout(r):n===!0&&e.apply(this,o),r=setTimeout(i,t)}return s.cancel=()=>{r!==null&&clearTimeout(r)},s}const kr=["sm","md","lg","xl"],{passive:Co}=Rt;var Du=hr({width:0,height:0,name:"xs",sizes:{sm:600,md:1024,lg:1440,xl:1920},lt:{sm:!0,md:!0,lg:!0,xl:!0},gt:{xs:!1,sm:!1,md:!1,lg:!1},xs:!0,sm:!1,md:!1,lg:!1,xl:!1},{setSizes:_n,setDebounce:_n,install({$q:e,onSSRHydrated:t}){if(e.screen=this,this.__installed===!0){e.config.screen!==void 0&&(e.config.screen.bodyClasses===!1?document.body.classList.remove(`screen--${this.name}`):this.__update(!0));return}const{visualViewport:n}=window,r=n||window,s=document.scrollingElement||document.documentElement,o=n===void 0||$e.is.mobile===!0?()=>[Math.max(window.innerWidth,s.clientWidth),Math.max(window.innerHeight,s.clientHeight)]:()=>[n.width*n.scale+window.innerWidth-s.clientWidth,n.height*n.scale+window.innerHeight-s.clientHeight],i=e.config.screen!==void 0&&e.config.screen.bodyClasses===!0;this.__update=h=>{const[f,g]=o();if(g!==this.height&&(this.height=g),f!==this.width)this.width=f;else if(h!==!0)return;let _=this.sizes;this.gt.xs=f>=_.sm,this.gt.sm=f>=_.md,this.gt.md=f>=_.lg,this.gt.lg=f>=_.xl,this.lt.sm=f<_.sm,this.lt.md=f<_.md,this.lt.lg=f<_.lg,this.lt.xl=f<_.xl,this.xs=this.lt.sm,this.sm=this.gt.xs===!0&&this.lt.md===!0,this.md=this.gt.sm===!0&&this.lt.lg===!0,this.lg=this.gt.md===!0&&this.lt.xl===!0,this.xl=this.gt.lg,_=this.xs===!0&&"xs"||this.sm===!0&&"sm"||this.md===!0&&"md"||this.lg===!0&&"lg"||"xl",_!==this.name&&(i===!0&&(document.body.classList.remove(`screen--${this.name}`),document.body.classList.add(`screen--${_}`)),this.name=_)};let l,a={},u=16;this.setSizes=h=>{kr.forEach(f=>{h[f]!==void 0&&(a[f]=h[f])})},this.setDebounce=h=>{u=h};const c=()=>{const h=getComputedStyle(document.body);h.getPropertyValue("--q-size-sm")&&kr.forEach(f=>{this.sizes[f]=parseInt(h.getPropertyValue(`--q-size-${f}`),10)}),this.setSizes=f=>{kr.forEach(g=>{f[g]&&(this.sizes[g]=f[g])}),this.__update(!0)},this.setDebounce=f=>{l!==void 0&&r.removeEventListener("resize",l,Co),l=f>0?Bu(this.__update,f):this.__update,r.addEventListener("resize",l,Co)},this.setDebounce(u),Object.keys(a).length!==0?(this.setSizes(a),a=void 0):this.__update(),i===!0&&this.name==="xs"&&document.body.classList.add("screen--xs")};Ut.value===!0?t.push(c):c()}});const ye=hr({isActive:!1,mode:!1},{__media:void 0,set(e){ye.mode=e,e==="auto"?(ye.__media===void 0&&(ye.__media=window.matchMedia("(prefers-color-scheme: dark)"),ye.__updateMedia=()=>{ye.set("auto")},ye.__media.addListener(ye.__updateMedia)),e=ye.__media.matches):ye.__media!==void 0&&(ye.__media.removeListener(ye.__updateMedia),ye.__media=void 0),ye.isActive=e===!0,document.body.classList.remove(`body--${e===!0?"light":"dark"}`),document.body.classList.add(`body--${e===!0?"dark":"light"}`)},toggle(){ye.set(ye.isActive===!1)},install({$q:e,ssrContext:t}){const{dark:n}=e.config;e.dark=this,this.__installed!==!0&&this.set(n!==void 0?n:!1)}}),El=()=>!0;function Hu(e){return typeof e=="string"&&e!==""&&e!=="/"&&e!=="#/"}function zu(e){return e.startsWith("#")===!0&&(e=e.substring(1)),e.startsWith("/")===!1&&(e="/"+e),e.endsWith("/")===!0&&(e=e.substring(0,e.length-1)),"#"+e}function Vu(e){if(e.backButtonExit===!1)return()=>!1;if(e.backButtonExit==="*")return El;const t=["#/"];return Array.isArray(e.backButtonExit)===!0&&t.push(...e.backButtonExit.filter(Hu).map(zu)),()=>t.includes(window.location.hash)}var Ku={__history:[],add:_n,remove:_n,install({$q:e}){if(this.__installed===!0)return;const{cordova:t,capacitor:n}=$e.is;if(t!==!0&&n!==!0)return;const r=e.config[t===!0?"cordova":"capacitor"];if(r!==void 0&&r.backButton===!1||n===!0&&(window.Capacitor===void 0||window.Capacitor.Plugins.App===void 0))return;this.add=i=>{i.condition===void 0&&(i.condition=El),this.__history.push(i)},this.remove=i=>{const l=this.__history.indexOf(i);l>=0&&this.__history.splice(l,1)};const s=Vu(Object.assign({backButtonExit:!0},r)),o=()=>{if(this.__history.length){const i=this.__history[this.__history.length-1];i.condition()===!0&&(this.__history.pop(),i.handler())}else s()===!0?navigator.app.exitApp():window.history.back()};t===!0?document.addEventListener("deviceready",()=>{document.addEventListener("backbutton",o,!1)}):window.Capacitor.Plugins.App.addListener("backButton",o)}},So={isoName:"en-US",nativeName:"English (US)",label:{clear:"Clear",ok:"OK",cancel:"Cancel",close:"Close",set:"Set",select:"Select",reset:"Reset",remove:"Remove",update:"Update",create:"Create",search:"Search",filter:"Filter",refresh:"Refresh",expand:e=>e?`Expand "${e}"`:"Expand",collapse:e=>e?`Collapse "${e}"`:"Collapse"},date:{days:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),daysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),firstDayOfWeek:0,format24h:!1,pluralDay:"days"},table:{noData:"No data available",noResults:"No matching records found",loading:"Loading...",selectedRecords:e=>e===1?"1 record selected.":(e===0?"No":e)+" records selected.",recordsPerPage:"Records per page:",allRows:"All",pagination:(e,t,n)=>e+"-"+t+" of "+n,columns:"Columns"},editor:{url:"URL",bold:"Bold",italic:"Italic",strikethrough:"Strikethrough",underline:"Underline",unorderedList:"Unordered List",orderedList:"Ordered List",subscript:"Subscript",superscript:"Superscript",hyperlink:"Hyperlink",toggleFullscreen:"Toggle Fullscreen",quote:"Quote",left:"Left align",center:"Center align",right:"Right align",justify:"Justify align",print:"Print",outdent:"Decrease indentation",indent:"Increase indentation",removeFormat:"Remove formatting",formatting:"Formatting",fontSize:"Font Size",align:"Align",hr:"Insert Horizontal Rule",undo:"Undo",redo:"Redo",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraph",code:"Code",size1:"Very small",size2:"A bit small",size3:"Normal",size4:"Medium-large",size5:"Big",size6:"Very big",size7:"Maximum",defaultFont:"Default Font",viewSource:"View Source"},tree:{noNodes:"No nodes available",noResults:"No matching nodes found"}};function Po(){const e=Array.isArray(navigator.languages)===!0&&navigator.languages.length!==0?navigator.languages[0]:navigator.language;if(typeof e=="string")return e.split(/[-_]/).map((t,n)=>n===0?t.toLowerCase():n>1||t.length<4?t.toUpperCase():t[0].toUpperCase()+t.slice(1).toLowerCase()).join("-")}const Ne=hr({__langPack:{}},{getLocale:Po,set(e=So,t){const n={...e,rtl:e.rtl===!0,getLocale:Po};{if(n.set=Ne.set,Ne.__langConfig===void 0||Ne.__langConfig.noHtmlAttrs!==!0){const r=document.documentElement;r.setAttribute("dir",n.rtl===!0?"rtl":"ltr"),r.setAttribute("lang",n.isoName)}Object.assign(Ne.__langPack,n),Ne.props=n,Ne.isoName=n.isoName,Ne.nativeName=n.nativeName}},install({$q:e,lang:t,ssrContext:n}){e.lang=Ne.__langPack,Ne.__langConfig=e.config.lang,this.__installed===!0?t!==void 0&&this.set(t):this.set(t||So)}});function Uu(e,t,n=document.body){if(typeof e!="string")throw new TypeError("Expected a string as propName");if(typeof t!="string")throw new TypeError("Expected a string as value");if(!(n instanceof Element))throw new TypeError("Expected a DOM element");n.style.setProperty(`--q-${e}`,t)}let Cl=!1;function Wu(e){Cl=e.isComposing===!0}function Gu(e){return Cl===!0||e!==Object(e)||e.isComposing===!0||e.qKeyEvent===!0}function Yr(e,t){return Gu(e)===!0?!1:[].concat(t).includes(e.keyCode)}function Sl(e){if(e.ios===!0)return"ios";if(e.android===!0)return"android"}function Qu({is:e,has:t,within:n},r){const s=[e.desktop===!0?"desktop":"mobile",`${t.touch===!1?"no-":""}touch`];if(e.mobile===!0){const o=Sl(e);o!==void 0&&s.push("platform-"+o)}if(e.nativeMobile===!0){const o=e.nativeMobileWrapper;s.push(o),s.push("native-mobile"),e.ios===!0&&(r[o]===void 0||r[o].iosStatusBarPadding!==!1)&&s.push("q-ios-padding")}else e.electron===!0?s.push("electron"):e.bex===!0&&s.push("bex");return n.iframe===!0&&s.push("within-iframe"),s}function Ju(){const{is:e}=$e,t=document.body.className,n=new Set(t.replace(/ {2}/g," ").split(" "));if(dr!==void 0)n.delete("desktop"),n.add("platform-ios"),n.add("mobile");else if(e.nativeMobile!==!0&&e.electron!==!0&&e.bex!==!0){if(e.desktop===!0)n.delete("mobile"),n.delete("platform-ios"),n.delete("platform-android"),n.add("desktop");else if(e.mobile===!0){n.delete("desktop"),n.add("mobile");const s=Sl(e);s!==void 0?(n.add(`platform-${s}`),n.delete(`platform-${s==="ios"?"android":"ios"}`)):(n.delete("platform-ios"),n.delete("platform-android"))}}$e.has.touch===!0&&(n.delete("no-touch"),n.add("touch")),$e.within.iframe===!0&&n.add("within-iframe");const r=Array.from(n).join(" ");t!==r&&(document.body.className=r)}function Yu(e){for(const t in e)Uu(t,e[t])}var Xu={install(e){if(this.__installed!==!0){if(Ut.value===!0)Ju();else{const{$q:t}=e;t.config.brand!==void 0&&Yu(t.config.brand);const n=Qu($e,t.config);document.body.classList.add.apply(document.body.classList,n)}$e.is.ios===!0&&document.body.addEventListener("touchstart",_n),window.addEventListener("keydown",Wu,!0)}}},Zu={name:"material-icons",type:{positive:"check_circle",negative:"warning",info:"info",warning:"priority_high"},arrow:{up:"arrow_upward",right:"arrow_forward",down:"arrow_downward",left:"arrow_back",dropdown:"arrow_drop_down"},chevron:{left:"chevron_left",right:"chevron_right"},colorPicker:{spectrum:"gradient",tune:"tune",palette:"style"},pullToRefresh:{icon:"refresh"},carousel:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down",navigationIcon:"lens"},chip:{remove:"cancel",selected:"check"},datetime:{arrowLeft:"chevron_left",arrowRight:"chevron_right",now:"access_time",today:"today"},editor:{bold:"format_bold",italic:"format_italic",strikethrough:"strikethrough_s",underline:"format_underlined",unorderedList:"format_list_bulleted",orderedList:"format_list_numbered",subscript:"vertical_align_bottom",superscript:"vertical_align_top",hyperlink:"link",toggleFullscreen:"fullscreen",quote:"format_quote",left:"format_align_left",center:"format_align_center",right:"format_align_right",justify:"format_align_justify",print:"print",outdent:"format_indent_decrease",indent:"format_indent_increase",removeFormat:"format_clear",formatting:"text_format",fontSize:"format_size",align:"format_align_left",hr:"remove",undo:"undo",redo:"redo",heading:"format_size",code:"code",size:"format_size",font:"font_download",viewSource:"code"},expansionItem:{icon:"keyboard_arrow_down",denseIcon:"arrow_drop_down"},fab:{icon:"add",activeIcon:"close"},field:{clear:"cancel",error:"error"},pagination:{first:"first_page",prev:"keyboard_arrow_left",next:"keyboard_arrow_right",last:"last_page"},rating:{icon:"grade"},stepper:{done:"check",active:"edit",error:"warning"},tabs:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down"},table:{arrowUp:"arrow_upward",warning:"warning",firstPage:"first_page",prevPage:"chevron_left",nextPage:"chevron_right",lastPage:"last_page"},tree:{icon:"play_arrow"},uploader:{done:"done",clear:"clear",add:"add_box",upload:"cloud_upload",removeQueue:"clear_all",removeUploaded:"done_all"}};const Wn=hr({iconMapFn:null,__icons:{}},{set(e,t){const n={...e,rtl:e.rtl===!0};n.set=Wn.set,Object.assign(Wn.__icons,n)},install({$q:e,iconSet:t,ssrContext:n}){e.config.iconMapFn!==void 0&&(this.iconMapFn=e.config.iconMapFn),e.iconSet=this.__icons,fr(e,"iconMapFn",()=>this.iconMapFn,r=>{this.iconMapFn=r}),this.__installed===!0?t!==void 0&&this.set(t):this.set(t||Zu)}}),ef="_q_",$h="_q_l_",Mh="_q_pc_",Ih="_q_fo_",jh=()=>{},Gn={};let Pl=!1;function tf(){Pl=!0}function Tr(e,t){if(e===t)return!0;if(e!==null&&t!==null&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;let n,r;if(e.constructor===Array){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(Tr(e[r],t[r])!==!0)return!1;return!0}if(e.constructor===Map){if(e.size!==t.size)return!1;let o=e.entries();for(r=o.next();r.done!==!0;){if(t.has(r.value[0])!==!0)return!1;r=o.next()}for(o=e.entries(),r=o.next();r.done!==!0;){if(Tr(r.value[1],t.get(r.value[0]))!==!0)return!1;r=o.next()}return!0}if(e.constructor===Set){if(e.size!==t.size)return!1;const o=e.entries();for(r=o.next();r.done!==!0;){if(t.has(r.value[0])!==!0)return!1;r=o.next()}return!0}if(e.buffer!=null&&e.buffer.constructor===ArrayBuffer){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();const s=Object.keys(e).filter(o=>e[o]!==void 0);if(n=s.length,n!==Object.keys(t).filter(o=>t[o]!==void 0).length)return!1;for(r=n;r--!==0;){const o=s[r];if(Tr(e[o],t[o])!==!0)return!1}return!0}return e!==e&&t!==t}function yn(e){return e!==null&&typeof e=="object"&&Array.isArray(e)!==!0}function Nh(e){return Object.prototype.toString.call(e)==="[object Date]"}function Fh(e){return typeof e=="number"&&isFinite(e)}const Ro=[Qr,Xu,ye,Du,Ku,Ne,Wn];function nf(e,t){const n=bl(e);n.config.globalProperties=t.config.globalProperties;const{reload:r,...s}=t._context;return Object.assign(n._context,s),n}function ko(e,t){t.forEach(n=>{n.install(e),n.__installed=!0})}function rf(e,t,n){e.config.globalProperties.$q=n.$q,e.provide(ef,n.$q),ko(n,Ro),t.components!==void 0&&Object.values(t.components).forEach(r=>{yn(r)===!0&&r.name!==void 0&&e.component(r.name,r)}),t.directives!==void 0&&Object.values(t.directives).forEach(r=>{yn(r)===!0&&r.name!==void 0&&e.directive(r.name,r)}),t.plugins!==void 0&&ko(n,Object.values(t.plugins).filter(r=>typeof r.install=="function"&&Ro.includes(r)===!1)),Ut.value===!0&&(n.$q.onSSRHydrated=()=>{n.onSSRHydrated.forEach(r=>{r()}),n.$q.onSSRHydrated=()=>{}})}var sf=function(e,t={}){const n={version:"2.14.3"};Pl===!1?(t.config!==void 0&&Object.assign(Gn,t.config),n.config={...Gn},tf()):n.config=t.config||{},rf(e,t,{parentApp:e,$q:n,lang:t.lang,iconSet:t.iconSet,onSSRHydrated:[]})},of={version:"2.14.3",install:sf,lang:Ne,iconSet:Wn},lf=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n};const af=sr({name:"App"});function cf(e,t,n,r,s,o){const i=Ja("router-view");return il(),al(i)}var uf=lf(af,[["render",cf]]);function qh(e){return e}var ff=!1;/*! +**/const Yc="http://www.w3.org/2000/svg",Xc="http://www.w3.org/1998/Math/MathML",ct=typeof document!="undefined"?document:null,ao=ct&&ct.createElement("template"),Zc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?ct.createElementNS(Yc,e):t==="mathml"?ct.createElementNS(Xc,e):ct.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>ct.createTextNode(e),createComment:e=>ct.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ct.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{ao.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=ao.content;if(r==="svg"||r==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},nt="transition",Xt="animation",Kt=Symbol("_vtc"),Ps=(e,{slots:t})=>W(oc,pl(e),t);Ps.displayName="Transition";const hl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},eu=Ps.props=pe({},Ki,hl),yt=(e,t=[])=>{U(e)?e.forEach(n=>n(...t)):e&&e(...t)},co=e=>e?U(e)?e.some(t=>t.length>1):e.length>1:!1;function pl(e){const t={};for(const L in e)L in hl||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=o,appearActiveClass:u=i,appearToClass:c=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,_=tu(s),E=_&&_[0],x=_&&_[1],{onBeforeEnter:R,onEnter:F,onEnterCancelled:q,onLeave:H,onLeaveCancelled:O,onBeforeAppear:$=R,onAppear:V=F,onAppearCancelled:S=q}=t,M=(L,Z,N)=>{st(L,Z?c:l),st(L,Z?u:i),N&&N()},K=(L,Z)=>{L._isLeaving=!1,st(L,h),st(L,g),st(L,f),Z&&Z()},J=L=>(Z,N)=>{const ee=L?V:F,X=()=>M(Z,L,N);yt(ee,[Z,X]),uo(()=>{st(Z,L?a:o),Ye(Z,L?c:l),co(ee)||fo(Z,r,E,X)})};return pe(t,{onBeforeEnter(L){yt(R,[L]),Ye(L,o),Ye(L,i)},onBeforeAppear(L){yt($,[L]),Ye(L,a),Ye(L,u)},onEnter:J(!1),onAppear:J(!0),onLeave(L,Z){L._isLeaving=!0;const N=()=>K(L,Z);Ye(L,h),ml(),Ye(L,f),uo(()=>{!L._isLeaving||(st(L,h),Ye(L,g),co(H)||fo(L,r,x,N))}),yt(H,[L,N])},onEnterCancelled(L){M(L,!1),yt(q,[L])},onAppearCancelled(L){M(L,!0),yt(S,[L])},onLeaveCancelled(L){K(L),yt(O,[L])}})}function tu(e){if(e==null)return null;if(ue(e))return[Sr(e.enter),Sr(e.leave)];{const t=Sr(e);return[t,t]}}function Sr(e){return ra(e)}function Ye(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Kt]||(e[Kt]=new Set)).add(t)}function st(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Kt];n&&(n.delete(t),n.size||(e[Kt]=void 0))}function uo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let nu=0;function fo(e,t,n,r){const s=e._endId=++nu,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:a}=gl(e,t);if(!i)return r();const u=i+"end";let c=0;const h=()=>{e.removeEventListener(u,f),o()},f=g=>{g.target===e&&++c>=a&&h()};setTimeout(()=>{c(n[_]||"").split(", "),s=r(`${nt}Delay`),o=r(`${nt}Duration`),i=ho(s,o),l=r(`${Xt}Delay`),a=r(`${Xt}Duration`),u=ho(l,a);let c=null,h=0,f=0;t===nt?i>0&&(c=nt,h=i,f=o.length):t===Xt?u>0&&(c=Xt,h=u,f=a.length):(h=Math.max(i,u),c=h>0?i>u?nt:Xt:null,f=c?c===nt?o.length:a.length:0);const g=c===nt&&/\b(transform|all)(,|$)/.test(r(`${nt}Property`).toString());return{type:c,timeout:h,propCount:f,hasTransform:g}}function ho(e,t){for(;e.lengthpo(n)+po(e[r])))}function po(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ml(){return document.body.offsetHeight}function ru(e,t,n){const r=e[Kt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const su=Symbol("_vod"),ou=Symbol("");function iu(e,t,n){const r=e.style,s=r.display,o=he(n);if(n&&!o){if(t&&!he(t))for(const i in t)n[i]==null&&Gr(r,i,"");for(const i in n)Gr(r,i,n[i])}else if(o){if(t!==n){const i=r[ou];i&&(n+=";"+i),r.cssText=n}}else t&&e.removeAttribute("style");su in e&&(r.display=s)}const go=/\s*!important$/;function Gr(e,t,n){if(U(n))n.forEach(r=>Gr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=lu(e,t);go.test(n)?e.setProperty(Jt(r),n.replace(go,""),"important"):e[r]=n}}const mo=["Webkit","Moz","ms"],Pr={};function lu(e,t){const n=Pr[t];if(n)return n;let r=Ge(t);if(r!=="filter"&&r in e)return Pr[t]=r;r=er(r);for(let s=0;sRr||(pu.then(()=>Rr=0),Rr=Date.now());function mu(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Me(vu(r,n.value),t,5,[r])};return n.value=e,n.attached=gu(),n}function vu(e,t){if(U(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const bo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,_u=(e,t,n,r,s,o,i,l,a)=>{const u=s==="svg";t==="class"?ru(e,r,u):t==="style"?iu(e,n,r):Yn(t)?os(t)||du(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):yu(e,t,r,u))?cu(e,t,r,o,i,l,a):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),au(e,t,r,u))};function yu(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&bo(t)&&Y(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return bo(t)&&he(n)?!1:t in e}const vl=new WeakMap,_l=new WeakMap,Un=Symbol("_moveCb"),wo=Symbol("_enterCb"),yl={name:"TransitionGroup",props:pe({},eu,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=wn(),r=Vi();let s,o;return Qi(()=>{if(!s.length)return;const i=e.moveClass||`${e.name||"v"}-move`;if(!Su(s[0].el,n.vnode.el,i))return;s.forEach(xu),s.forEach(Eu);const l=s.filter(Cu);ml(),l.forEach(a=>{const u=a.el,c=u.style;Ye(u,i),c.transform=c.webkitTransform=c.transitionDuration="";const h=u[Un]=f=>{f&&f.target!==u||(!f||/transform$/.test(f.propertyName))&&(u.removeEventListener("transitionend",h),u[Un]=null,st(u,i))};u.addEventListener("transitionend",h)})}),()=>{const i=ne(e),l=pl(i);let a=i.tag||qe;s=o,o=t.default?bs(t.default()):[];for(let u=0;udelete e.mode;yl.props;const wu=yl;function xu(e){const t=e.el;t[Un]&&t[Un](),t[wo]&&t[wo]()}function Eu(e){_l.set(e,e.el.getBoundingClientRect())}function Cu(e){const t=vl.get(e),n=_l.get(e),r=t.left-n.left,s=t.top-n.top;if(r||s){const o=e.el.style;return o.transform=o.webkitTransform=`translate(${r}px,${s}px)`,o.transitionDuration="0s",e}}function Su(e,t,n){const r=e.cloneNode(),s=e[Kt];s&&s.forEach(l=>{l.split(/\s+/).forEach(a=>a&&r.classList.remove(a))}),n.split(/\s+/).forEach(l=>l&&r.classList.add(l)),r.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(r);const{hasTransform:i}=gl(r);return o.removeChild(r),i}const Pu=["ctrl","shift","alt","meta"],Ru={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Pu.some(n=>e[`${n}Key`]&&!t.includes(n))},kh=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const t=Tu().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Ou(r);if(!s)return;const o=t._component;!Y(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,Au(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t};function Au(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Ou(e){return he(e)?document.querySelector(e):e}function fr(e,t,n,r){return Object.defineProperty(e,t,{get:n,set:r,enumerable:!0}),e}function Th(e,t){for(const n in t)fr(e,n,t[n]);return e}const Ut=Pt(!1);let dr;function Lu(e,t){const n=/(edg|edge|edga|edgios)\/([\w.]+)/.exec(e)||/(opr)[\/]([\w.]+)/.exec(e)||/(vivaldi)[\/]([\w.]+)/.exec(e)||/(chrome|crios)[\/]([\w.]+)/.exec(e)||/(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(e)||/(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(e)||/(firefox|fxios)[\/]([\w.]+)/.exec(e)||/(webkit)[\/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[\/]([\w.]+)/.exec(e)||[];return{browser:n[5]||n[3]||n[1]||"",version:n[2]||n[4]||"0",versionNumber:n[4]||n[2]||"0",platform:t[0]||""}}function $u(e){return/(ipad)/.exec(e)||/(ipod)/.exec(e)||/(windows phone)/.exec(e)||/(iphone)/.exec(e)||/(kindle)/.exec(e)||/(silk)/.exec(e)||/(android)/.exec(e)||/(win)/.exec(e)||/(mac)/.exec(e)||/(linux)/.exec(e)||/(cros)/.exec(e)||/(playbook)/.exec(e)||/(bb)/.exec(e)||/(blackberry)/.exec(e)||[]}const wl="ontouchstart"in window||window.navigator.maxTouchPoints>0;function Mu(e){dr={is:{...e}},delete e.mac,delete e.desktop;const t=Math.min(window.innerHeight,window.innerWidth)>414?"ipad":"iphone";Object.assign(e,{mobile:!0,ios:!0,platform:t,[t]:!0})}function Iu(e){const t=e.toLowerCase(),n=$u(t),r=Lu(t,n),s={};r.browser&&(s[r.browser]=!0,s.version=r.version,s.versionNumber=parseInt(r.versionNumber,10)),r.platform&&(s[r.platform]=!0);const o=s.android||s.ios||s.bb||s.blackberry||s.ipad||s.iphone||s.ipod||s.kindle||s.playbook||s.silk||s["windows phone"];return o===!0||t.indexOf("mobile")>-1?(s.mobile=!0,s.edga||s.edgios?(s.edge=!0,r.browser="edge"):s.crios?(s.chrome=!0,r.browser="chrome"):s.fxios&&(s.firefox=!0,r.browser="firefox")):s.desktop=!0,(s.ipod||s.ipad||s.iphone)&&(s.ios=!0),s["windows phone"]&&(s.winphone=!0,delete s["windows phone"]),(s.chrome||s.opr||s.safari||s.vivaldi||s.mobile===!0&&s.ios!==!0&&o!==!0)&&(s.webkit=!0),s.edg&&(r.browser="edgechromium",s.edgeChromium=!0),(s.safari&&s.blackberry||s.bb)&&(r.browser="blackberry",s.blackberry=!0),s.safari&&s.playbook&&(r.browser="playbook",s.playbook=!0),s.opr&&(r.browser="opera",s.opera=!0),s.safari&&s.android&&(r.browser="android",s.android=!0),s.safari&&s.kindle&&(r.browser="kindle",s.kindle=!0),s.safari&&s.silk&&(r.browser="silk",s.silk=!0),s.vivaldi&&(r.browser="vivaldi",s.vivaldi=!0),s.name=r.browser,s.platform=r.platform,t.indexOf("electron")>-1?s.electron=!0:document.location.href.indexOf("-extension://")>-1?s.bex=!0:(window.Capacitor!==void 0?(s.capacitor=!0,s.nativeMobile=!0,s.nativeMobileWrapper="capacitor"):(window._cordovaNative!==void 0||window.cordova!==void 0)&&(s.cordova=!0,s.nativeMobile=!0,s.nativeMobileWrapper="cordova"),wl===!0&&s.mac===!0&&(s.desktop===!0&&s.safari===!0||s.nativeMobile===!0&&s.android!==!0&&s.ios!==!0&&s.ipad!==!0)&&Mu(s)),s}const Eo=navigator.userAgent||navigator.vendor||window.opera,ju={has:{touch:!1,webStorage:!1},within:{iframe:!1}},$e={userAgent:Eo,is:Iu(Eo),has:{touch:wl},within:{iframe:window.self!==window.top}},Qr={install(e){const{$q:t}=e;Ut.value===!0?(e.onSSRHydrated.push(()=>{Object.assign(t.platform,$e),Ut.value=!1,dr=void 0}),t.platform=At(this)):t.platform=this}};{let e;fr($e.has,"webStorage",()=>{if(e!==void 0)return e;try{if(window.localStorage)return e=!0,!0}catch{}return e=!1,!1}),$e.is.ios===!0&&window.navigator.vendor.toLowerCase().indexOf("apple"),Ut.value===!0?Object.assign(Qr,$e,dr,ju):Object.assign(Qr,$e)}var hr=(e,t)=>{const n=At(e);for(const r in e)fr(t,r,()=>n[r],s=>{n[r]=s});return t};const Rt={hasPassive:!1,passiveCapture:!0,notPassiveCapture:!0};try{const e=Object.defineProperty({},"passive",{get(){Object.assign(Rt,{hasPassive:!0,passive:{passive:!0},notPassive:{passive:!1},passiveCapture:{passive:!0,capture:!0},notPassiveCapture:{passive:!1,capture:!0}})}});window.addEventListener("qtest",null,e),window.removeEventListener("qtest",null,e)}catch{}function _n(){}function Ah(e){return e.button===0}function Nu(e){return e.touches&&e.touches[0]?e=e.touches[0]:e.changedTouches&&e.changedTouches[0]?e=e.changedTouches[0]:e.targetTouches&&e.targetTouches[0]&&(e=e.targetTouches[0]),{top:e.clientY,left:e.clientX}}function Oh(e){if(e.path)return e.path;if(e.composedPath)return e.composedPath();const t=[];let n=e.target;for(;n;){if(t.push(n),n.tagName==="HTML")return t.push(document),t.push(window),t;n=n.parentElement}}function xl(e){e.stopPropagation()}function Jr(e){e.cancelable!==!1&&e.preventDefault()}function Mt(e){e.cancelable!==!1&&e.preventDefault(),e.stopPropagation()}function Lh(e,t){if(e===void 0||t===!0&&e.__dragPrevented===!0)return;const n=t===!0?r=>{r.__dragPrevented=!0,r.addEventListener("dragstart",Jr,Rt.notPassiveCapture)}:r=>{delete r.__dragPrevented,r.removeEventListener("dragstart",Jr,Rt.notPassiveCapture)};e.querySelectorAll("a, img").forEach(n)}function Fu(e,t,n){const r=`__q_${t}_evt`;e[r]=e[r]!==void 0?e[r].concat(n):n,n.forEach(s=>{s[0].addEventListener(s[1],e[s[2]],Rt[s[3]])})}function qu(e,t){const n=`__q_${t}_evt`;e[n]!==void 0&&(e[n].forEach(r=>{r[0].removeEventListener(r[1],e[r[2]],Rt[r[3]])}),e[n]=void 0)}function Bu(e,t=250,n){let r=null;function s(){const o=arguments,i=()=>{r=null,n!==!0&&e.apply(this,o)};r!==null?clearTimeout(r):n===!0&&e.apply(this,o),r=setTimeout(i,t)}return s.cancel=()=>{r!==null&&clearTimeout(r)},s}const kr=["sm","md","lg","xl"],{passive:Co}=Rt;var Du=hr({width:0,height:0,name:"xs",sizes:{sm:600,md:1024,lg:1440,xl:1920},lt:{sm:!0,md:!0,lg:!0,xl:!0},gt:{xs:!1,sm:!1,md:!1,lg:!1},xs:!0,sm:!1,md:!1,lg:!1,xl:!1},{setSizes:_n,setDebounce:_n,install({$q:e,onSSRHydrated:t}){if(e.screen=this,this.__installed===!0){e.config.screen!==void 0&&(e.config.screen.bodyClasses===!1?document.body.classList.remove(`screen--${this.name}`):this.__update(!0));return}const{visualViewport:n}=window,r=n||window,s=document.scrollingElement||document.documentElement,o=n===void 0||$e.is.mobile===!0?()=>[Math.max(window.innerWidth,s.clientWidth),Math.max(window.innerHeight,s.clientHeight)]:()=>[n.width*n.scale+window.innerWidth-s.clientWidth,n.height*n.scale+window.innerHeight-s.clientHeight],i=e.config.screen!==void 0&&e.config.screen.bodyClasses===!0;this.__update=h=>{const[f,g]=o();if(g!==this.height&&(this.height=g),f!==this.width)this.width=f;else if(h!==!0)return;let _=this.sizes;this.gt.xs=f>=_.sm,this.gt.sm=f>=_.md,this.gt.md=f>=_.lg,this.gt.lg=f>=_.xl,this.lt.sm=f<_.sm,this.lt.md=f<_.md,this.lt.lg=f<_.lg,this.lt.xl=f<_.xl,this.xs=this.lt.sm,this.sm=this.gt.xs===!0&&this.lt.md===!0,this.md=this.gt.sm===!0&&this.lt.lg===!0,this.lg=this.gt.md===!0&&this.lt.xl===!0,this.xl=this.gt.lg,_=this.xs===!0&&"xs"||this.sm===!0&&"sm"||this.md===!0&&"md"||this.lg===!0&&"lg"||"xl",_!==this.name&&(i===!0&&(document.body.classList.remove(`screen--${this.name}`),document.body.classList.add(`screen--${_}`)),this.name=_)};let l,a={},u=16;this.setSizes=h=>{kr.forEach(f=>{h[f]!==void 0&&(a[f]=h[f])})},this.setDebounce=h=>{u=h};const c=()=>{const h=getComputedStyle(document.body);h.getPropertyValue("--q-size-sm")&&kr.forEach(f=>{this.sizes[f]=parseInt(h.getPropertyValue(`--q-size-${f}`),10)}),this.setSizes=f=>{kr.forEach(g=>{f[g]&&(this.sizes[g]=f[g])}),this.__update(!0)},this.setDebounce=f=>{l!==void 0&&r.removeEventListener("resize",l,Co),l=f>0?Bu(this.__update,f):this.__update,r.addEventListener("resize",l,Co)},this.setDebounce(u),Object.keys(a).length!==0?(this.setSizes(a),a=void 0):this.__update(),i===!0&&this.name==="xs"&&document.body.classList.add("screen--xs")};Ut.value===!0?t.push(c):c()}});const ye=hr({isActive:!1,mode:!1},{__media:void 0,set(e){ye.mode=e,e==="auto"?(ye.__media===void 0&&(ye.__media=window.matchMedia("(prefers-color-scheme: dark)"),ye.__updateMedia=()=>{ye.set("auto")},ye.__media.addListener(ye.__updateMedia)),e=ye.__media.matches):ye.__media!==void 0&&(ye.__media.removeListener(ye.__updateMedia),ye.__media=void 0),ye.isActive=e===!0,document.body.classList.remove(`body--${e===!0?"light":"dark"}`),document.body.classList.add(`body--${e===!0?"dark":"light"}`)},toggle(){ye.set(ye.isActive===!1)},install({$q:e,ssrContext:t}){const{dark:n}=e.config;e.dark=this,this.__installed!==!0&&this.set(n!==void 0?n:!1)}}),El=()=>!0;function Hu(e){return typeof e=="string"&&e!==""&&e!=="/"&&e!=="#/"}function zu(e){return e.startsWith("#")===!0&&(e=e.substring(1)),e.startsWith("/")===!1&&(e="/"+e),e.endsWith("/")===!0&&(e=e.substring(0,e.length-1)),"#"+e}function Vu(e){if(e.backButtonExit===!1)return()=>!1;if(e.backButtonExit==="*")return El;const t=["#/"];return Array.isArray(e.backButtonExit)===!0&&t.push(...e.backButtonExit.filter(Hu).map(zu)),()=>t.includes(window.location.hash)}var Ku={__history:[],add:_n,remove:_n,install({$q:e}){if(this.__installed===!0)return;const{cordova:t,capacitor:n}=$e.is;if(t!==!0&&n!==!0)return;const r=e.config[t===!0?"cordova":"capacitor"];if(r!==void 0&&r.backButton===!1||n===!0&&(window.Capacitor===void 0||window.Capacitor.Plugins.App===void 0))return;this.add=i=>{i.condition===void 0&&(i.condition=El),this.__history.push(i)},this.remove=i=>{const l=this.__history.indexOf(i);l>=0&&this.__history.splice(l,1)};const s=Vu(Object.assign({backButtonExit:!0},r)),o=()=>{if(this.__history.length){const i=this.__history[this.__history.length-1];i.condition()===!0&&(this.__history.pop(),i.handler())}else s()===!0?navigator.app.exitApp():window.history.back()};t===!0?document.addEventListener("deviceready",()=>{document.addEventListener("backbutton",o,!1)}):window.Capacitor.Plugins.App.addListener("backButton",o)}},So={isoName:"en-US",nativeName:"English (US)",label:{clear:"Clear",ok:"OK",cancel:"Cancel",close:"Close",set:"Set",select:"Select",reset:"Reset",remove:"Remove",update:"Update",create:"Create",search:"Search",filter:"Filter",refresh:"Refresh",expand:e=>e?`Expand "${e}"`:"Expand",collapse:e=>e?`Collapse "${e}"`:"Collapse"},date:{days:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),daysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),firstDayOfWeek:0,format24h:!1,pluralDay:"days"},table:{noData:"No data available",noResults:"No matching records found",loading:"Loading...",selectedRecords:e=>e===1?"1 record selected.":(e===0?"No":e)+" records selected.",recordsPerPage:"Records per page:",allRows:"All",pagination:(e,t,n)=>e+"-"+t+" of "+n,columns:"Columns"},editor:{url:"URL",bold:"Bold",italic:"Italic",strikethrough:"Strikethrough",underline:"Underline",unorderedList:"Unordered List",orderedList:"Ordered List",subscript:"Subscript",superscript:"Superscript",hyperlink:"Hyperlink",toggleFullscreen:"Toggle Fullscreen",quote:"Quote",left:"Left align",center:"Center align",right:"Right align",justify:"Justify align",print:"Print",outdent:"Decrease indentation",indent:"Increase indentation",removeFormat:"Remove formatting",formatting:"Formatting",fontSize:"Font Size",align:"Align",hr:"Insert Horizontal Rule",undo:"Undo",redo:"Redo",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraph",code:"Code",size1:"Very small",size2:"A bit small",size3:"Normal",size4:"Medium-large",size5:"Big",size6:"Very big",size7:"Maximum",defaultFont:"Default Font",viewSource:"View Source"},tree:{noNodes:"No nodes available",noResults:"No matching nodes found"}};function Po(){const e=Array.isArray(navigator.languages)===!0&&navigator.languages.length!==0?navigator.languages[0]:navigator.language;if(typeof e=="string")return e.split(/[-_]/).map((t,n)=>n===0?t.toLowerCase():n>1||t.length<4?t.toUpperCase():t[0].toUpperCase()+t.slice(1).toLowerCase()).join("-")}const Ne=hr({__langPack:{}},{getLocale:Po,set(e=So,t){const n={...e,rtl:e.rtl===!0,getLocale:Po};{if(n.set=Ne.set,Ne.__langConfig===void 0||Ne.__langConfig.noHtmlAttrs!==!0){const r=document.documentElement;r.setAttribute("dir",n.rtl===!0?"rtl":"ltr"),r.setAttribute("lang",n.isoName)}Object.assign(Ne.__langPack,n),Ne.props=n,Ne.isoName=n.isoName,Ne.nativeName=n.nativeName}},install({$q:e,lang:t,ssrContext:n}){e.lang=Ne.__langPack,Ne.__langConfig=e.config.lang,this.__installed===!0?t!==void 0&&this.set(t):this.set(t||So)}});function Uu(e,t,n=document.body){if(typeof e!="string")throw new TypeError("Expected a string as propName");if(typeof t!="string")throw new TypeError("Expected a string as value");if(!(n instanceof Element))throw new TypeError("Expected a DOM element");n.style.setProperty(`--q-${e}`,t)}let Cl=!1;function Wu(e){Cl=e.isComposing===!0}function Gu(e){return Cl===!0||e!==Object(e)||e.isComposing===!0||e.qKeyEvent===!0}function Yr(e,t){return Gu(e)===!0?!1:[].concat(t).includes(e.keyCode)}function Sl(e){if(e.ios===!0)return"ios";if(e.android===!0)return"android"}function Qu({is:e,has:t,within:n},r){const s=[e.desktop===!0?"desktop":"mobile",`${t.touch===!1?"no-":""}touch`];if(e.mobile===!0){const o=Sl(e);o!==void 0&&s.push("platform-"+o)}if(e.nativeMobile===!0){const o=e.nativeMobileWrapper;s.push(o),s.push("native-mobile"),e.ios===!0&&(r[o]===void 0||r[o].iosStatusBarPadding!==!1)&&s.push("q-ios-padding")}else e.electron===!0?s.push("electron"):e.bex===!0&&s.push("bex");return n.iframe===!0&&s.push("within-iframe"),s}function Ju(){const{is:e}=$e,t=document.body.className,n=new Set(t.replace(/ {2}/g," ").split(" "));if(dr!==void 0)n.delete("desktop"),n.add("platform-ios"),n.add("mobile");else if(e.nativeMobile!==!0&&e.electron!==!0&&e.bex!==!0){if(e.desktop===!0)n.delete("mobile"),n.delete("platform-ios"),n.delete("platform-android"),n.add("desktop");else if(e.mobile===!0){n.delete("desktop"),n.add("mobile");const s=Sl(e);s!==void 0?(n.add(`platform-${s}`),n.delete(`platform-${s==="ios"?"android":"ios"}`)):(n.delete("platform-ios"),n.delete("platform-android"))}}$e.has.touch===!0&&(n.delete("no-touch"),n.add("touch")),$e.within.iframe===!0&&n.add("within-iframe");const r=Array.from(n).join(" ");t!==r&&(document.body.className=r)}function Yu(e){for(const t in e)Uu(t,e[t])}var Xu={install(e){if(this.__installed!==!0){if(Ut.value===!0)Ju();else{const{$q:t}=e;t.config.brand!==void 0&&Yu(t.config.brand);const n=Qu($e,t.config);document.body.classList.add.apply(document.body.classList,n)}$e.is.ios===!0&&document.body.addEventListener("touchstart",_n),window.addEventListener("keydown",Wu,!0)}}},Zu={name:"material-icons",type:{positive:"check_circle",negative:"warning",info:"info",warning:"priority_high"},arrow:{up:"arrow_upward",right:"arrow_forward",down:"arrow_downward",left:"arrow_back",dropdown:"arrow_drop_down"},chevron:{left:"chevron_left",right:"chevron_right"},colorPicker:{spectrum:"gradient",tune:"tune",palette:"style"},pullToRefresh:{icon:"refresh"},carousel:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down",navigationIcon:"lens"},chip:{remove:"cancel",selected:"check"},datetime:{arrowLeft:"chevron_left",arrowRight:"chevron_right",now:"access_time",today:"today"},editor:{bold:"format_bold",italic:"format_italic",strikethrough:"strikethrough_s",underline:"format_underlined",unorderedList:"format_list_bulleted",orderedList:"format_list_numbered",subscript:"vertical_align_bottom",superscript:"vertical_align_top",hyperlink:"link",toggleFullscreen:"fullscreen",quote:"format_quote",left:"format_align_left",center:"format_align_center",right:"format_align_right",justify:"format_align_justify",print:"print",outdent:"format_indent_decrease",indent:"format_indent_increase",removeFormat:"format_clear",formatting:"text_format",fontSize:"format_size",align:"format_align_left",hr:"remove",undo:"undo",redo:"redo",heading:"format_size",code:"code",size:"format_size",font:"font_download",viewSource:"code"},expansionItem:{icon:"keyboard_arrow_down",denseIcon:"arrow_drop_down"},fab:{icon:"add",activeIcon:"close"},field:{clear:"cancel",error:"error"},pagination:{first:"first_page",prev:"keyboard_arrow_left",next:"keyboard_arrow_right",last:"last_page"},rating:{icon:"grade"},stepper:{done:"check",active:"edit",error:"warning"},tabs:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down"},table:{arrowUp:"arrow_upward",warning:"warning",firstPage:"first_page",prevPage:"chevron_left",nextPage:"chevron_right",lastPage:"last_page"},tree:{icon:"play_arrow"},uploader:{done:"done",clear:"clear",add:"add_box",upload:"cloud_upload",removeQueue:"clear_all",removeUploaded:"done_all"}};const Wn=hr({iconMapFn:null,__icons:{}},{set(e,t){const n={...e,rtl:e.rtl===!0};n.set=Wn.set,Object.assign(Wn.__icons,n)},install({$q:e,iconSet:t,ssrContext:n}){e.config.iconMapFn!==void 0&&(this.iconMapFn=e.config.iconMapFn),e.iconSet=this.__icons,fr(e,"iconMapFn",()=>this.iconMapFn,r=>{this.iconMapFn=r}),this.__installed===!0?t!==void 0&&this.set(t):this.set(t||Zu)}}),ef="_q_",$h="_q_l_",Mh="_q_pc_",Ih="_q_fo_",jh=()=>{},Gn={};let Pl=!1;function tf(){Pl=!0}function Tr(e,t){if(e===t)return!0;if(e!==null&&t!==null&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;let n,r;if(e.constructor===Array){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(Tr(e[r],t[r])!==!0)return!1;return!0}if(e.constructor===Map){if(e.size!==t.size)return!1;let o=e.entries();for(r=o.next();r.done!==!0;){if(t.has(r.value[0])!==!0)return!1;r=o.next()}for(o=e.entries(),r=o.next();r.done!==!0;){if(Tr(r.value[1],t.get(r.value[0]))!==!0)return!1;r=o.next()}return!0}if(e.constructor===Set){if(e.size!==t.size)return!1;const o=e.entries();for(r=o.next();r.done!==!0;){if(t.has(r.value[0])!==!0)return!1;r=o.next()}return!0}if(e.buffer!=null&&e.buffer.constructor===ArrayBuffer){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();const s=Object.keys(e).filter(o=>e[o]!==void 0);if(n=s.length,n!==Object.keys(t).filter(o=>t[o]!==void 0).length)return!1;for(r=n;r--!==0;){const o=s[r];if(Tr(e[o],t[o])!==!0)return!1}return!0}return e!==e&&t!==t}function yn(e){return e!==null&&typeof e=="object"&&Array.isArray(e)!==!0}function Nh(e){return Object.prototype.toString.call(e)==="[object Date]"}function Fh(e){return typeof e=="number"&&isFinite(e)}const Ro=[Qr,Xu,ye,Du,Ku,Ne,Wn];function nf(e,t){const n=bl(e);n.config.globalProperties=t.config.globalProperties;const{reload:r,...s}=t._context;return Object.assign(n._context,s),n}function ko(e,t){t.forEach(n=>{n.install(e),n.__installed=!0})}function rf(e,t,n){e.config.globalProperties.$q=n.$q,e.provide(ef,n.$q),ko(n,Ro),t.components!==void 0&&Object.values(t.components).forEach(r=>{yn(r)===!0&&r.name!==void 0&&e.component(r.name,r)}),t.directives!==void 0&&Object.values(t.directives).forEach(r=>{yn(r)===!0&&r.name!==void 0&&e.directive(r.name,r)}),t.plugins!==void 0&&ko(n,Object.values(t.plugins).filter(r=>typeof r.install=="function"&&Ro.includes(r)===!1)),Ut.value===!0&&(n.$q.onSSRHydrated=()=>{n.onSSRHydrated.forEach(r=>{r()}),n.$q.onSSRHydrated=()=>{}})}var sf=function(e,t={}){const n={version:"2.14.3"};Pl===!1?(t.config!==void 0&&Object.assign(Gn,t.config),n.config={...Gn},tf()):n.config=t.config||{},rf(e,t,{parentApp:e,$q:n,lang:t.lang,iconSet:t.iconSet,onSSRHydrated:[]})},of={version:"2.14.3",install:sf,lang:Ne,iconSet:Wn},lf=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n};const af=sr({name:"App"});function cf(e,t,n,r,s,o){const i=Ja("router-view");return il(),al(i)}var uf=lf(af,[["render",cf]]);function qh(e){return e}var ff=!1;/*! * pinia v2.1.7 * (c) 2023 Eduardo San Martin Morote * @license MIT @@ -22,4 +22,4 @@ const Ql=function(){const t=document.createElement("link").relList;return t&&t.s * vue-router v4.2.5 * (c) 2023 Eduardo San Martin Morote * @license MIT - */const qt=typeof window!="undefined";function Sf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const ie=Object.assign;function Or(e,t){const n={};for(const r in t){const s=t[r];n[r]=He(s)?s.map(e):e(s)}return n}const cn=()=>{},He=Array.isArray,Pf=/\/$/,Rf=e=>e.replace(Pf,"");function Lr(e,t,n="/"){let r,s={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return l=0&&(a=-1),a>-1&&(r=t.slice(0,a),o=t.slice(a+1,l>-1?l:t.length),s=e(o)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=Of(r!=null?r:t,n),{fullPath:r+(o&&"?")+o+i,path:r,query:s,hash:i}}function kf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function $o(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Tf(e,t,n){const r=t.matched.length-1,s=n.matched.length-1;return r>-1&&r===s&&Wt(t.matched[r],n.matched[s])&&Ol(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Wt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Ol(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Af(e[n],t[n]))return!1;return!0}function Af(e,t){return He(e)?Mo(e,t):He(t)?Mo(t,e):e===t}function Mo(e,t){return He(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Of(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),s=r[r.length-1];(s===".."||s===".")&&r.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+r.slice(i-(i===r.length?1:0)).join("/")}var bn;(function(e){e.pop="pop",e.push="push"})(bn||(bn={}));var un;(function(e){e.back="back",e.forward="forward",e.unknown=""})(un||(un={}));function Lf(e){if(!e)if(qt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Rf(e)}const $f=/^[^#]+#/;function Mf(e,t){return e.replace($f,"#")+t}function If(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const gr=()=>({left:window.pageXOffset,top:window.pageYOffset});function jf(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=If(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Io(e,t){return(history.state?history.state.position-t:-1)+e}const es=new Map;function Nf(e,t){es.set(e,t)}function Ff(e){const t=es.get(e);return es.delete(e),t}let qf=()=>location.protocol+"//"+location.host;function Ll(e,t){const{pathname:n,search:r,hash:s}=t,o=e.indexOf("#");if(o>-1){let l=s.includes(e.slice(o))?e.slice(o).length:1,a=s.slice(l);return a[0]!=="/"&&(a="/"+a),$o(a,"")}return $o(n,e)+r+s}function Bf(e,t,n,r){let s=[],o=[],i=null;const l=({state:f})=>{const g=Ll(e,location),_=n.value,E=t.value;let x=0;if(f){if(n.value=g,t.value=f,i&&i===_){i=null;return}x=E?f.position-E.position:0}else r(g);s.forEach(R=>{R(n.value,_,{delta:x,type:bn.pop,direction:x?x>0?un.forward:un.back:un.unknown})})};function a(){i=n.value}function u(f){s.push(f);const g=()=>{const _=s.indexOf(f);_>-1&&s.splice(_,1)};return o.push(g),g}function c(){const{history:f}=window;!f.state||f.replaceState(ie({},f.state,{scroll:gr()}),"")}function h(){for(const f of o)f();o=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",c)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",c,{passive:!0}),{pauseListeners:a,listen:u,destroy:h}}function jo(e,t,n,r=!1,s=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:s?gr():null}}function Df(e){const{history:t,location:n}=window,r={value:Ll(e,n)},s={value:t.state};s.value||o(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,u,c){const h=e.indexOf("#"),f=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+a:qf()+e+a;try{t[c?"replaceState":"pushState"](u,"",f),s.value=u}catch(g){console.error(g),n[c?"replace":"assign"](f)}}function i(a,u){const c=ie({},t.state,jo(s.value.back,a,s.value.forward,!0),u,{position:s.value.position});o(a,c,!0),r.value=a}function l(a,u){const c=ie({},s.value,t.state,{forward:a,scroll:gr()});o(c.current,c,!0);const h=ie({},jo(r.value,a,null),{position:c.position+1},u);o(a,h,!1),r.value=a}return{location:r,state:s,push:l,replace:i}}function Hf(e){e=Lf(e);const t=Df(e),n=Bf(e,t.state,t.location,t.replace);function r(o,i=!0){i||n.pauseListeners(),history.go(o)}const s=ie({location:"",base:e,go:r,createHref:Mf.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function zf(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),Hf(e)}function Vf(e){return typeof e=="string"||e&&typeof e=="object"}function $l(e){return typeof e=="string"||typeof e=="symbol"}const rt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Ml=Symbol("");var No;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(No||(No={}));function Gt(e,t){return ie(new Error,{type:e,[Ml]:!0},t)}function Je(e,t){return e instanceof Error&&Ml in e&&(t==null||!!(e.type&t))}const Fo="[^/]+?",Kf={sensitive:!1,strict:!1,start:!0,end:!0},Uf=/[.+*?^${}()[\]/\\]/g;function Wf(e,t){const n=ie({},Kf,t),r=[];let s=n.start?"^":"";const o=[];for(const u of e){const c=u.length?[]:[90];n.strict&&!u.length&&(s+="/");for(let h=0;ht.length?t.length===1&&t[0]===40+40?1:-1:0}function Qf(e,t){let n=0;const r=e.score,s=t.score;for(;n0&&t[t.length-1]<0}const Jf={type:0,value:""},Yf=/[a-zA-Z0-9_]/;function Xf(e){if(!e)return[[]];if(e==="/")return[[Jf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${u}": ${g}`)}let n=0,r=n;const s=[];let o;function i(){o&&s.push(o),o=[]}let l=0,a,u="",c="";function h(){!u||(n===0?o.push({type:0,value:u}):n===1||n===2||n===3?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:u,regexp:c,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),u="")}function f(){u+=a}for(;l{i(F)}:cn}function i(c){if($l(c)){const h=r.get(c);h&&(r.delete(c),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(c);h>-1&&(n.splice(h,1),c.record.name&&r.delete(c.record.name),c.children.forEach(i),c.alias.forEach(i))}}function l(){return n}function a(c){let h=0;for(;h=0&&(c.record.path!==n[h].record.path||!Il(c,n[h]));)h++;n.splice(h,0,c),c.record.name&&!Do(c)&&r.set(c.record.name,c)}function u(c,h){let f,g={},_,E;if("name"in c&&c.name){if(f=r.get(c.name),!f)throw Gt(1,{location:c});E=f.record.name,g=ie(Bo(h.params,f.keys.filter(F=>!F.optional).map(F=>F.name)),c.params&&Bo(c.params,f.keys.map(F=>F.name))),_=f.stringify(g)}else if("path"in c)_=c.path,f=n.find(F=>F.re.test(_)),f&&(g=f.parse(_),E=f.record.name);else{if(f=h.name?r.get(h.name):n.find(F=>F.re.test(h.path)),!f)throw Gt(1,{location:c,currentLocation:h});E=f.record.name,g=ie({},h.params,c.params),_=f.stringify(g)}const x=[];let R=f;for(;R;)x.unshift(R.record),R=R.parent;return{name:E,path:_,params:g,matched:x,meta:rd(x)}}return e.forEach(c=>o(c)),{addRoute:o,resolve:u,removeRoute:i,getRoutes:l,getRecordMatcher:s}}function Bo(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function td(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:nd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function nd(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function Do(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function rd(e){return e.reduce((t,n)=>ie(t,n.meta),{})}function Ho(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function Il(e,t){return t.children.some(n=>n===e||Il(e,n))}const jl=/#/g,sd=/&/g,od=/\//g,id=/=/g,ld=/\?/g,Nl=/\+/g,ad=/%5B/g,cd=/%5D/g,Fl=/%5E/g,ud=/%60/g,ql=/%7B/g,fd=/%7C/g,Bl=/%7D/g,dd=/%20/g;function Rs(e){return encodeURI(""+e).replace(fd,"|").replace(ad,"[").replace(cd,"]")}function hd(e){return Rs(e).replace(ql,"{").replace(Bl,"}").replace(Fl,"^")}function ts(e){return Rs(e).replace(Nl,"%2B").replace(dd,"+").replace(jl,"%23").replace(sd,"%26").replace(ud,"`").replace(ql,"{").replace(Bl,"}").replace(Fl,"^")}function pd(e){return ts(e).replace(id,"%3D")}function gd(e){return Rs(e).replace(jl,"%23").replace(ld,"%3F")}function md(e){return e==null?"":gd(e).replace(od,"%2F")}function Qn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function vd(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;so&&ts(o)):[r&&ts(r)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function _d(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=He(r)?r.map(s=>s==null?null:""+s):r==null?r:""+r)}return t}const yd=Symbol(""),Vo=Symbol(""),mr=Symbol(""),ks=Symbol(""),ns=Symbol("");function Zt(){let e=[];function t(r){return e.push(r),()=>{const s=e.indexOf(r);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function ut(e,t,n,r,s){const o=r&&(r.enterCallbacks[s]=r.enterCallbacks[s]||[]);return()=>new Promise((i,l)=>{const a=h=>{h===!1?l(Gt(4,{from:n,to:t})):h instanceof Error?l(h):Vf(h)?l(Gt(2,{from:t,to:h})):(o&&r.enterCallbacks[s]===o&&typeof h=="function"&&o.push(h),i())},u=e.call(r&&r.instances[s],t,n,a);let c=Promise.resolve(u);e.length<3&&(c=c.then(a)),c.catch(h=>l(h))})}function $r(e,t,n,r){const s=[];for(const o of e)for(const i in o.components){let l=o.components[i];if(!(t!=="beforeRouteEnter"&&!o.instances[i]))if(bd(l)){const u=(l.__vccOpts||l)[t];u&&s.push(ut(u,n,r,o,i))}else{let a=l();s.push(()=>a.then(u=>{if(!u)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${o.path}"`));const c=Sf(u)?u.default:u;o.components[i]=c;const f=(c.__vccOpts||c)[t];return f&&ut(f,n,r,o,i)()}))}}return s}function bd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Ko(e){const t=Ie(mr),n=Ie(ks),r=G(()=>t.resolve(St(e.to))),s=G(()=>{const{matched:a}=r.value,{length:u}=a,c=a[u-1],h=n.matched;if(!c||!h.length)return-1;const f=h.findIndex(Wt.bind(null,c));if(f>-1)return f;const g=Uo(a[u-2]);return u>1&&Uo(c)===g&&h[h.length-1].path!==g?h.findIndex(Wt.bind(null,a[u-2])):f}),o=G(()=>s.value>-1&&Cd(n.params,r.value.params)),i=G(()=>s.value>-1&&s.value===n.matched.length-1&&Ol(n.params,r.value.params));function l(a={}){return Ed(a)?t[St(e.replace)?"replace":"push"](St(e.to)).catch(cn):Promise.resolve()}return{route:r,href:G(()=>r.value.href),isActive:o,isExactActive:i,navigate:l}}const wd=sr({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Ko,setup(e,{slots:t}){const n=At(Ko(e)),{options:r}=Ie(mr),s=G(()=>({[Wo(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Wo(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:W("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},o)}}}),xd=wd;function Ed(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Cd(e,t){for(const n in t){const r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(!He(s)||s.length!==r.length||r.some((o,i)=>o!==s[i]))return!1}return!0}function Uo(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Wo=(e,t,n)=>e!=null?e:t!=null?t:n,Sd=sr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Ie(ns),s=G(()=>e.route||r.value),o=Ie(Vo,0),i=G(()=>{let u=St(o);const{matched:c}=s.value;let h;for(;(h=c[u])&&!h.components;)u++;return u}),l=G(()=>s.value.matched[i.value]);jn(Vo,G(()=>i.value+1)),jn(yd,l),jn(ns,s);const a=Pt();return rn(()=>[a.value,l.value,e.name],([u,c,h],[f,g,_])=>{c&&(c.instances[h]=u,g&&g!==c&&u&&u===f&&(c.leaveGuards.size||(c.leaveGuards=g.leaveGuards),c.updateGuards.size||(c.updateGuards=g.updateGuards))),u&&c&&(!g||!Wt(c,g)||!f)&&(c.enterCallbacks[h]||[]).forEach(E=>E(u))},{flush:"post"}),()=>{const u=s.value,c=e.name,h=l.value,f=h&&h.components[c];if(!f)return Go(n.default,{Component:f,route:u});const g=h.props[c],_=g?g===!0?u.params:typeof g=="function"?g(u):g:null,x=W(f,ie({},_,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(h.instances[c]=null)},ref:a}));return Go(n.default,{Component:x,route:u})||x}}});function Go(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Pd=Sd;function Rd(e){const t=ed(e.routes,e),n=e.parseQuery||vd,r=e.stringifyQuery||zo,s=e.history,o=Zt(),i=Zt(),l=Zt(),a=$a(rt);let u=rt;qt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=Or.bind(null,y=>""+y),h=Or.bind(null,md),f=Or.bind(null,Qn);function g(y,I){let T,B;return $l(y)?(T=t.getRecordMatcher(y),B=I):B=y,t.addRoute(B,T)}function _(y){const I=t.getRecordMatcher(y);I&&t.removeRoute(I)}function E(){return t.getRoutes().map(y=>y.record)}function x(y){return!!t.getRecordMatcher(y)}function R(y,I){if(I=ie({},I||a.value),typeof y=="string"){const p=Lr(n,y,I.path),m=t.resolve({path:p.path},I),b=s.createHref(p.fullPath);return ie(p,m,{params:f(m.params),hash:Qn(p.hash),redirectedFrom:void 0,href:b})}let T;if("path"in y)T=ie({},y,{path:Lr(n,y.path,I.path).path});else{const p=ie({},y.params);for(const m in p)p[m]==null&&delete p[m];T=ie({},y,{params:h(p)}),I.params=h(I.params)}const B=t.resolve(T,I),oe=y.hash||"";B.params=c(f(B.params));const fe=kf(r,ie({},y,{hash:hd(oe),path:B.path})),d=s.createHref(fe);return ie({fullPath:fe,hash:oe,query:r===zo?_d(y.query):y.query||{}},B,{redirectedFrom:void 0,href:d})}function F(y){return typeof y=="string"?Lr(n,y,a.value.path):ie({},y)}function q(y,I){if(u!==y)return Gt(8,{from:I,to:y})}function H(y){return V(y)}function O(y){return H(ie(F(y),{replace:!0}))}function $(y){const I=y.matched[y.matched.length-1];if(I&&I.redirect){const{redirect:T}=I;let B=typeof T=="function"?T(y):T;return typeof B=="string"&&(B=B.includes("?")||B.includes("#")?B=F(B):{path:B},B.params={}),ie({query:y.query,hash:y.hash,params:"path"in B?{}:y.params},B)}}function V(y,I){const T=u=R(y),B=a.value,oe=y.state,fe=y.force,d=y.replace===!0,p=$(T);if(p)return V(ie(F(p),{state:typeof p=="object"?ie({},oe,p.state):oe,force:fe,replace:d}),I||T);const m=T;m.redirectedFrom=I;let b;return!fe&&Tf(r,B,T)&&(b=Gt(16,{to:m,from:B}),ze(B,B,!0,!1)),(b?Promise.resolve(b):K(m,B)).catch(v=>Je(v)?Je(v,2)?v:et(v):se(v,m,B)).then(v=>{if(v){if(Je(v,2))return V(ie({replace:d},F(v.to),{state:typeof v.to=="object"?ie({},oe,v.to.state):oe,force:fe}),I||m)}else v=L(m,B,!0,d,oe);return J(m,B,v),v})}function S(y,I){const T=q(y,I);return T?Promise.reject(T):Promise.resolve()}function M(y){const I=Lt.values().next().value;return I&&typeof I.runWithContext=="function"?I.runWithContext(y):y()}function K(y,I){let T;const[B,oe,fe]=kd(y,I);T=$r(B.reverse(),"beforeRouteLeave",y,I);for(const p of B)p.leaveGuards.forEach(m=>{T.push(ut(m,y,I))});const d=S.bind(null,y,I);return T.push(d),_e(T).then(()=>{T=[];for(const p of o.list())T.push(ut(p,y,I));return T.push(d),_e(T)}).then(()=>{T=$r(oe,"beforeRouteUpdate",y,I);for(const p of oe)p.updateGuards.forEach(m=>{T.push(ut(m,y,I))});return T.push(d),_e(T)}).then(()=>{T=[];for(const p of fe)if(p.beforeEnter)if(He(p.beforeEnter))for(const m of p.beforeEnter)T.push(ut(m,y,I));else T.push(ut(p.beforeEnter,y,I));return T.push(d),_e(T)}).then(()=>(y.matched.forEach(p=>p.enterCallbacks={}),T=$r(fe,"beforeRouteEnter",y,I),T.push(d),_e(T))).then(()=>{T=[];for(const p of i.list())T.push(ut(p,y,I));return T.push(d),_e(T)}).catch(p=>Je(p,8)?p:Promise.reject(p))}function J(y,I,T){l.list().forEach(B=>M(()=>B(y,I,T)))}function L(y,I,T,B,oe){const fe=q(y,I);if(fe)return fe;const d=I===rt,p=qt?history.state:{};T&&(B||d?s.replace(y.fullPath,ie({scroll:d&&p&&p.scroll},oe)):s.push(y.fullPath,oe)),a.value=y,ze(y,I,T,d),et()}let Z;function N(){Z||(Z=s.listen((y,I,T)=>{if(!Cn.listening)return;const B=R(y),oe=$(B);if(oe){V(ie(oe,{replace:!0}),B).catch(cn);return}u=B;const fe=a.value;qt&&Nf(Io(fe.fullPath,T.delta),gr()),K(B,fe).catch(d=>Je(d,12)?d:Je(d,2)?(V(d.to,B).then(p=>{Je(p,20)&&!T.delta&&T.type===bn.pop&&s.go(-1,!1)}).catch(cn),Promise.reject()):(T.delta&&s.go(-T.delta,!1),se(d,B,fe))).then(d=>{d=d||L(B,fe,!1),d&&(T.delta&&!Je(d,8)?s.go(-T.delta,!1):T.type===bn.pop&&Je(d,20)&&s.go(-1,!1)),J(B,fe,d)}).catch(cn)}))}let ee=Zt(),X=Zt(),le;function se(y,I,T){et(y);const B=X.list();return B.length?B.forEach(oe=>oe(y,I,T)):console.error(y),Promise.reject(y)}function Qe(){return le&&a.value!==rt?Promise.resolve():new Promise((y,I)=>{ee.add([y,I])})}function et(y){return le||(le=!y,N(),ee.list().forEach(([I,T])=>y?T(y):I()),ee.reset()),y}function ze(y,I,T,B){const{scrollBehavior:oe}=e;if(!qt||!oe)return Promise.resolve();const fe=!T&&Ff(Io(y.fullPath,0))||(B||!T)&&history.state&&history.state.scroll||null;return _s().then(()=>oe(y,I,fe)).then(d=>d&&jf(d)).catch(d=>se(d,y,I))}const Ee=y=>s.go(y);let Ot;const Lt=new Set,Cn={currentRoute:a,listening:!0,addRoute:g,removeRoute:_,hasRoute:x,getRoutes:E,resolve:R,options:e,push:H,replace:O,go:Ee,back:()=>Ee(-1),forward:()=>Ee(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:X.add,isReady:Qe,install(y){const I=this;y.component("RouterLink",xd),y.component("RouterView",Pd),y.config.globalProperties.$router=I,Object.defineProperty(y.config.globalProperties,"$route",{enumerable:!0,get:()=>St(a)}),qt&&!Ot&&a.value===rt&&(Ot=!0,H(s.location).catch(oe=>{}));const T={};for(const oe in rt)Object.defineProperty(T,oe,{get:()=>a.value[oe],enumerable:!0});y.provide(mr,I),y.provide(ks,Ri(T)),y.provide(ns,a);const B=y.unmount;Lt.add(y),y.unmount=function(){Lt.delete(y),Lt.size<1&&(u=rt,Z&&Z(),Z=null,a.value=rt,Ot=!1,le=!1),B()}}};function _e(y){return y.reduce((I,T)=>I.then(()=>M(T)),Promise.resolve())}return Cn}function kd(e,t){const n=[],r=[],s=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iWt(u,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(u=>Wt(u,a))||s.push(a))}return[n,r,s]}function Dh(){return Ie(mr)}function Hh(){return Ie(ks)}const Td=[{path:"/",component:()=>ke(()=>import("./MainLayout.fac65cab.js"),["assets/MainLayout.fac65cab.js","assets/QHeader.5be086d0.js","assets/QResizeObserver.f9785bfd.js","assets/QLayout.f1a18fb7.js","assets/scroll.f78dc32b.js","assets/use-quasar.624d3c43.js","assets/lg_saxion_wit.4b1b1f5e.js"]),children:[{path:"",name:"index",component:()=>ke(()=>import("./AIPlatformWijzerPage.cbf73174.js"),["assets/AIPlatformWijzerPage.cbf73174.js","assets/wandb_logo.43daca0d.js","assets/use-form.ff3f77cb.js","assets/QCardActions.06a548c9.js","assets/QPage.9c21063d.js","assets/answerStore.1c70fbbb.js","assets/ToolQuestionItem.7d4396e6.js","assets/QKnob.af0fb19d.js","assets/scroll.f78dc32b.js"])},{name:"aiplatformwijzer",path:"aiplatformwijzer",component:()=>ke(()=>import("./AIPlatformWijzerPage.cbf73174.js"),["assets/AIPlatformWijzerPage.cbf73174.js","assets/wandb_logo.43daca0d.js","assets/use-form.ff3f77cb.js","assets/QCardActions.06a548c9.js","assets/QPage.9c21063d.js","assets/answerStore.1c70fbbb.js","assets/ToolQuestionItem.7d4396e6.js","assets/QKnob.af0fb19d.js","assets/scroll.f78dc32b.js"])},{name:"datawijzer",path:"datawijzer",component:()=>ke(()=>import("./QuizPage.c1afb78b.js"),["assets/QuizPage.c1afb78b.js","assets/QHeader.5be086d0.js","assets/QResizeObserver.f9785bfd.js","assets/QuestionToolIcon.081efecf.js","assets/use-form.ff3f77cb.js","assets/wandb_logo.43daca0d.js","assets/answerStore.1c70fbbb.js","assets/use-quasar.624d3c43.js","assets/QPage.9c21063d.js","assets/ToolQuestionItem.7d4396e6.js","assets/QKnob.af0fb19d.js","assets/scroll.f78dc32b.js","assets/index.esm.f0b860bb.js","assets/lg_saxion_wit.4b1b1f5e.js"])},{name:"standaardenwijzer",path:"standaardenwijzer",component:()=>ke(()=>import("./QuizPage.c1afb78b.js"),["assets/QuizPage.c1afb78b.js","assets/QHeader.5be086d0.js","assets/QResizeObserver.f9785bfd.js","assets/QuestionToolIcon.081efecf.js","assets/use-form.ff3f77cb.js","assets/wandb_logo.43daca0d.js","assets/answerStore.1c70fbbb.js","assets/use-quasar.624d3c43.js","assets/QPage.9c21063d.js","assets/ToolQuestionItem.7d4396e6.js","assets/QKnob.af0fb19d.js","assets/scroll.f78dc32b.js","assets/index.esm.f0b860bb.js","assets/lg_saxion_wit.4b1b1f5e.js"])},{name:"result",path:"result",component:()=>ke(()=>import("./ResultPage.27bf3ffd.js"),["assets/ResultPage.27bf3ffd.js","assets/QCardActions.06a548c9.js","assets/use-form.ff3f77cb.js","assets/scroll.f78dc32b.js","assets/use-key-composition.deb261a7.js","assets/wandb_logo.549270dc.js","assets/QKnob.af0fb19d.js","assets/QuestionToolIcon.081efecf.js","assets/wandb_logo.43daca0d.js","assets/answerStore.1c70fbbb.js","assets/use-quasar.624d3c43.js","assets/QPage.9c21063d.js"])},{name:"toolsmaker",path:"toolsmaker",component:()=>ke(()=>import("./ToolsMakerPage.f7488164.js"),["assets/ToolsMakerPage.f7488164.js","assets/lg_saxion_wit.4b1b1f5e.js","assets/tools.2a9c17e9.js","assets/wandb_logo.549270dc.js","assets/use-form.ff3f77cb.js","assets/wandb_logo.43daca0d.js","assets/QInput.c63abfb0.js","assets/use-key-composition.deb261a7.js","assets/QPage.9c21063d.js","assets/answerStore.1c70fbbb.js","assets/index.esm.f0b860bb.js"])},{name:"questionmaker",path:"questionmaker",component:()=>ke(()=>import("./QuestionMakerPage.55b5194a.js"),["assets/QuestionMakerPage.55b5194a.js","assets/QInput.c63abfb0.js","assets/use-key-composition.deb261a7.js","assets/use-form.ff3f77cb.js","assets/QPage.9c21063d.js","assets/answerStore.1c70fbbb.js","assets/index.esm.f0b860bb.js"])},{path:"/:catchAll(.*)*",component:()=>ke(()=>import("./ErrorNotFound.b871cd10.js"),[])}]},{path:"/quiz",component:()=>ke(()=>import("./QuizLayout.bab6dc0d.js"),["assets/QuizLayout.bab6dc0d.js","assets/QLayout.f1a18fb7.js","assets/scroll.f78dc32b.js","assets/QResizeObserver.f9785bfd.js"]),children:[{name:"quiz",path:"",component:()=>ke(()=>import("./QuizPage.c1afb78b.js"),["assets/QuizPage.c1afb78b.js","assets/QHeader.5be086d0.js","assets/QResizeObserver.f9785bfd.js","assets/QuestionToolIcon.081efecf.js","assets/use-form.ff3f77cb.js","assets/wandb_logo.43daca0d.js","assets/answerStore.1c70fbbb.js","assets/use-quasar.624d3c43.js","assets/QPage.9c21063d.js","assets/ToolQuestionItem.7d4396e6.js","assets/QKnob.af0fb19d.js","assets/scroll.f78dc32b.js","assets/index.esm.f0b860bb.js","assets/lg_saxion_wit.4b1b1f5e.js"])},{name:"intro",path:"intro",component:()=>ke(()=>import("./IntroPage.67584488.js"),["assets/IntroPage.67584488.js","assets/QPage.9c21063d.js"])}]}];var Mr=function(){return Rd({scrollBehavior:()=>({left:0,top:0}),routes:Td,history:zf("/")})};async function Ad(e,t){const n=e(uf);n.use(of,t);const r=typeof Ar=="function"?await Ar({}):Ar;n.use(r);const s=mt(typeof Mr=="function"?await Mr({store:r}):Mr);return r.use(({store:o})=>{o.router=s}),{app:n,store:r,router:s}}const rs={xs:18,sm:24,md:32,lg:38,xl:46},Ts={size:String};function As(e,t=rs){return G(()=>e.size!==void 0?{fontSize:e.size in t?`${t[e.size]}px`:e.size}:null)}const En=e=>mt(sr(e)),Od=e=>mt(e);function Ld(e,t){return e!==void 0&&e()||t}function zh(e,t){if(e!==void 0){const n=e();if(n!=null)return n.slice()}return t}function nn(e,t){return e!==void 0?t.concat(e()):t}function $d(e,t){return e===void 0?t:t!==void 0?t.concat(e()):e()}function Vh(e,t,n,r,s,o){t.key=r+s;const i=W(e,t,n);return s===!0?zi(i,o()):i}const Qo="0 0 24 24",Jo=e=>e,Ir=e=>`ionicons ${e}`,Dl={"mdi-":e=>`mdi ${e}`,"icon-":Jo,"bt-":e=>`bt ${e}`,"eva-":e=>`eva ${e}`,"ion-md":Ir,"ion-ios":Ir,"ion-logo":Ir,"iconfont ":Jo,"ti-":e=>`themify-icon ${e}`,"bi-":e=>`bootstrap-icons ${e}`},Hl={o_:"-outlined",r_:"-round",s_:"-sharp"},zl={sym_o_:"-outlined",sym_r_:"-rounded",sym_s_:"-sharp"},Md=new RegExp("^("+Object.keys(Dl).join("|")+")"),Id=new RegExp("^("+Object.keys(Hl).join("|")+")"),Yo=new RegExp("^("+Object.keys(zl).join("|")+")"),jd=/^[Mm]\s?[-+]?\.?\d/,Nd=/^img:/,Fd=/^svguse:/,qd=/^ion-/,Bd=/^(fa-(sharp|solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /;var Jn=En({name:"QIcon",props:{...Ts,tag:{type:String,default:"i"},name:String,color:String,left:Boolean,right:Boolean},setup(e,{slots:t}){const{proxy:{$q:n}}=wn(),r=As(e),s=G(()=>"q-icon"+(e.left===!0?" on-left":"")+(e.right===!0?" on-right":"")+(e.color!==void 0?` text-${e.color}`:"")),o=G(()=>{let i,l=e.name;if(l==="none"||!l)return{none:!0};if(n.iconMapFn!==null){const c=n.iconMapFn(l);if(c!==void 0)if(c.icon!==void 0){if(l=c.icon,l==="none"||!l)return{none:!0}}else return{cls:c.cls,content:c.content!==void 0?c.content:" "}}if(jd.test(l)===!0){const[c,h=Qo]=l.split("|");return{svg:!0,viewBox:h,nodes:c.split("&&").map(f=>{const[g,_,E]=f.split("@@");return W("path",{style:_,d:g,transform:E})})}}if(Nd.test(l)===!0)return{img:!0,src:l.substring(4)};if(Fd.test(l)===!0){const[c,h=Qo]=l.split("|");return{svguse:!0,src:c.substring(7),viewBox:h}}let a=" ";const u=l.match(Md);if(u!==null)i=Dl[u[1]](l);else if(Bd.test(l)===!0)i=l;else if(qd.test(l)===!0)i=`ionicons ion-${n.platform.is.ios===!0?"ios":"md"}${l.substring(3)}`;else if(Yo.test(l)===!0){i="notranslate material-symbols";const c=l.match(Yo);c!==null&&(l=l.substring(6),i+=zl[c[1]]),a=l}else{i="notranslate material-icons";const c=l.match(Id);c!==null&&(l=l.substring(2),i+=Hl[c[1]]),a=l}return{cls:i,content:a}});return()=>{const i={class:s.value,style:r.value,"aria-hidden":"true",role:"presentation"};return o.value.none===!0?W(e.tag,i,Ld(t.default)):o.value.img===!0?W(e.tag,i,nn(t.default,[W("img",{src:o.value.src})])):o.value.svg===!0?W(e.tag,i,nn(t.default,[W("svg",{viewBox:o.value.viewBox||"0 0 24 24"},o.value.nodes)])):o.value.svguse===!0?W(e.tag,i,nn(t.default,[W("svg",{viewBox:o.value.viewBox},[W("use",{"xlink:href":o.value.src})])])):(o.value.cls!==void 0&&(i.class+=" "+o.value.cls),W(e.tag,i,nn(t.default,[o.value.content])))}}}),Dd=En({name:"QAvatar",props:{...Ts,fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},setup(e,{slots:t}){const n=As(e),r=G(()=>"q-avatar"+(e.color?` bg-${e.color}`:"")+(e.textColor?` text-${e.textColor} q-chip--colored`:"")+(e.square===!0?" q-avatar--square":e.rounded===!0?" rounded-borders":"")),s=G(()=>e.fontSize?{fontSize:e.fontSize}:null);return()=>{const o=e.icon!==void 0?[W(Jn,{name:e.icon})]:void 0;return W("div",{class:r.value,style:n.value},[W("div",{class:"q-avatar__content row flex-center overflow-hidden",style:s.value},$d(t.default,o))])}}});const Hd={size:{type:[Number,String],default:"1em"},color:String};function zd(e){return{cSize:G(()=>e.size in rs?`${rs[e.size]}px`:e.size),classes:G(()=>"q-spinner"+(e.color?` text-${e.color}`:""))}}var Vl=En({name:"QSpinner",props:{...Hd,thickness:{type:Number,default:5}},setup(e){const{cSize:t,classes:n}=zd(e);return()=>W("svg",{class:n.value+" q-spinner-mat",width:t.value,height:t.value,viewBox:"25 25 50 50"},[W("circle",{class:"path",cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":e.thickness,"stroke-miterlimit":"10"})])}});function Vd(e,t){const n=e.style;for(const r in t)n[r]=t[r]}function Kh(e){if(e==null)return;if(typeof e=="string")try{return document.querySelector(e)||void 0}catch{return}const t=St(e);if(t)return t.$el||t}function Uh(e,t){if(e==null||e.contains(t)===!0)return!0;for(let n=e.nextElementSibling;n!==null;n=n.nextElementSibling)if(n.contains(t))return!0;return!1}function Kd(e,t=250){let n=!1,r;return function(){return n===!1&&(n=!0,setTimeout(()=>{n=!1},t),r=e.apply(this,arguments)),r}}function Xo(e,t,n,r){n.modifiers.stop===!0&&xl(e);const s=n.modifiers.color;let o=n.modifiers.center;o=o===!0||r===!0;const i=document.createElement("span"),l=document.createElement("span"),a=Nu(e),{left:u,top:c,width:h,height:f}=t.getBoundingClientRect(),g=Math.sqrt(h*h+f*f),_=g/2,E=`${(h-g)/2}px`,x=o?E:`${a.left-u-_}px`,R=`${(f-g)/2}px`,F=o?R:`${a.top-c-_}px`;l.className="q-ripple__inner",Vd(l,{height:`${g}px`,width:`${g}px`,transform:`translate3d(${x},${F},0) scale3d(.2,.2,1)`,opacity:0}),i.className=`q-ripple${s?" text-"+s:""}`,i.setAttribute("dir","ltr"),i.appendChild(l),t.appendChild(i);const q=()=>{i.remove(),clearTimeout(H)};n.abort.push(q);let H=setTimeout(()=>{l.classList.add("q-ripple__inner--enter"),l.style.transform=`translate3d(${E},${R},0) scale3d(1,1,1)`,l.style.opacity=.2,H=setTimeout(()=>{l.classList.remove("q-ripple__inner--enter"),l.classList.add("q-ripple__inner--leave"),l.style.opacity=0,H=setTimeout(()=>{i.remove(),n.abort.splice(n.abort.indexOf(q),1)},275)},250)},50)}function Zo(e,{modifiers:t,value:n,arg:r}){const s=Object.assign({},e.cfg.ripple,t,n);e.modifiers={early:s.early===!0,stop:s.stop===!0,center:s.center===!0,color:s.color||r,keyCodes:[].concat(s.keyCodes||13)}}var Ud=Od({name:"ripple",beforeMount(e,t){const n=t.instance.$.appContext.config.globalProperties.$q.config||{};if(n.ripple===!1)return;const r={cfg:n,enabled:t.value!==!1,modifiers:{},abort:[],start(s){r.enabled===!0&&s.qSkipRipple!==!0&&s.type===(r.modifiers.early===!0?"pointerdown":"click")&&Xo(s,e,r,s.qKeyEvent===!0)},keystart:Kd(s=>{r.enabled===!0&&s.qSkipRipple!==!0&&Yr(s,r.modifiers.keyCodes)===!0&&s.type===`key${r.modifiers.early===!0?"down":"up"}`&&Xo(s,e,r,!0)},300)};Zo(r,t),e.__qripple=r,Fu(r,"main",[[e,"pointerdown","start","passive"],[e,"click","start","passive"],[e,"keydown","keystart","passive"],[e,"keyup","keystart","passive"]])},updated(e,t){if(t.oldValue!==t.value){const n=e.__qripple;n!==void 0&&(n.enabled=t.value!==!1,n.enabled===!0&&Object(t.value)===t.value&&Zo(n,t))}},beforeUnmount(e){const t=e.__qripple;t!==void 0&&(t.abort.forEach(n=>{n()}),qu(t,"main"),delete e._qripple)}});const Kl={left:"start",center:"center",right:"end",between:"between",around:"around",evenly:"evenly",stretch:"stretch"},Wd=Object.keys(Kl),Gd={align:{type:String,validator:e=>Wd.includes(e)}};function Qd(e){return G(()=>{const t=e.align===void 0?e.vertical===!0?"stretch":"left":e.align;return`${e.vertical===!0?"items":"justify"}-${Kl[t]}`})}function Wh(e){if(Object(e.$parent)===e.$parent)return e.$parent;let{parent:t}=e.$;for(;Object(t)===t;){if(Object(t.proxy)===t.proxy)return t.proxy;t=t.parent}}function Jd(e){return e.appContext.config.globalProperties.$router!==void 0}function Gh(e){return e.isUnmounted===!0||e.isDeactivated===!0}function ei(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}function ti(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Yd(e,t){for(const n in t){const r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(Array.isArray(s)===!1||s.length!==r.length||r.some((o,i)=>o!==s[i]))return!1}return!0}function ni(e,t){return Array.isArray(t)===!0?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Xd(e,t){return Array.isArray(e)===!0?ni(e,t):Array.isArray(t)===!0?ni(t,e):e===t}function Zd(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(Xd(e[n],t[n])===!1)return!1;return!0}const eh={to:[String,Object],replace:Boolean,exact:Boolean,activeClass:{type:String,default:"q-router-link--active"},exactActiveClass:{type:String,default:"q-router-link--exact-active"},href:String,target:String,disable:Boolean};function th({fallbackTag:e,useDisableForRouterLinkProps:t=!0}={}){const n=wn(),{props:r,proxy:s,emit:o}=n,i=Jd(n),l=G(()=>r.disable!==!0&&r.href!==void 0),a=G(t===!0?()=>i===!0&&r.disable!==!0&&l.value!==!0&&r.to!==void 0&&r.to!==null&&r.to!=="":()=>i===!0&&l.value!==!0&&r.to!==void 0&&r.to!==null&&r.to!==""),u=G(()=>a.value===!0?F(r.to):null),c=G(()=>u.value!==null),h=G(()=>l.value===!0||c.value===!0),f=G(()=>r.type==="a"||h.value===!0?"a":r.tag||e||"div"),g=G(()=>l.value===!0?{href:r.href,target:r.target}:c.value===!0?{href:u.value.href,target:r.target}:{}),_=G(()=>{if(c.value===!1)return-1;const{matched:O}=u.value,{length:$}=O,V=O[$-1];if(V===void 0)return-1;const S=s.$route.matched;if(S.length===0)return-1;const M=S.findIndex(ti.bind(null,V));if(M>-1)return M;const K=ei(O[$-2]);return $>1&&ei(V)===K&&S[S.length-1].path!==K?S.findIndex(ti.bind(null,O[$-2])):M}),E=G(()=>c.value===!0&&_.value!==-1&&Yd(s.$route.params,u.value.params)),x=G(()=>E.value===!0&&_.value===s.$route.matched.length-1&&Zd(s.$route.params,u.value.params)),R=G(()=>c.value===!0?x.value===!0?` ${r.exactActiveClass} ${r.activeClass}`:r.exact===!0?"":E.value===!0?` ${r.activeClass}`:"":"");function F(O){try{return s.$router.resolve(O)}catch{}return null}function q(O,{returnRouterError:$,to:V=r.to,replace:S=r.replace}={}){if(r.disable===!0)return O.preventDefault(),Promise.resolve(!1);if(O.metaKey||O.altKey||O.ctrlKey||O.shiftKey||O.button!==void 0&&O.button!==0||r.target==="_blank")return Promise.resolve(!1);O.preventDefault();const M=s.$router[S===!0?"replace":"push"](V);return $===!0?M:M.then(()=>{}).catch(()=>{})}function H(O){if(c.value===!0){const $=V=>q(O,V);o("click",O,$),O.defaultPrevented!==!0&&$()}else o("click",O)}return{hasRouterLink:c,hasHrefLink:l,hasLink:h,linkTag:f,resolvedLink:u,linkIsActive:E,linkIsExactActive:x,linkClass:R,linkAttrs:g,getLink:F,navigateToRouterLink:q,navigateOnClick:H}}const ri={none:0,xs:4,sm:8,md:16,lg:24,xl:32},nh={xs:8,sm:10,md:14,lg:20,xl:24},rh=["button","submit","reset"],sh=/[^\s]\/[^\s]/,oh=["flat","outline","push","unelevated"],ih=(e,t)=>e.flat===!0?"flat":e.outline===!0?"outline":e.push===!0?"push":e.unelevated===!0?"unelevated":t,lh={...Ts,...eh,type:{type:String,default:"button"},label:[Number,String],icon:String,iconRight:String,...oh.reduce((e,t)=>(e[t]=Boolean)&&e,{}),square:Boolean,round:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],ripple:{type:[Boolean,Object],default:!0},align:{...Gd.align,default:"center"},stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean};function ah(e){const t=As(e,nh),n=Qd(e),{hasRouterLink:r,hasLink:s,linkTag:o,linkAttrs:i,navigateOnClick:l}=th({fallbackTag:"button"}),a=G(()=>{const x=e.fab===!1&&e.fabMini===!1?t.value:{};return e.padding!==void 0?Object.assign({},x,{padding:e.padding.split(/\s+/).map(R=>R in ri?ri[R]+"px":R).join(" "),minWidth:"0",minHeight:"0"}):x}),u=G(()=>e.rounded===!0||e.fab===!0||e.fabMini===!0),c=G(()=>e.disable!==!0&&e.loading!==!0),h=G(()=>c.value===!0?e.tabindex||0:-1),f=G(()=>ih(e,"standard")),g=G(()=>{const x={tabindex:h.value};return s.value===!0?Object.assign(x,i.value):rh.includes(e.type)===!0&&(x.type=e.type),o.value==="a"?(e.disable===!0?x["aria-disabled"]="true":x.href===void 0&&(x.role="button"),r.value!==!0&&sh.test(e.type)===!0&&(x.type=e.type)):e.disable===!0&&(x.disabled="",x["aria-disabled"]="true"),e.loading===!0&&e.percentage!==void 0&&Object.assign(x,{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":e.percentage}),x}),_=G(()=>{let x;e.color!==void 0?e.flat===!0||e.outline===!0?x=`text-${e.textColor||e.color}`:x=`bg-${e.color} text-${e.textColor||"white"}`:e.textColor&&(x=`text-${e.textColor}`);const R=e.round===!0?"round":`rectangle${u.value===!0?" q-btn--rounded":e.square===!0?" q-btn--square":""}`;return`q-btn--${f.value} q-btn--${R}`+(x!==void 0?" "+x:"")+(c.value===!0?" q-btn--actionable q-focusable q-hoverable":e.disable===!0?" disabled":"")+(e.fab===!0?" q-btn--fab":e.fabMini===!0?" q-btn--fab-mini":"")+(e.noCaps===!0?" q-btn--no-uppercase":"")+(e.dense===!0?" q-btn--dense":"")+(e.stretch===!0?" no-border-radius self-stretch":"")+(e.glossy===!0?" glossy":"")+(e.square?" q-btn--square":"")}),E=G(()=>n.value+(e.stack===!0?" column":" row")+(e.noWrap===!0?" no-wrap text-no-wrap":"")+(e.loading===!0?" q-btn__content--hidden":""));return{classes:_,style:a,innerClasses:E,attributes:g,hasLink:s,linkTag:o,navigateOnClick:l,isActionable:c}}const{passiveCapture:Le}=Rt;let jt=null,Nt=null,Ft=null;var ch=En({name:"QBtn",props:{...lh,percentage:Number,darkPercentage:Boolean,onTouchstart:[Function,Array]},emits:["click","keydown","mousedown","keyup"],setup(e,{slots:t,emit:n}){const{proxy:r}=wn(),{classes:s,style:o,innerClasses:i,attributes:l,hasLink:a,linkTag:u,navigateOnClick:c,isActionable:h}=ah(e),f=Pt(null),g=Pt(null);let _=null,E,x=null;const R=G(()=>e.label!==void 0&&e.label!==null&&e.label!==""),F=G(()=>e.disable===!0||e.ripple===!1?!1:{keyCodes:a.value===!0?[13,32]:[13],...e.ripple===!0?{}:e.ripple}),q=G(()=>({center:e.round})),H=G(()=>{const N=Math.max(0,Math.min(100,e.percentage));return N>0?{transition:"transform 0.6s",transform:`translateX(${N-100}%)`}:{}}),O=G(()=>{if(e.loading===!0)return{onMousedown:Z,onTouchstart:Z,onClick:Z,onKeydown:Z,onKeyup:Z};if(h.value===!0){const N={onClick:V,onKeydown:S,onMousedown:K};if(r.$q.platform.has.touch===!0){const ee=e.onTouchstart!==void 0?"":"Passive";N[`onTouchstart${ee}`]=M}return N}return{onClick:Mt}}),$=G(()=>({ref:f,class:"q-btn q-btn-item non-selectable no-outline "+s.value,style:o.value,...l.value,...O.value}));function V(N){if(f.value!==null){if(N!==void 0){if(N.defaultPrevented===!0)return;const ee=document.activeElement;if(e.type==="submit"&&ee!==document.body&&f.value.contains(ee)===!1&&ee.contains(f.value)===!1){f.value.focus();const X=()=>{document.removeEventListener("keydown",Mt,!0),document.removeEventListener("keyup",X,Le),f.value!==null&&f.value.removeEventListener("blur",X,Le)};document.addEventListener("keydown",Mt,!0),document.addEventListener("keyup",X,Le),f.value.addEventListener("blur",X,Le)}}c(N)}}function S(N){f.value!==null&&(n("keydown",N),Yr(N,[13,32])===!0&&Nt!==f.value&&(Nt!==null&&L(),N.defaultPrevented!==!0&&(f.value.focus(),Nt=f.value,f.value.classList.add("q-btn--active"),document.addEventListener("keyup",J,!0),f.value.addEventListener("blur",J,Le)),Mt(N)))}function M(N){f.value!==null&&(n("touchstart",N),N.defaultPrevented!==!0&&(jt!==f.value&&(jt!==null&&L(),jt=f.value,_=N.target,_.addEventListener("touchcancel",J,Le),_.addEventListener("touchend",J,Le)),E=!0,x!==null&&clearTimeout(x),x=setTimeout(()=>{x=null,E=!1},200)))}function K(N){f.value!==null&&(N.qSkipRipple=E===!0,n("mousedown",N),N.defaultPrevented!==!0&&Ft!==f.value&&(Ft!==null&&L(),Ft=f.value,f.value.classList.add("q-btn--active"),document.addEventListener("mouseup",J,Le)))}function J(N){if(f.value!==null&&!(N!==void 0&&N.type==="blur"&&document.activeElement===f.value)){if(N!==void 0&&N.type==="keyup"){if(Nt===f.value&&Yr(N,[13,32])===!0){const ee=new MouseEvent("click",N);ee.qKeyEvent=!0,N.defaultPrevented===!0&&Jr(ee),N.cancelBubble===!0&&xl(ee),f.value.dispatchEvent(ee),Mt(N),N.qKeyEvent=!0}n("keyup",N)}L()}}function L(N){const ee=g.value;N!==!0&&(jt===f.value||Ft===f.value)&&ee!==null&&ee!==document.activeElement&&(ee.setAttribute("tabindex",-1),ee.focus()),jt===f.value&&(_!==null&&(_.removeEventListener("touchcancel",J,Le),_.removeEventListener("touchend",J,Le)),jt=_=null),Ft===f.value&&(document.removeEventListener("mouseup",J,Le),Ft=null),Nt===f.value&&(document.removeEventListener("keyup",J,!0),f.value!==null&&f.value.removeEventListener("blur",J,Le),Nt=null),f.value!==null&&f.value.classList.remove("q-btn--active")}function Z(N){Mt(N),N.qSkipRipple=!0}return ws(()=>{L(!0)}),Object.assign(r,{click:V}),()=>{let N=[];e.icon!==void 0&&N.push(W(Jn,{name:e.icon,left:e.stack!==!0&&R.value===!0,role:"img","aria-hidden":"true"})),R.value===!0&&N.push(W("span",{class:"block"},[e.label])),N=nn(t.default,N),e.iconRight!==void 0&&e.round===!1&&N.push(W(Jn,{name:e.iconRight,right:e.stack!==!0&&R.value===!0,role:"img","aria-hidden":"true"}));const ee=[W("span",{class:"q-focus-helper",ref:g})];return e.loading===!0&&e.percentage!==void 0&&ee.push(W("span",{class:"q-btn__progress absolute-full overflow-hidden"+(e.darkPercentage===!0?" q-btn__progress--dark":"")},[W("span",{class:"q-btn__progress-indicator fit block",style:H.value})])),ee.push(W("span",{class:"q-btn__content text-center col items-center q-anchor--skip "+i.value},N)),e.loading!==null&&ee.push(W(Ps,{name:"q-transition--fade"},()=>e.loading===!0?[W("span",{key:"loading",class:"absolute-full flex flex-center"},t.loading!==void 0?t.loading():[W(Vl)])]:null)),zi(W(u.value,$.value,ee),[[Ud,F.value,void 0,q.value]])}}});let uh=1,fh=document.body;function dh(e,t){const n=document.createElement("div");if(n.id=t!==void 0?`q-portal--${t}--${uh++}`:e,Gn.globalNodes!==void 0){const r=Gn.globalNodes.class;r!==void 0&&(n.className=r)}return fh.appendChild(n),n}function Qh(e){e.remove()}let hh=0;const Fn={},qn={},Fe={},Ul={},ph=/^\s*$/,Wl=[],gh=[void 0,null,!0,!1,""],Os=["top-left","top-right","bottom-left","bottom-right","top","bottom","left","right","center"],mh=["top-left","top-right","bottom-left","bottom-right"],Bt={positive:{icon:e=>e.iconSet.type.positive,color:"positive"},negative:{icon:e=>e.iconSet.type.negative,color:"negative"},warning:{icon:e=>e.iconSet.type.warning,color:"warning",textColor:"dark"},info:{icon:e=>e.iconSet.type.info,color:"info"},ongoing:{group:!1,timeout:0,spinner:!0,color:"grey-8"}};function Gl(e,t,n){if(!e)return en("parameter required");let r;const s={textColor:"white"};if(e.ignoreDefaults!==!0&&Object.assign(s,Fn),yn(e)===!1&&(s.type&&Object.assign(s,Bt[s.type]),e={message:e}),Object.assign(s,Bt[e.type||s.type],e),typeof s.icon=="function"&&(s.icon=s.icon(t)),s.spinner?(s.spinner===!0&&(s.spinner=Vl),s.spinner=mt(s.spinner)):s.spinner=!1,s.meta={hasMedia:Boolean(s.spinner!==!1||s.icon||s.avatar),hasText:si(s.message)||si(s.caption)},s.position){if(Os.includes(s.position)===!1)return en("wrong position",e)}else s.position="bottom";if(gh.includes(s.timeout)===!0)s.timeout=5e3;else{const a=Number(s.timeout);if(isNaN(a)||a<0)return en("wrong timeout",e);s.timeout=Number.isFinite(a)?a:0}s.timeout===0?s.progress=!1:s.progress===!0&&(s.meta.progressClass="q-notification__progress"+(s.progressClass?` ${s.progressClass}`:""),s.meta.progressStyle={animationDuration:`${s.timeout+1e3}ms`});const o=(Array.isArray(e.actions)===!0?e.actions:[]).concat(e.ignoreDefaults!==!0&&Array.isArray(Fn.actions)===!0?Fn.actions:[]).concat(Bt[e.type]!==void 0&&Array.isArray(Bt[e.type].actions)===!0?Bt[e.type].actions:[]),{closeBtn:i}=s;if(i&&o.push({label:typeof i=="string"?i:t.lang.label.close}),s.actions=o.map(({handler:a,noDismiss:u,...c})=>({flat:!0,...c,onClick:typeof a=="function"?()=>{a(),u!==!0&&l()}:()=>{l()}})),s.multiLine===void 0&&(s.multiLine=s.actions.length>1),Object.assign(s.meta,{class:`q-notification row items-stretch q-notification--${s.multiLine===!0?"multi-line":"standard"}`+(s.color!==void 0?` bg-${s.color}`:"")+(s.textColor!==void 0?` text-${s.textColor}`:"")+(s.classes!==void 0?` ${s.classes}`:""),wrapperClass:"q-notification__wrapper col relative-position border-radius-inherit "+(s.multiLine===!0?"column no-wrap justify-center":"row items-center"),contentClass:"q-notification__content row items-center"+(s.multiLine===!0?"":" col"),leftClass:s.meta.hasText===!0?"additional":"single",attrs:{role:"alert",...s.attrs}}),s.group===!1?(s.group=void 0,s.meta.group=void 0):((s.group===void 0||s.group===!0)&&(s.group=[s.message,s.caption,s.multiline].concat(s.actions.map(a=>`${a.label}*${a.icon}`)).join("|")),s.meta.group=s.group+"|"+s.position),s.actions.length===0?s.actions=void 0:s.meta.actionsClass="q-notification__actions row items-center "+(s.multiLine===!0?"justify-end":"col-auto")+(s.meta.hasMedia===!0?" q-notification__actions--with-media":""),n!==void 0){n.notif.meta.timer&&(clearTimeout(n.notif.meta.timer),n.notif.meta.timer=void 0),s.meta.uid=n.notif.meta.uid;const a=Fe[s.position].value.indexOf(n.notif);Fe[s.position].value[a]=s}else{const a=qn[s.meta.group];if(a===void 0){if(s.meta.uid=hh++,s.meta.badge=1,["left","right","center"].indexOf(s.position)!==-1)Fe[s.position].value.splice(Math.floor(Fe[s.position].value.length/2),0,s);else{const u=s.position.indexOf("top")>-1?"unshift":"push";Fe[s.position].value[u](s)}s.group!==void 0&&(qn[s.meta.group]=s)}else{if(a.meta.timer&&(clearTimeout(a.meta.timer),a.meta.timer=void 0),s.badgePosition!==void 0){if(mh.includes(s.badgePosition)===!1)return en("wrong badgePosition",e)}else s.badgePosition=`top-${s.position.indexOf("left")>-1?"right":"left"}`;s.meta.uid=a.meta.uid,s.meta.badge=a.meta.badge+1,s.meta.badgeClass=`q-notification__badge q-notification__badge--${s.badgePosition}`+(s.badgeColor!==void 0?` bg-${s.badgeColor}`:"")+(s.badgeTextColor!==void 0?` text-${s.badgeTextColor}`:"")+(s.badgeClass?` ${s.badgeClass}`:"");const u=Fe[s.position].value.indexOf(a);Fe[s.position].value[u]=qn[s.meta.group]=s}}const l=()=>{vh(s),r=void 0};if(s.timeout>0&&(s.meta.timer=setTimeout(()=>{s.meta.timer=void 0,l()},s.timeout+1e3)),s.group!==void 0)return a=>{a!==void 0?en("trying to update a grouped one which is forbidden",e):l()};if(r={dismiss:l,config:e,notif:s},n!==void 0){Object.assign(n,r);return}return a=>{if(r!==void 0)if(a===void 0)r.dismiss();else{const u=Object.assign({},r.config,a,{group:!1,position:s.position});Gl(u,t,r)}}}function vh(e){e.meta.timer&&(clearTimeout(e.meta.timer),e.meta.timer=void 0);const t=Fe[e.position].value.indexOf(e);if(t!==-1){e.group!==void 0&&delete qn[e.meta.group];const n=Wl[""+e.meta.uid];if(n){const{width:r,height:s}=getComputedStyle(n);n.style.left=`${n.offsetLeft}px`,n.style.width=r,n.style.height=s}Fe[e.position].value.splice(t,1),typeof e.onDismiss=="function"&&e.onDismiss()}}function si(e){return e!=null&&ph.test(e)!==!0}function en(e,t){return console.error(`Notify: ${e}`,t),!1}function _h(){return En({name:"QNotifications",devtools:{hide:!0},setup(){return()=>W("div",{class:"q-notifications"},Os.map(e=>W(wu,{key:e,class:Ul[e],tag:"div",name:`q-notification--${e}`},()=>Fe[e].value.map(t=>{const n=t.meta,r=[];if(n.hasMedia===!0&&(t.spinner!==!1?r.push(W(t.spinner,{class:"q-notification__spinner q-notification__spinner--"+n.leftClass,color:t.spinnerColor,size:t.spinnerSize})):t.icon?r.push(W(Jn,{class:"q-notification__icon q-notification__icon--"+n.leftClass,name:t.icon,color:t.iconColor,size:t.iconSize,role:"img"})):t.avatar&&r.push(W(Dd,{class:"q-notification__avatar q-notification__avatar--"+n.leftClass},()=>W("img",{src:t.avatar,"aria-hidden":"true"})))),n.hasText===!0){let o;const i={class:"q-notification__message col"};if(t.html===!0)i.innerHTML=t.caption?`
${t.message}
${t.caption}
`:t.message;else{const l=[t.message];o=t.caption?[W("div",l),W("div",{class:"q-notification__caption"},[t.caption])]:l}r.push(W("div",i,o))}const s=[W("div",{class:n.contentClass},r)];return t.progress===!0&&s.push(W("div",{key:`${n.uid}|p|${n.badge}`,class:n.progressClass,style:n.progressStyle})),t.actions!==void 0&&s.push(W("div",{class:n.actionsClass},t.actions.map(o=>W(ch,o)))),n.badge>1&&s.push(W("div",{key:`${n.uid}|${n.badge}`,class:t.meta.badgeClass,style:t.badgeStyle},[n.badge])),W("div",{ref:o=>{Wl[""+n.uid]=o},key:n.uid,class:n.class,...n.attrs},[W("div",{class:n.wrapperClass},s)])}))))}})}var yh={setDefaults(e){yn(e)===!0&&Object.assign(Fn,e)},registerType(e,t){yn(t)===!0&&(Bt[e]=t)},install({$q:e,parentApp:t}){if(e.notify=this.create=n=>Gl(n,e),e.notify.setDefaults=this.setDefaults,e.notify.registerType=this.registerType,e.config.notify!==void 0&&this.setDefaults(e.config.notify),this.__installed!==!0){Os.forEach(r=>{Fe[r]=Pt([]);const s=["left","center","right"].includes(r)===!0?"center":r.indexOf("top")>-1?"top":"bottom",o=r.indexOf("left")>-1?"start":r.indexOf("right")>-1?"end":"center",i=["left","right"].includes(r)?`items-${r==="left"?"start":"end"} justify-center`:r==="center"?"flex-center":`items-${o}`;Ul[r]=`q-notifications__list q-notifications__list--${s} fixed column no-wrap ${i}`});const n=dh("q-notify");nf(_h(),t).mount(n)}}},bh={config:{},plugins:{Notify:yh}};const wh="/";async function xh({app:e,router:t,store:n},r){let s=!1;const o=a=>{try{return t.resolve(a).href}catch{}return Object(a)===a?null:a},i=a=>{if(s=!0,typeof a=="string"&&/^https?:\/\//.test(a)){window.location.href=a;return}const u=o(a);u!==null&&(window.location.href=u,window.location.reload())},l=window.location.href.replace(window.location.origin,"");for(let a=0;s===!1&&a{const[t,n]=Promise.allSettled!==void 0?["allSettled",r=>r.map(s=>{if(s.status==="rejected"){console.error("[Quasar] boot error:",s.reason);return}return s.value.default})]:["all",r=>r.map(s=>s.default)];return Promise[t]([ke(()=>import("./loadTools.29e90736.js"),["assets/loadTools.29e90736.js","assets/answerStore.1c70fbbb.js","assets/tools.2a9c17e9.js"])]).then(r=>{const s=n(r).filter(o=>typeof o=="function");xh(e,s)})});export{Jd as $,Gi as A,_n as B,Rt as C,Ut as D,At as E,Ji as F,nn as G,ef as H,_s as I,Kh as J,Vd as K,Eh as L,Ph as M,Ch as N,qe as O,Dd as P,ch as Q,Gd as R,Qd as S,Jn as T,cs as U,Qr as V,Yr as W,Jr as X,Fu as Y,qu as Z,lf as _,sr as a,Wh as a0,fr as a1,Sh as a2,dh as a3,Qh as a4,lc as a5,Gh as a6,$e as a7,Nu as a8,Ps as a9,Fh as aA,Nh as aB,yn as aC,Th as aD,zi as aE,as as aF,Ud as aG,Ih as aH,Vl as aI,Uh as aa,Mt as ab,Ts as ac,As as ad,$d as ae,Od as af,Ah as ag,Lh as ah,xl as ai,Vh as aj,kh as ak,yh as al,Hh as am,wu as an,Bu as ao,cc as ap,ic as aq,eh as ar,th as as,Ku as at,Oh as au,uc as av,Qi as aw,Tr as ax,Gu as ay,ne as az,qh as b,Ja as c,Bh as d,al as e,Se as f,ul as g,qc as h,Rh as i,En as j,G as k,W as l,Ld as m,Ie as n,il as o,jh as p,rn as q,Pt as r,ws as s,zh as t,Dh as u,$h as v,Ka as w,wn as x,jn as y,Mh as z}; + */const qt=typeof window!="undefined";function Sf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const ie=Object.assign;function Or(e,t){const n={};for(const r in t){const s=t[r];n[r]=He(s)?s.map(e):e(s)}return n}const cn=()=>{},He=Array.isArray,Pf=/\/$/,Rf=e=>e.replace(Pf,"");function Lr(e,t,n="/"){let r,s={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return l=0&&(a=-1),a>-1&&(r=t.slice(0,a),o=t.slice(a+1,l>-1?l:t.length),s=e(o)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=Of(r!=null?r:t,n),{fullPath:r+(o&&"?")+o+i,path:r,query:s,hash:i}}function kf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function $o(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Tf(e,t,n){const r=t.matched.length-1,s=n.matched.length-1;return r>-1&&r===s&&Wt(t.matched[r],n.matched[s])&&Ol(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Wt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Ol(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Af(e[n],t[n]))return!1;return!0}function Af(e,t){return He(e)?Mo(e,t):He(t)?Mo(t,e):e===t}function Mo(e,t){return He(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Of(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),s=r[r.length-1];(s===".."||s===".")&&r.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+r.slice(i-(i===r.length?1:0)).join("/")}var bn;(function(e){e.pop="pop",e.push="push"})(bn||(bn={}));var un;(function(e){e.back="back",e.forward="forward",e.unknown=""})(un||(un={}));function Lf(e){if(!e)if(qt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Rf(e)}const $f=/^[^#]+#/;function Mf(e,t){return e.replace($f,"#")+t}function If(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const gr=()=>({left:window.pageXOffset,top:window.pageYOffset});function jf(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=If(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Io(e,t){return(history.state?history.state.position-t:-1)+e}const es=new Map;function Nf(e,t){es.set(e,t)}function Ff(e){const t=es.get(e);return es.delete(e),t}let qf=()=>location.protocol+"//"+location.host;function Ll(e,t){const{pathname:n,search:r,hash:s}=t,o=e.indexOf("#");if(o>-1){let l=s.includes(e.slice(o))?e.slice(o).length:1,a=s.slice(l);return a[0]!=="/"&&(a="/"+a),$o(a,"")}return $o(n,e)+r+s}function Bf(e,t,n,r){let s=[],o=[],i=null;const l=({state:f})=>{const g=Ll(e,location),_=n.value,E=t.value;let x=0;if(f){if(n.value=g,t.value=f,i&&i===_){i=null;return}x=E?f.position-E.position:0}else r(g);s.forEach(R=>{R(n.value,_,{delta:x,type:bn.pop,direction:x?x>0?un.forward:un.back:un.unknown})})};function a(){i=n.value}function u(f){s.push(f);const g=()=>{const _=s.indexOf(f);_>-1&&s.splice(_,1)};return o.push(g),g}function c(){const{history:f}=window;!f.state||f.replaceState(ie({},f.state,{scroll:gr()}),"")}function h(){for(const f of o)f();o=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",c)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",c,{passive:!0}),{pauseListeners:a,listen:u,destroy:h}}function jo(e,t,n,r=!1,s=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:s?gr():null}}function Df(e){const{history:t,location:n}=window,r={value:Ll(e,n)},s={value:t.state};s.value||o(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,u,c){const h=e.indexOf("#"),f=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+a:qf()+e+a;try{t[c?"replaceState":"pushState"](u,"",f),s.value=u}catch(g){console.error(g),n[c?"replace":"assign"](f)}}function i(a,u){const c=ie({},t.state,jo(s.value.back,a,s.value.forward,!0),u,{position:s.value.position});o(a,c,!0),r.value=a}function l(a,u){const c=ie({},s.value,t.state,{forward:a,scroll:gr()});o(c.current,c,!0);const h=ie({},jo(r.value,a,null),{position:c.position+1},u);o(a,h,!1),r.value=a}return{location:r,state:s,push:l,replace:i}}function Hf(e){e=Lf(e);const t=Df(e),n=Bf(e,t.state,t.location,t.replace);function r(o,i=!0){i||n.pauseListeners(),history.go(o)}const s=ie({location:"",base:e,go:r,createHref:Mf.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function zf(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),Hf(e)}function Vf(e){return typeof e=="string"||e&&typeof e=="object"}function $l(e){return typeof e=="string"||typeof e=="symbol"}const rt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Ml=Symbol("");var No;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(No||(No={}));function Gt(e,t){return ie(new Error,{type:e,[Ml]:!0},t)}function Je(e,t){return e instanceof Error&&Ml in e&&(t==null||!!(e.type&t))}const Fo="[^/]+?",Kf={sensitive:!1,strict:!1,start:!0,end:!0},Uf=/[.+*?^${}()[\]/\\]/g;function Wf(e,t){const n=ie({},Kf,t),r=[];let s=n.start?"^":"";const o=[];for(const u of e){const c=u.length?[]:[90];n.strict&&!u.length&&(s+="/");for(let h=0;ht.length?t.length===1&&t[0]===40+40?1:-1:0}function Qf(e,t){let n=0;const r=e.score,s=t.score;for(;n0&&t[t.length-1]<0}const Jf={type:0,value:""},Yf=/[a-zA-Z0-9_]/;function Xf(e){if(!e)return[[]];if(e==="/")return[[Jf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${u}": ${g}`)}let n=0,r=n;const s=[];let o;function i(){o&&s.push(o),o=[]}let l=0,a,u="",c="";function h(){!u||(n===0?o.push({type:0,value:u}):n===1||n===2||n===3?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:u,regexp:c,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),u="")}function f(){u+=a}for(;l{i(F)}:cn}function i(c){if($l(c)){const h=r.get(c);h&&(r.delete(c),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(c);h>-1&&(n.splice(h,1),c.record.name&&r.delete(c.record.name),c.children.forEach(i),c.alias.forEach(i))}}function l(){return n}function a(c){let h=0;for(;h=0&&(c.record.path!==n[h].record.path||!Il(c,n[h]));)h++;n.splice(h,0,c),c.record.name&&!Do(c)&&r.set(c.record.name,c)}function u(c,h){let f,g={},_,E;if("name"in c&&c.name){if(f=r.get(c.name),!f)throw Gt(1,{location:c});E=f.record.name,g=ie(Bo(h.params,f.keys.filter(F=>!F.optional).map(F=>F.name)),c.params&&Bo(c.params,f.keys.map(F=>F.name))),_=f.stringify(g)}else if("path"in c)_=c.path,f=n.find(F=>F.re.test(_)),f&&(g=f.parse(_),E=f.record.name);else{if(f=h.name?r.get(h.name):n.find(F=>F.re.test(h.path)),!f)throw Gt(1,{location:c,currentLocation:h});E=f.record.name,g=ie({},h.params,c.params),_=f.stringify(g)}const x=[];let R=f;for(;R;)x.unshift(R.record),R=R.parent;return{name:E,path:_,params:g,matched:x,meta:rd(x)}}return e.forEach(c=>o(c)),{addRoute:o,resolve:u,removeRoute:i,getRoutes:l,getRecordMatcher:s}}function Bo(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function td(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:nd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function nd(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function Do(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function rd(e){return e.reduce((t,n)=>ie(t,n.meta),{})}function Ho(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function Il(e,t){return t.children.some(n=>n===e||Il(e,n))}const jl=/#/g,sd=/&/g,od=/\//g,id=/=/g,ld=/\?/g,Nl=/\+/g,ad=/%5B/g,cd=/%5D/g,Fl=/%5E/g,ud=/%60/g,ql=/%7B/g,fd=/%7C/g,Bl=/%7D/g,dd=/%20/g;function Rs(e){return encodeURI(""+e).replace(fd,"|").replace(ad,"[").replace(cd,"]")}function hd(e){return Rs(e).replace(ql,"{").replace(Bl,"}").replace(Fl,"^")}function ts(e){return Rs(e).replace(Nl,"%2B").replace(dd,"+").replace(jl,"%23").replace(sd,"%26").replace(ud,"`").replace(ql,"{").replace(Bl,"}").replace(Fl,"^")}function pd(e){return ts(e).replace(id,"%3D")}function gd(e){return Rs(e).replace(jl,"%23").replace(ld,"%3F")}function md(e){return e==null?"":gd(e).replace(od,"%2F")}function Qn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function vd(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;so&&ts(o)):[r&&ts(r)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function _d(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=He(r)?r.map(s=>s==null?null:""+s):r==null?r:""+r)}return t}const yd=Symbol(""),Vo=Symbol(""),mr=Symbol(""),ks=Symbol(""),ns=Symbol("");function Zt(){let e=[];function t(r){return e.push(r),()=>{const s=e.indexOf(r);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function ut(e,t,n,r,s){const o=r&&(r.enterCallbacks[s]=r.enterCallbacks[s]||[]);return()=>new Promise((i,l)=>{const a=h=>{h===!1?l(Gt(4,{from:n,to:t})):h instanceof Error?l(h):Vf(h)?l(Gt(2,{from:t,to:h})):(o&&r.enterCallbacks[s]===o&&typeof h=="function"&&o.push(h),i())},u=e.call(r&&r.instances[s],t,n,a);let c=Promise.resolve(u);e.length<3&&(c=c.then(a)),c.catch(h=>l(h))})}function $r(e,t,n,r){const s=[];for(const o of e)for(const i in o.components){let l=o.components[i];if(!(t!=="beforeRouteEnter"&&!o.instances[i]))if(bd(l)){const u=(l.__vccOpts||l)[t];u&&s.push(ut(u,n,r,o,i))}else{let a=l();s.push(()=>a.then(u=>{if(!u)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${o.path}"`));const c=Sf(u)?u.default:u;o.components[i]=c;const f=(c.__vccOpts||c)[t];return f&&ut(f,n,r,o,i)()}))}}return s}function bd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Ko(e){const t=Ie(mr),n=Ie(ks),r=G(()=>t.resolve(St(e.to))),s=G(()=>{const{matched:a}=r.value,{length:u}=a,c=a[u-1],h=n.matched;if(!c||!h.length)return-1;const f=h.findIndex(Wt.bind(null,c));if(f>-1)return f;const g=Uo(a[u-2]);return u>1&&Uo(c)===g&&h[h.length-1].path!==g?h.findIndex(Wt.bind(null,a[u-2])):f}),o=G(()=>s.value>-1&&Cd(n.params,r.value.params)),i=G(()=>s.value>-1&&s.value===n.matched.length-1&&Ol(n.params,r.value.params));function l(a={}){return Ed(a)?t[St(e.replace)?"replace":"push"](St(e.to)).catch(cn):Promise.resolve()}return{route:r,href:G(()=>r.value.href),isActive:o,isExactActive:i,navigate:l}}const wd=sr({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Ko,setup(e,{slots:t}){const n=At(Ko(e)),{options:r}=Ie(mr),s=G(()=>({[Wo(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Wo(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:W("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},o)}}}),xd=wd;function Ed(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Cd(e,t){for(const n in t){const r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(!He(s)||s.length!==r.length||r.some((o,i)=>o!==s[i]))return!1}return!0}function Uo(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Wo=(e,t,n)=>e!=null?e:t!=null?t:n,Sd=sr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Ie(ns),s=G(()=>e.route||r.value),o=Ie(Vo,0),i=G(()=>{let u=St(o);const{matched:c}=s.value;let h;for(;(h=c[u])&&!h.components;)u++;return u}),l=G(()=>s.value.matched[i.value]);jn(Vo,G(()=>i.value+1)),jn(yd,l),jn(ns,s);const a=Pt();return rn(()=>[a.value,l.value,e.name],([u,c,h],[f,g,_])=>{c&&(c.instances[h]=u,g&&g!==c&&u&&u===f&&(c.leaveGuards.size||(c.leaveGuards=g.leaveGuards),c.updateGuards.size||(c.updateGuards=g.updateGuards))),u&&c&&(!g||!Wt(c,g)||!f)&&(c.enterCallbacks[h]||[]).forEach(E=>E(u))},{flush:"post"}),()=>{const u=s.value,c=e.name,h=l.value,f=h&&h.components[c];if(!f)return Go(n.default,{Component:f,route:u});const g=h.props[c],_=g?g===!0?u.params:typeof g=="function"?g(u):g:null,x=W(f,ie({},_,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(h.instances[c]=null)},ref:a}));return Go(n.default,{Component:x,route:u})||x}}});function Go(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Pd=Sd;function Rd(e){const t=ed(e.routes,e),n=e.parseQuery||vd,r=e.stringifyQuery||zo,s=e.history,o=Zt(),i=Zt(),l=Zt(),a=$a(rt);let u=rt;qt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=Or.bind(null,y=>""+y),h=Or.bind(null,md),f=Or.bind(null,Qn);function g(y,I){let T,B;return $l(y)?(T=t.getRecordMatcher(y),B=I):B=y,t.addRoute(B,T)}function _(y){const I=t.getRecordMatcher(y);I&&t.removeRoute(I)}function E(){return t.getRoutes().map(y=>y.record)}function x(y){return!!t.getRecordMatcher(y)}function R(y,I){if(I=ie({},I||a.value),typeof y=="string"){const p=Lr(n,y,I.path),m=t.resolve({path:p.path},I),b=s.createHref(p.fullPath);return ie(p,m,{params:f(m.params),hash:Qn(p.hash),redirectedFrom:void 0,href:b})}let T;if("path"in y)T=ie({},y,{path:Lr(n,y.path,I.path).path});else{const p=ie({},y.params);for(const m in p)p[m]==null&&delete p[m];T=ie({},y,{params:h(p)}),I.params=h(I.params)}const B=t.resolve(T,I),oe=y.hash||"";B.params=c(f(B.params));const fe=kf(r,ie({},y,{hash:hd(oe),path:B.path})),d=s.createHref(fe);return ie({fullPath:fe,hash:oe,query:r===zo?_d(y.query):y.query||{}},B,{redirectedFrom:void 0,href:d})}function F(y){return typeof y=="string"?Lr(n,y,a.value.path):ie({},y)}function q(y,I){if(u!==y)return Gt(8,{from:I,to:y})}function H(y){return V(y)}function O(y){return H(ie(F(y),{replace:!0}))}function $(y){const I=y.matched[y.matched.length-1];if(I&&I.redirect){const{redirect:T}=I;let B=typeof T=="function"?T(y):T;return typeof B=="string"&&(B=B.includes("?")||B.includes("#")?B=F(B):{path:B},B.params={}),ie({query:y.query,hash:y.hash,params:"path"in B?{}:y.params},B)}}function V(y,I){const T=u=R(y),B=a.value,oe=y.state,fe=y.force,d=y.replace===!0,p=$(T);if(p)return V(ie(F(p),{state:typeof p=="object"?ie({},oe,p.state):oe,force:fe,replace:d}),I||T);const m=T;m.redirectedFrom=I;let b;return!fe&&Tf(r,B,T)&&(b=Gt(16,{to:m,from:B}),ze(B,B,!0,!1)),(b?Promise.resolve(b):K(m,B)).catch(v=>Je(v)?Je(v,2)?v:et(v):se(v,m,B)).then(v=>{if(v){if(Je(v,2))return V(ie({replace:d},F(v.to),{state:typeof v.to=="object"?ie({},oe,v.to.state):oe,force:fe}),I||m)}else v=L(m,B,!0,d,oe);return J(m,B,v),v})}function S(y,I){const T=q(y,I);return T?Promise.reject(T):Promise.resolve()}function M(y){const I=Lt.values().next().value;return I&&typeof I.runWithContext=="function"?I.runWithContext(y):y()}function K(y,I){let T;const[B,oe,fe]=kd(y,I);T=$r(B.reverse(),"beforeRouteLeave",y,I);for(const p of B)p.leaveGuards.forEach(m=>{T.push(ut(m,y,I))});const d=S.bind(null,y,I);return T.push(d),_e(T).then(()=>{T=[];for(const p of o.list())T.push(ut(p,y,I));return T.push(d),_e(T)}).then(()=>{T=$r(oe,"beforeRouteUpdate",y,I);for(const p of oe)p.updateGuards.forEach(m=>{T.push(ut(m,y,I))});return T.push(d),_e(T)}).then(()=>{T=[];for(const p of fe)if(p.beforeEnter)if(He(p.beforeEnter))for(const m of p.beforeEnter)T.push(ut(m,y,I));else T.push(ut(p.beforeEnter,y,I));return T.push(d),_e(T)}).then(()=>(y.matched.forEach(p=>p.enterCallbacks={}),T=$r(fe,"beforeRouteEnter",y,I),T.push(d),_e(T))).then(()=>{T=[];for(const p of i.list())T.push(ut(p,y,I));return T.push(d),_e(T)}).catch(p=>Je(p,8)?p:Promise.reject(p))}function J(y,I,T){l.list().forEach(B=>M(()=>B(y,I,T)))}function L(y,I,T,B,oe){const fe=q(y,I);if(fe)return fe;const d=I===rt,p=qt?history.state:{};T&&(B||d?s.replace(y.fullPath,ie({scroll:d&&p&&p.scroll},oe)):s.push(y.fullPath,oe)),a.value=y,ze(y,I,T,d),et()}let Z;function N(){Z||(Z=s.listen((y,I,T)=>{if(!Cn.listening)return;const B=R(y),oe=$(B);if(oe){V(ie(oe,{replace:!0}),B).catch(cn);return}u=B;const fe=a.value;qt&&Nf(Io(fe.fullPath,T.delta),gr()),K(B,fe).catch(d=>Je(d,12)?d:Je(d,2)?(V(d.to,B).then(p=>{Je(p,20)&&!T.delta&&T.type===bn.pop&&s.go(-1,!1)}).catch(cn),Promise.reject()):(T.delta&&s.go(-T.delta,!1),se(d,B,fe))).then(d=>{d=d||L(B,fe,!1),d&&(T.delta&&!Je(d,8)?s.go(-T.delta,!1):T.type===bn.pop&&Je(d,20)&&s.go(-1,!1)),J(B,fe,d)}).catch(cn)}))}let ee=Zt(),X=Zt(),le;function se(y,I,T){et(y);const B=X.list();return B.length?B.forEach(oe=>oe(y,I,T)):console.error(y),Promise.reject(y)}function Qe(){return le&&a.value!==rt?Promise.resolve():new Promise((y,I)=>{ee.add([y,I])})}function et(y){return le||(le=!y,N(),ee.list().forEach(([I,T])=>y?T(y):I()),ee.reset()),y}function ze(y,I,T,B){const{scrollBehavior:oe}=e;if(!qt||!oe)return Promise.resolve();const fe=!T&&Ff(Io(y.fullPath,0))||(B||!T)&&history.state&&history.state.scroll||null;return _s().then(()=>oe(y,I,fe)).then(d=>d&&jf(d)).catch(d=>se(d,y,I))}const Ee=y=>s.go(y);let Ot;const Lt=new Set,Cn={currentRoute:a,listening:!0,addRoute:g,removeRoute:_,hasRoute:x,getRoutes:E,resolve:R,options:e,push:H,replace:O,go:Ee,back:()=>Ee(-1),forward:()=>Ee(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:X.add,isReady:Qe,install(y){const I=this;y.component("RouterLink",xd),y.component("RouterView",Pd),y.config.globalProperties.$router=I,Object.defineProperty(y.config.globalProperties,"$route",{enumerable:!0,get:()=>St(a)}),qt&&!Ot&&a.value===rt&&(Ot=!0,H(s.location).catch(oe=>{}));const T={};for(const oe in rt)Object.defineProperty(T,oe,{get:()=>a.value[oe],enumerable:!0});y.provide(mr,I),y.provide(ks,Ri(T)),y.provide(ns,a);const B=y.unmount;Lt.add(y),y.unmount=function(){Lt.delete(y),Lt.size<1&&(u=rt,Z&&Z(),Z=null,a.value=rt,Ot=!1,le=!1),B()}}};function _e(y){return y.reduce((I,T)=>I.then(()=>M(T)),Promise.resolve())}return Cn}function kd(e,t){const n=[],r=[],s=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iWt(u,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(u=>Wt(u,a))||s.push(a))}return[n,r,s]}function Dh(){return Ie(mr)}function Hh(){return Ie(ks)}const Td=[{path:"/",component:()=>Ce(()=>import("./MainLayout.8fa83886.js"),["assets/MainLayout.8fa83886.js","assets/QHeader.09181622.js","assets/QResizeObserver.b57e8b42.js","assets/QLayout.b7c5abd4.js","assets/scroll.270b929d.js","assets/QuestionToolIcon.7c4c8f1b.js","assets/wandb_logo.127f2d59.js","assets/QCard.eb99e114.js","assets/answerStore.972bc172.js","assets/MatchItem.5ec0f16d.js","assets/use-key-composition.7c536e3b.js","assets/QChip.f74b9a82.js","assets/format.43d1c739.js","assets/vue-i18n.db8d47ce.js","assets/lg_saxion_wit.4b1b1f5e.js"]),children:[{path:"",name:"index",component:()=>Ce(()=>import("./AIPlatformWijzerPage.a39598dd.js"),["assets/AIPlatformWijzerPage.a39598dd.js","assets/wandb_logo.127f2d59.js","assets/QCard.eb99e114.js","assets/QCardActions.638d9df6.js","assets/QPage.d12e44a1.js","assets/answerStore.972bc172.js","assets/ToolQuestionItem.708210ee.js","assets/format.43d1c739.js","assets/scroll.270b929d.js","assets/QKnob.9e532b29.js","assets/vue-i18n.db8d47ce.js"])},{name:"aiplatformwijzer",path:"aiplatformwijzer",component:()=>Ce(()=>import("./AIPlatformWijzerPage.a39598dd.js"),["assets/AIPlatformWijzerPage.a39598dd.js","assets/wandb_logo.127f2d59.js","assets/QCard.eb99e114.js","assets/QCardActions.638d9df6.js","assets/QPage.d12e44a1.js","assets/answerStore.972bc172.js","assets/ToolQuestionItem.708210ee.js","assets/format.43d1c739.js","assets/scroll.270b929d.js","assets/QKnob.9e532b29.js","assets/vue-i18n.db8d47ce.js"])},{name:"datawijzer",path:"datawijzer",component:()=>Ce(()=>import("./QuizPage.e056c35e.js"),["assets/QuizPage.e056c35e.js","assets/QHeader.09181622.js","assets/QResizeObserver.b57e8b42.js","assets/QLinearProgress.1c886b96.js","assets/QCard.eb99e114.js","assets/QPage.d12e44a1.js","assets/wandb_logo.127f2d59.js","assets/QuestionToolIcon.7c4c8f1b.js","assets/answerStore.972bc172.js","assets/vue-i18n.db8d47ce.js","assets/ToolQuestionItem.708210ee.js","assets/format.43d1c739.js","assets/scroll.270b929d.js","assets/QKnob.9e532b29.js","assets/index.esm.f0b860bb.js","assets/lg_saxion_wit.4b1b1f5e.js"])},{name:"standaardenwijzer",path:"standaardenwijzer",component:()=>Ce(()=>import("./QuizPage.e056c35e.js"),["assets/QuizPage.e056c35e.js","assets/QHeader.09181622.js","assets/QResizeObserver.b57e8b42.js","assets/QLinearProgress.1c886b96.js","assets/QCard.eb99e114.js","assets/QPage.d12e44a1.js","assets/wandb_logo.127f2d59.js","assets/QuestionToolIcon.7c4c8f1b.js","assets/answerStore.972bc172.js","assets/vue-i18n.db8d47ce.js","assets/ToolQuestionItem.708210ee.js","assets/format.43d1c739.js","assets/scroll.270b929d.js","assets/QKnob.9e532b29.js","assets/index.esm.f0b860bb.js","assets/lg_saxion_wit.4b1b1f5e.js"])},{name:"result",path:"result",component:()=>Ce(()=>import("./ResultPage.b5f0eba4.js"),["assets/ResultPage.b5f0eba4.js","assets/QCardActions.638d9df6.js","assets/QCard.eb99e114.js","assets/MatchItem.5ec0f16d.js","assets/use-key-composition.7c536e3b.js","assets/QChip.f74b9a82.js","assets/format.43d1c739.js","assets/scroll.270b929d.js","assets/answerStore.972bc172.js","assets/QuestionToolIcon.7c4c8f1b.js","assets/wandb_logo.127f2d59.js","assets/QLinearProgress.1c886b96.js","assets/QPage.d12e44a1.js","assets/QKnob.9e532b29.js","assets/wandb_logo.5799faed.js","assets/vue-i18n.db8d47ce.js"])},{name:"toolsmaker",path:"toolsmaker",component:()=>Ce(()=>import("./ToolsMakerPage.b9f90735.js"),["assets/ToolsMakerPage.b9f90735.js","assets/lg_saxion_wit.4b1b1f5e.js","assets/answerStore.972bc172.js","assets/wandb_logo.5799faed.js","assets/wandb_logo.127f2d59.js","assets/QInput.3944fa04.js","assets/use-key-composition.7c536e3b.js","assets/QCard.eb99e114.js","assets/QChip.f74b9a82.js","assets/QPage.d12e44a1.js","assets/index.esm.f0b860bb.js"])},{name:"questionmaker",path:"questionmaker",component:()=>Ce(()=>import("./QuestionMakerPage.dc47af77.js"),["assets/QuestionMakerPage.dc47af77.js","assets/QInput.3944fa04.js","assets/use-key-composition.7c536e3b.js","assets/QCard.eb99e114.js","assets/QPage.d12e44a1.js","assets/answerStore.972bc172.js","assets/index.esm.f0b860bb.js"])},{path:"/:catchAll(.*)*",component:()=>Ce(()=>import("./ErrorNotFound.1f6efecb.js"),[])}]},{path:"/quiz",component:()=>Ce(()=>import("./QuizLayout.1110d06c.js"),["assets/QuizLayout.1110d06c.js","assets/QLayout.b7c5abd4.js","assets/scroll.270b929d.js","assets/QResizeObserver.b57e8b42.js"]),children:[{name:"quiz",path:"",component:()=>Ce(()=>import("./QuizPage.e056c35e.js"),["assets/QuizPage.e056c35e.js","assets/QHeader.09181622.js","assets/QResizeObserver.b57e8b42.js","assets/QLinearProgress.1c886b96.js","assets/QCard.eb99e114.js","assets/QPage.d12e44a1.js","assets/wandb_logo.127f2d59.js","assets/QuestionToolIcon.7c4c8f1b.js","assets/answerStore.972bc172.js","assets/vue-i18n.db8d47ce.js","assets/ToolQuestionItem.708210ee.js","assets/format.43d1c739.js","assets/scroll.270b929d.js","assets/QKnob.9e532b29.js","assets/index.esm.f0b860bb.js","assets/lg_saxion_wit.4b1b1f5e.js"])},{name:"intro",path:"intro",component:()=>Ce(()=>import("./IntroPage.c6c887aa.js"),["assets/IntroPage.c6c887aa.js","assets/QPage.d12e44a1.js"])}]}];var Mr=function(){return Rd({scrollBehavior:()=>({left:0,top:0}),routes:Td,history:zf("/")})};async function Ad(e,t){const n=e(uf);n.use(of,t);const r=typeof Ar=="function"?await Ar({}):Ar;n.use(r);const s=mt(typeof Mr=="function"?await Mr({store:r}):Mr);return r.use(({store:o})=>{o.router=s}),{app:n,store:r,router:s}}const rs={xs:18,sm:24,md:32,lg:38,xl:46},Ts={size:String};function As(e,t=rs){return G(()=>e.size!==void 0?{fontSize:e.size in t?`${t[e.size]}px`:e.size}:null)}const En=e=>mt(sr(e)),Od=e=>mt(e);function Ld(e,t){return e!==void 0&&e()||t}function zh(e,t){if(e!==void 0){const n=e();if(n!=null)return n.slice()}return t}function nn(e,t){return e!==void 0?t.concat(e()):t}function $d(e,t){return e===void 0?t:t!==void 0?t.concat(e()):e()}function Vh(e,t,n,r,s,o){t.key=r+s;const i=W(e,t,n);return s===!0?zi(i,o()):i}const Qo="0 0 24 24",Jo=e=>e,Ir=e=>`ionicons ${e}`,Dl={"mdi-":e=>`mdi ${e}`,"icon-":Jo,"bt-":e=>`bt ${e}`,"eva-":e=>`eva ${e}`,"ion-md":Ir,"ion-ios":Ir,"ion-logo":Ir,"iconfont ":Jo,"ti-":e=>`themify-icon ${e}`,"bi-":e=>`bootstrap-icons ${e}`},Hl={o_:"-outlined",r_:"-round",s_:"-sharp"},zl={sym_o_:"-outlined",sym_r_:"-rounded",sym_s_:"-sharp"},Md=new RegExp("^("+Object.keys(Dl).join("|")+")"),Id=new RegExp("^("+Object.keys(Hl).join("|")+")"),Yo=new RegExp("^("+Object.keys(zl).join("|")+")"),jd=/^[Mm]\s?[-+]?\.?\d/,Nd=/^img:/,Fd=/^svguse:/,qd=/^ion-/,Bd=/^(fa-(sharp|solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /;var Jn=En({name:"QIcon",props:{...Ts,tag:{type:String,default:"i"},name:String,color:String,left:Boolean,right:Boolean},setup(e,{slots:t}){const{proxy:{$q:n}}=wn(),r=As(e),s=G(()=>"q-icon"+(e.left===!0?" on-left":"")+(e.right===!0?" on-right":"")+(e.color!==void 0?` text-${e.color}`:"")),o=G(()=>{let i,l=e.name;if(l==="none"||!l)return{none:!0};if(n.iconMapFn!==null){const c=n.iconMapFn(l);if(c!==void 0)if(c.icon!==void 0){if(l=c.icon,l==="none"||!l)return{none:!0}}else return{cls:c.cls,content:c.content!==void 0?c.content:" "}}if(jd.test(l)===!0){const[c,h=Qo]=l.split("|");return{svg:!0,viewBox:h,nodes:c.split("&&").map(f=>{const[g,_,E]=f.split("@@");return W("path",{style:_,d:g,transform:E})})}}if(Nd.test(l)===!0)return{img:!0,src:l.substring(4)};if(Fd.test(l)===!0){const[c,h=Qo]=l.split("|");return{svguse:!0,src:c.substring(7),viewBox:h}}let a=" ";const u=l.match(Md);if(u!==null)i=Dl[u[1]](l);else if(Bd.test(l)===!0)i=l;else if(qd.test(l)===!0)i=`ionicons ion-${n.platform.is.ios===!0?"ios":"md"}${l.substring(3)}`;else if(Yo.test(l)===!0){i="notranslate material-symbols";const c=l.match(Yo);c!==null&&(l=l.substring(6),i+=zl[c[1]]),a=l}else{i="notranslate material-icons";const c=l.match(Id);c!==null&&(l=l.substring(2),i+=Hl[c[1]]),a=l}return{cls:i,content:a}});return()=>{const i={class:s.value,style:r.value,"aria-hidden":"true",role:"presentation"};return o.value.none===!0?W(e.tag,i,Ld(t.default)):o.value.img===!0?W(e.tag,i,nn(t.default,[W("img",{src:o.value.src})])):o.value.svg===!0?W(e.tag,i,nn(t.default,[W("svg",{viewBox:o.value.viewBox||"0 0 24 24"},o.value.nodes)])):o.value.svguse===!0?W(e.tag,i,nn(t.default,[W("svg",{viewBox:o.value.viewBox},[W("use",{"xlink:href":o.value.src})])])):(o.value.cls!==void 0&&(i.class+=" "+o.value.cls),W(e.tag,i,nn(t.default,[o.value.content])))}}}),Dd=En({name:"QAvatar",props:{...Ts,fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},setup(e,{slots:t}){const n=As(e),r=G(()=>"q-avatar"+(e.color?` bg-${e.color}`:"")+(e.textColor?` text-${e.textColor} q-chip--colored`:"")+(e.square===!0?" q-avatar--square":e.rounded===!0?" rounded-borders":"")),s=G(()=>e.fontSize?{fontSize:e.fontSize}:null);return()=>{const o=e.icon!==void 0?[W(Jn,{name:e.icon})]:void 0;return W("div",{class:r.value,style:n.value},[W("div",{class:"q-avatar__content row flex-center overflow-hidden",style:s.value},$d(t.default,o))])}}});const Hd={size:{type:[Number,String],default:"1em"},color:String};function zd(e){return{cSize:G(()=>e.size in rs?`${rs[e.size]}px`:e.size),classes:G(()=>"q-spinner"+(e.color?` text-${e.color}`:""))}}var Vl=En({name:"QSpinner",props:{...Hd,thickness:{type:Number,default:5}},setup(e){const{cSize:t,classes:n}=zd(e);return()=>W("svg",{class:n.value+" q-spinner-mat",width:t.value,height:t.value,viewBox:"25 25 50 50"},[W("circle",{class:"path",cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":e.thickness,"stroke-miterlimit":"10"})])}});function Vd(e,t){const n=e.style;for(const r in t)n[r]=t[r]}function Kh(e){if(e==null)return;if(typeof e=="string")try{return document.querySelector(e)||void 0}catch{return}const t=St(e);if(t)return t.$el||t}function Uh(e,t){if(e==null||e.contains(t)===!0)return!0;for(let n=e.nextElementSibling;n!==null;n=n.nextElementSibling)if(n.contains(t))return!0;return!1}function Kd(e,t=250){let n=!1,r;return function(){return n===!1&&(n=!0,setTimeout(()=>{n=!1},t),r=e.apply(this,arguments)),r}}function Xo(e,t,n,r){n.modifiers.stop===!0&&xl(e);const s=n.modifiers.color;let o=n.modifiers.center;o=o===!0||r===!0;const i=document.createElement("span"),l=document.createElement("span"),a=Nu(e),{left:u,top:c,width:h,height:f}=t.getBoundingClientRect(),g=Math.sqrt(h*h+f*f),_=g/2,E=`${(h-g)/2}px`,x=o?E:`${a.left-u-_}px`,R=`${(f-g)/2}px`,F=o?R:`${a.top-c-_}px`;l.className="q-ripple__inner",Vd(l,{height:`${g}px`,width:`${g}px`,transform:`translate3d(${x},${F},0) scale3d(.2,.2,1)`,opacity:0}),i.className=`q-ripple${s?" text-"+s:""}`,i.setAttribute("dir","ltr"),i.appendChild(l),t.appendChild(i);const q=()=>{i.remove(),clearTimeout(H)};n.abort.push(q);let H=setTimeout(()=>{l.classList.add("q-ripple__inner--enter"),l.style.transform=`translate3d(${E},${R},0) scale3d(1,1,1)`,l.style.opacity=.2,H=setTimeout(()=>{l.classList.remove("q-ripple__inner--enter"),l.classList.add("q-ripple__inner--leave"),l.style.opacity=0,H=setTimeout(()=>{i.remove(),n.abort.splice(n.abort.indexOf(q),1)},275)},250)},50)}function Zo(e,{modifiers:t,value:n,arg:r}){const s=Object.assign({},e.cfg.ripple,t,n);e.modifiers={early:s.early===!0,stop:s.stop===!0,center:s.center===!0,color:s.color||r,keyCodes:[].concat(s.keyCodes||13)}}var Ud=Od({name:"ripple",beforeMount(e,t){const n=t.instance.$.appContext.config.globalProperties.$q.config||{};if(n.ripple===!1)return;const r={cfg:n,enabled:t.value!==!1,modifiers:{},abort:[],start(s){r.enabled===!0&&s.qSkipRipple!==!0&&s.type===(r.modifiers.early===!0?"pointerdown":"click")&&Xo(s,e,r,s.qKeyEvent===!0)},keystart:Kd(s=>{r.enabled===!0&&s.qSkipRipple!==!0&&Yr(s,r.modifiers.keyCodes)===!0&&s.type===`key${r.modifiers.early===!0?"down":"up"}`&&Xo(s,e,r,!0)},300)};Zo(r,t),e.__qripple=r,Fu(r,"main",[[e,"pointerdown","start","passive"],[e,"click","start","passive"],[e,"keydown","keystart","passive"],[e,"keyup","keystart","passive"]])},updated(e,t){if(t.oldValue!==t.value){const n=e.__qripple;n!==void 0&&(n.enabled=t.value!==!1,n.enabled===!0&&Object(t.value)===t.value&&Zo(n,t))}},beforeUnmount(e){const t=e.__qripple;t!==void 0&&(t.abort.forEach(n=>{n()}),qu(t,"main"),delete e._qripple)}});const Kl={left:"start",center:"center",right:"end",between:"between",around:"around",evenly:"evenly",stretch:"stretch"},Wd=Object.keys(Kl),Gd={align:{type:String,validator:e=>Wd.includes(e)}};function Qd(e){return G(()=>{const t=e.align===void 0?e.vertical===!0?"stretch":"left":e.align;return`${e.vertical===!0?"items":"justify"}-${Kl[t]}`})}function Wh(e){if(Object(e.$parent)===e.$parent)return e.$parent;let{parent:t}=e.$;for(;Object(t)===t;){if(Object(t.proxy)===t.proxy)return t.proxy;t=t.parent}}function Jd(e){return e.appContext.config.globalProperties.$router!==void 0}function Gh(e){return e.isUnmounted===!0||e.isDeactivated===!0}function ei(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}function ti(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Yd(e,t){for(const n in t){const r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(Array.isArray(s)===!1||s.length!==r.length||r.some((o,i)=>o!==s[i]))return!1}return!0}function ni(e,t){return Array.isArray(t)===!0?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Xd(e,t){return Array.isArray(e)===!0?ni(e,t):Array.isArray(t)===!0?ni(t,e):e===t}function Zd(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(Xd(e[n],t[n])===!1)return!1;return!0}const eh={to:[String,Object],replace:Boolean,exact:Boolean,activeClass:{type:String,default:"q-router-link--active"},exactActiveClass:{type:String,default:"q-router-link--exact-active"},href:String,target:String,disable:Boolean};function th({fallbackTag:e,useDisableForRouterLinkProps:t=!0}={}){const n=wn(),{props:r,proxy:s,emit:o}=n,i=Jd(n),l=G(()=>r.disable!==!0&&r.href!==void 0),a=G(t===!0?()=>i===!0&&r.disable!==!0&&l.value!==!0&&r.to!==void 0&&r.to!==null&&r.to!=="":()=>i===!0&&l.value!==!0&&r.to!==void 0&&r.to!==null&&r.to!==""),u=G(()=>a.value===!0?F(r.to):null),c=G(()=>u.value!==null),h=G(()=>l.value===!0||c.value===!0),f=G(()=>r.type==="a"||h.value===!0?"a":r.tag||e||"div"),g=G(()=>l.value===!0?{href:r.href,target:r.target}:c.value===!0?{href:u.value.href,target:r.target}:{}),_=G(()=>{if(c.value===!1)return-1;const{matched:O}=u.value,{length:$}=O,V=O[$-1];if(V===void 0)return-1;const S=s.$route.matched;if(S.length===0)return-1;const M=S.findIndex(ti.bind(null,V));if(M>-1)return M;const K=ei(O[$-2]);return $>1&&ei(V)===K&&S[S.length-1].path!==K?S.findIndex(ti.bind(null,O[$-2])):M}),E=G(()=>c.value===!0&&_.value!==-1&&Yd(s.$route.params,u.value.params)),x=G(()=>E.value===!0&&_.value===s.$route.matched.length-1&&Zd(s.$route.params,u.value.params)),R=G(()=>c.value===!0?x.value===!0?` ${r.exactActiveClass} ${r.activeClass}`:r.exact===!0?"":E.value===!0?` ${r.activeClass}`:"":"");function F(O){try{return s.$router.resolve(O)}catch{}return null}function q(O,{returnRouterError:$,to:V=r.to,replace:S=r.replace}={}){if(r.disable===!0)return O.preventDefault(),Promise.resolve(!1);if(O.metaKey||O.altKey||O.ctrlKey||O.shiftKey||O.button!==void 0&&O.button!==0||r.target==="_blank")return Promise.resolve(!1);O.preventDefault();const M=s.$router[S===!0?"replace":"push"](V);return $===!0?M:M.then(()=>{}).catch(()=>{})}function H(O){if(c.value===!0){const $=V=>q(O,V);o("click",O,$),O.defaultPrevented!==!0&&$()}else o("click",O)}return{hasRouterLink:c,hasHrefLink:l,hasLink:h,linkTag:f,resolvedLink:u,linkIsActive:E,linkIsExactActive:x,linkClass:R,linkAttrs:g,getLink:F,navigateToRouterLink:q,navigateOnClick:H}}const ri={none:0,xs:4,sm:8,md:16,lg:24,xl:32},nh={xs:8,sm:10,md:14,lg:20,xl:24},rh=["button","submit","reset"],sh=/[^\s]\/[^\s]/,oh=["flat","outline","push","unelevated"],ih=(e,t)=>e.flat===!0?"flat":e.outline===!0?"outline":e.push===!0?"push":e.unelevated===!0?"unelevated":t,lh={...Ts,...eh,type:{type:String,default:"button"},label:[Number,String],icon:String,iconRight:String,...oh.reduce((e,t)=>(e[t]=Boolean)&&e,{}),square:Boolean,round:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],ripple:{type:[Boolean,Object],default:!0},align:{...Gd.align,default:"center"},stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean};function ah(e){const t=As(e,nh),n=Qd(e),{hasRouterLink:r,hasLink:s,linkTag:o,linkAttrs:i,navigateOnClick:l}=th({fallbackTag:"button"}),a=G(()=>{const x=e.fab===!1&&e.fabMini===!1?t.value:{};return e.padding!==void 0?Object.assign({},x,{padding:e.padding.split(/\s+/).map(R=>R in ri?ri[R]+"px":R).join(" "),minWidth:"0",minHeight:"0"}):x}),u=G(()=>e.rounded===!0||e.fab===!0||e.fabMini===!0),c=G(()=>e.disable!==!0&&e.loading!==!0),h=G(()=>c.value===!0?e.tabindex||0:-1),f=G(()=>ih(e,"standard")),g=G(()=>{const x={tabindex:h.value};return s.value===!0?Object.assign(x,i.value):rh.includes(e.type)===!0&&(x.type=e.type),o.value==="a"?(e.disable===!0?x["aria-disabled"]="true":x.href===void 0&&(x.role="button"),r.value!==!0&&sh.test(e.type)===!0&&(x.type=e.type)):e.disable===!0&&(x.disabled="",x["aria-disabled"]="true"),e.loading===!0&&e.percentage!==void 0&&Object.assign(x,{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":e.percentage}),x}),_=G(()=>{let x;e.color!==void 0?e.flat===!0||e.outline===!0?x=`text-${e.textColor||e.color}`:x=`bg-${e.color} text-${e.textColor||"white"}`:e.textColor&&(x=`text-${e.textColor}`);const R=e.round===!0?"round":`rectangle${u.value===!0?" q-btn--rounded":e.square===!0?" q-btn--square":""}`;return`q-btn--${f.value} q-btn--${R}`+(x!==void 0?" "+x:"")+(c.value===!0?" q-btn--actionable q-focusable q-hoverable":e.disable===!0?" disabled":"")+(e.fab===!0?" q-btn--fab":e.fabMini===!0?" q-btn--fab-mini":"")+(e.noCaps===!0?" q-btn--no-uppercase":"")+(e.dense===!0?" q-btn--dense":"")+(e.stretch===!0?" no-border-radius self-stretch":"")+(e.glossy===!0?" glossy":"")+(e.square?" q-btn--square":"")}),E=G(()=>n.value+(e.stack===!0?" column":" row")+(e.noWrap===!0?" no-wrap text-no-wrap":"")+(e.loading===!0?" q-btn__content--hidden":""));return{classes:_,style:a,innerClasses:E,attributes:g,hasLink:s,linkTag:o,navigateOnClick:l,isActionable:c}}const{passiveCapture:Le}=Rt;let jt=null,Nt=null,Ft=null;var ch=En({name:"QBtn",props:{...lh,percentage:Number,darkPercentage:Boolean,onTouchstart:[Function,Array]},emits:["click","keydown","mousedown","keyup"],setup(e,{slots:t,emit:n}){const{proxy:r}=wn(),{classes:s,style:o,innerClasses:i,attributes:l,hasLink:a,linkTag:u,navigateOnClick:c,isActionable:h}=ah(e),f=Pt(null),g=Pt(null);let _=null,E,x=null;const R=G(()=>e.label!==void 0&&e.label!==null&&e.label!==""),F=G(()=>e.disable===!0||e.ripple===!1?!1:{keyCodes:a.value===!0?[13,32]:[13],...e.ripple===!0?{}:e.ripple}),q=G(()=>({center:e.round})),H=G(()=>{const N=Math.max(0,Math.min(100,e.percentage));return N>0?{transition:"transform 0.6s",transform:`translateX(${N-100}%)`}:{}}),O=G(()=>{if(e.loading===!0)return{onMousedown:Z,onTouchstart:Z,onClick:Z,onKeydown:Z,onKeyup:Z};if(h.value===!0){const N={onClick:V,onKeydown:S,onMousedown:K};if(r.$q.platform.has.touch===!0){const ee=e.onTouchstart!==void 0?"":"Passive";N[`onTouchstart${ee}`]=M}return N}return{onClick:Mt}}),$=G(()=>({ref:f,class:"q-btn q-btn-item non-selectable no-outline "+s.value,style:o.value,...l.value,...O.value}));function V(N){if(f.value!==null){if(N!==void 0){if(N.defaultPrevented===!0)return;const ee=document.activeElement;if(e.type==="submit"&&ee!==document.body&&f.value.contains(ee)===!1&&ee.contains(f.value)===!1){f.value.focus();const X=()=>{document.removeEventListener("keydown",Mt,!0),document.removeEventListener("keyup",X,Le),f.value!==null&&f.value.removeEventListener("blur",X,Le)};document.addEventListener("keydown",Mt,!0),document.addEventListener("keyup",X,Le),f.value.addEventListener("blur",X,Le)}}c(N)}}function S(N){f.value!==null&&(n("keydown",N),Yr(N,[13,32])===!0&&Nt!==f.value&&(Nt!==null&&L(),N.defaultPrevented!==!0&&(f.value.focus(),Nt=f.value,f.value.classList.add("q-btn--active"),document.addEventListener("keyup",J,!0),f.value.addEventListener("blur",J,Le)),Mt(N)))}function M(N){f.value!==null&&(n("touchstart",N),N.defaultPrevented!==!0&&(jt!==f.value&&(jt!==null&&L(),jt=f.value,_=N.target,_.addEventListener("touchcancel",J,Le),_.addEventListener("touchend",J,Le)),E=!0,x!==null&&clearTimeout(x),x=setTimeout(()=>{x=null,E=!1},200)))}function K(N){f.value!==null&&(N.qSkipRipple=E===!0,n("mousedown",N),N.defaultPrevented!==!0&&Ft!==f.value&&(Ft!==null&&L(),Ft=f.value,f.value.classList.add("q-btn--active"),document.addEventListener("mouseup",J,Le)))}function J(N){if(f.value!==null&&!(N!==void 0&&N.type==="blur"&&document.activeElement===f.value)){if(N!==void 0&&N.type==="keyup"){if(Nt===f.value&&Yr(N,[13,32])===!0){const ee=new MouseEvent("click",N);ee.qKeyEvent=!0,N.defaultPrevented===!0&&Jr(ee),N.cancelBubble===!0&&xl(ee),f.value.dispatchEvent(ee),Mt(N),N.qKeyEvent=!0}n("keyup",N)}L()}}function L(N){const ee=g.value;N!==!0&&(jt===f.value||Ft===f.value)&&ee!==null&&ee!==document.activeElement&&(ee.setAttribute("tabindex",-1),ee.focus()),jt===f.value&&(_!==null&&(_.removeEventListener("touchcancel",J,Le),_.removeEventListener("touchend",J,Le)),jt=_=null),Ft===f.value&&(document.removeEventListener("mouseup",J,Le),Ft=null),Nt===f.value&&(document.removeEventListener("keyup",J,!0),f.value!==null&&f.value.removeEventListener("blur",J,Le),Nt=null),f.value!==null&&f.value.classList.remove("q-btn--active")}function Z(N){Mt(N),N.qSkipRipple=!0}return ws(()=>{L(!0)}),Object.assign(r,{click:V}),()=>{let N=[];e.icon!==void 0&&N.push(W(Jn,{name:e.icon,left:e.stack!==!0&&R.value===!0,role:"img","aria-hidden":"true"})),R.value===!0&&N.push(W("span",{class:"block"},[e.label])),N=nn(t.default,N),e.iconRight!==void 0&&e.round===!1&&N.push(W(Jn,{name:e.iconRight,right:e.stack!==!0&&R.value===!0,role:"img","aria-hidden":"true"}));const ee=[W("span",{class:"q-focus-helper",ref:g})];return e.loading===!0&&e.percentage!==void 0&&ee.push(W("span",{class:"q-btn__progress absolute-full overflow-hidden"+(e.darkPercentage===!0?" q-btn__progress--dark":"")},[W("span",{class:"q-btn__progress-indicator fit block",style:H.value})])),ee.push(W("span",{class:"q-btn__content text-center col items-center q-anchor--skip "+i.value},N)),e.loading!==null&&ee.push(W(Ps,{name:"q-transition--fade"},()=>e.loading===!0?[W("span",{key:"loading",class:"absolute-full flex flex-center"},t.loading!==void 0?t.loading():[W(Vl)])]:null)),zi(W(u.value,$.value,ee),[[Ud,F.value,void 0,q.value]])}}});let uh=1,fh=document.body;function dh(e,t){const n=document.createElement("div");if(n.id=t!==void 0?`q-portal--${t}--${uh++}`:e,Gn.globalNodes!==void 0){const r=Gn.globalNodes.class;r!==void 0&&(n.className=r)}return fh.appendChild(n),n}function Qh(e){e.remove()}let hh=0;const Fn={},qn={},Fe={},Ul={},ph=/^\s*$/,Wl=[],gh=[void 0,null,!0,!1,""],Os=["top-left","top-right","bottom-left","bottom-right","top","bottom","left","right","center"],mh=["top-left","top-right","bottom-left","bottom-right"],Bt={positive:{icon:e=>e.iconSet.type.positive,color:"positive"},negative:{icon:e=>e.iconSet.type.negative,color:"negative"},warning:{icon:e=>e.iconSet.type.warning,color:"warning",textColor:"dark"},info:{icon:e=>e.iconSet.type.info,color:"info"},ongoing:{group:!1,timeout:0,spinner:!0,color:"grey-8"}};function Gl(e,t,n){if(!e)return en("parameter required");let r;const s={textColor:"white"};if(e.ignoreDefaults!==!0&&Object.assign(s,Fn),yn(e)===!1&&(s.type&&Object.assign(s,Bt[s.type]),e={message:e}),Object.assign(s,Bt[e.type||s.type],e),typeof s.icon=="function"&&(s.icon=s.icon(t)),s.spinner?(s.spinner===!0&&(s.spinner=Vl),s.spinner=mt(s.spinner)):s.spinner=!1,s.meta={hasMedia:Boolean(s.spinner!==!1||s.icon||s.avatar),hasText:si(s.message)||si(s.caption)},s.position){if(Os.includes(s.position)===!1)return en("wrong position",e)}else s.position="bottom";if(gh.includes(s.timeout)===!0)s.timeout=5e3;else{const a=Number(s.timeout);if(isNaN(a)||a<0)return en("wrong timeout",e);s.timeout=Number.isFinite(a)?a:0}s.timeout===0?s.progress=!1:s.progress===!0&&(s.meta.progressClass="q-notification__progress"+(s.progressClass?` ${s.progressClass}`:""),s.meta.progressStyle={animationDuration:`${s.timeout+1e3}ms`});const o=(Array.isArray(e.actions)===!0?e.actions:[]).concat(e.ignoreDefaults!==!0&&Array.isArray(Fn.actions)===!0?Fn.actions:[]).concat(Bt[e.type]!==void 0&&Array.isArray(Bt[e.type].actions)===!0?Bt[e.type].actions:[]),{closeBtn:i}=s;if(i&&o.push({label:typeof i=="string"?i:t.lang.label.close}),s.actions=o.map(({handler:a,noDismiss:u,...c})=>({flat:!0,...c,onClick:typeof a=="function"?()=>{a(),u!==!0&&l()}:()=>{l()}})),s.multiLine===void 0&&(s.multiLine=s.actions.length>1),Object.assign(s.meta,{class:`q-notification row items-stretch q-notification--${s.multiLine===!0?"multi-line":"standard"}`+(s.color!==void 0?` bg-${s.color}`:"")+(s.textColor!==void 0?` text-${s.textColor}`:"")+(s.classes!==void 0?` ${s.classes}`:""),wrapperClass:"q-notification__wrapper col relative-position border-radius-inherit "+(s.multiLine===!0?"column no-wrap justify-center":"row items-center"),contentClass:"q-notification__content row items-center"+(s.multiLine===!0?"":" col"),leftClass:s.meta.hasText===!0?"additional":"single",attrs:{role:"alert",...s.attrs}}),s.group===!1?(s.group=void 0,s.meta.group=void 0):((s.group===void 0||s.group===!0)&&(s.group=[s.message,s.caption,s.multiline].concat(s.actions.map(a=>`${a.label}*${a.icon}`)).join("|")),s.meta.group=s.group+"|"+s.position),s.actions.length===0?s.actions=void 0:s.meta.actionsClass="q-notification__actions row items-center "+(s.multiLine===!0?"justify-end":"col-auto")+(s.meta.hasMedia===!0?" q-notification__actions--with-media":""),n!==void 0){n.notif.meta.timer&&(clearTimeout(n.notif.meta.timer),n.notif.meta.timer=void 0),s.meta.uid=n.notif.meta.uid;const a=Fe[s.position].value.indexOf(n.notif);Fe[s.position].value[a]=s}else{const a=qn[s.meta.group];if(a===void 0){if(s.meta.uid=hh++,s.meta.badge=1,["left","right","center"].indexOf(s.position)!==-1)Fe[s.position].value.splice(Math.floor(Fe[s.position].value.length/2),0,s);else{const u=s.position.indexOf("top")>-1?"unshift":"push";Fe[s.position].value[u](s)}s.group!==void 0&&(qn[s.meta.group]=s)}else{if(a.meta.timer&&(clearTimeout(a.meta.timer),a.meta.timer=void 0),s.badgePosition!==void 0){if(mh.includes(s.badgePosition)===!1)return en("wrong badgePosition",e)}else s.badgePosition=`top-${s.position.indexOf("left")>-1?"right":"left"}`;s.meta.uid=a.meta.uid,s.meta.badge=a.meta.badge+1,s.meta.badgeClass=`q-notification__badge q-notification__badge--${s.badgePosition}`+(s.badgeColor!==void 0?` bg-${s.badgeColor}`:"")+(s.badgeTextColor!==void 0?` text-${s.badgeTextColor}`:"")+(s.badgeClass?` ${s.badgeClass}`:"");const u=Fe[s.position].value.indexOf(a);Fe[s.position].value[u]=qn[s.meta.group]=s}}const l=()=>{vh(s),r=void 0};if(s.timeout>0&&(s.meta.timer=setTimeout(()=>{s.meta.timer=void 0,l()},s.timeout+1e3)),s.group!==void 0)return a=>{a!==void 0?en("trying to update a grouped one which is forbidden",e):l()};if(r={dismiss:l,config:e,notif:s},n!==void 0){Object.assign(n,r);return}return a=>{if(r!==void 0)if(a===void 0)r.dismiss();else{const u=Object.assign({},r.config,a,{group:!1,position:s.position});Gl(u,t,r)}}}function vh(e){e.meta.timer&&(clearTimeout(e.meta.timer),e.meta.timer=void 0);const t=Fe[e.position].value.indexOf(e);if(t!==-1){e.group!==void 0&&delete qn[e.meta.group];const n=Wl[""+e.meta.uid];if(n){const{width:r,height:s}=getComputedStyle(n);n.style.left=`${n.offsetLeft}px`,n.style.width=r,n.style.height=s}Fe[e.position].value.splice(t,1),typeof e.onDismiss=="function"&&e.onDismiss()}}function si(e){return e!=null&&ph.test(e)!==!0}function en(e,t){return console.error(`Notify: ${e}`,t),!1}function _h(){return En({name:"QNotifications",devtools:{hide:!0},setup(){return()=>W("div",{class:"q-notifications"},Os.map(e=>W(wu,{key:e,class:Ul[e],tag:"div",name:`q-notification--${e}`},()=>Fe[e].value.map(t=>{const n=t.meta,r=[];if(n.hasMedia===!0&&(t.spinner!==!1?r.push(W(t.spinner,{class:"q-notification__spinner q-notification__spinner--"+n.leftClass,color:t.spinnerColor,size:t.spinnerSize})):t.icon?r.push(W(Jn,{class:"q-notification__icon q-notification__icon--"+n.leftClass,name:t.icon,color:t.iconColor,size:t.iconSize,role:"img"})):t.avatar&&r.push(W(Dd,{class:"q-notification__avatar q-notification__avatar--"+n.leftClass},()=>W("img",{src:t.avatar,"aria-hidden":"true"})))),n.hasText===!0){let o;const i={class:"q-notification__message col"};if(t.html===!0)i.innerHTML=t.caption?`
${t.message}
${t.caption}
`:t.message;else{const l=[t.message];o=t.caption?[W("div",l),W("div",{class:"q-notification__caption"},[t.caption])]:l}r.push(W("div",i,o))}const s=[W("div",{class:n.contentClass},r)];return t.progress===!0&&s.push(W("div",{key:`${n.uid}|p|${n.badge}`,class:n.progressClass,style:n.progressStyle})),t.actions!==void 0&&s.push(W("div",{class:n.actionsClass},t.actions.map(o=>W(ch,o)))),n.badge>1&&s.push(W("div",{key:`${n.uid}|${n.badge}`,class:t.meta.badgeClass,style:t.badgeStyle},[n.badge])),W("div",{ref:o=>{Wl[""+n.uid]=o},key:n.uid,class:n.class,...n.attrs},[W("div",{class:n.wrapperClass},s)])}))))}})}var yh={setDefaults(e){yn(e)===!0&&Object.assign(Fn,e)},registerType(e,t){yn(t)===!0&&(Bt[e]=t)},install({$q:e,parentApp:t}){if(e.notify=this.create=n=>Gl(n,e),e.notify.setDefaults=this.setDefaults,e.notify.registerType=this.registerType,e.config.notify!==void 0&&this.setDefaults(e.config.notify),this.__installed!==!0){Os.forEach(r=>{Fe[r]=Pt([]);const s=["left","center","right"].includes(r)===!0?"center":r.indexOf("top")>-1?"top":"bottom",o=r.indexOf("left")>-1?"start":r.indexOf("right")>-1?"end":"center",i=["left","right"].includes(r)?`items-${r==="left"?"start":"end"} justify-center`:r==="center"?"flex-center":`items-${o}`;Ul[r]=`q-notifications__list q-notifications__list--${s} fixed column no-wrap ${i}`});const n=dh("q-notify");nf(_h(),t).mount(n)}}},bh={config:{},plugins:{Notify:yh}};const wh="/";async function xh({app:e,router:t,store:n},r){let s=!1;const o=a=>{try{return t.resolve(a).href}catch{}return Object(a)===a?null:a},i=a=>{if(s=!0,typeof a=="string"&&/^https?:\/\//.test(a)){window.location.href=a;return}const u=o(a);u!==null&&(window.location.href=u,window.location.reload())},l=window.location.href.replace(window.location.origin,"");for(let a=0;s===!1&&a{const[t,n]=Promise.allSettled!==void 0?["allSettled",r=>r.map(s=>{if(s.status==="rejected"){console.error("[Quasar] boot error:",s.reason);return}return s.value.default})]:["all",r=>r.map(s=>s.default)];return Promise[t]([Ce(()=>import("./loadTools.f8218e71.js"),["assets/loadTools.f8218e71.js","assets/answerStore.972bc172.js"]),Ce(()=>import("./i18n.1fa99660.js"),["assets/i18n.1fa99660.js","assets/vue-i18n.db8d47ce.js","assets/answerStore.972bc172.js"])]).then(r=>{const s=n(r).filter(o=>typeof o=="function");xh(e,s)})});export{Uh as $,jh as A,$h as B,ws as C,zh as D,jn as E,qe as F,Mh as G,_n as H,Rt as I,Ut as J,At as K,nn as L,ef as M,_s as N,Kh as O,Vd as P,Dd as Q,eh as R,th as S,lr as T,Yr as U,Mt as V,Ku as W,$e as X,Oh as Y,Ps as Z,lf as _,sr as a,Bu as a0,cc as a1,lc as a2,ic as a3,uc as a4,Qi as a5,Jr as a6,Jn as a7,Tr as a8,xl as a9,Ah as aA,Lh as aB,kh as aC,yh as aD,Hh as aE,wu as aF,ne as aG,Fh as aH,Nh as aI,yn as aJ,Th as aK,zi as aL,as as aM,Gu as aa,Eh as ab,Ch as ac,cs as ad,Ts as ae,As as af,Vh as ag,$d as ah,Ud as ai,Qr as aj,Fu as ak,qu as al,Jd as am,Wh as an,fr as ao,Sh as ap,dh as aq,Qh as ar,Gh as as,Nu as at,Ih as au,Vl as av,ch as aw,Gd as ax,Qd as ay,Od as az,qh as b,Ji as c,Bh as d,hi as e,G as f,wn as g,W as h,Ie as i,ge as j,Pe as k,il as l,Ph as m,Ja as n,Gi as o,al as p,Ka as q,Pt as r,$a as s,ul as t,Dh as u,qc as v,rn as w,Rh as x,En as y,Ld as z}; diff --git a/docs/assets/loadTools.29e90736.js b/docs/assets/loadTools.29e90736.js deleted file mode 100644 index 4a32f81..0000000 --- a/docs/assets/loadTools.29e90736.js +++ /dev/null @@ -1 +0,0 @@ -import{b as s}from"./index.0ed11181.js";import{u as t}from"./answerStore.1c70fbbb.js";import{t as e,q as a}from"./tools.2a9c17e9.js";var i=s(async()=>{const o=t();console.log("Loaded tools.json"),o.tools=e.tools,console.log("Loaded questions.json"),o.questions=a.questions});export{i as default}; diff --git a/docs/assets/loadTools.f8218e71.js b/docs/assets/loadTools.f8218e71.js new file mode 100644 index 0000000..ce589a4 --- /dev/null +++ b/docs/assets/loadTools.f8218e71.js @@ -0,0 +1 @@ +import{b as a}from"./index.ab4869ca.js";import{u as r}from"./answerStore.972bc172.js";var t=a(async()=>{const o=r();o.loadTools(o.defaultLocale)});export{t as default}; diff --git a/docs/assets/scroll.f78dc32b.js b/docs/assets/scroll.270b929d.js similarity index 95% rename from docs/assets/scroll.f78dc32b.js rename to docs/assets/scroll.270b929d.js index 94ff461..c7875e6 100644 --- a/docs/assets/scroll.f78dc32b.js +++ b/docs/assets/scroll.270b929d.js @@ -1 +1 @@ -import{J as s,K as l}from"./index.0ed11181.js";const c=[null,document,document.body,document.scrollingElement,document.documentElement];function d(o,t){let e=s(t);if(e===void 0){if(o==null)return window;e=o.closest(".scroll,.scroll-y,.overflow-auto")}return c.includes(e)?window:e}function u(o){return o===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:o.scrollTop}function a(o){return o===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:o.scrollLeft}let n;function f(){if(n!==void 0)return n;const o=document.createElement("p"),t=document.createElement("div");l(o,{width:"100%",height:"200px"}),l(t,{position:"absolute",top:"0px",left:"0px",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),t.appendChild(o),document.body.appendChild(t);const e=o.offsetWidth;t.style.overflow="scroll";let i=o.offsetWidth;return e===i&&(i=t.clientWidth),t.remove(),n=e-i,n}function w(o,t=!0){return!o||o.nodeType!==Node.ELEMENT_NODE?!1:t?o.scrollHeight>o.clientHeight&&(o.classList.contains("scroll")||o.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(o)["overflow-y"])):o.scrollWidth>o.clientWidth&&(o.classList.contains("scroll")||o.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(o)["overflow-x"]))}export{u as a,a as b,f as c,d as g,w as h}; +import{O as s,P as l}from"./index.ab4869ca.js";const c=[null,document,document.body,document.scrollingElement,document.documentElement];function d(o,t){let e=s(t);if(e===void 0){if(o==null)return window;e=o.closest(".scroll,.scroll-y,.overflow-auto")}return c.includes(e)?window:e}function u(o){return o===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:o.scrollTop}function a(o){return o===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:o.scrollLeft}let n;function f(){if(n!==void 0)return n;const o=document.createElement("p"),t=document.createElement("div");l(o,{width:"100%",height:"200px"}),l(t,{position:"absolute",top:"0px",left:"0px",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),t.appendChild(o),document.body.appendChild(t);const e=o.offsetWidth;t.style.overflow="scroll";let i=o.offsetWidth;return e===i&&(i=t.clientWidth),t.remove(),n=e-i,n}function w(o,t=!0){return!o||o.nodeType!==Node.ELEMENT_NODE?!1:t?o.scrollHeight>o.clientHeight&&(o.classList.contains("scroll")||o.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(o)["overflow-y"])):o.scrollWidth>o.clientWidth&&(o.classList.contains("scroll")||o.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(o)["overflow-x"]))}export{u as a,a as b,f as c,d as g,w as h}; diff --git a/docs/assets/tools.2a9c17e9.js b/docs/assets/tools.2a9c17e9.js deleted file mode 100644 index 1143548..0000000 --- a/docs/assets/tools.2a9c17e9.js +++ /dev/null @@ -1,20 +0,0 @@ -const e=[{id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",question_text:"Bent u actief op een van de volgende cloudplatforms?",type:"single",answers:[{id:"963aaa51-8a46-4d4e-9808-d25ea810560c",answer_text:"Databricks",explanation_text:""},{id:"ee245bf1-0447-4460-beb0-26ce8987a59a",answer_text:"AWS",explanation_text:""},{id:"03c4d074-2773-41cd-962a-892d13882ef4",answer_text:"Azure",explanation_text:""},{id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",answer_text:"GCP (Google cloud platform)",explanation_text:""},{id:"af017d7a-6e66-467a-87ad-1765a07563f3",answer_text:"Hosted Kubernetes",explanation_text:""},{id:"1f3396cf-8727-43c8-912d-0911517dc894",answer_text:"Anders",explanation_text:"Indien u of uw bedrijf geen gebruikmaakt van het hierboven genoemde cloudplatform, kan het zijn dat bepaalde dataplatforms mogelijk niet naadloos kunnen integreren."},{id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",answer_text:"Ik ben nog niet actief op een cloudplatform",explanation_text:"Wanneer u of uw bedrijf geen gebruikmaakt van een cloudplatform, kan het positief zijn dat het de volledige controle over de infrastructuur behoudt. Echter, als nadeel kan dit beperkte integratiemogelijkheden met cloud-gebaseerde dataplatforms met zich meebrengen, wat van invloed kan zijn op schaalbaarheid en toegankelijkheid."}],explanation_text:" Wanneer u of uw bedrijf reeds betrokken is bij specifieke cloudplatforms, kan dit de flexibiliteit van uw keuze met betrekking tot het gebruik van dataplatforms beperken."},{id:"fea3fc01-144d-4f41-b99e-0f556f6da751",question_text:"Welke functionaliteiten dienen ge\xEFntegreerd te zijn in het dataplatform?",type:"multi",answers:[{id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",answer_text:"ETL",explanation_text:" ETL staat voor Extract, Transform, Load, en het verwijst naar het proces van het extraheren, transformeren en laden van gegevens vanuit verschillende bronnen naar een bestemming, zoals een database, om ze bruikbaar en toegankelijk te maken voor analyses."},{id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",answer_text:"MLOps",explanation_text:"MLOps, of Machine Learning Operations, is een methodologie die gericht is op het integreren van machine learning-modellen in het ontwikkelings- en operationele proces, om een effici\xEBnte implementatie, monitoring en onderhoud van deze modellen mogelijk te maken."},{id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",answer_text:"DataOps",explanation_text:"DataOps (afkorting van data operations) is een datamanagementpraktijk wat zich bezig houd met die het bouwen, testen, implementeren en beheren van dataproducten. Het combineert technologie\xEBn en processen om het vertrouwen in data te verbeteren en de time-to-value van de dataproducten van uw bedrijf te verkorten."},{id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",answer_text:"Business intelligence",explanation_text:"Business Intelligence (BI) omvat het proces van het verzamelen, analyseren en presenteren van zakelijke gegevens om organisaties te ondersteunen bij het nemen van datagestuurde beslissingen."}],explanation_text:"Dataplatforms bieden verschillende functionaliteiten aan. Een dataplatform is meer gericht op het in ontwikkelingen en in gerbuik nemen van machine learning modellen (MLOps). Andere dataplatforms kunnen meer een een focus hebben op het real-time verwerken van grote aantallen data. "},{id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",question_text:"Waar moet het dataplatform draaien?",type:"single",answers:[{id:"37aff572-f1a8-4401-ac52-51183844c06c",answer_text:"Op de cloud",explanation_text:"Wanneer het platform op de cloud moet draaien, bijvoorbeeld op AWS, Azure of GCP, betekent dit dat de gegevens ook in de cloud worden opgeslagen en verwerkt. Een mogelijk nadeel van het gebruik van een dataplatform in de cloud zijn de doorlopende kosten, waaronder abonnements- en verbruikskosten, die op lange termijn van invloed kunnen zijn op de totale gebruikskosten. Niettemin worden de gegevens veilig online opgeslagen en verwerkt."},{id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",answer_text:"On-premise",explanation_text:"Als het dataplatform on-premise moet worden ingezet, impliceert dit dat u zelf de nodige capaciteiten moet hebben om veeleisende taken zoals machine learning uit te voeren, en dat uw gegevens on-premise worden opgeslagen en verwerkt. Dit beperkt de beschikbare opties, aangezien sommige dataplatforms uitsluitend online beschikbaar zijn, wat van invloed kan zijn op de keuze van een geschikt dataplatform."}],explanation_text:"Het is belangrijk om na te denken waar het dataplatform moet draaien, omdat dit de keuze be\xEFnvloedt tussen on-premises, cloud of hybride oplossingen, wat impact heeft op kosten, schaalbaarheid en toegankelijkheid van het dataplatform."},{id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",question_text:"Dient de gebruikte tool kosteloos te zijn en/of open-source?",type:"single",answers:[{id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",answer_text:"Ja, de tool moet gratis en/of open-source zijn",explanation_text:"Gratis tools bieden meestal geen offici\xEBle ondersteuning en zijn afhankelijk van community's en forums voor hulp, wat belangrijk is om te overwegen bij het kiezen van een dataplatform."},{id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",answer_text:"Nee, de tool mag betaald en hoeft niet open-source zijn ",explanation_text:"Betaalde tools bieden doorgaans ondersteuning en extra functionaliteiten aan in tegenstelling tot gratis varianten"}],explanation_text:"Het is belangrijk om te overwegen of de gebruikte tool kosteloos en/of open-source moet zijn bij het kiezen van een dataplatform, omdat dit direct invloed heeft op de totale kosten, flexibiliteit en onafhankelijkheid van de gebruikte technologie."},{id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",question_text:"Ben u of beschikt uw bedrijf momenteel over een data engineer en wilt u een aanzienlijke tijd investeren om een dataplatform op te zetten?",type:"single",answers:[{id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",answer_text:"Ja, het dataplatform moet daarom helemaal in te stellen zijn met mijn wensen en geavanceerde functionaliteiten moeten mogelijk zijn.",explanation_text:"Indien u veel de tijd kunt nemen voor de implementatie van dataplatforms, wordt het mogelijk om voor meer geavanceerde platformen te kiezen, die nauwkeuriger kunnen worden ge\xEFntegreerd in uw bestaande omgeving."},{id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",answer_text:"Nee, het dataplatform moet daarom makkelijk in gebruik en overzichtelijk blijven.",explanation_text:" Indien u niet bereid bent aanzienlijk te investeren in een dataplatform, is het raadzaam te kiezen voor een platform dat eenvoudig te configureren is, ook al kan dit ten koste gaan van bepaalde geavanceerde functionaliteiten."}],explanation_text:"Deze vraag wordt gesteld om inzicht te krijgen in de beschikbaarheid van technische vaardigheden en de bereidheid tot tijdsinvestering, omdat dit cruciale factoren zijn bij het beoordelen van de haalbaarheid en implementatie van een dataplatform binnen het bedrijf."},{id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",question_text:"Wat voor Machine learning functionaliteit moet beschikbaar zijn in het dataplatform?",type:"multi",answers:[{id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",answer_text:"Experiment tracking",explanation_text:"Experiment tracking is het proces van systematisch bijhouden, organiseren en analyseren van experimentele gegevens en resultaten binnen een dataproject."},{id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",answer_text:"Data Drift Tracking",explanation_text:"Data drift tracking is het voortdurend monitoren en analyseren van veranderingen in de distributie van data om ongewenste afwijkingen en inconsistenties te identificeren in machine learning-modellen."},{id:"83b528f4-3ea9-427e-9ce5-772685655d43",answer_text:"Model Drift Tracking",explanation_text:"Model drift tracking is het continu monitoren van prestatieafwijkingen in machine learning-modellen ten opzichte van de oorspronkelijke trainingsdata, om tijdig aanpassingen te maken en de nauwkeurigheid te behouden."},{id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",answer_text:"Large Language Model Ops(LLMOps)",explanation_text:"Large Language Model Ops (LLM Ops) is een benadering die zich richt op het effici\xEBnt ontwikkelen, implementeren en beheren van grote taalmodellen om de prestaties en schaalbaarheid in diverse toepassingen te optimaliseren."},{id:"265f2953-f37c-4c0b-8f61-e2a15118291e",answer_text:"Data versioning",explanation_text:"Data versioning is het proces van het systematisch bijhouden en beheren van verschillende versies van datasets, waardoor traceerbaarheid, reproduceerbaarheid en samenwerking in data-gerelateerde projecten worden verbeterd."},{id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",answer_text:"Automatische hyperparameter tuning",explanation_text:"Automatische hyperparameter tuning is een geoptimaliseerd proces waarbij machine learning-modellen automatisch worden aangepast door verschillende hyperparametercombinaties te verkennen en te evalueren om de beste prestaties te bereiken."},{id:"3a85d010-e8c4-4a29-a3dd-330376caf110",answer_text:"Orkestreren van datapijplijnen",explanation_text:"Het orkestreren van datapijplijnen is het geautomatiseerd plannen, co\xF6rdineren en uitvoeren van verschillende stappen binnen een data- of machine learning-pipeline om een gestroomlijnd en effici\xEBnt proces te waarborgen."},{id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",answer_text:"AutoML",explanation_text:"AutoML, of Automated Machine Learning, is een benadering waarbij machine learning-modellen automatisch worden gebouwd en geoptimaliseerd met minimale menselijke tussenkomst, met als doel het vereenvoudigen van het modelleerproces en het versnellen van de ontwikkeling van effectieve modellen."},{id:"3e6a8487-1793-4062-aee3-271c6e435818",answer_text:"Publiceren en in productie nemen van modellen",explanation_text:"Het publiceren van machine learning modellen is het proces van het beschikbaar stellen en toegankelijk maken van getrainde modellen voor gebruik in productieomgevingen of door externe gebruikers."}],explanation_text:"Deze vraag beoogt inzicht te verkrijgen in de specifieke machine learning-functionaliteiten die de gebruiker wenst te benutten binnen het dataplatform."},{id:"c8775160-e498-4292-a464-b45e222f5aa7",question_text:"Hoeveel dataspecialisten moeten gebruik maken van het platform?",type:"single",answers:[{id:"3e29d8d1-aef4-45a9-9728-606880731d87",answer_text:"1",explanation_text:"Indien uw organisatie slechts \xE9\xE9n data scientist of AI/data engineer heeft, is de keuze van het dataplatform wellicht minder belangrijk."},{id:"7ca2debe-b701-4e89-958d-6d3cff385de0",answer_text:"2-5",explanation_text:" Bij een teamgrootte van 2-5 data scientists of AI/data engineers is de keuze van het dataplatform belangrijker en dient rekening te houden met samenwerkingsvereisten en beveiligingsaspecten."},{id:"6687720c-ef4d-4663-8e79-a98694bb10d9",answer_text:"10+",explanation_text:"Bij een teamgrootte van 10 of meer data scientists of AI/data engineers wordt de keuze van het dataplatform van groter belang, waarbij schaalbaarheid, samenwerking, beveiliging en andere geavanceerde functionaliteiten van cruciaal belang zijn voor een effici\xEBnte en effectieve data-infrastructuur."}],explanation_text:"Deze vraag is bedoeld om inzicht te krijgen in het aantal data scientists en AI/data engineers dat gebruik zal maken van het platform, met bijzondere aandacht voor aspecten zoals beveiliging, samenwerking en andere functionaliteiten."},{id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",question_text:"Zijn de gegevens gelabeld, wat betekent dat ze zijn ge\xEFdentificeerd of gekenmerkt met specifieke categorie\xEBn of kenmerken?",type:"single",answers:[{id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",answer_text:"Ja, de data is voorzien van labels",explanation_text:"Volledig geannoteerde data is van essentieel belang is voor effectieve machine learning-modellen en analyses."},{id:"629c3eda-64d2-4768-a26d-e5a901c4e170",answer_text:"Nee, de data moet nog gelabeled worden",explanation_text:"Wanneer uw data nog gelabeled moet worden, wordt het aangeraden om van een annotatie tool gebruik te maken."},{id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",answer_text:"Ik weet niet of mijn data van een goede kwaliteit is",explanation_text:"Indien u niet weet of uw data goed geannoteerd is, kan het raadzaam zijn een grondige evaluatie uit te voeren, bij voorkeur met behulp van annotatietools of expertise, om de kwaliteit van de labels te verifi\xEBren voordat u een dataplatform kiest dat afhankelijk is van nauwkeurige annotaties."}],explanation_text:"Labels zijn essentieel voor machine learning-algoritmen om patronen te herkennen en taken zoals classificatie of voorspelling uit te voeren."}];var n={questions:e};const a=[{id:"963aaa51-8a46-4d213e-9808-d25ea810560c",title:"Databricks",description:"Databricks is een krachtig en ge\xEFntegreerd analytics-platform dat is gebouwd bovenop Apache Spark. Het biedt een gebruiksvriendelijke interface voor het uitvoeren van data-engineering, data science, en machine learning-taken. Databricks maakt het eenvoudig om grote hoeveelheden data te verwerken, te analyseren en inzichten te verkrijgen door middel van samenwerking, geavanceerde visualisaties en de mogelijkheid om verschillende programmeertalen te gebruiken, zoals Python, Scala, SQL en R. Het platform wordt vaak gebruikt voor real-time data-analyse, het bouwen van data pipelines en het versnellen van de ontwikkeling van machine learning-modellen.",link:"https://www.databricks.com/",img_link:"databricks_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"Databricks is goed in het visualiseren van data vanwege de naadloze integratie met populaire data-analysetools zoals Apache Spark en SQL. Het platform biedt gebruikers de mogelijkheid om krachtige grafieken en visualisaties te maken met behulp van tools zoals Matplotlib, Seaborn en Databricks' eigen visualisatiebibliotheek. Met de ondersteuning van verschillende programmeertalen zoals Python, Scala en R, kunnen gebruikers complexe analyses uitvoeren en deze gemakkelijk visualiseren voor beter inzicht en interpretatie van gegevens."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"e3e1cc59-5923-483a-94e7-986c96b757e0",explanation:'"Databricks wordt gehost op cloudplatforms zoals Amazon Web Services (AWS), Microsoft Azure en Google Cloud Platform (GCP)'},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"6b3b3542-9081-48c6-8e45-2e0556b25f67",explanation:'"Databricks wordt gehost op cloudplatforms zoals Amazon Web Services (AWS), Microsoft Azure en Google Cloud Platform (GCP)'},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"2ae2f467-4e22-47ba-9e0f-0d46a62c4f46",explanation:'"Databricks wordt gehost op cloudplatforms zoals Amazon Web Services (AWS), Microsoft Azure en Google Cloud Platform (GCP)'},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Databricks excelleert in ETL vanwege zijn schaalbaarheid met Apache Spark, ge\xEFntegreerde omgeving voor diverse databronnen, diverse datatransformatiemogelijkheden, automatisering en ondersteuning voor zowel batch- als streamingverwerking van gegevens."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Databricks excelleert in MLOps vanwege zijn ge\xEFntegreerde platform, schaalbaarheid, geavanceerde machine learning-mogelijkheden, automatisering en orkestratiefunctionaliteiten, en geavanceerde monitoring en beheermogelijkheden."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Wanneer u al gebruikt maakt van Databricks raden wij u aan om de functionaliteiten die al geimplementeerd zijn in databricks te gebruiken. Databricks is een volledig pakket en biedt out-of-the-box een groot scala aan functionaliteit omtremt MLops, DataOps, visualisatie en orkestratie."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:'Databricks kan gehost worden op AWS. U kunt gebruik blijven maken van alle functies die AWS u biedt en gemakkelijk Databricks aan uw huidige workflow toevoegen. Installatie en gebruik is makkelijk zie: link. '},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:`Databricks kan gehost worden op AZURE. U kunt gebruik blijven maken van alle functies die azure u biedt en gemakkelijk Databricks aan uw huidige workflow toevoegen. Installatie en gebruik is makkelijk zie: - link. `},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:`Databricks kan gehost worden op GCP. U kunt gebruik blijven maken van alle functies die GCP u biedt en gemakkelijk Databricks aan uw huidige workflow toevoegen. Installatie en gebruik is makkelijk zie: link. -`},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Databricks excelleert in DataOps vanwege zijn ge\xEFntegreerde platform, dat schaalbaarheid, automatisering, samenwerking en geavanceerde mogelijkheden voor data-engineering combineert, waardoor organisaties effectiever kunnen werken aan het beheren, transformeren en analyseren van data."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Databricks excelleert in business intelligence door zijn ge\xEFntegreerde platform dat geavanceerde data-analyse, visualisatie en rapportage mogelijk maakt, terwijl het ook schaalbaarheid, snelheid en samenwerking biedt, waardoor organisaties sneller inzichten kunnen genereren en betere beslissingen kunnen nemen op basis van hun data."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Databricks is niet open-source; het is een commercieel platform met gesloten broncode."},{question_id:"8aadcd11-ca15-4c09-b2d2-3159a318118b",answer_id:"735d232e-e287-4732-9728-d00c324343be",explanation:"Databricks beschikt over de mogelijkheid om taken te orchistreren via Airflow. Hierdoor heeft u minder nieuwe kennis nodig om Databricks toe te passen."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"De MLflow-variant van Databricks biedt u een intu\xEFtief overzicht van uw experimenten, en dankzij de toevoegingen van Databricks beschikt u over tal van extra functionaliteiten die niet beschikbaar zijn in de standaard open source variant."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'Dankzij Lakehouse monitoring is het nu mogelijk om model drift te detecteren. Voor meer informatie, zie: deze link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'De MLflow-variant van Databricks is verrijkt met extra functionaliteiten die specifiek zijn ontworpen voor LLMOps. Raadpleeg deze link voor meer details.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Met de krachtige combinatie van Apache Airflow en MLflow kunt u moeiteloos pipelines orkestreren, waardoor een naadloze en ge\xEFntegreerde workflow ontstaat voor het beheren van machine learning-experimenten en taken."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:'Dankzij Databricks AutoML kunnen machine learning modellen eenvoudig getraind en geselecteerd worden met slechts \xE9\xE9n druk op de knop. Voor meer informatie, zie: deze link.'},{question_id:"563dcdf3-985d-4e1b-b5c7-b7b24d2330a2",answer_id:"26449ee9-91a7-412e-ae0f-e43aaa744659",explanation:"Dankzij de robuuste Spark-integratie en ETL-mogelijkheden van Databricks is het real-time verwerken en weergeven van gegevens naadloos mogelijk."},{question_id:"563dcdf3-985d-4e1b-b5c7-b7b24d2330a2",answer_id:"76bf60df-0e36-4013-aa63-c11fd5a38eaa",explanation:"Door middel van orkestratie kunnen eenvoudig batchtaken worden ingesteld en uitgevoerd, waardoor het bijvoorbeeld moeiteloos is om een machine learning-model opnieuw te trainen en te publiceren."},{question_id:"563dcdf3-985d-4e1b-b5c7-b7b24d2330a2",answer_id:"1241c1e4-b038-42f1-be01-06f45bbb2179",explanation:"Databricks maakt gebruik van een aangepaste variant van MLflow met tal van extra functionaliteiten. Dit maakt Databricks een ideaal dataplatform voor een volledige end-to-end gegevensworkflow."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Databricks is ontworpen om te draaien op cloudinfrastructuur vanwege de complexe vereisten van schaalbaarheid, rekenkracht en opslag die nodig zijn voor het verwerken en analyseren van grote hoeveelheden gegevens. Het maakt gebruik van de cloud om flexibiliteit, resources en gemakkelijke toegang tot verschillende databronnen te bieden, waardoor het niet on-premise kan worden uitgevoerd."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'Het annoteren van data via Databricks is niet direct mogelijk. Voor data-annotatie wordt aanbevolen om gebruik te maken van externe tools, zoals Labelbox. Raadpleeg deze link voor meer details.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'Het annoteren van data via Databricks is niet direct mogelijk. Voor data-annotatie wordt aanbevolen om gebruik te maken van externe tools, zoals Labelbox. Raadpleeg deze link voor meer details.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Wanneer uw bedrijf nog niet actief is op een cloud platform is Databricks een goeie keuze om in gedachte te nemen. Het is een groot en compleet platform en biedt functionaliteiten voor MLOps maar ook voor het verwerken van grootschalige data."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'Dankzij de datalake van Databricks genaamd delta lake is het mogelijk om data drift te detecteren. Voor meer informatie, zie: deze link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Het publiceren en in gebruik nemen van machine learning modellen is mogelijk door het gebruiken van de MLflow model registry."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Databricks biedt geavanceerde samenwerkingsfuncties zoals real-time samenwerking in notebooks, gedeelde libraries en versiebeheer, waardoor teams effici\xEBnt kunnen samenwerken aan analyses en machine learning modellen. Role-Based Access Control (RBAC) is mogelijk in Databricks, waardoor gebruikersrechten kunnen worden beheerd op basis van rollen en verantwoordelijkheden. Databricks is geschikt voor teams van 5 of meer personen, waarbij de samenwerkingsfuncties optimaal kunnen worden benut, maar kan ook worden gebruikt door individuele gebruikers voor kleinere projecten."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Databricks biedt geavanceerde samenwerkingsfuncties zoals real-time samenwerking in notebooks, gedeelde libraries en versiebeheer, waardoor teams effici\xEBnt kunnen samenwerken aan analyses en machine learning modellen. Role-Based Access Control (RBAC) is mogelijk in Databricks, waardoor gebruikersrechten kunnen worden beheerd op basis van rollen en verantwoordelijkheden. Databricks is geschikt voor teams van 5 of meer personen, waarbij de samenwerkingsfuncties optimaal kunnen worden benut, maar kan ook worden gebruikt door individuele gebruikers voor kleinere projecten."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Databricks biedt geavanceerde samenwerkingsfuncties zoals real-time samenwerking in notebooks, gedeelde libraries en versiebeheer, waardoor teams effici\xEBnt kunnen samenwerken aan analyses en machine learning modellen. Role-Based Access Control (RBAC) is mogelijk in Databricks, waardoor gebruikersrechten kunnen worden beheerd op basis van rollen en verantwoordelijkheden. Databricks is geschikt voor teams van 5 of meer personen, waarbij de samenwerkingsfuncties optimaal kunnen worden benut, maar kan ook worden gebruikt door individuele gebruikers voor kleinere projecten."}],bad_compatible:[{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Databricks is niet open-source; het is een commercieel platform met gesloten broncode."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Databricks is ontworpen om te draaien op cloudinfrastructuur vanwege de complexe vereisten van schaalbaarheid, rekenkracht en opslag die nodig zijn voor het verwerken en analyseren van grote hoeveelheden gegevens. Het maakt gebruik van de cloud om flexibiliteit, resources en gemakkelijke toegang tot verschillende databronnen te bieden, waardoor het niet on-premise kan worden uitgevoerd."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Wanneer u zelf of via een provider kubernetes host, kan Databricks niet makkelijk aan uw huidige systeem toegevoegd worden. Wel kunt u Databricks hosten via Databricks, AWS, Azure of GCP en dat verbinden met uw Kubernetes oplossing."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Wanneer u niet van AWS, Azure of GCP gebruik maakt kan Databricks niet makkelijk aan u huidige systeem toegevoegd worden. Wel kunt u Databricks hosten via Databricks, AWS, Azure of GCP en dat verbinden met uw huidige oplossing."},{question_id:"8aadcd11-ca15-4c09-b2d2-3159a318118b",answer_id:"cb13fb65-7db4-4d52-b67f-39e885d023d4",explanation:"Wanneer u al van een datalake of warehouse oplossing gebruik maakt zal Databricks een overbodig pakket als functies bevatten zoals ETL en DataOps"},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:'Automatisch de optimale hyperparameters vinden is niet standaard ingebouwd in Databricks, maar het is vrij eenvoudig om dit te implementeren via code. Raadpleeg deze link voor gedetailleerde instructies.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'Het annoteren van data via Databricks is niet direct mogelijk. Voor data-annotatie wordt aanbevolen om gebruik te maken van externe tools, zoals Labelbox. Raadpleeg deze link voor meer details.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"Standaard ondersteunt Databricks geen data versioning, maar het is aanzienlijk eenvoudig om DVC te installeren en te integreren in de Databricks workflow voor effectieve data versioning."}]},{id:"963aaa51-8a46-4d4e-9808-d25ea81053210c",title:"Sagemaker",description:"Amazon SageMaker is een krachtig en volledig beheerd machine learning-platform dat wordt aangeboden door Amazon Web Services (AWS). Het stelt gebruikers in staat om gemakkelijk machine learning-modellen te bouwen, te trainen en te implementeren op schaal. SageMaker biedt een ge\xEFntegreerde ontwikkelomgeving met ingebouwde tools voor data labeling, modeltraining en modeldeployment, waardoor het proces van het ontwikkelen van machine learning-toepassingen vereenvoudigd wordt. Met SageMaker kunnen gebruikers verschillende algoritmen en frameworks gebruiken, zoals TensorFlow, PyTorch en Scikit-learn, en profiteren van schaalbare computingresources om snel en effici\xEBnt modellen te trainen. Bovendien maakt SageMaker het mogelijk om modellen gemakkelijk in productie te brengen met beheerde endpoints, waardoor ze naadloos kunnen worden ge\xEFntegreerd in operationele systemen en toepassingen.",link:"https://aws.amazon.com/sagemaker/",img_link:"sagemaker_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Hoewel ETL niet rechtstreeks mogelijk is in Amazon SageMaker, kunt u gebruikmaken van AWS-functies om ETL-taken uit te voeren, aangezien SageMaker een integraal onderdeel is van het AWS-ecosysteem."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS. SageMaker is gebouwd en geoptimaliseerd om te werken binnen het AWS-ecosysteem, waarbij gebruik wordt gemaakt van de AWS-infrastructuur, -services en API's. Het is nauw ge\xEFntegreerd met AWS-services zoals S3, IAM en andere."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"SageMaker vormt de kern van AWS' MLOps-aanbod en voorziet in alle essenti\xEBle functionaliteiten die nodig zijn voor het vlot en schaalbaar beheren van machine learning-processen. Met ge\xEFntegreerde tools en services biedt SageMaker ondersteuning bij diverse fasen van het end-to-end machine learning-traject, zoals datasetbeheer, modeltraining, hyperparameteroptimalisatie, implementatie en monitoring. Het dient als een krachtige oplossing binnen het brede spectrum van AWS-services. "},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"DataOps is niet direct mogelijk in Amazon SageMaker, maar aangezien SageMaker deel uitmaakt van AWS, kunt u gebruikmaken van AWS-functionaliteiten om DataOps-taken uit te voeren."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Directe visualisatie en inzicht in gegevens zijn niet ingebouwd in Amazon SageMaker. U zou echter gebruik kunnen maken van diverse AWS-functies om deze taken uit te voeren, aangezien SageMaker deel uitmaakt van het brede AWS-ecosysteem."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Het is mogelijk om met SageMaker ongelabelde data of foto's op een gestructureerde wijze te annoteren. Zie: link `},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"SageMaker beschikt over eigen functionaliteit voor het beheren en uitvoeren van experimenten, genaamd SageMaker Experiments. Bovendien biedt het de flexibiliteit om te integreren met MLflow, mocht dat de voorkeur hebben."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'SageMaker biedt functionaliteit voor het detecteren van datadrift. Meer informatie hierover is beschikbaar op: deze link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'SageMaker biedt functionaliteit voor het detecteren van model drift. Meer informatie hierover is beschikbaar op: deze link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'SageMaker biedt specifieke tools voor Large Language Model (LLM) operations. Voor meer gedetailleerde informatie over het operationeel maken van LLM-evaluatie op schaal met Amazon SageMaker Clarify en MLOps-services, kunt u de volgende link raadplegen link'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Het is mogelijk om met Sagemaker geavanceerde pipelines te orkestreren. Sagemaker is verbonden met het AWS ecosysteem wat het mogelijk maakt om state-of-the-art pipeline te cre\xEBren voor zowel uw data als machine learning vraagstukken,"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Met SageMaker is het mogelijk om met slechts \xE9\xE9n druk op de knop meerdere machine learning modellen te trainen. Deze functionaliteit maakt het effici\xEBnt en eenvoudig om diverse modellen te ontwikkelen en te vergelijken"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Het is niet mogelijk om een AWS- of SageMaker-instantie on-premise te draaien. Het is belangrijk om goed na te denken over de lokale capaciteiten, aangezien het schalen van instanties on-premise vaak uitdagender is en machine learning doorgaans aanzienlijke resources vereist."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS en is dus niet opensource of gratis."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Het is mogelijk om met SageMaker ongelabelde data of foto's op een gestructureerde wijze te annoteren. Zie: link `},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Het is mogelijk om met SageMaker ongelabelde data of foto's op een gestructureerde wijze te annoteren. Zie: link `},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS),. SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS. Het AWS ecosysteem is een goeie keuze om in gedachte te nemen als u nog niet gebruik maakt van een data platform aangezien het een gigantisch aantal functionaliteiten aanbied voor al uw data en machine learning vraagstukken."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Met SageMaker is het makkelijk om een een model te publiceren, computer kracht te geven en in gebruik te nemen."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Amazon SageMaker biedt functionaliteiten zoals het delen van notebooks, model artifacts en datasets, wat samenwerking binnen teams bevordert door het gemakkelijk maken om code en resultaten te delen. Echter, het mist native ondersteuning voor real-time samenwerking aan dezelfde notebook of documenten, wat de samenwerking van een team kan bemoeilijken. Role-Based Access Control (RBAC) is mogelijk in SageMaker, waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers binnen het platform. Gezien deze mogelijkheden zou SageMaker geschikt zijn voor teams van 5 of meer personen."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Amazon SageMaker biedt functionaliteiten zoals het delen van notebooks, model artifacts en datasets, wat samenwerking binnen teams bevordert door het gemakkelijk maken om code en resultaten te delen. Echter, het mist native ondersteuning voor real-time samenwerking aan dezelfde notebook of documenten, wat de samenwerking van een team kan bemoeilijken. Role-Based Access Control (RBAC) is mogelijk in SageMaker, waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers binnen het platform. Gezien deze mogelijkheden zou SageMaker geschikt zijn voor teams van 5 of meer personen."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Amazon SageMaker biedt functionaliteiten zoals het delen van notebooks, model artifacts en datasets, wat samenwerking binnen teams bevordert door het gemakkelijk maken om code en resultaten te delen. Echter, het mist native ondersteuning voor real-time samenwerking aan dezelfde notebook of documenten, wat de samenwerking van een team kan bemoeilijken. Role-Based Access Control (RBAC) is mogelijk in SageMaker, waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers binnen het platform. Gezien deze mogelijkheden zou SageMaker geschikt zijn voor teams van 5 of meer personen."}],bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), terwijl Databricks een cloud computing-platform is dat wordt aangeboden door Databricks . SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), terwijl Azure een cloud computing-platform is dat wordt aangeboden door Microsoft. SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), terwijl GCP een cloud computing-platform is dat wordt aangeboden door Google. SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS),. SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS). SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Het is niet mogelijk om een AWS- of SageMaker-instantie on-premise te gebruiken. Het is belangrijk om goed na te denken over de lokale capaciteiten, aangezien het schalen van instanties on-premise vaak uitdagender is en machine learning doorgaans aanzienlijke resources vereist."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Amazon SageMaker is een machine learning (ML)-service die wordt aangeboden door Amazon Web Services (AWS), SageMaker is een eigen service die speciaal is ontworpen en beheerd door AWS en is dus niet opensource of gratis."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Out-of-the-box ondersteunt SageMaker geen data versioning, maar u kunt dit zelf implementeren. Raadpleeg de volgende link voor meer informatie over het implementeren van data versioning in combinatie met SageMaker: link. '},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Standaard biedt SageMaker geen ingebouwde mogelijkheid om automatisch de optimale hyperparameters te vinden. U dient dit zelf te implementeren door bijvoorbeeld hyperparameter tuning-scripts te schrijven en te gebruiken."}],match:{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"Het is mogelijk om met Sagemaker ongelabelde data of fotos te annoterern. Zie: https://docs.aws.amazon.com/sagemaker/latest/dg/sms.html"}},{id:"963abb12-8a46-4d4e-9808-d25ea810560c",title:"Azure ML",description:"Azure Machine Learning (Azure ML) is een uitgebreid cloudgebaseerd platform van Microsoft voor het bouwen, trainen en implementeren van machine learning-modellen. Het biedt een reeks tools en services die ontwikkelaars en datawetenschappers ondersteunen bij het cre\xEBren van geavanceerde oplossingen voor data-analyse en AI. Met Azure ML kunnen gebruikers eenvoudig experimenten uitvoeren, modellen bouwen met populaire frameworks zoals TensorFlow, PyTorch, en scikit-learn, en deze modellen opschalen met behulp van krachtige rekenbronnen in de cloud. Het platform biedt functionaliteiten voor geautomatiseerde machine learning (AutoML) die het proces van modelselectie, -training en -implementatie vereenvoudigen voor gebruikers zonder uitgebreide expertise op het gebied van machine learning. Azure ML ondersteunt ook de implementatie van modellen met behulp van gecontaineriseerde oplossingen en biedt mogelijkheden voor het monitoren van modelprestaties en het beheren van de levenscyclus van machine learning-modellen. Door integratie met andere Azure-services kunnen gebruikers profiteren van een breed scala aan mogelijkheden voor gegevensbeheer, beveiliging en schaalbaarheid, waardoor ze end-to-end oplossingen kunnen bouwen voor hun machine learning- en AI-projecten in de cloud.",link:"https://azure.microsoft.com/nl-nl/products/machine-learning",img_link:"azureml_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"Nice"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"6b3b3542-9081-48c6-8e45-2e0556b25f67",explanation:"Perfecte match"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en is de makkelijkste en beste optie wanneer u als gebruik maakt van azure vanwege een dichte en goede integratie van functionaliteiten in beide."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Hoewel ETL niet direct ingebouwd is in Azure Machine Learning, kunt u gebruikmaken van de uitgebreide mogelijkheden binnen het Azure-ecosysteem om ETL-taken uit te voeren. Hierbij kunt u specifieke Azure-services benutten voor effectieve Extract, Transform, Load (ETL)-processen."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Azure Machine Learning (Azure ML) vormt het kerncomponent voor MLOps binnen het uitgebreide Azure-ecosysteem. Met een uitgebreide reeks functionaliteiten biedt Azure ML ondersteuning voor het naadloos en schaalbaar beheren van diverse machine learning-processen. Ingebouwd met essenti\xEBle tools en services, begeleidt Azure ML gebruikers door het gehele end-to-end machine learning-traject, inclusief datasetbeheer, modeltraining, hyperparameteroptimalisatie, implementatie en monitoring. Als een krachtige en ge\xEFntegreerde oplossing binnen het brede spectrum van Azure-services, stelt Azure ML gebruikers in staat geavanceerde machine learning-modellen te ontwikkelen en operationeel te maken."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"DataOps is niet direct ingebouwd in Azure Machine Learning, maar omdat Azure ML deel uitmaakt van het bredere Azure-ecosysteem, kunt u gebruikmaken van functies binnen Azure om DataOps-taken uit te voeren en uw gegevensworkflow te beheren."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Directe visualisatie en inzicht verkrijgen in gegevens is niet ingebouwd in Azure Machine Learning. U dient echter gebruik te maken van de rijke functionaliteiten binnen het bredere Azure-ecosysteem om data-visualisatie en inzichten te genereren."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Het is mogelijk om via Azure Machine Learning uw data of foto's te annoteren. Voor gedetailleerde informatie over het labelen van data kunt u de volgende link raadplegen: Zie: link.`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Het is mogelijk om met behulp van tools binnen Azure Machine Learning experimenten te cre\xEBren en uitgebreide inzichten te verkrijgen. Hiermee kunt u diepgaande analyses uitvoeren en de resultaten van uw machine learning-experimenten effectief beoordelen."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:`Data drift kan worden gedetecteerd met behulp van Azure Machine Learning. Voor gedetailleerde informatie over het monitoren van datasets en het detecteren van data drift, kunt u de volgende link raadplegen: -link.`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"Azure Machine Learning (Azure ML) biedt de mogelijkheid om model drift te detecteren door middel van een visuele indicatie in hun dashboard. Hierdoor kunnen gebruikers eenvoudig en effectief veranderingen in de prestaties van machine learning-modellen waarnemen en evalueren via een overzichtelijk en intu\xEFtief interface. Deze functie draagt bij aan het proactief beheren en onderhouden van modellen in productie, waardoor organisaties de nauwkeurigheid en relevantie van hun modellen over de tijd kunnen monitoren en handhaven."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'Azure Machine Learning biedt specifieke functionaliteit die gericht is op het operationeel maken en trainen van Large Language Models. Voor een introductie en meer informatie over LLMOps, kunt u de volgende link raadplegen: link .'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Azure Machine Learning biedt tools om de versies van uw datasets bij te houden en op te slaan. Voor meer informatie over het versiebeheer en bijhouden van datasets kunt u de volgende link raadplegen: link . '},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Binnen het uitgebreide ecosysteem van Azure is het mogelijk om pipelines te cre\xEBren voor zowel DataOps als MLOps. Deze pipelines bieden een gestroomlijnde en geautomatiseerde workflow voor het beheren van zowel gegevensbewerking als machine learning-operaties. Door gebruik te maken van de diverse services en tools binnen Azure, kunnen gebruikers end-to-end processen opzetten, waaronder gegevensverwerking, modeltraining, implementatie en monitoring. "},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Azure ML stelt gebruikers in staat om met slechts \xE9\xE9n klik op de knop meerdere machine learning-modellen te trainen en te testen, zonder dat hiervoor aanvullende code geschreven hoeft te worden. Deze geautomatiseerde mogelijkheid vereenvoudigt en versnelt het experimenteerproces, waardoor gebruikers snel inzicht kunnen krijgen in de prestaties van verschillende modellen zonder uitgebreide handmatige interventies. "},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Het is mogelijk om machine learning-modellen in Azure Machine Learning te publiceren. De gepubliceerde modellen zijn eenvoudig toegankelijk via API-calls, waardoor gebruikers een gestroomlijnde en flexibele manier hebben om hun machine learning-modellen in productieomgevingen te integreren."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op azure. Het is dus niet mogelijk om lokaal een variant hiervan te gebruiken"},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op azure. het is niet opensource en niet gratis."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar gaat wel vaak ten kosten van functionaliteit"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Het is mogelijk om via Azure Machine Learning uw data of foto's te annoteren. Voor gedetailleerde informatie over het labelen van data kunt u de volgende link raadplegen: Zie: link.`},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Het is mogelijk om via Azure Machine Learning uw data of foto's te annoteren. Voor gedetailleerde informatie over het labelen van data kunt u de volgende link raadplegen: Zie: link.`},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op Azure. Het Azure ecosysteem is een goeie keuze om in gedachte te nemen als u nog niet gebruik maakt van een data platform aangezien het een gigantisch aantal functionaliteiten aanbied voor al uw data en machine learning vraagstukken."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Azure ML biedt functionaliteiten zoals versiebeheer van modellen, collaboratieve experimenten en gedeelde datasets, die samenwerking binnen teams bevorderen. Echter, het mist mogelijkheden voor real-time samenwerking in code-editing om gelijktijdige aanpassingen te faciliteren. Role-Based Access Control (RBAC) is mogelijk in Azure ML. Het systeem is geschikt voor teams van alle groottes, inclusief teams van 1, 5 of meer dan 10 personen, vanwege de schaalbaarheid en flexibiliteit van de dienst."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Azure ML biedt functionaliteiten zoals versiebeheer van modellen, collaboratieve experimenten en gedeelde datasets, die samenwerking binnen teams bevorderen. Echter, het mist mogelijkheden voor real-time samenwerking in code-editing om gelijktijdige aanpassingen te faciliteren. Role-Based Access Control (RBAC) is mogelijk in Azure ML. Het systeem is geschikt voor teams van alle groottes, inclusief teams van 1, 5 of meer dan 10 personen, vanwege de schaalbaarheid en flexibiliteit van de dienst."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Azure Machine Learning (Azure ML) biedt functionaliteiten zoals versiebeheer van modellen, collaboratieve experimenten en gedeelde datasets, die samenwerking binnen teams bevorderen. Echter, het mist mogelijkheden voor real-time samenwerking in code-editing om gelijktijdige aanpassingen te faciliteren. Role-Based Access Control (RBAC) is mogelijk in Azure ML. Het systeem is geschikt voor teams van alle groottes, inclusief teams van 1, 5 of meer dan 10 personen, vanwege de schaalbaarheid en flexibiliteit van de dienst."}],bad_compatible:[{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"e3e1cc59-5923-483a-94e7-986c96b757e0",explanation:"Kan niet"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"2ae2f467-4e22-47ba-9e0f-0d46a62c4f46",explanation:"Kan niet"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan niet gebruikt worden in databricks. Het is mogelijk om een Azure variant van Databricks te gebruiken."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan niet gebruikt worden in AWS."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan niet gebruikt worden in GCP."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan niet gebruikt worden in op een gehoste kubernetes architectuur."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op Azure."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op azure. Het is dus niet mogelijk om lokaal een variant hiervan te gebruiken"},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar gaat wel vaak ten kosten van functionaliteit"},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Azure Machine Learning (Azure ML) is de cloudgebaseerde machine learning-service van Microsoft en kan alleen gebruikt worden op azure. het is niet opensource en niet gratis."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Het is niet mogelijk om automatisch de optimale hyperparameters te vinden in Azure Machine Learning. Voor het optimaliseren van hyperparameters is aanvullend werk en mogelijk het gebruik van hyperparameter tuning-technieken vereist."}],match:{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"Het is mogelijk om via Azure ML uw data of fotos te annoteren. Zie: https://learn.microsoft.com/en-us/azure/machine-learning/how-to-label-data?view=azureml-api-2"}},{id:"964aaa51-8a46-4d4e-9808-d25ea810560c",title:"Vertex ai",description:"Vertex AI is een uitgebreid machine learning-platform van Google Cloud voor het bouwen, trainen en implementeren van AI-modellen in de cloud. Het biedt een scala aan tools en services die ontwikkelaars en datawetenschappers ondersteunen bij het cre\xEBren van geavanceerde oplossingen voor data-analyse en AI. Met Vertex AI kunnen gebruikers moeiteloos experimenten uitvoeren, modellen bouwen met populaire frameworks zoals TensorFlow en scikit-learn, en deze schalen met behulp van krachtige cloudrekenbronnen. Het platform omvat functionaliteiten voor geautomatiseerd machine learning (AutoML), waardoor het proces van modelselectie, -training en -implementatie wordt vereenvoudigd voor gebruikers zonder diepgaande expertise op het gebied van machine learning. Vertex AI ondersteunt ook de implementatie van modellen met behulp van gecontaineriseerde oplossingen en biedt mogelijkheden voor het monitoren van modelprestaties en het beheren van de levenscyclus van AI-modellen. Met integratie met andere Google Cloud-services kunnen gebruikers profiteren van een breed scala aan mogelijkheden voor gegevensbeheer, beveiliging en schaalbaarheid, waardoor ze end-to-end oplossingen kunnen bouwen voor hun AI- en machine learning-projecten in de cloud.",link:"https://cloud.google.com/vertex-ai?hl=nl",img_link:"vertex_logo.png",good_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"Nice"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"2ae2f467-4e22-47ba-9e0f-0d46a62c4f46",explanation:"Yes"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"c7e8fbb4-936d-47e7-b2fe-6d21b0be5235",explanation:"Yes"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Vertex AI, de vooruitstrevende cloudgebaseerde machine learning-service van Google, is nauwgezet ontworpen om naadloos te integreren met het Google Cloud Platform (GCP). Hierdoor biedt het een perfecte synergie met de uitgebreide cloudservices van Google."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Google Cloud biedt een ge\xEFntegreerde Kubernetes-service genaamd Google Kubernetes Engine (GKE), die speciaal is ontworpen om Kubernetes-clusters eenvoudig te maken en te beheren in de cloud. Hoewel Vertex AI geen specifieke ondersteuning biedt voor het uitvoeren van Kubernetes-clusters zoals Google Kubernetes Engine (GKE), kan Kubernetes worden gebruikt in combinatie met Vertex AI voor het implementeren en beheren van machine learning-workloads."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Hoewel ETL niet rechtstreeks mogelijk is met Vertex AI, aangezien het een integraal onderdeel is van Google Cloud Platform (GCP), kunt u gebruikmaken van de diverse functies binnen GCP om effectief Extract, Transform, Load (ETL)-taken uit te voeren."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Vertex AI is de geavanceerde MLops-tool binnen het ecosysteem van Google Cloud Platform (GCP). Deze krachtige tool is specifiek ontworpen om het volledige spectrum van machine learning-operaties te ondersteunen, van data-invoer tot modelimplementatie."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Terwijl DataOps niet direct ingebouwd is in Vertex AI, als een essentieel onderdeel van Google Cloud Platform (GCP), kunt u gebruikmaken van de diverse functies binnen GCP om DataOps-taken uit te voeren en uw gegevensworkflow effectief te beheren."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Hoewel het verkrijgen van inzichten en het maken van visualisaties niet direct ingebouwd is in Vertex AI, als een ge\xEFntegreerd onderdeel van Google Cloud Platform (GCP), kunt u gebruikmaken van de diverse functies binnen GCP om deze taken effectief uit te voeren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Het is mogelijk om experimenten te volgen via TensorBoard in Vertex AI."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'Het is mogelijk om datadrift te detecteren in uw data met behulp van Vertex AI. Zie: link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'Het is mogelijk om modeldrift te detecteren met behulp van Vertex AI. Zie: link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Binnen Vertex AI en de uitgebreide functionaliteiten van Google Cloud Platform (GCP) is het mogelijk om zowel DataOps-pipelines als MLOps-pipelines te cre\xEBren en uit te voeren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Met Vertex AI is het mogelijk om met \xE9\xE9n druk op de knop meerdere machine learning modellen te trainen zonder de noodzaak van handmatige codering."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Het is mogelijk om met Vertex AI data, objecten of foto's te annoteren. Voor gedetailleerde instructies, zie link.`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Met Vertex AI is het mogelijk om machine learning-modellen te publiceren en eenvoudig aan te roepen via API-calls. "},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en is exclusief beschikbaar op het Google Cloud Platform (GCP). Het is daarom niet mogelijk om een lokale variant van Vertex AI te gebruiken."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en is exclusief beschikbaar op het Google Cloud Platform (GCP). Het is daarom niet mogelijk om een lokale of gratis variant van Vertex AI te gebruiken."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar gaat ten kosten van functionaliteit"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Het is mogelijk om met Vertex AI data, objecten of foto's te annoteren. Voor gedetailleerde instructies, zie link.`},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Het is mogelijk om met Vertex AI data, objecten of foto's te annoteren. Voor gedetailleerde instructies, zie link.`},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Vertex AI, de cloudgebaseerde machine learning-service van Google, is exclusief ontwikkeld voor gebruik binnen het Google Cloud Platform (GCP) en kan niet worden ge\xEFnstalleerd of uitgevoerd op andere cloudproviders. Het GCP ecosysteem is een goeie keuze om in gedachte te nemen als u nog niet gebruik maakt van een data platform aangezien het een gigantisch aantal functionaliteiten aanbied voor al uw data en machine learning vraagstukken."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Vertex AI bevordert samenwerking door middel van ge\xEFntegreerde tools voor modelversiebeheer, waardoor teams gemakkelijk modellen kunnen delen, controleren en implementeren. Het ontbreken van ingebouwde collaboratieve documentatie- en notitiefunctionaliteit kan echter de samenwerking bemoeilijken. Role-Based Access Control (RBAC) is mogelijk in Vertex AI, waardoor teams toegangsrechten kunnen beheren op basis van rollen en verantwoordelijkheden. Dit systeem kan effectief worden gebruikt voor teams van 5 personen of meer, waarbij de structuur en controle van RBAC van grotere waarde zijn."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Vertex AI bevordert samenwerking door middel van ge\xEFntegreerde tools voor modelversiebeheer, waardoor teams gemakkelijk modellen kunnen delen, controleren en implementeren. Role-Based Access Control (RBAC) is mogelijk in Vertex AI, waardoor teams toegangsrechten kunnen beheren op basis van rollen en verantwoordelijkheden. Dit systeem kan effectief worden gebruikt voor teams van 5 personen of meer, waarbij de structuur en controle van RBAC van grotere waarde zijn."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Vertex AI bevordert samenwerking door middel van ge\xEFntegreerde tools voor modelversiebeheer, waardoor teams gemakkelijk modellen kunnen delen, controleren en implementeren. Role-Based Access Control (RBAC) is mogelijk in Vertex AI, waardoor teams toegangsrechten kunnen beheren op basis van rollen en verantwoordelijkheden. Dit systeem kan effectief worden gebruikt voor teams van 5 personen of meer, waarbij de structuur en controle van RBAC van grotere waarde zijn."}],bad_compatible:[{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"e3e1cc59-5923-483a-94e7-986c96b757e0",explanation:"Nope"},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"6b3b3542-9081-48c6-8e45-2e0556b25f67",explanation:"Nope"},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en is exclusief beschikbaar op het Google Cloud Platform (GCP). Het is daarom niet mogelijk om een lokale of gratis variant van Vertex AI te gebruiken."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en kan niet worden ge\xEFnstalleerd of uitgevoerd op Databricks, aangezien deze platformen van verschillende cloudproviders zijn."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en kan niet worden ge\xEFnstalleerd of uitgevoerd op AWS, aangezien deze platformen van verschillende cloudproviders zijn."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en kan niet worden ge\xEFnstalleerd of uitgevoerd op Azure, aangezien deze platformen van verschillende cloudproviders zijn."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Vertex AI, de cloudgebaseerde machine learning-service van Google, is exclusief ontwikkeld voor gebruik binnen het Google Cloud Platform (GCP) en kan niet worden ge\xEFnstalleerd of uitgevoerd op andere cloudproviders."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Vertex AI is de cloudgebaseerde machine learning-service van Google en is exclusief beschikbaar op het Google Cloud Platform (GCP). Het is daarom niet mogelijk om een lokale variant van Vertex AI te gebruiken."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar gaat ten kosten van functionaliteit"},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:"GCP, inclusief Vertex AI, biedt op dit moment geen specifieke functionaliteit voor het operationeel maken of trainen van Large Language Models. Echter, deze taken kunnen wel worden uitgevoerd via MLops, waarbij gebruik wordt gemaakt van bredere machine learning-operationele praktijken."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"Data versioning is momenteel niet ingebouwd in Vertex AI of GCP, maar er zijn mogelijkheden om dit zelf te implementeren en te beheren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Automatisch de optimale hyperparameters vinden is momenteel niet direct ingebouwd in Vertex AI, maar het is nog steeds mogelijk om dit te implementeren via aangepaste code."}]},{id:"ee8b301a-22ab-4e40-9ad7-3e38cc9e3723",title:"KubeFlow",description:"Kubeflow is een open-source platform dat is ontworpen om machine learning workflows te orkestreren en te beheren op Kubernetes, waardoor het eenvoudiger wordt om schaalbare, draagbare en reproduceerbare AI-modellen te ontwikkelen, trainen en implementeren in productieomgevingen.",link:"https://www.kubeflow.org/",img_link:"kubeflow_logo.png",bad_compatible:[{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Databricks ondersteunt momenteel geen uitvoering van een Kubernetes-cluster."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"KubeFlow's MLOps-tooling omvat momenteel geen functionaliteit voor het detecteren van Data Drift."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"De MLOps-tooling van KubeFlow omvat op dit moment geen functionaliteit voor het detecteren van Model Drift."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:"KubeFlow biedt geen out-of-the-box tooling voor Large Language Model Operations (LLMOps). Het is echter wel mogelijk om de reguliere MLOps-functionaliteit te gebruiken voor het ontwikkelen van een Large Language Model."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"KubeFlow biedt geen out-of-the-box tooling voor data versioning. Niettemin is het wel mogelijk om gebruik te maken van de reguliere MLOps-functionaliteit voor het ontwikkelen van een Large Language Model."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Het is momenteel niet mogelijk om automatisch de optimale hyperparameters te vinden via KubeFlow. Desalniettemin kan deze functionaliteit nog steeds worden ge\xEFmplementeerd met behulp van aangepaste code."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"Hoewel het niet mogelijk is om met de beschikbare tools in KubeFlow data te annoteren, is het wel eenvoudig om zelf tools te installeren door gebruik te maken van containerisatie in Kubernetes."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Helaas biedt KubeFlow niet de mogelijkheid om diepgaande inzichten in uw data te verkrijgen voor het nemen van weloverwogen zakelijke beslissingen. Het is echter wel mogelijk om dit zelf toe te voegen door zelf de tooling aan Kubernetes toe te voegen."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Kubeflow biedt functionaliteiten zoals gedeelde Jupyter Notebooks en geautomatiseerde modeldeployments die de samenwerking binnen teams bevorderen. Het mist echter een ge\xEFntegreerde functie voor code review en collaboratieve modelversiebeheer, wat de samenwerking kan belemmeren. Role-Based Access Control (RBAC) is mogelijk. Kubeflow kan effectief worden gebruikt voor teams van 5 of meer personen, maar voor kleinere teams van 1-4 personen kan het mogelijk te uitgebreid zijn."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Wanneer u een Kubernetes-cluster op AWS uitvoert, is het mogelijk om KubeFlow te gebruiken. Het wordt aanbevolen om KubeFlow te overwegen als uw bedrijf diep ge\xEFntegreerd is met Kubernetes. Als u echter veel gebruik maakt van AWS-functionaliteiten, is Amazon SageMaker ook een geschikte oplossing."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Wanneer u een Kubernetes-cluster op Azure draait, is het mogelijk om KubeFlow te gebruiken. Het wordt aanbevolen om KubeFlow te overwegen als uw bedrijf diep ge\xEFntegreerd is met Kubernetes. Als u echter veel gebruik maakt van Azure-functionaliteiten, is Azure Machine Learning ook een geschikte oplossing."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Wanneer u een Kubernetes-cluster op GCP draait, is het mogelijk om KubeFlow te gebruiken. Het wordt aanbevolen om KubeFlow te overwegen als uw bedrijf diep ge\xEFntegreerd is met Kubernetes. Als u echter veel gebruik maakt van GCP-functionaliteiten, is Vertex AI ook een geschikte oplossing."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Indien u al gebruikmaakt van Kubernetes, is Kubeflow een uitstekende keuze om naadloos te integreren in uw bestaande workflow."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Kubeflow maakt gebruik van Argo, waardoor de integratie van ETL in uw workflow mogelijk is. Dankzij containerisatie in Kubernetes heeft u tevens de flexibiliteit om zelf een ETL-bibliotheek te implementeren en te koppelen, bijvoorbeeld met tools zoals Airflow."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Met Kubeflow heeft u toegang tot een divers scala aan MLOps-tools. Wat het onderscheidt van andere tools is de mogelijkheid om, dankzij de containerisatie in Kubernetes, zelf gewenste MLOps-functionaliteit toe te voegen."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Kubeflow maakt gebruik van Argo, wat de integratie van ETL in uw workflow mogelijk maakt. Dankzij de containerisatie in Kubernetes heeft u bovendien de mogelijkheid om zelf een DataOps-bibliotheek te implementeren en te koppelen, bijvoorbeeld met tools zoals Airflow."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Kubeflow kan uitsluitend worden ge\xEFntegreerd in Kubernetes. Omdat Kubernetes niet specifiek gebonden is aan een bepaald platform, kan het op diverse manieren worden ingezet. Wanneer een Kubernetes-instantie draait in de cloud, kan Kubeflow worden ge\xEFnstalleerd."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Kubeflow is een opensource-project en kan alleen worden ge\xEFntegreerd in Kubernetes. Als u lokaal Kubernetes draait, kan Kubeflow eenvoudig worden ge\xEFnstalleerd en ge\xEFntegreerd in uw lokale omgeving."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:'Kubeflow is een gratis en open-source platform. Zie: link.'},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:'Kubeflow is een gratis en open-source platform. Zie: link.'},{question_id:"8aadcd11-ca15-4c09-b2d2-3159a318118b",answer_id:"d8d29384-8b01-47ab-848a-c5ae13cc5baa",explanation:"Indien u reeds gebruikmaakt van Kubernetes, vormt Kubeflow een uitstekende keuze, waardoor het naadloos integreert in uw bestaande workflow en zo een geoptimaliseerde ervaring biedt."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Dankzij KubeFlow pipelines kunt u op een moeiteloze wijze uw experimenten traceren en beheren, waardoor het proces van experimentatie en beheer aanzienlijk wordt vereenvoudigd."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Met KubeFlow pipelines is het mogelijk om pipelines te orkestreren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Met KubeFlow AutoML kun je met \xE9\xE9n druk op de knop moeiteloos meerdere machine learning modellen trainen en testen, zonder dat je code hoeft te schrijven."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Hou er rekening mee dat grote dataplatforms aanzienlijk veel tijd en kennis kosten om op te zetten. Een simpelere oplossing is mogelijk maar kost vaak wel functionaliteit"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:"Hoewel het niet mogelijk is om met de beschikbare tools in KubeFlow data te annoteren, is het wel eenvoudig om zelf tools te installeren door gebruik te maken van containerisatie in Kubernetes."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:"Hoewel het niet mogelijk is om met de beschikbare tools in KubeFlow data te annoteren, is het wel eenvoudig om zelf tools te installeren door gebruik te maken van containerisatie in Kubernetes."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Als u van Kubeflow gebruik wilt maken dat moet u onderliggend van Kubernetes gebruik maken. Wanneer u dit doet dan is Kubeflow een uitstekende keuze om te gebruiken als een dataplatform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Als u een cloud platform heeft gekozen kijk dan goed of u van Kubernetes gebruik wilt maken. Zo ja, dan is Kubeflow een uitstekende keuze."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:'Met de Kubeflow tool genaamd MLRun serving kunt in getrainde modellen publiceren en in gebruik nemen. Zie link.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Kubeflow biedt functionaliteiten zoals gedeelde Jupyter Notebooks en geautomatiseerde modeldeployments die de samenwerking binnen teams bevorderen. Het mist echter een ge\xEFntegreerde functie voor code review en collaboratieve modelversiebeheer, wat de samenwerking kan belemmeren. Role-Based Access Control (RBAC) is mogelijk. Kubeflow kan effectief worden gebruikt voor teams van 5 of meer personen, maar voor kleinere teams van 1-4 personen kan het mogelijk te uitgebreid zijn."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Kubeflow biedt functionaliteiten zoals gedeelde Jupyter Notebooks en geautomatiseerde modeldeployments die de samenwerking binnen teams bevorderen. Het mist echter een ge\xEFntegreerde functie voor code review en collaboratieve modelversiebeheer, wat de samenwerking kan belemmeren. Based Access Control (RBAC) is mogelijk. Kubeflow kan effectief worden gebruikt voor teams van 5 of meer personen, maar voor kleinere teams van 1-4 personen kan het mogelijk te uitgebreid zijn."}]},{id:"994c4786-2a83-40e6-9ada-72b4f80268ee",title:"H2O.AI",description:"H2O.ai democratiseert machine learning voor zakelijke gebruikers door een suite van tools aan te bieden. Hun primaire platform, H2O, maakt het mogelijk ML-modellen te bouwen en in te zetten met een gebruiksvriendelijke webinterface. Deep Water breidt dit uit met een hechtere integratie voor GPU-gebaseerd deep learning, Sparkling Water integreert met Apache Spark en Steam is een bedrijfsoplossing voor het inzetten van ML-modellen via API's. Driverless AI vereenvoudigt modelontwikkeling voor niet-technische gebruikers door taken als feature engineering en algoritmeselectie te automatiseren.",link:"https://h2o.ai/",img_link:"h2o_logo.png",bad_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"H2O.AI biedt geen specifieke mogelijkheden voor DataOps. Wel hebben ze partnerships met verschillende bedrijven die dit wel aanbieden."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Hoewel H2O.AI geen ingebouwde functionaliteit biedt om automatisch optimale hyperparameters te vinden, kan dit nog steeds ge\xEFmplementeerd worden via code."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Databricks fungeert als een geavanceerd dataplatform en is een serviceprovider. Het is momenteel niet mogelijk om H2O.AI rechtstreeks op Databricks te installeren."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"H2O.AI biedt geen specifieke mogelijkheden voor ETL (Extract, Transform, Load). Wel hebben ze een partnership met KNIME wat een opensource ETL tool is. Dit maakt het wel mogelijk maar heeft wel extra tooling dus nodig,"},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:'H2O.AIO biedt mogelijkheden voor BI maar dit vereist wel veel programmeer werk. Het biedt geen visualisatie mogelijkheden. Zie de link voor meer informatie.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"H2O.ai mist echter mogelijkheden voor geavanceerde model interpretatie en samenwerkingsfuncties zoals ge\xEFntegreerde codeversiebeheer, wat de samenwerking kan tegenzitten. Role-Based Access Control (RBAC) is mogelijk via integratie met externe tools zoals LDAP of Active Directory. H2O.ai is geschikt voor teams van 5 personen of meer, waarbij het schaalbaarheid biedt voor grotere teams, maar mogelijk te uitgebreid is voor een individueel gebruiker."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"H2O.AI is een opensource-oplossing en daardoor niet beperkt tot een specifieke leverancier. Het kan worden ingezet op verschillende cloud-instanties."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"H2O.AI is een gespecialiseerde tool voor MLOps, ontworpen om machine learning workflows effici\xEBnt te beheren en te optimaliseren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:'Het is mogelijk om via H2O.AI drift in de data te detecteren. Raadpleeg de link voor meer gedetailleerde informatie.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"H2O.AI maakt het mogelijk om model drift te detecteren. Hiermee kun je veranderingen in data identificeren en proactief reageren op verschuivingen in de gegevensdistributie, om de modelprestaties te handhaven."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Met de H2O.AI Feature Store kunt u eenvoudig versies van uw dataset bijhouden. Zie de link voor meer informatie.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"H2O.AI is een opensource-oplossing en daardoor niet beperkt tot een specifieke leverancier. Het kan worden ingezet op verschillende cloud-instanties."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"H2O.AI is een opensource-oplossing en daardoor niet beperkt tot een specifieke leverancier. Het kan worden ingezet op verschillende cloud-instanties."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"H2O.AI is een opensource-oplossing en daardoor niet beperkt tot een specifieke leverancier. Het kan worden ingezet op verschillende cloud-instanties."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"H2O.AI is een opensource-oplossing en daardoor niet beperkt tot een specifieke leverancier. Het kan worden ingezet op verschillende cloud-instanties."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"H2O.AI is een opensource-tool die zowel on-premise als in de cloud kan worden ge\xEFnstalleerd en uitgevoerd. Daarnaast biedt H2O.AI de optie om tegen betaling gebruik te maken van hun servers, waardoor gebruikers flexibiliteit hebben in hun implementatiekeuzes."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"H2O.AI is een opensource-tool die zowel on-premise als in de cloud kan worden ge\xEFnstalleerd en uitgevoerd. Daarnaast biedt H2O.AI de optie om tegen betaling gebruik te maken van hun servers, waardoor gebruikers flexibiliteit hebben in hun implementatiekeuzes."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"H2O.AI is een opensource-tool die zowel on-premise als in de cloud kan worden ge\xEFnstalleerd en uitgevoerd. Daarnaast biedt H2O.AI de optie om tegen betaling gebruik te maken van hun servers, waardoor gebruikers flexibiliteit hebben in hun implementatiekeuzes."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"H2O.AI is een opensource-tool die zowel on-premise als in de cloud kan worden ge\xEFnstalleerd en uitgevoerd. Daarnaast biedt H2O.AI de optie om tegen betaling gebruik te maken van hun servers, waardoor gebruikers flexibiliteit hebben in hun implementatiekeuzes."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"H2O.AI onderscheidt zich door zijn gebruiksvriendelijkheid, met een installatieproces dat aanzienlijk eenvoudiger is in vergelijking met andere tools in hetzelfde domein. Deze toegankelijkheid strekt zich ook uit tot het gebruik, waarbij H2O.AI intu\xEFtieve functies biedt die het gemakkelijker maken voor gebruikers om effectief met de tool te werken. Deze focus op gebruiksgemak maakt H2O.AI een aantrekkelijke keuze voor diegenen die op zoek zijn naar een krachtig maar toch toegankelijk platform voor machine learning."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Het opzetten van experimenten met H2O.AI kan op verschillende manieren worden uitgevoerd. H2O.AI biedt afzonderlijke experimentele tools voor elk van hun componenten, zoals driverless.ai of Hydrogen Torch. Deze benadering stelt gebruikers in staat om specifieke tools te kiezen die het beste aansluiten bij hun behoeften, en biedt flexibiliteit in het aanpakken van diverse machine learning-experimenten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'H2O.AI heeft aanzienlijk ge\xEFnvesteerd in LLMOps (Large Language Model Operations) en is daardoor uitgegroeid tot een van de beste tools voor het ontwikkelen en implementeren van LLM. Raadpleeg de link voor meer informatie.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Het gebruik van H2O.ASSEMBLY en Scikit-pipelines maakt het mogelijk om pipelines te orkestreren. Weinig documentatie is hierover te vinden hoe geavanceerd deze functionaliteit is.."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:'H2O.AI biedt een krachtige tool genaamd Driverless AI, waarmee met \xE9\xE9n druk op de knop meerdere machine learning modellen kunnen worden getraind en getest. Zie de link voor meer informatie.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`H2O.AI biedt geavanceerde tooling voor het annoteren van zowel data als foto's. Voor meer informatie, raadpleeg de link.`},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"H2O.AI onderscheidt zich door zijn gebruiksvriendelijkheid, met een installatieproces dat aanzienlijk eenvoudiger is in vergelijking met andere tools in hetzelfde domein. Deze toegankelijkheid strekt zich ook uit tot het gebruik, waarbij H2O.AI intu\xEFtieve functies biedt die het gemakkelijker maken voor gebruikers om effectief met de tool te werken. Deze focus op gebruiksgemak maakt H2O.AI een aantrekkelijke keuze voor diegenen die op zoek zijn naar een krachtig maar toch toegankelijk platform voor machine learning."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`H2O.AI biedt geavanceerde tooling voor het annoteren van zowel data als foto's. Voor meer informatie, raadpleeg de link.`},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`H2O.AI biedt geavanceerde tooling voor het annoteren van zowel data als foto's. Voor meer informatie, raadpleeg de link.`},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"H2O.AI is opensource en dus niet afhankelijk van een cloudplatform. Doe onderzoek of u gebruik wilt maken van het cloud platform van H2O.AI of dat u gebruik wilt maken van een ander cloud platform en hier H2O.AI op wilt configureren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:'Met H2O.AI MLOps is het mogelijk om machine learning modellen in productie te nemen en te gebruiken. Zie de link voor meer informatie.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"H2O.ai mist echter mogelijkheden voor geavanceerde model interpretatie en samenwerkingsfuncties zoals ge\xEFntegreerde codeversiebeheer, wat de samenwerking kan tegenzitten. Role-Based Access Control (RBAC) is mogelijk via integratie met externe tools zoals LDAP of Active Directory. H2O.ai is geschikt voor teams van 5 personen of meer, waarbij het schaalbaarheid biedt voor grotere teams, maar mogelijk te uitgebreid is voor een individueel gebruiker."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"H2O.ai mist echter mogelijkheden voor geavanceerde model interpretatie en samenwerkingsfuncties zoals ge\xEFntegreerde codeversiebeheer, wat de samenwerking kan tegenzitten. Role-Based Access Control (RBAC) is mogelijk via integratie met externe tools zoals LDAP of Active Directory. H2O.ai is geschikt voor teams van 5 personen of meer, waarbij het schaalbaarheid biedt voor grotere teams, maar mogelijk te uitgebreid is voor een individueel gebruiker."}],match:{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"dwa"}},{id:"d5cfa187-4147-4177-8091-491f244f6344",title:"Datarobot",description:"DataRobot is een geautomatiseerd machine learning platform dat bedrijven helpt bij het bouwen, implementeren en beheren van krachtige AI-modellen zonder uitgebreide programmeerkennis. Het biedt een intu\xEFtieve interface en geavanceerde automatiseringstools die het proces van modelontwikkeling versnellen en optimaliseren, waardoor gebruikers snel en nauwkeurig voorspellende modellen kunnen bouwen voor diverse zakelijke behoeften.",link:"https://www.datarobot.com/",img_link:"datarobot_logo.png",bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Het is niet mogelijk om DataRobot op externe cloudplatforms uit te voeren. Het is raadzaam om te onderzoeken of DataRobot functionaliteiten biedt om uw specifieke opgeslagen data te lezen en te gebruiken."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"DataRobot is primair gericht op MLOps en biedt geen specifieke ondersteuning voor DataOps. DataOps-gerelateerde taken dienen te worden uitgevoerd voordat de data in DataRobot wordt ingelezen. Het platform richt zich op het beheer van machine learning operations."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"DataRobot is primair ontworpen voor MLOps, en ondersteunt geen ETL-operaties. Deze bewerkingen moeten worden uitgevoerd voordat de gegevens in DataRobot worden ingelezen."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"DataRobot is primair bedoeld voor MLOps en biedt geen specifieke functionaliteiten voor BI. Het platform richt zich op het beheer van machine learning operations."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Het gebruik van DataRobot on-premise is niet mogelijk. Toegang tot DataRobot is uitsluitend mogelijk via hun servers en tegen een vergoeding."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Datarobot is niet opensource en moet aangeschaft worden via een periodiek abonnement. Eveneens brengt het gebruik van meer resources ook extra kosten met zich mee."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:`Het bijhouden van versies van data is niet direct mogelijk met DataRobot; hiervoor zou extra functionaliteit buiten DataRobot moeten worden toegevoegd. Voor meer informatie over het versiebeheer van productiemodellen in machine learning, kunt u de link raadplegen . -`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"DataRobot biedt op zichzelf geen functionaliteit voor het orkestreren van pipelines, maar blinkt uit in integratie met verschillende pipelining-tools. Hierdoor kunnen gebruikers profiteren van een naadloze samenwerking tussen DataRobot en geavanceerde pipelining-tools voor een effici\xEBnt beheer van end-to-end machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Het is niet mogelijk om DataRobot rechtstreeks op kubernetes uit te voeren. Er moeten andere manieren gevonden worden om data uit een kubernetes cluset in te laden op Datarobot,."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"DataRobot bevordert samenwerking door functionaliteiten zoals de mogelijkheid om modellen te delen en te versiebeheren, waardoor teamleden gemakkelijk kunnen samenwerken aan machine learning-projecten. Role-Based Access Control (RBAC) is mogelijk in DataRobot, waardoor teams van verschillende grootte veilig toegang hebben tot de benodigde bronnen en functionaliteiten. DataRobot is geschikt voor teams van 1, 5 of meer dan 10 personen, maar grotere teams zouden mogelijk meer baat hebben bij aanvullende samenwerkingsfuncties."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Het is niet mogelijk om DataRobot rechtstreeks op GCP uit te voeren. Desondanks heeft DataRobot functionaliteiten die het eenvoudig maken om gegevens uit GCP te lezen en te gebruiken."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"DataRobot legt sterk de nadruk op MLOps en biedt geavanceerde functionaliteiten om machine learning operations doeltreffend te beheren, waaronder het automatiseren van modelimplementatie, het bewaken van prestaties en het vergemakkelijken van samenwerking tussen datawetenschappers en operationele teams."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:'Het direct draaien van DataRobot op Databricks is niet mogelijk. Niettemin is er een effici\xEBnte samenwerking tussen DataRobot en Databricks, waardoor data eenvoudig vanuit Databricks kan worden ingelezen door DataRobot. Voor meer gedetailleerde informatie kun je de linkraadplegen.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Het direct uitvoeren van DataRobot op AWS is niet mogelijk. Niettemin biedt DataRobot functionaliteiten waarmee het gegevens kan lezen en gebruiken van bijvoorbeeld een AWS-bucket."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Het is niet mogelijk om DataRobot rechtstreeks op Azure uit te voeren. Echter, DataRobot heeft functionaliteiten die het gemakkelijk maken om gegevens uit Azure te lezen en te gebruiken."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Het draaien van DataRobot in de cloud is de enige een optie, maar het is belangrijk op te merken dat DataRobot een particulier bedrijf is. Toegang tot hun diensten is enkel beschikbaar via door hen aangeboden services en tegen betaling."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Wij vinden persoonlijk DataRobot de meest gebruiksvriendelijke optie voor MLOps. Het is snel ge\xEFnstalleerd en stelt u in staat om snel aan de slag te gaan met het trainen van machine learning modellen. De nadruk op AutoML maakt het proces nog toegankelijker. Het is echter belangrijk op te merken dat hoewel de eenvoudige installatie en AutoML-functionaliteiten een snelle start mogelijk maken, dit ten koste kan gaan van diepgaandere functionaliteiten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Het is eenvoudig om in DataRobot experimenten op te zetten en de resultaten in te zien, waardoor het platform intu\xEFtief is voor het cre\xEBren en beheren van machine learning experimenten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:`DataRobot biedt uitgebreide mogelijkheden voor het volgen van data drift, waardoor gebruikers in staat zijn veranderingen in de inputgegevens nauwlettend te observeren en te begrijpen. Voor een gedetailleerde uitleg over het monitoren van data drift, kunt u de informatie raadplegen via deze link. -`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'DataRobot biedt mogelijkheden voor het volgen van model drift, waardoor gebruikers in staat zijn veranderingen in de prestaties van hun machine learning modellen nauwlettend te volgen. Voor gedetailleerde informatie over het monitoren van model drift, kunt u de link. raadplegen.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:`DataRobot biedt een breed scala aan functionaliteiten voor het ontwikkelen van een volledig ge\xEFntegreerd generatief machine learning model. Voor meer details over Large Language Model Operations (LLMOps), kunt u de link raadplegen.`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:'Het automatisch vinden van optimale hyperparameters is mogelijk binnen DataRobot, waardoor het afstemmen van hyperparameters effici\xEBnt en gestroomlijnd wordt. Voor gedetailleerde informatie over het tunen van hyperparameters in DataRobot, kunt u de link voor meer informatie raadplegen.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Naar onze mening is DataRobot de meest toegankelijke tool om te starten met machine learning, dankzij zijn uitgebreide en gebruiksvriendelijke AutoML-functionaliteit. Dit stelt gebruikers in staat om snel en effectief machine learning modellen te ontwikkelen, zelfs zonder diepgaande technische expertise."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:'DataRobot biedt een krachtige tool waarmee data en afbeeldingen kunnen worden geannoteerd door middel van een samenwerking met Labelbox. Zie de link voor meer informatie.'},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Datarobot is niet opensource en moet aangeschaft worden via een periodiek abonnement. Eveneens brengt het gebruik van meer resources ook extra kosten met zich mee."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Wij vinden persoonlijk DataRobot de meest gebruiksvriendelijke optie voor MLOps. Het is snel ge\xEFnstalleerd en stelt u in staat om snel aan de slag te gaan met het trainen van machine learning modellen. De nadruk op AutoML maakt het proces nog toegankelijker. Het is echter belangrijk op te merken dat hoewel de eenvoudige installatie en AutoML-functionaliteiten een snelle start mogelijk maken, dit ten koste kan gaan van diepgaandere functionaliteiten."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:'DataRobot biedt een krachtige tool waarmee data en afbeeldingen kunnen worden geannoteerd door middel van een samenwerking met Labelbox. Zie de link voor meer informatie.'},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:'DataRobot biedt een krachtige tool waarmee data en afbeeldingen kunnen worden geannoteerd door middel van een samenwerking met Labelbox. Zie de link voor meer informatie.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Wanneer uw bedrijf nog niet actief is op een cloudplatform, voornamelijk het platform wil gebruiken om machine learning te verkennen en geen know-how heeft over het effectief configureren van een platform, dan is Datarobot een goeie keuze om mee te beginnen. Dit komt doordat datarobot een simpele tool is om mee te beginnen met experimenteren met machine learning."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:'Het is mogelijk om modellen te publiceren naar verschillende andere cloudplatforms zoals AWS en Azure. DataRobot biedt ook de mogelijkheid om dit via hun eigen servers te doen. Zie link voor meer informatie.'},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"DataRobot bevordert samenwerking door functionaliteiten zoals de mogelijkheid om modellen te delen en te versiebeheren, waardoor teamleden gemakkelijk kunnen samenwerken aan machine learning-projecten. Role-Based Access Control (RBAC) is mogelijk in DataRobot, waardoor teams van verschillende grootte veilig toegang hebben tot de benodigde bronnen en functionaliteiten. DataRobot is geschikt voor teams van 1, 5 of meer dan 10 personen, maar grotere teams zouden mogelijk meer baat hebben bij aanvullende samenwerkingsfuncties."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"DataRobot bevordert samenwerking door functionaliteiten zoals de mogelijkheid om modellen te delen en te versiebeheren, waardoor teamleden gemakkelijk kunnen samenwerken aan machine learning-projecten. Role-Based Access Control (RBAC) is mogelijk in DataRobot, waardoor teams van verschillende grootte veilig toegang hebben tot de benodigde bronnen en functionaliteiten. DataRobot is geschikt voor teams van 1, 5 of meer dan 10 personen, maar grotere teams zouden mogelijk meer baat hebben bij aanvullende samenwerkingsfuncties."}],match:{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"dwad"}},{id:"c4cd4364-2611-4b47-a61f-c357e3163da1",title:"Weights and biases",description:"Weights and Biases is een platform voor experiment tracking en visualisatie in machine learning. Het biedt tools waarmee onderzoekers en datawetenschappers hun machine learning-experimenten kunnen bijhouden, analyseren en delen. Het platform legt belangrijke parameters, resultaten en visualisaties vast om inzicht te bieden in de prestaties van modellen, waardoor teams effectiever kunnen samenwerken en beter ge\xEFnformeerde beslissingen kunnen nemen tijdens het ontwikkelingsproces van AI-modellen.",link:"https://wandb.ai/site",img_link:"wandb_logo.png",bad_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Weights and Biases is ontworpen voor MLOps, wat betekent dat gegevens al verwerkt moeten zijn voordat het door Weights and Biases kan worden gebruikt."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Weights and Biases is ontwikkeld voor MLOps, waarbij het vanuit dit perspectief een uitgebreid scala aan tools en functionaliteiten biedt. Het is echter belangrijk op te merken dat de data vooraf verwerkt moet zijn alvorens het door Weights and Biases kan worden gebruikt."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Weights and Biases is ontworpen voor MLOps, en daarom vereist het dat data al verwerkt is voordat het kan worden gebruikt. Voor Business Intelligence doeleinden zullen andere tools nodig zijn die specifiek zijn afgestemd op die toepassing."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:'Weights and Biases is een semi-opensource programma, maar bedrijven mogen het niet gratis on-premise hosten. Raadpleeg de link voor het prijsmodel.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"Weights and Biases heeft geen kant-en-klare functionaliteit om data drift te detecteren. Het benadrukt echter samenwerkingen met andere gespecialiseerde tools en frameworks, waardoor gebruikers de mogelijkheid hebben om aanvullende functionaliteiten voor het monitoren van data drift te integreren in hun machine learning workflows."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Het is niet mogelijk om uitgebreide pipelines te orkestreren met Weights and Biases; hiervoor moet een aanvullende tool zoals MLflow worden gebruikt. Hoewel Weights and Biases uitblinkt in experimentbeheer en visualisatie, is het integreren van MLflow een strategische aanpak om end-to-end machine learning workflows te ondersteunen met uitgebreide pipeline-orkestratie."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Weights and Biases heeft geen ingebouwde functionaliteit om meerdere machine learning modellen met \xE9\xE9n knop te trainen en te testen."}],good_compatible:[{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Weights and Biases is veelzijdig inzetbaar en kan zowel on-premise als in de cloud worden gebruikt, waardoor gebruikers flexibiliteit hebben bij het implementeren van hun machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:'Het is mogelijk om Weights & Biases (w&b) te integreren met Databricks door Weights & Biases te installeren in een Databricks-notebook. Zie de link voor meer details.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:'Het is mogelijk om Weights & Biases op AWS te draaien. Voor meer informatie over de integratie van Weights & Biases met AWS, kunt u de link raadplegen. '},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:'Het is mogelijk om Weights & Biases op Azure te draaien. Zie de link voor meer informatie.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:'Het is mogelijk om Weights & Biases op Azure te draaien. Zie de link voor meer informatie.'},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Dankzij containerisatie in Kubernetes is het eenvoudig om Weights and Biases te installeren en te gebruiken."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Weights and Biases is een uitstekend startpunt voor het experimenteren met machine learning, omdat het zowel on-premise als op meerdere computers kan worden toegepast, waardoor flexibiliteit en schaalbaarheid mogelijk zijn."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Weights and Biases is een gespecialiseerd platform dat zich specifiek richt op MLOps, waarmee het een uitgebreide set tools en functionaliteiten biedt om het end-to-end proces van machine learning operations te stroomlijnen en te optimaliseren."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Weights and Biases is veelzijdig inzetbaar en kan zowel on-premise als in de cloud worden gebruikt, waardoor gebruikers flexibiliteit hebben bij het implementeren van hun machine learning workflows."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Weights and Biases is een uiterst effectief platform voor het volgen en beheren van experimenten, waarbij het niet alleen uitblinkt in het registreren van modelprestaties, maar ook in het verstrekken van diepgaande inzichten en visualisaties die de analyse van experimentresultaten vergemakkelijken, waardoor het een waardevolle aanwinst is voor het optimaliseren van machine learning workflows."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:'Het is mogelijk om model drift in productie te detecteren via een uitgebreid dashboard in Weights and Biases. Gedetailleerde informatie over het monitoren van model drift in productie is beschikbaar in de link .'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'Weights and Biases biedt een tool genaamd Traces, waarin Large Language Model Operations (LLMOps) zijn verwerkt. Zie de link voor meer informatie.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Het is mogelijk om versies van data bij te houden met Weights and Biases via de functionaliteit genaamd Artifacts. Deze feature biedt gebruikers een gestructureerde en traceerbare manier om verschillende versies van data op te slaan en te beheren, wat bijdraagt aan een nauwkeurig en reproduceerbaar experimenteerproces. Zie de link voor meer details.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:'"Weights and Biases biedt een krachtige tool genaamd Sweeps, waarmee gebruikers automatisch de optimale hyperparameters kunnen bepalen. Deze functionaliteit stroomlijnt het proces van hyperparameter tuning, waardoor het eenvoudig wordt om de beste configuraties te ontdekken voor verbeterde modelprestaties. Zie de link voor meer informatie.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Het is mogelijk om getrainde modellen te publiceren met Weights and Biases. Deze functionaliteit maakt het gemakkelijk om resultaten en modellen te delen, wat de samenwerking tussen teamleden en stakeholders bevordert."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Het is mogelijk om met een tool genaamd Prodigy data en foto's te annoteren. Zie de link voor meer informatie.`},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"In vergelijking met andere dataplatforms op deze lijst is Weights and Biases eenvoudig op te zetten, waardoor gebruikers snel en moeiteloos toegang krijgen tot zijn functionaliteiten."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:'Weights and Biases is een semi-opensource programma, maar bedrijven mogen het niet gratis on-premise hosten. Raadpleeg de link voor het prijsmodel.'},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"In vergelijking met andere dataplatforms op deze lijst is Weights and Biases eenvoudig op te zetten, waardoor gebruikers snel en moeiteloos toegang krijgen tot zijn functionaliteiten."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Het is mogelijk om met een tool genaamd Prodigy data en foto's te annoteren. Zie de link voor meer informatie.`},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Het is mogelijk om met een tool genaamd Prodigy data en foto's te annoteren. Zie de link voor meer informatie.`},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"het is mogelijk om Weights & Biases op de meeste cloudplatform te gebruiken aan gezien de code ervan openbaar beschikbaar is. Houd er wel rekening mee dat Weights & biases aangeschaft moet worden om in gebruik te nemen."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Weights & Biases bevordert samenwerking door functies zoals het delen van experimenten en resultaten met teamleden, het toevoegen van opmerkingen en notities aan specifieke runs, en het faciliteren van discussies via opgeslagen commentaren. Het mist echter directe mogelijkheden voor realtime samenwerking aan gedeelde projecten, zoals gelijktijdige bewerking van documenten. Role-Based Access Control (RBAC) is mogelijk in Weights & Biases, waardoor beheerders verschillende rechten aan teamleden kunnen toewijzen op basis van hun rollen. Het systeem is geschikt voor teams van elke grootte, maar kan vooral handig zijn voor teams van 5 of meer personen vanwege de behoefte aan geco\xF6rdineerde samenwerking en beheer van projecten."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Weights & Biases bevordert samenwerking door functies zoals het delen van experimenten en resultaten met teamleden, het toevoegen van opmerkingen en notities aan specifieke runs, en het faciliteren van discussies via opgeslagen commentaren. Het mist echter directe mogelijkheden voor realtime samenwerking aan gedeelde projecten, zoals gelijktijdige bewerking van documenten. Role-Based Access Control (RBAC) is mogelijk in Weights & Biases, waardoor beheerders verschillende rechten aan teamleden kunnen toewijzen op basis van hun rollen. Het systeem is geschikt voor teams van elke grootte, maar kan vooral handig zijn voor teams van 5 of meer personen vanwege de behoefte aan geco\xF6rdineerde samenwerking en beheer van projecten."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Weights & Biases bevordert samenwerking door functies zoals het delen van experimenten en resultaten met teamleden, het toevoegen van opmerkingen en notities aan specifieke runs, en het faciliteren van discussies via opgeslagen commentaren. Het mist echter directe mogelijkheden voor realtime samenwerking aan gedeelde projecten, zoals gelijktijdige bewerking van documenten. Role-Based Access Control (RBAC) is mogelijk in Weights & Biases, waardoor beheerders verschillende rechten aan teamleden kunnen toewijzen op basis van hun rollen. Het systeem is geschikt voor teams van elke grootte, maar kan vooral handig zijn voor teams van 5 of meer personen vanwege de behoefte aan geco\xF6rdineerde samenwerking en beheer van projecten."}]},{id:"eeb904f2-67d4-40ea-a992-f09f5a2d1358",title:"MLflow",description:"MLflow is een open-source platform voor het beheren experimenten en pipelines van machine learning-modellen. Het biedt tools voor experiment tracking, het organiseren van code, het reproduceren van modellen en het samenwerken binnen teams. MLflow stelt gebruikers in staat om gemakkelijk experimenten te registreren, modellen te vergelijken, modelversies te beheren en ze naadloos in productie te implementeren, wat resulteert in meer gestroomlijnde en reproduceerbare machine learning-workflows. MLflow is volledig open-source en kan op vrijwel elke machine en cloud provider simpel ge\xEFnstalleerd worden. MLFlow wordt beheerd door Databricks. Wanneer u voor MLflow kiest moet u op passen dat de Databricks versie van MLflow meer functionaliteiten biedt dan de opensource variant. Veel cloud providers gebruiken MLflow onderwater wat een testament is hoe veelzijdig het gebruikt kan worden.",link:"https://mlflow.org/",img_link:"mlflow_logo.png",bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Wanneer u al gebruikmaakt van Databricks, is het beheren van een aparte MLflow-instantie overbodig. Databricks beheert zijn eigen versie van MLflow met extra functionaliteit, waardoor een ge\xEFntegreerde en naadloze ervaring wordt geboden voor het beheren van machine learning workflows binnen het Databricks-platform."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Het is belangrijk op te merken dat MLflow niet is ontworpen voor het uitvoeren van ETL-operaties. Voor dergelijke taken is aanvullende tooling buiten MLflow vereist. MLflow richt zich voornamelijk op het beheren van machine learning workflows, experimenten en modellen, terwijl ETL-functionaliteit wordt ondersteund door gespecialiseerde tools."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Het is belangrijk op te merken dat MLflow niet is ontworpen voor het uitvoeren van DataOps. Voor dergelijke taken is aanvullende tooling buiten MLflow vereist. MLflow richt zich voornamelijk op het beheren van machine learning workflows, experimenten en modellen, terwijl ETL-functionaliteit wordt ondersteund door gespecialiseerde tools."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Voor het verkrijgen van diepgaande inzichten in uw bedrijfsprestaties is het niet mogelijk om uitsluitend MLflow te gebruiken; hiervoor is aanvullende tooling buiten MLflow vereist. MLflow is met name gericht op het beheren van machine learning workflows en experimenten, terwijl uitgebreidere zakelijke inzichten vaak worden verkregen door integratie met specifieke business intelligence- en analysetools."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"Het is belangrijk op te merken dat het in MLflow niet mogelijk is om data drift automatisch te detecteren. Het detecteren van data drift meestal wordt afgehandeld door gespecialiseerde tools en methoden buiten MLflow."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"Het is belangrijk op te merken dat het in MLflow niet mogelijk is om model drift automatisch te detecteren. Het detecteren van model drift meestal wordt afgehandeld door gespecialiseerde tools en methoden buiten MLflow."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:"Het is niet mogelijk om versiebeheer op uw data te hebben binnen MLflow; hiervoor moet een aanvullende tool zoals Data Version Control (DVC) worden toegevoegd. DVC biedt specifieke functionaliteiten voor het beheren van versies en het bijhouden van wijzigingen in datasets, waardoor een nauwkeurig en controleerbaar versiebeheer voor data mogelijk is."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Het is belangrijk op te merken dat MLflow niet automatisch optimale hyperparameters kan vinden; dit vereist handmatige afstemming en experimentatie. MLflow biedt echter integratie met hyperparameter tuning bibliotheken zoals Optuna en Hyperopt, waardoor gebruikers handmatig optimalisatieprocessen kunnen uitvoeren om de beste hyperparameters te identificeren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"MLflow heeft geen ingebouwde mogelijkheid om met een knop meerdere machine learning modellen te trainen en te testen. Voor dergelijke automatisering van experimenten is aanvullende scripting en tooling nodig, zoals bijvoorbeeld het gebruik van hyperparameter tuning bibliotheken in combinatie met MLflow om effici\xEBnte en geautomatiseerde modeltrainingen te realiseren."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"MLflow is niet ontworpen voor het annoteren van data of foto's. Voor taken zoals annotatie is het nodig om andere gespecialiseerde tools te gebruiken die specifiek zijn ontwikkeld voor data annotatie, zoals Labelbox of vergelijkbare tools."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Dankzij containerisatie in Kubernetes is het eenvoudig om MLflow te gebruiken, wat bijdraagt aan een gestroomlijnde implementatie en beheer van machine learning workflows. Deze aanpak biedt flexibiliteit en schaalbaarheid bij het draaien van MLflow in verschillende omgevingen."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"AWS biedt uitstekende mogelijkheden voor de integratie van MLflow, vaak in combinatie met hun bestaande MLOps-platform SageMaker. Hierdoor kunnen gebruikers profiteren van een uitgebreide omgeving voor het beheren en schalen van hun machine learning workflows op het AWS-cloudplatform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Azure biedt uitstekende mogelijkheden om MLflow te integreren, vaak in combinatie met hun bestaande MLOps-platform Azure ML. Dit biedt gebruikers een krachtige en ge\xEFntegreerde omgeving voor het beheren en schalen van machine learning workflows op het Azure-cloudplatform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"GCP biedt uitstekende mogelijkheden om MLflow te integreren, vaak in combinatie met hun bestaande MLOps-platform Vertex AI. Hierdoor kunnen gebruikers profiteren van een ge\xEFntegreerde en schaalbare omgeving voor het beheren en optimaliseren van machine learning workflows op het Google Cloud-platform."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Het is eenvoudig om te beginnen met experimenteren wanneer u nog geen gebruikmaakt van een cloudplatform. MLflow kan worden uitgevoerd op een computer of server en is niet afhankelijk van een specifieke cloud provider, waardoor het een flexibele keuze is. Dit maakt het mogelijk voor gebruikers om on-premise te starten en later, indien gewenst, over te stappen naar een cloudgebaseerde omgeving."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"MLflow is ontwikkeld voor MLOps, en is al vaak ge\xEFntegreerd met de meeste dataplatforms in een aangepaste vorm. Deze integratie stelt gebruikers in staat om machine learning workflows effectief te beheren en te optimaliseren binnen diverse data- en cloudomgevingen."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"MLflow biedt een uitstekende integratie met alle grote cloudproviders, waardoor gebruikers flexibiliteit hebben bij het implementeren en beheren van machine learning workflows in diverse cloudomgevingen. Deze veelzijdige ondersteuning maakt het mogelijk om optimaal te profiteren van de specifieke mogelijkheden en services die elke cloudprovider biedt."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"MLflow is uitermate gebruiksvriendelijk en gemakkelijk te installeren op lokaal niveau, wat een naadloze ervaring biedt voor gebruikers die on-premise willen experimenteren en ontwikkelen binnen hun machine learning projecten. Deze toegankelijkheid draagt bij aan een snelle start en effici\xEBnt gebruik van MLflow-functionaliteiten."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:'MLflow is niet alleen gratis en opensource, maar biedt ook een transparante en actieve gemeenschap via de link, waardoor gebruikers toegang hebben tot voortdurende updates, ondersteuning en bijdragen van de bredere community.'},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:'MLflow is niet alleen gratis en opensource, maar biedt ook een transparante en actieve gemeenschap via de link, waardoor gebruikers toegang hebben tot voortdurende updates, ondersteuning en bijdragen van de bredere community.'},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"MLflow is een compact pakket met een focus op eenvoud, en biedt geen uitgebreide functionaliteiten voor DataOps of ETL. Hierdoor is het gemakkelijk te installeren en ideaal voor gebruikers die snel willen experimenteren binnen hun machine learning projecten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"In MLflow kunt u gemakkelijk uw experimenten bekijken en beheren. De intu\xEFtieve gebruikersinterface maakt het eenvoudig om experimentresultaten te volgen, modellen te beheren en inzicht te krijgen in de prestaties van verschillende iteraties van uw machine learning projecten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:'MLflow heeft functionaliteiten specifiek ontwikkeld voor het cre\xEBren en onderhouden van large language en generatieve modellen. Zie link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"MLflow is uitermate geschikt voor het orkestreren van MLOps pipelines. Wanneer u echter meer wilt doen met DataOps, zoals het beheren van end-to-end data workflows, kan het gebruik van tools zoals Apache Airflow een waardevolle aanvulling zijn op uw toolkit. Samen bieden ze een ge\xEFntegreerde oplossing voor het effectief beheren van zowel machine learning- als data-operaties."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Het is mogelijk om modellen met MLflow te publiceren en statistieken ervan in te zien. MLflow biedt functies voor het loggen en bijhouden van experimentresultaten, waardoor gebruikers inzicht krijgen in de prestaties van getrainde modellen en de mogelijkheid hebben om deze resultaten te delen en te bekijken via de MLflow Tracking UI."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"MLflow is opensource en dus niet afhankelijk waar het ge\xEFnstalleerd wordt. Kijk zorgvuldig of het mogelijk is om het in uw huidige cloudplatform te installeren."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"MLflow is een compact pakket met een focus op eenvoud, en biedt geen uitgebreide functionaliteiten voor DataOps of ETL. Hierdoor is het gemakkelijk te installeren en ideaal voor gebruikers die snel willen experimenteren binnen hun machine learning projecten."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:"MLflow is niet ontworpen voor het annoteren van data of foto's. Voor taken zoals annotatie is het nodig om andere gespecialiseerde tools te gebruiken die specifiek zijn ontwikkeld voor data annotatie, zoals Labelbox of vergelijkbare tools."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:"MLflow is niet ontworpen voor het annoteren van data of foto's. Voor taken zoals annotatie is het nodig om andere gespecialiseerde tools te gebruiken die specifiek zijn ontwikkeld voor data annotatie, zoals Labelbox of vergelijkbare tools."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:`MLflow bevordert samenwerking binnen teams door functies zoals experiment tracking, model versioning en model deployment. Experiment tracking maakt het mogelijk om experimenten te documenteren en resultaten te delen, terwijl model versioning het beheer van modelversies vergemakkelijkt. Echter, MLflow mist ingebouwde ondersteuning voor Role-Based Access Control (RBAC), wat de samenwerking van teams kan belemmeren door het ontbreken van gedetailleerde toegangscontrole. - -Hoewel RBAC niet standaard wordt ondersteund, kunnen teams van 1, 5 of meer dan 10 personen MLflow nog steeds effectief gebruiken. Voor teams van 1 persoon biedt MLflow een handige manier om experimenten te beheren en modellen te volgen. Voor teams van 5 of meer personen kunnen aanvullende maatregelen voor toegangscontrole buiten MLflow nodig zijn om veilige samenwerking te garanderen. Bij teams van meer dan 10 personen kan het gebrek aan ingebouwde RBAC-functionaliteit echter een beperking vormen en kan het nodig zijn om uit te kijken naar aanvullende tools of oplossingen die dit bieden.`},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:`MLflow bevordert samenwerking binnen teams door functies zoals experiment tracking, model versioning en model deployment. Experiment tracking maakt het mogelijk om experimenten te documenteren en resultaten te delen, terwijl model versioning het beheer van modelversies vergemakkelijkt. Echter, MLflow mist ingebouwde ondersteuning voor Role-Based Access Control (RBAC), wat de samenwerking van teams kan belemmeren door het ontbreken van gedetailleerde toegangscontrole. - -Hoewel RBAC niet standaard wordt ondersteund, kunnen teams van 1, 5 of meer dan 10 personen MLflow nog steeds effectief gebruiken. Voor teams van 1 persoon biedt MLflow een handige manier om experimenten te beheren en modellen te volgen. Voor teams van 5 of meer personen kunnen aanvullende maatregelen voor toegangscontrole buiten MLflow nodig zijn om veilige samenwerking te garanderen. Bij teams van meer dan 10 personen kan het gebrek aan ingebouwde RBAC-functionaliteit echter een beperking vormen en kan het nodig zijn om uit te kijken naar aanvullende tools of oplossingen die dit bieden.`},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:`MLflow bevordert samenwerking binnen teams door functies zoals experiment tracking, model versioning en model deployment. Experiment tracking maakt het mogelijk om experimenten te documenteren en resultaten te delen, terwijl model versioning het beheer van modelversies vergemakkelijkt. Echter, MLflow mist ingebouwde ondersteuning voor Role-Based Access Control (RBAC), wat de samenwerking van teams kan belemmeren door het ontbreken van gedetailleerde toegangscontrole. - -Hoewel RBAC niet standaard wordt ondersteund, kunnen teams van 1, 5 of meer dan 10 personen MLflow nog steeds effectief gebruiken. Voor teams van 1 persoon biedt MLflow een handige manier om experimenten te beheren en modellen te volgen. Voor teams van 5 of meer personen kunnen aanvullende maatregelen voor toegangscontrole buiten MLflow nodig zijn om veilige samenwerking te garanderen. Bij teams van meer dan 10 personen kan het gebrek aan ingebouwde RBAC-functionaliteit echter een beperking vormen en kan het nodig zijn om uit te kijken naar aanvullende tools of oplossingen die dit bieden.`}]},{id:"340dcd09-44de-4ff6-bddf-0503b575f5cc",title:"ClearML",description:"ClearML is een end-to-end platform voor het beheren van machine learning workflows. Het biedt krachtige tools voor experiment tracking, automatisering, modelversiebeheer en samenwerking. Met functies voor het bijhouden van experimenten, het visualiseren van resultaten en het optimaliseren van modellen, stelt ClearML gebruikers in staat om effici\xEBnter te werken en beter inzicht te krijgen in hun machine learning-projecten, waardoor teams effectiever kunnen samenwerken en modellen sneller naar productie kunnen brengen.",link:"https://clear.ml/",img_link:"clearml_logo.png",bad_compatible:[{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"bcd62443-7827-44cb-88bb-b9fd5a3651ae",explanation:"dwa"},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Het wordt niet aangeraden om Databricks met ClearML te gebruiken. Databricks maakt gebruik van een eigen variant van MLflow, die qua functionaliteiten bijna identiek is aan ClearML. Het gebruik van ClearML zou duplicatie van functionaliteiten kunnen veroorzaken en mogelijk conflicteren met de ingebouwde MLflow-functionaliteiten in Databricks."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"ClearML is geoptimaliseerd voor Machine Learning Operations (MLOps) en ondersteunt momenteel geen Extract, Transform, Load (ETL) operaties. Voor dergelijke taken wordt aanbevolen om gebruik te maken van een specifieke tool die is ontworpen voor ETL-processen."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"ClearML is geoptimaliseerd voor Machine Learning Operations (MLOps) en ondersteunt momenteel geen Business Intelligence. Voor dergelijke taken wordt aanbevolen om gebruik te maken van een specifieke tool die is ontworpen voor BI-processen."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"ClearML biedt op dit moment geen out-of-the-box mogelijkheid om met \xE9\xE9n druk op de knop meerdere machine learning-modellen te trainen en te testen. Voor dit soort functionaliteiten kunt u gebruikmaken van aanvullende automatiseringstools of scripts om uw workflow aan te passen aan uw specifieke behoeften."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"ClearML is open source en kan daarom eenvoudig worden ge\xEFntegreerd in uw huidige AWS-omgeving. Dit biedt flexibiliteit en de mogelijkheid om ClearML aan te passen aan de specifieke behoeften van uw AWS-gebaseerde machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"ClearML is open source en kan dus eenvoudig worden ge\xEFntegreerd in uw huidige Azure-omgeving. Dit geeft u de flexibiliteit om ClearML aan te passen aan de specifieke behoeften van uw Azure-gebaseerde machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"ClearML is open source en kan dus eenvoudig worden ge\xEFntegreerd in uw huidige Google Cloud Platform (GCP)-omgeving. Deze openheid biedt flexibiliteit en aanpasbaarheid om ClearML te integreren in uw bestaande GCP-gebaseerde machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"ClearML is open source en kan daarom eenvoudig worden ge\xEFntegreerd in uw huidige Kubernetes-omgeving. Deze flexibiliteit maakt het mogelijk om ClearML aan te passen aan de specifieke behoeften van uw Kubernetes-gebaseerde machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"ClearML is open source en kan dus eenvoudig worden ge\xEFntegreerd in uw huidige omgeving. Deze openheid biedt flexibiliteit en aanpasbaarheid om ClearML te integreren in uw bestaande machine learning workflows."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"ClearML kan eenvoudig on-premise worden gedraaid op een computer om te beginnen met experimenteren. Bovendien is het ook makkelijk om ClearML Flow op de cloud te hosten, waardoor meerdere datascientists eenvoudig toegang hebben tot de functionaliteiten en experimenten binnen hun lokale ontwikkelingsomgeving."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"ClearML is een geavanceerd platform speciaal ontwikkeld voor het stroomlijnen van Machine Learning Operations (MLOps)."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"ClearML is een open-source platform, waardoor het niet gebonden is aan een specifieke leverancier. Hoewel ClearML zelfstandig kan opereren, bieden sommige leveranciers integratiemogelijkheden om bijvoorbeeld gegevens beter te verwerken."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"ClearML is een opensource-platform dat eenvoudig on-premise kan worden ge\xEFnstalleerd op uw eigen systeem."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"ClearML is een opensource-platform, wat betekent dat het gratis te gebruiken is wanneer u ervoor kiest om het zelf te hosten."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"ClearML is opensource en daardoor kosteloos in gebruik. Voor extra functionaliteit en verbeterde ondersteuning bestaat de mogelijkheid om virtuele priv\xE9cloud (VPC) of on-premises servers aan te schaffen."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"ClearML beschikt over uitstekende functionaliteiten voor het bijhouden van experimenten."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:`Het is mogelijk om data drift te detecteren in ClearML met behulp van aanvullende dashboarding. Meer informatie hierover is te vinden op de volgende link. -`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:` Het is mogelijk om in ClearMl drift in modellen te detecteren met behulp van extra dashboarding. Zie link. -`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:`ClearML heeft functionaliteiten specifiek ontwikkeld voor het cre\xEBren en onderhouden van large language en generatieve modellen. Meer informatie hierover is beschikbaar via deze link. -`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:`ClearML biedt de mogelijkheid om verschillende versies van data bij te houden met behulp van hyperdatasets. Meer informatie hierover is beschikbaar op de volgende link. -`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:`Met ClearML heeft u de mogelijkheid om optimalisatietaken uit te voeren voor het automatisch vinden van optimale hyperparameters. Raadpleeg de volgende link voor meer informatie. -`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Het is mogelijk om MLOps-pipelines te orkestreren met ClearML. ClearML biedt functionaliteiten voor het beheren en automatiseren van end-to-end machine learning workflows, waaronder het opzetten van MLOps-pipelines. Hiermee kunt u taken zoals gegevensvoorbereiding, modeltraining, evaluatie en implementatie in een ge\xEFntegreerde en geautomatiseerde workflow organiseren en beheren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Het is mogelijk om modellen in ClearML te publiceren. Gepubliceerde modellen kunnen aangeroepen worden door specifieke api-call er naar toe te sturen. ClearML geeft uitgebreide statistieken over het gebruik en de prestatie van de gepubliceerde modellen,"},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:`Via de 'annotations'-tab in ClearML kunt u eenvoudig uw data of foto's voorzien van annotaties. Voor meer gedetailleerde informatie, kunt u de volgende link raadplegen. `},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"ClearML biedt robuuste dataops-functionaliteit, waardoor het gehele data-operatieproces wordt gestroomlijnd en verbeterd. Deze uitgebreide reeks functies binnen ClearML omvat databeheer, versiebeheer, het volgen van datalijnen en samenwerkingsworkflows, waardoor datawetenschappers en machine learning-teams hun databronnen effici\xEBnt kunnen beheren en benutten gedurende de gehele levenscyclus van hun projecten."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:`Via de 'annotations'-tab in ClearML kunt u eenvoudig uw data of foto's voorzien van annotaties. Voor meer gedetailleerde informatie, kunt u de volgende link raadplegen. `},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:`Via de 'annotations'-tab in ClearML kunt u eenvoudig uw data of foto's voorzien van annotaties. Voor meer gedetailleerde informatie, kunt u de volgende link raadplegen. `},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"ClearML bevordert samenwerking door het mogelijk te maken om experimenten te delen, te volgen en te reproduceren, waardoor teamleden gemakkelijk samen kunnen werken aan projecten. Het mist echter directe ondersteuning voor realtime samenwerking, zoals gelijktijdige bewerking van scripts of notebooks. Role-Based Access Control (RBAC) is beschikbaar, waardoor toegangscontrole mogelijk is op basis van rollen en rechten. ClearML is geschikt voor teams van 1, 5 of meer dan 10 personen, afhankelijk van de behoeften van het team en de schaal van het project."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"ClearML bevordert samenwerking door het mogelijk te maken om experimenten te delen, te volgen en te reproduceren, waardoor teamleden gemakkelijk samen kunnen werken aan projecten. Het mist echter directe ondersteuning voor realtime samenwerking, zoals gelijktijdige bewerking van scripts of notebooks. Role-Based Access Control (RBAC) is beschikbaar, waardoor toegangscontrole mogelijk is op basis van rollen en rechten. ClearML is geschikt voor teams van 1, 5 of meer dan 10 personen, afhankelijk van de behoeften van het team en de schaal van het project."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"ClearML bevordert samenwerking door het mogelijk te maken om experimenten te delen, te volgen en te reproduceren, waardoor teamleden gemakkelijk samen kunnen werken aan projecten. Het mist echter directe ondersteuning voor realtime samenwerking, zoals gelijktijdige bewerking van scripts of notebooks. Role-Based Access Control (RBAC) is beschikbaar, waardoor toegangscontrole mogelijk is op basis van rollen en rechten. ClearML is geschikt voor teams van 1, 5 of meer dan 10 personen, afhankelijk van de behoeften van het team en de schaal van het project."}]},{id:"f98aea21-f356-40ca-b064-1995ad04f720",title:"Dagshub",description:"DAGsHub is een ge\xEFntegreerd platform dat het proces van het beheren en versioneren van machine learning-modellen, datasets en code vereenvoudigt. Met zijn gebruiksvriendelijke interface en krachtige functies vergemakkelijkt DAGsHub samenwerking tussen datawetenschappers, waardoor ze hun werk kunnen delen en wijzigingen in realtime kunnen bijhouden.",link:"https://dagshub.com/",img_link:"dagshub_logo.png",bad_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"963aaa51-8a46-4d4e-9808-d25ea810560c",explanation:"Dagshub heeft momenteel geen directe mogelijkheid om data te benutten die beschikbaar is gesteld in Databricks; echter, het ondersteunt wel het gebruik van S3-compatibele opslag als een alternatieve methode om toegang te krijgen tot data in Databricks. Het platform zelf kan niet worden gehost op Databricks, maar biedt de keuze om on-premise of in de cloud van Dagshub ge\xEFnstalleerd te worden, zij het tegen een specifieke prijs."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"ee245bf1-0447-4460-beb0-26ce8987a59a",explanation:"Dagshub heeft de mogelijkheid om gebruik te maken van data die beschikbaar is gesteld in AWS, maar het platform kan niet draaien op AWS. In plaats daarvan biedt Dagshub de optie om on-premise of in de cloud van Dagshub zelf te worden ge\xEFnstalleerd, uiteraard tegen een bepaalde prijs."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"03c4d074-2773-41cd-962a-892d13882ef4",explanation:"Dagshub heeft de mogelijkheid om gebruik te maken van data die beschikbaar is gesteld in Azure, maar het platform kan niet draaien op Azure. In plaats daarvan biedt Dagshub de optie om on-premise of in de cloud van Dagshub zelf te worden ge\xEFnstalleerd, uiteraard tegen een bepaalde prijs."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"b33b4738-05e9-42a9-8680-78a15ff65b0a",explanation:"Dagshub heeft de mogelijkheid om gebruik te maken van data die beschikbaar is gesteld in GCP, maar het platform kan niet draaien op GCP. In plaats daarvan biedt Dagshub de optie om on-premise of in de cloud van Dagshub zelf te worden ge\xEFnstalleerd, uiteraard tegen een bepaalde prijs."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"af017d7a-6e66-467a-87ad-1765a07563f3",explanation:"Dagshub heeft de mogelijkheid om gebruik te maken van data die beschikbaar is gesteld in kubernetes, maar het platform kan niet draaien op kubernetes. In plaats daarvan biedt Dagshub de optie om on-premise of in de cloud van Dagshub zelf te worden ge\xEFnstalleerd, uiteraard tegen een bepaalde prijs."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"8be91de1-04e3-4415-91f9-9f31ce1a6ab8",explanation:"Binnen Dagshub is het niet mogelijk om ETL-operaties uit te voeren, aangezien Dagshub exclusief is ontworpen voor ML Ops-functionaliteiten."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"77900f70-1a5b-4d1a-a7e9-561e80027e28",explanation:"Binnen Dagshub is het niet mogelijk om Data Ops-operaties uit te voeren, aangezien Dagshub exclusief is ontworpen voor ML Ops-functionaliteiten."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"e9000130-1d1a-4898-a1ce-ef434c8ec110",explanation:"Binnen Dagshub is het niet mogelijk om Business Intelligence-operaties , aangezien Dagshub exclusief is ontworpen voor ML Ops-functionaliteiten."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"0974c882-d9b9-4c9d-a1db-05c0fee82523",explanation:"Dagshub, als niet-open-source platform, is exclusief beschikbaar voor bedrijven die bereid zijn ervoor te betalen."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c21f0ead-9e20-4823-8875-d61a9d7542dd",explanation:"Dagshub, hoewel een krachtig platform voor Machine Learning Operations, ondersteunt momenteel geen automatische detectie van data drift, waardoor gebruikers zelf verantwoordelijk zijn voor het monitoren van eventuele veranderingen in de datasets."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"83b528f4-3ea9-427e-9ce5-772685655d43",explanation:"Dagshub, hoewel een krachtig platform voor Machine Learning Operations, biedt op dit moment geen ingebouwde functionaliteit voor het automatisch detecteren van model drift, waardoor gebruikers zelf verantwoordelijk zijn voor het proactief monitoren van veranderingen in de prestaties van modellen over de tijd."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"c8533619-431e-48cf-b7b3-5ff5f65263d1",explanation:"Het automatisch vinden van optimale hyperparameters wordt momenteel niet ondersteund door Dagshub en zou vereisen dat extra code wordt geschreven om dit te implementeren."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3bb6617b-88f2-48a3-b235-381e8edfd3d9",explanation:"Voor het gelijktijdig trainen en testen van meerdere machine learning modellen met een druk op de knop is momenteel geen ingebouwde functionaliteit beschikbaar in Dagshub. Om dit te realiseren, zou het noodzakelijk zijn extra code te schrijven."},{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"1f3396cf-8727-43c8-912d-0911517dc894",explanation:"Dagshub heeft de mogelijkheid om gebruik te maken van data die beschikbaar is gesteld uit verschillende cloudplatforms, maar het is niet opensource en kan dus niet draaien op andere cloudplatforms. In plaats daarvan biedt Dagshub de optie om on-premise of in de cloud van Dagshub zelf te worden ge\xEFnstalleerd, uiteraard tegen een bepaalde prijs."}],good_compatible:[{question_id:"4ca72731-751f-4402-bcdc-a98bf89cf79d",answer_id:"8b084d94-059d-4443-ae7d-d8f46d2e3e52",explanation:"Dagshub kan worden beschouwd als het equivalent van GitHub voor machine learning, waarbij het de bestaande functionaliteiten van GitHub behoudt en aanvult met specifieke capaciteiten en functionaliteiten gericht op machine learning. Vooral voor bedrijven die nog niet actief zijn op een cloudplatform, vormt Dagshub een uitstekende startkeuze vanwege de eenvoud waarmee men ermee kan beginnen en waar samenwerking centraal staat."},{question_id:"fea3fc01-144d-4f41-b99e-0f556f6da751",answer_id:"c45c0a87-dfbc-428f-93a2-825a0ab9ca51",explanation:"Dagshub biedt een alternatief platform voor GitHub dat specifiek is afgestemd op machine learning. Dankzij de gebruikersinterface is het eenvoudig om gegevens te annoteren, experimenten op te zetten en modellen te publiceren."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"37aff572-f1a8-4401-ac52-51183844c06c",explanation:"Dagshub is een betaalde tool die bedrijven de flexibiliteit biedt om te opereren in de cloud, op een Virtual Private Cloud (VPC), of on-premise."},{question_id:"cfae1bd1-1680-4ae2-9bb6-4531ca819589",answer_id:"74085608-b0db-4f28-b1cf-ff83f87fb07c",explanation:"Dagshub is een betaalde tool die bedrijven de flexibiliteit biedt om te opereren in de cloud, op een Virtual Private Cloud (VPC), of on-premise."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"7c9f2f59-d736-4f6e-aa05-d2b205d5b66d",explanation:"Wanneer uw bedrijf al bekend is met platforms zoals GitHub of GitLab, zal de overgang naar Dagshub naadloos verlopen. Hoewel het gebruik van Dagshub vergelijkbaar is met dat van GitHub of GitLab, vereist het wel enige kennis van data science en machine learning. Het platform biedt een geavanceerde omgeving voor het beheren en delen van data science-projecten, waardoor het essentieel is om vertrouwd te zijn met de basisprincipes van deze disciplines om er optimaal gebruik van te maken."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3",explanation:"Dagshub biedt ook repositories die vergelijkbaar zijn met GitHub. Wat Dagshub onderscheidt, is de introductie van een speciaal tabblad voor experimenten, waar gebruikers experimenten kunnen bekijken en eenvoudig nieuwe experimenten kunnen aanmaken."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"7a8606ca-dac3-497d-ae7e-73b6643aae4e",explanation:`Dagshub heeft functionaliteiten specifiek ontwikkeld voor het cre\xEBren en onderhouden van large language en generatieve modellen. Voor meer informatie, zie: link. -`},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"265f2953-f37c-4c0b-8f61-e2a15118291e",explanation:'Dagshub biedt een uitstekende dataversioning tool genaamd Dagshub DDA, en bovendien is het mogelijk om gebruik te maken van DVC (Data Version Control). Voor meer informatie, raadpleeg deze link.'},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3a85d010-e8c4-4a29-a3dd-330376caf110",explanation:"Dagshub biedt tooling genaamd Dagshub pipelines wat het mogelijk maakt om elementaire data-operaties uit te voeren. Door de integratie met MLflow wordt het mogelijk om de orkestratie tooling van MLflow te gebruiken,."},{question_id:"193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0",answer_id:"3e6a8487-1793-4062-aee3-271c6e435818",explanation:"Dagshub biedt de mogelijkheid om uw machine learning modellen eenvoudig te publiceren, waardoor deze toegankelijk zijn via API-calls voor naadloze integratie en implementatie in verschillende toepassingen."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"629c3eda-64d2-4768-a26d-e5a901c4e170",explanation:"Dagshub introduceert een annotatietabblad, waarmee gebruikers op een moeiteloze manier annotaties kunnen toevoegen aan zowel data als foto's, waardoor het annotatieproces effici\xEBnt en gebruiksvriendelijk wordt."},{question_id:"04f53c2a-e879-4343-adc2-4bd7774ac2cb",answer_id:"4a41cfb5-c413-48d1-bab7-7b2e320e09e3",explanation:"Dagshub, als niet-open-source platform, is exclusief beschikbaar voor bedrijven die bereid zijn ervoor te betalen."},{question_id:"9c5eeaa4-cc36-4895-98d8-4a2d30770612",answer_id:"80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332",explanation:"Wanneer uw bedrijf al bekend is met platforms zoals GitHub of GitLab, zal de overgang naar Dagshub naadloos verlopen. Hoewel het gebruik van Dagshub vergelijkbaar is met dat van GitHub of GitLab, vereist het wel enige kennis van data science en machine learning. Het platform biedt een geavanceerde omgeving voor het beheren en delen van data science-projecten, waardoor het essentieel is om vertrouwd te zijn met de basisprincipes van deze disciplines om er optimaal gebruik van te maken."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"f96feb5c-7f24-436e-aa35-70a170bccfd9",explanation:"Dagshub introduceert een annotatietabblad, waarmee gebruikers op een moeiteloze manier annotaties kunnen toevoegen aan zowel data als foto's, waardoor het annotatieproces effici\xEBnt en gebruiksvriendelijk wordt."},{question_id:"37931900-6d9a-4e56-ac8e-96ea11c970fb",answer_id:"6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9",explanation:"Dagshub introduceert een annotatietabblad, waarmee gebruikers op een moeiteloze manier annotaties kunnen toevoegen aan zowel data als foto's, waardoor het annotatieproces effici\xEBnt en gebruiksvriendelijk wordt."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"3e29d8d1-aef4-45a9-9728-606880731d87",explanation:"Dagshub bevordert samenwerking door middel van real-time updates, projectmanagementtools en integratie met populaire platforms zoals GitHub en Slack. Het platform ondersteunt Role-Based Access Control (RBAC), waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers op basis van hun rollen. Ik zou Dagshub aanbevelen voor teams van 5 of meer personen, waar de behoefte aan gestructureerde samenwerking en co\xF6rdinatie groter is."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"7ca2debe-b701-4e89-958d-6d3cff385de0",explanation:"Dagshub bevordert samenwerking door middel van real-time updates, projectmanagementtools en integratie met populaire platforms zoals GitHub en Slack. H Het platform ondersteunt Role-Based Access Control (RBAC), waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers op basis van hun rollen. Ik zou Dagshub aanbevelen voor teams van 5 of meer personen, waar de behoefte aan gestructureerde samenwerking en co\xF6rdinatie groter is."},{question_id:"c8775160-e498-4292-a464-b45e222f5aa7",answer_id:"6687720c-ef4d-4663-8e79-a98694bb10d9",explanation:"Dagshub bevordert samenwerking door middel van real-time updates, projectmanagementtools en integratie met populaire platforms zoals GitHub en Slack. Het platform ondersteunt Role-Based Access Control (RBAC), waardoor beheerders specifieke toegangsrechten kunnen toewijzen aan gebruikers op basis van hun rollen. Ik zou Dagshub aanbevelen voor teams van 5 of meer personen, waar de behoefte aan gestructureerde samenwerking en co\xF6rdinatie groter is."}]}];var i={tools:a};export{n as q,i as t}; diff --git a/docs/assets/use-form.ff3f77cb.js b/docs/assets/use-form.ff3f77cb.js deleted file mode 100644 index 78b4fb4..0000000 --- a/docs/assets/use-form.ff3f77cb.js +++ /dev/null @@ -1 +0,0 @@ -import{j as l,k as o,l as u,m as d,x as f}from"./index.0ed11181.js";var F=l({name:"QCardSection",props:{tag:{type:String,default:"div"},horizontal:Boolean},setup(a,{slots:e}){const r=o(()=>`q-card__section q-card__section--${a.horizontal===!0?"horiz row no-wrap":"vert"}`);return()=>u(a.tag,{class:r.value},d(e.default))}});const m={dark:{type:Boolean,default:null}};function g(a,e){return o(()=>a.dark===null?e.dark.isActive:a.dark)}var q=l({name:"QCard",props:{...m,tag:{type:String,default:"div"},square:Boolean,flat:Boolean,bordered:Boolean},setup(a,{slots:e}){const{proxy:{$q:r}}=f(),s=g(a,r),i=o(()=>"q-card"+(s.value===!0?" q-card--dark q-dark":"")+(a.bordered===!0?" q-card--bordered":"")+(a.square===!0?" q-card--square no-border-radius":"")+(a.flat===!0?" q-card--flat no-shadow":""));return()=>u(a.tag,{class:i.value},d(e.default))}});let t=[],n=[];function c(a){n=n.filter(e=>e!==a)}function v(a){c(a),n.push(a)}function k(a){c(a),n.length===0&&t.length!==0&&(t[t.length-1](),t=[])}function p(a){n.length===0?a():t.push(a)}function C(a){t=t.filter(e=>e!==a)}const S={name:String};function b(a){return o(()=>({type:"hidden",name:a.name,value:a.modelValue}))}function y(a={}){return(e,r,s)=>{e[r](u("input",{class:"hidden"+(s||""),...a.value}))}}function B(a){return o(()=>a.name||a.for)}export{F as Q,q as a,g as b,v as c,p as d,S as e,b as f,B as g,y as h,C as i,k as r,m as u}; diff --git a/docs/assets/use-key-composition.7c536e3b.js b/docs/assets/use-key-composition.7c536e3b.js new file mode 100644 index 0000000..06d444c --- /dev/null +++ b/docs/assets/use-key-composition.7c536e3b.js @@ -0,0 +1 @@ +import{J as ue,r as g,o as T,i as ae,au as ie,w as x,C as H,g as O,f as s,a0 as se,ao as de,a4 as fe,V as ce,N as ve,a2 as pe,a3 as me,h as a,a6 as F,a7 as J,av as ge,z as k,Z as be,X as he}from"./index.ab4869ca.js";import{c as ye,u as Ce,b as qe,g as xe}from"./QCard.eb99e114.js";let D,E=0;const f=new Array(256);for(let e=0;e<256;e++)f[e]=(e+256).toString(16).substring(1);const _e=(()=>{const e=typeof crypto!="undefined"?crypto:typeof window!="undefined"?window.crypto||window.msCrypto:void 0;if(e!==void 0){if(e.randomBytes!==void 0)return e.randomBytes;if(e.getRandomValues!==void 0)return o=>{const t=new Uint8Array(o);return e.getRandomValues(t),t}}return o=>{const t=[];for(let r=o;r>0;r--)t.push(Math.floor(Math.random()*256));return t}})(),X=4096;function oe(){(D===void 0||E+16>X)&&(E=0,D=_e(X));const e=Array.prototype.slice.call(D,E,E+=16);return e[6]=e[6]&15|64,e[8]=e[8]&63|128,f[e[0]]+f[e[1]]+f[e[2]]+f[e[3]]+"-"+f[e[4]]+f[e[5]]+"-"+f[e[6]]+f[e[7]]+"-"+f[e[8]]+f[e[9]]+"-"+f[e[10]]+f[e[11]]+f[e[12]]+f[e[13]]+f[e[14]]+f[e[15]]}function te(e,o){return e===void 0?o===!0?`f_${oe()}`:void 0:e}function Se(e,o=!0){if(ue.value===!0){const t=g(e);return o===!0&&e===void 0&&T(()=>{t.value=`f_${oe()}`}),t}return g(te(e,o))}function we({validate:e,resetValidation:o,requiresQForm:t}){const r=ae(ie,!1);if(r!==!1){const{props:v,proxy:i}=O();Object.assign(i,{validate:e,resetValidation:o}),x(()=>v.disable,u=>{u===!0?(typeof o=="function"&&o(),r.unbindComponent(i)):r.bindComponent(i)}),T(()=>{v.disable!==!0&&r.bindComponent(i)}),H(()=>{v.disable!==!0&&r.unbindComponent(i)})}else t===!0&&console.error("Parent QForm not found on useFormChild()!")}const G=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,W=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,Y=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,I=/^rgb\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5])\)$/,M=/^rgba\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/,U={date:e=>/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(e),time:e=>/^([0-1]?\d|2[0-3]):[0-5]\d$/.test(e),fulltime:e=>/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(e),timeOrFulltime:e=>/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(e),email:e=>/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e),hexColor:e=>G.test(e),hexaColor:e=>W.test(e),hexOrHexaColor:e=>Y.test(e),rgbColor:e=>I.test(e),rgbaColor:e=>M.test(e),rgbOrRgbaColor:e=>I.test(e)||M.test(e),hexOrRgbColor:e=>G.test(e)||I.test(e),hexaOrRgbaColor:e=>W.test(e)||M.test(e),anyColor:e=>Y.test(e)||I.test(e)||M.test(e)},Re=[!0,!1,"ondemand"],Be={modelValue:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],default:!1,validator:e=>Re.includes(e)}};function Ve(e,o){const{props:t,proxy:r}=O(),v=g(!1),i=g(null),u=g(!1);we({validate:w,resetValidation:S});let d=0,b;const V=s(()=>t.rules!==void 0&&t.rules!==null&&t.rules.length!==0),h=s(()=>t.disable!==!0&&V.value===!0&&o.value===!1),_=s(()=>t.error===!0||v.value===!0),P=s(()=>typeof t.errorMessage=="string"&&t.errorMessage.length!==0?t.errorMessage:i.value);x(()=>t.modelValue,()=>{u.value=!0,h.value===!0&&t.lazyRules===!1&&C()});function A(){t.lazyRules!=="ondemand"&&h.value===!0&&u.value===!0&&C()}x(()=>t.reactiveRules,y=>{y===!0?b===void 0&&(b=x(()=>t.rules,A,{immediate:!0,deep:!0})):b!==void 0&&(b(),b=void 0)},{immediate:!0}),x(()=>t.lazyRules,A),x(e,y=>{y===!0?u.value=!0:h.value===!0&&t.lazyRules!=="ondemand"&&C()});function S(){d++,o.value=!1,u.value=!1,v.value=!1,i.value=null,C.cancel()}function w(y=t.modelValue){if(t.disable===!0||V.value===!1)return!0;const R=++d,z=o.value!==!0?()=>{u.value=!0}:()=>{},q=(c,p)=>{c===!0&&z(),v.value=c,i.value=p||null,o.value=!1},B=[];for(let c=0;c{if(c===void 0||Array.isArray(c)===!1||c.length===0)return R===d&&q(!1),!0;const p=c.find(m=>m===!1||typeof m=="string");return R===d&&q(p!==void 0,p),p===void 0},c=>(R===d&&(console.error(c),q(!0)),!1)))}const C=se(w,0);return H(()=>{b!==void 0&&b(),C.cancel()}),Object.assign(r,{resetValidation:S,validate:w}),de(r,"hasError",()=>_.value),{isDirtyModel:u,hasRules:V,hasError:_,errorMessage:P,validate:w,resetValidation:S}}const ee=/^on[A-Z]/;function Ae(e,o){const t={listeners:g({}),attributes:g({})};function r(){const v={},i={};for(const u in e)u!=="class"&&u!=="style"&&ee.test(u)===!1&&(v[u]=e[u]);for(const u in o.props)ee.test(u)===!0&&(i[u]=o.props[u]);t.attributes.value=v,t.listeners.value=i}return fe(r),r(),t}function Fe(e){return e!=null&&(""+e).length!==0}const Pe={...Ce,...Be,label:String,stackLabel:Boolean,hint:String,hideHint:Boolean,prefix:String,suffix:String,labelColor:String,color:String,bgColor:String,filled:Boolean,outlined:Boolean,borderless:Boolean,standout:[Boolean,String],square:Boolean,loading:Boolean,labelSlot:Boolean,bottomSlots:Boolean,hideBottomSpace:Boolean,rounded:Boolean,dense:Boolean,itemAligned:Boolean,counter:Boolean,clearable:Boolean,clearIcon:String,disable:Boolean,readonly:Boolean,autofocus:Boolean,for:String,maxlength:[Number,String]},ze=["update:modelValue","clear","focus","blur","popupShow","popupHide"];function De({requiredForAttr:e=!0,tagProp:o}={}){const{props:t,attrs:r,proxy:v,vnode:i}=O(),u=qe(t,v.$q),d=Se(t.for,e);return{requiredForAttr:e,tag:o===!0?s(()=>t.tag):{value:"label"},isDark:u,editable:s(()=>t.disable!==!0&&t.readonly!==!0),innerLoading:g(!1),focused:g(!1),hasPopupOpen:!1,splitAttrs:Ae(r,i),targetUid:d,rootRef:g(null),targetRef:g(null),controlRef:g(null)}}function Ue(e){const{props:o,emit:t,slots:r,attrs:v,proxy:i}=O(),{$q:u}=i;let d=null;e.hasValue===void 0&&(e.hasValue=s(()=>Fe(o.modelValue))),e.emitValue===void 0&&(e.emitValue=l=>{t("update:modelValue",l)}),e.controlEvents===void 0&&(e.controlEvents={onFocusin:L,onFocusout:j}),Object.assign(e,{clearValue:Z,onControlFocusin:L,onControlFocusout:j,focus:p}),e.computedCounter===void 0&&(e.computedCounter=s(()=>{if(o.counter!==!1){const l=typeof o.modelValue=="string"||typeof o.modelValue=="number"?(""+o.modelValue).length:Array.isArray(o.modelValue)===!0?o.modelValue.length:0,n=o.maxlength!==void 0?o.maxlength:o.maxValues;return l+(n!==void 0?" / "+n:"")}}));const{isDirtyModel:b,hasRules:V,hasError:h,errorMessage:_,resetValidation:P}=Ve(e.focused,e.innerLoading),A=e.floatingLabel!==void 0?s(()=>o.stackLabel===!0||e.focused.value===!0||e.floatingLabel.value===!0):s(()=>o.stackLabel===!0||e.focused.value===!0||e.hasValue.value===!0),S=s(()=>o.bottomSlots===!0||o.hint!==void 0||V.value===!0||o.counter===!0||o.error!==null),w=s(()=>o.filled===!0?"filled":o.outlined===!0?"outlined":o.borderless===!0?"borderless":o.standout?"standout":"standard"),C=s(()=>`q-field row no-wrap items-start q-field--${w.value}`+(e.fieldClass!==void 0?` ${e.fieldClass.value}`:"")+(o.rounded===!0?" q-field--rounded":"")+(o.square===!0?" q-field--square":"")+(A.value===!0?" q-field--float":"")+(R.value===!0?" q-field--labeled":"")+(o.dense===!0?" q-field--dense":"")+(o.itemAligned===!0?" q-field--item-aligned q-item-type":"")+(e.isDark.value===!0?" q-field--dark":"")+(e.getControl===void 0?" q-field--auto-height":"")+(e.focused.value===!0?" q-field--focused":"")+(h.value===!0?" q-field--error":"")+(h.value===!0||e.focused.value===!0?" q-field--highlighted":"")+(o.hideBottomSpace!==!0&&S.value===!0?" q-field--with-bottom":"")+(o.disable===!0?" q-field--disabled":o.readonly===!0?" q-field--readonly":"")),y=s(()=>"q-field__control relative-position row no-wrap"+(o.bgColor!==void 0?` bg-${o.bgColor}`:"")+(h.value===!0?" text-negative":typeof o.standout=="string"&&o.standout.length!==0&&e.focused.value===!0?` ${o.standout}`:o.color!==void 0?` text-${o.color}`:"")),R=s(()=>o.labelSlot===!0||o.label!==void 0),z=s(()=>"q-field__label no-pointer-events absolute ellipsis"+(o.labelColor!==void 0&&h.value!==!0?` text-${o.labelColor}`:"")),q=s(()=>({id:e.targetUid.value,editable:e.editable.value,focused:e.focused.value,floatingLabel:A.value,modelValue:o.modelValue,emitValue:e.emitValue})),B=s(()=>{const l={};return e.targetUid.value&&(l.for=e.targetUid.value),o.disable===!0&&(l["aria-disabled"]="true"),l});x(()=>o.for,l=>{e.targetUid.value=te(l,e.requiredForAttr)});function c(){const l=document.activeElement;let n=e.targetRef!==void 0&&e.targetRef.value;n&&(l===null||l.id!==e.targetUid.value)&&(n.hasAttribute("tabindex")===!0||(n=n.querySelector("[tabindex]")),n&&n!==l&&n.focus({preventScroll:!0}))}function p(){ye(c)}function m(){xe(c);const l=document.activeElement;l!==null&&e.rootRef.value.contains(l)&&l.blur()}function L(l){d!==null&&(clearTimeout(d),d=null),e.editable.value===!0&&e.focused.value===!1&&(e.focused.value=!0,t("focus",l))}function j(l,n){d!==null&&clearTimeout(d),d=setTimeout(()=>{d=null,!(document.hasFocus()===!0&&(e.hasPopupOpen===!0||e.controlRef===void 0||e.controlRef.value===null||e.controlRef.value.contains(document.activeElement)!==!1))&&(e.focused.value===!0&&(e.focused.value=!1,t("blur",l)),n!==void 0&&n())})}function Z(l){ce(l),u.platform.is.mobile!==!0?(e.targetRef!==void 0&&e.targetRef.value||e.rootRef.value).focus():e.rootRef.value.contains(document.activeElement)===!0&&document.activeElement.blur(),o.type==="file"&&(e.inputRef.value.value=null),t("update:modelValue",null),t("clear",o.modelValue),ve(()=>{const n=b.value;P(),b.value=n})}function le(){const l=[];return r.prepend!==void 0&&l.push(a("div",{class:"q-field__prepend q-field__marginal row no-wrap items-center",key:"prepend",onClick:F},r.prepend())),l.push(a("div",{class:"q-field__control-container col relative-position row no-wrap q-anchor--skip"},re())),h.value===!0&&o.noErrorIcon===!1&&l.push($("error",[a(J,{name:u.iconSet.field.error,color:"negative"})])),o.loading===!0||e.innerLoading.value===!0?l.push($("inner-loading-append",r.loading!==void 0?r.loading():[a(ge,{color:o.color})])):o.clearable===!0&&e.hasValue.value===!0&&e.editable.value===!0&&l.push($("inner-clearable-append",[a(J,{class:"q-field__focusable-action",tag:"button",name:o.clearIcon||u.iconSet.field.clear,tabindex:0,type:"button","aria-hidden":null,role:null,onClick:Z})])),r.append!==void 0&&l.push(a("div",{class:"q-field__append q-field__marginal row no-wrap items-center",key:"append",onClick:F},r.append())),e.getInnerAppend!==void 0&&l.push($("inner-append",e.getInnerAppend())),e.getControlChild!==void 0&&l.push(e.getControlChild()),l}function re(){const l=[];return o.prefix!==void 0&&o.prefix!==null&&l.push(a("div",{class:"q-field__prefix no-pointer-events row items-center"},o.prefix)),e.getShadowControl!==void 0&&e.hasShadow.value===!0&&l.push(e.getShadowControl()),e.getControl!==void 0?l.push(e.getControl()):r.rawControl!==void 0?l.push(r.rawControl()):r.control!==void 0&&l.push(a("div",{ref:e.targetRef,class:"q-field__native row",tabindex:-1,...e.splitAttrs.attributes.value,"data-autofocus":o.autofocus===!0||void 0},r.control(q.value))),R.value===!0&&l.push(a("div",{class:z.value},k(r.label,o.label))),o.suffix!==void 0&&o.suffix!==null&&l.push(a("div",{class:"q-field__suffix no-pointer-events row items-center"},o.suffix)),l.concat(k(r.default))}function ne(){let l,n;h.value===!0?_.value!==null?(l=[a("div",{role:"alert"},_.value)],n=`q--slot-error-${_.value}`):(l=k(r.error),n="q--slot-error"):(o.hideHint!==!0||e.focused.value===!0)&&(o.hint!==void 0?(l=[a("div",o.hint)],n=`q--slot-hint-${o.hint}`):(l=k(r.hint),n="q--slot-hint"));const N=o.counter===!0||r.counter!==void 0;if(o.hideBottomSpace===!0&&N===!1&&l===void 0)return;const Q=a("div",{key:n,class:"q-field__messages col"},l);return a("div",{class:"q-field__bottom row items-start q-field__bottom--"+(o.hideBottomSpace!==!0?"animated":"stale"),onClick:F},[o.hideBottomSpace===!0?Q:a(be,{name:"q-transition--field-message"},()=>Q),N===!0?a("div",{class:"q-field__counter"},r.counter!==void 0?r.counter():e.computedCounter.value):null])}function $(l,n){return n===null?null:a("div",{key:l,class:"q-field__append q-field__marginal row no-wrap items-center q-anchor--skip"},n)}let K=!1;return pe(()=>{K=!0}),me(()=>{K===!0&&o.autofocus===!0&&i.focus()}),o.autofocus===!0&&T(()=>{i.focus()}),H(()=>{d!==null&&clearTimeout(d)}),Object.assign(i,{focus:p,blur:m}),function(){const n=e.getControl===void 0&&r.control===void 0?{...e.splitAttrs.attributes.value,"data-autofocus":o.autofocus===!0||void 0,...B.value}:B.value;return a(e.tag.value,{ref:e.rootRef,class:[C.value,v.class],style:v.style,...n},[r.before!==void 0?a("div",{class:"q-field__before q-field__marginal row no-wrap items-center",onClick:F},r.before()):null,a("div",{class:"q-field__inner relative-position col self-stretch"},[a("div",{ref:e.controlRef,class:y.value,tabindex:-1,...e.controlEvents},le()),S.value===!0?ne():null]),r.after!==void 0?a("div",{class:"q-field__after q-field__marginal row no-wrap items-center",onClick:F},r.after()):null])}}const $e=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/,ke=/[\u4e00-\u9fff\u3400-\u4dbf\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff\u{2f800}-\u{2fa1f}]/u,Ee=/[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/,Ie=/[a-z0-9_ -]$/i;function Te(e){return function(t){if(t.type==="compositionend"||t.type==="change"){if(t.target.qComposing!==!0)return;t.target.qComposing=!1,e(t)}else t.type==="compositionupdate"&&t.target.qComposing!==!0&&typeof t.data=="string"&&(he.is.firefox===!0?Ie.test(t.data)===!1:$e.test(t.data)===!0||ke.test(t.data)===!0||Ee.test(t.data)===!0)===!0&&(t.target.qComposing=!0)}}export{ze as a,Ue as b,De as c,Te as d,Fe as f,Pe as u}; diff --git a/docs/assets/use-key-composition.deb261a7.js b/docs/assets/use-key-composition.deb261a7.js deleted file mode 100644 index 6af4006..0000000 --- a/docs/assets/use-key-composition.deb261a7.js +++ /dev/null @@ -1 +0,0 @@ -import{D as ue,r as g,A as z,n as ae,q as x,s as H,aH as ie,x as O,k as s,ao as se,a1 as de,av as fe,ab as ce,I as ve,a5 as pe,aq as me,l as a,X as F,T as J,aI as ge,m as k,a9 as be,a7 as he}from"./index.0ed11181.js";import{d as ye,u as Ce,b as qe,i as xe}from"./use-form.ff3f77cb.js";let T,E=0;const f=new Array(256);for(let e=0;e<256;e++)f[e]=(e+256).toString(16).substring(1);const _e=(()=>{const e=typeof crypto!="undefined"?crypto:typeof window!="undefined"?window.crypto||window.msCrypto:void 0;if(e!==void 0){if(e.randomBytes!==void 0)return e.randomBytes;if(e.getRandomValues!==void 0)return o=>{const t=new Uint8Array(o);return e.getRandomValues(t),t}}return o=>{const t=[];for(let r=o;r>0;r--)t.push(Math.floor(Math.random()*256));return t}})(),X=4096;function oe(){(T===void 0||E+16>X)&&(E=0,T=_e(X));const e=Array.prototype.slice.call(T,E,E+=16);return e[6]=e[6]&15|64,e[8]=e[8]&63|128,f[e[0]]+f[e[1]]+f[e[2]]+f[e[3]]+"-"+f[e[4]]+f[e[5]]+"-"+f[e[6]]+f[e[7]]+"-"+f[e[8]]+f[e[9]]+"-"+f[e[10]]+f[e[11]]+f[e[12]]+f[e[13]]+f[e[14]]+f[e[15]]}function te(e,o){return e===void 0?o===!0?`f_${oe()}`:void 0:e}function Se(e,o=!0){if(ue.value===!0){const t=g(e);return o===!0&&e===void 0&&z(()=>{t.value=`f_${oe()}`}),t}return g(te(e,o))}function Re({validate:e,resetValidation:o,requiresQForm:t}){const r=ae(ie,!1);if(r!==!1){const{props:v,proxy:i}=O();Object.assign(i,{validate:e,resetValidation:o}),x(()=>v.disable,u=>{u===!0?(typeof o=="function"&&o(),r.unbindComponent(i)):r.bindComponent(i)}),z(()=>{v.disable!==!0&&r.bindComponent(i)}),H(()=>{v.disable!==!0&&r.unbindComponent(i)})}else t===!0&&console.error("Parent QForm not found on useFormChild()!")}const G=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,W=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,Y=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,I=/^rgb\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5])\)$/,M=/^rgba\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/,U={date:e=>/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(e),time:e=>/^([0-1]?\d|2[0-3]):[0-5]\d$/.test(e),fulltime:e=>/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(e),timeOrFulltime:e=>/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(e),email:e=>/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e),hexColor:e=>G.test(e),hexaColor:e=>W.test(e),hexOrHexaColor:e=>Y.test(e),rgbColor:e=>I.test(e),rgbaColor:e=>M.test(e),rgbOrRgbaColor:e=>I.test(e)||M.test(e),hexOrRgbColor:e=>G.test(e)||I.test(e),hexaOrRgbaColor:e=>W.test(e)||M.test(e),anyColor:e=>Y.test(e)||I.test(e)||M.test(e)},we=[!0,!1,"ondemand"],Be={modelValue:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],default:!1,validator:e=>we.includes(e)}};function Ae(e,o){const{props:t,proxy:r}=O(),v=g(!1),i=g(null),u=g(!1);Re({validate:R,resetValidation:S});let d=0,b;const A=s(()=>t.rules!==void 0&&t.rules!==null&&t.rules.length!==0),h=s(()=>t.disable!==!0&&A.value===!0&&o.value===!1),_=s(()=>t.error===!0||v.value===!0),P=s(()=>typeof t.errorMessage=="string"&&t.errorMessage.length!==0?t.errorMessage:i.value);x(()=>t.modelValue,()=>{u.value=!0,h.value===!0&&t.lazyRules===!1&&C()});function V(){t.lazyRules!=="ondemand"&&h.value===!0&&u.value===!0&&C()}x(()=>t.reactiveRules,y=>{y===!0?b===void 0&&(b=x(()=>t.rules,V,{immediate:!0,deep:!0})):b!==void 0&&(b(),b=void 0)},{immediate:!0}),x(()=>t.lazyRules,V),x(e,y=>{y===!0?u.value=!0:h.value===!0&&t.lazyRules!=="ondemand"&&C()});function S(){d++,o.value=!1,u.value=!1,v.value=!1,i.value=null,C.cancel()}function R(y=t.modelValue){if(t.disable===!0||A.value===!1)return!0;const w=++d,D=o.value!==!0?()=>{u.value=!0}:()=>{},q=(c,p)=>{c===!0&&D(),v.value=c,i.value=p||null,o.value=!1},B=[];for(let c=0;c{if(c===void 0||Array.isArray(c)===!1||c.length===0)return w===d&&q(!1),!0;const p=c.find(m=>m===!1||typeof m=="string");return w===d&&q(p!==void 0,p),p===void 0},c=>(w===d&&(console.error(c),q(!0)),!1)))}const C=se(R,0);return H(()=>{b!==void 0&&b(),C.cancel()}),Object.assign(r,{resetValidation:S,validate:R}),de(r,"hasError",()=>_.value),{isDirtyModel:u,hasRules:A,hasError:_,errorMessage:P,validate:R,resetValidation:S}}const ee=/^on[A-Z]/;function Ve(e,o){const t={listeners:g({}),attributes:g({})};function r(){const v={},i={};for(const u in e)u!=="class"&&u!=="style"&&ee.test(u)===!1&&(v[u]=e[u]);for(const u in o.props)ee.test(u)===!0&&(i[u]=o.props[u]);t.attributes.value=v,t.listeners.value=i}return fe(r),r(),t}function Fe(e){return e!=null&&(""+e).length!==0}const Pe={...Ce,...Be,label:String,stackLabel:Boolean,hint:String,hideHint:Boolean,prefix:String,suffix:String,labelColor:String,color:String,bgColor:String,filled:Boolean,outlined:Boolean,borderless:Boolean,standout:[Boolean,String],square:Boolean,loading:Boolean,labelSlot:Boolean,bottomSlots:Boolean,hideBottomSpace:Boolean,rounded:Boolean,dense:Boolean,itemAligned:Boolean,counter:Boolean,clearable:Boolean,clearIcon:String,disable:Boolean,readonly:Boolean,autofocus:Boolean,for:String,maxlength:[Number,String]},De=["update:modelValue","clear","focus","blur","popupShow","popupHide"];function Te({requiredForAttr:e=!0,tagProp:o}={}){const{props:t,attrs:r,proxy:v,vnode:i}=O(),u=qe(t,v.$q),d=Se(t.for,e);return{requiredForAttr:e,tag:o===!0?s(()=>t.tag):{value:"label"},isDark:u,editable:s(()=>t.disable!==!0&&t.readonly!==!0),innerLoading:g(!1),focused:g(!1),hasPopupOpen:!1,splitAttrs:Ve(r,i),targetUid:d,rootRef:g(null),targetRef:g(null),controlRef:g(null)}}function Ue(e){const{props:o,emit:t,slots:r,attrs:v,proxy:i}=O(),{$q:u}=i;let d=null;e.hasValue===void 0&&(e.hasValue=s(()=>Fe(o.modelValue))),e.emitValue===void 0&&(e.emitValue=l=>{t("update:modelValue",l)}),e.controlEvents===void 0&&(e.controlEvents={onFocusin:L,onFocusout:j}),Object.assign(e,{clearValue:Z,onControlFocusin:L,onControlFocusout:j,focus:p}),e.computedCounter===void 0&&(e.computedCounter=s(()=>{if(o.counter!==!1){const l=typeof o.modelValue=="string"||typeof o.modelValue=="number"?(""+o.modelValue).length:Array.isArray(o.modelValue)===!0?o.modelValue.length:0,n=o.maxlength!==void 0?o.maxlength:o.maxValues;return l+(n!==void 0?" / "+n:"")}}));const{isDirtyModel:b,hasRules:A,hasError:h,errorMessage:_,resetValidation:P}=Ae(e.focused,e.innerLoading),V=e.floatingLabel!==void 0?s(()=>o.stackLabel===!0||e.focused.value===!0||e.floatingLabel.value===!0):s(()=>o.stackLabel===!0||e.focused.value===!0||e.hasValue.value===!0),S=s(()=>o.bottomSlots===!0||o.hint!==void 0||A.value===!0||o.counter===!0||o.error!==null),R=s(()=>o.filled===!0?"filled":o.outlined===!0?"outlined":o.borderless===!0?"borderless":o.standout?"standout":"standard"),C=s(()=>`q-field row no-wrap items-start q-field--${R.value}`+(e.fieldClass!==void 0?` ${e.fieldClass.value}`:"")+(o.rounded===!0?" q-field--rounded":"")+(o.square===!0?" q-field--square":"")+(V.value===!0?" q-field--float":"")+(w.value===!0?" q-field--labeled":"")+(o.dense===!0?" q-field--dense":"")+(o.itemAligned===!0?" q-field--item-aligned q-item-type":"")+(e.isDark.value===!0?" q-field--dark":"")+(e.getControl===void 0?" q-field--auto-height":"")+(e.focused.value===!0?" q-field--focused":"")+(h.value===!0?" q-field--error":"")+(h.value===!0||e.focused.value===!0?" q-field--highlighted":"")+(o.hideBottomSpace!==!0&&S.value===!0?" q-field--with-bottom":"")+(o.disable===!0?" q-field--disabled":o.readonly===!0?" q-field--readonly":"")),y=s(()=>"q-field__control relative-position row no-wrap"+(o.bgColor!==void 0?` bg-${o.bgColor}`:"")+(h.value===!0?" text-negative":typeof o.standout=="string"&&o.standout.length!==0&&e.focused.value===!0?` ${o.standout}`:o.color!==void 0?` text-${o.color}`:"")),w=s(()=>o.labelSlot===!0||o.label!==void 0),D=s(()=>"q-field__label no-pointer-events absolute ellipsis"+(o.labelColor!==void 0&&h.value!==!0?` text-${o.labelColor}`:"")),q=s(()=>({id:e.targetUid.value,editable:e.editable.value,focused:e.focused.value,floatingLabel:V.value,modelValue:o.modelValue,emitValue:e.emitValue})),B=s(()=>{const l={};return e.targetUid.value&&(l.for=e.targetUid.value),o.disable===!0&&(l["aria-disabled"]="true"),l});x(()=>o.for,l=>{e.targetUid.value=te(l,e.requiredForAttr)});function c(){const l=document.activeElement;let n=e.targetRef!==void 0&&e.targetRef.value;n&&(l===null||l.id!==e.targetUid.value)&&(n.hasAttribute("tabindex")===!0||(n=n.querySelector("[tabindex]")),n&&n!==l&&n.focus({preventScroll:!0}))}function p(){ye(c)}function m(){xe(c);const l=document.activeElement;l!==null&&e.rootRef.value.contains(l)&&l.blur()}function L(l){d!==null&&(clearTimeout(d),d=null),e.editable.value===!0&&e.focused.value===!1&&(e.focused.value=!0,t("focus",l))}function j(l,n){d!==null&&clearTimeout(d),d=setTimeout(()=>{d=null,!(document.hasFocus()===!0&&(e.hasPopupOpen===!0||e.controlRef===void 0||e.controlRef.value===null||e.controlRef.value.contains(document.activeElement)!==!1))&&(e.focused.value===!0&&(e.focused.value=!1,t("blur",l)),n!==void 0&&n())})}function Z(l){ce(l),u.platform.is.mobile!==!0?(e.targetRef!==void 0&&e.targetRef.value||e.rootRef.value).focus():e.rootRef.value.contains(document.activeElement)===!0&&document.activeElement.blur(),o.type==="file"&&(e.inputRef.value.value=null),t("update:modelValue",null),t("clear",o.modelValue),ve(()=>{const n=b.value;P(),b.value=n})}function le(){const l=[];return r.prepend!==void 0&&l.push(a("div",{class:"q-field__prepend q-field__marginal row no-wrap items-center",key:"prepend",onClick:F},r.prepend())),l.push(a("div",{class:"q-field__control-container col relative-position row no-wrap q-anchor--skip"},re())),h.value===!0&&o.noErrorIcon===!1&&l.push($("error",[a(J,{name:u.iconSet.field.error,color:"negative"})])),o.loading===!0||e.innerLoading.value===!0?l.push($("inner-loading-append",r.loading!==void 0?r.loading():[a(ge,{color:o.color})])):o.clearable===!0&&e.hasValue.value===!0&&e.editable.value===!0&&l.push($("inner-clearable-append",[a(J,{class:"q-field__focusable-action",tag:"button",name:o.clearIcon||u.iconSet.field.clear,tabindex:0,type:"button","aria-hidden":null,role:null,onClick:Z})])),r.append!==void 0&&l.push(a("div",{class:"q-field__append q-field__marginal row no-wrap items-center",key:"append",onClick:F},r.append())),e.getInnerAppend!==void 0&&l.push($("inner-append",e.getInnerAppend())),e.getControlChild!==void 0&&l.push(e.getControlChild()),l}function re(){const l=[];return o.prefix!==void 0&&o.prefix!==null&&l.push(a("div",{class:"q-field__prefix no-pointer-events row items-center"},o.prefix)),e.getShadowControl!==void 0&&e.hasShadow.value===!0&&l.push(e.getShadowControl()),e.getControl!==void 0?l.push(e.getControl()):r.rawControl!==void 0?l.push(r.rawControl()):r.control!==void 0&&l.push(a("div",{ref:e.targetRef,class:"q-field__native row",tabindex:-1,...e.splitAttrs.attributes.value,"data-autofocus":o.autofocus===!0||void 0},r.control(q.value))),w.value===!0&&l.push(a("div",{class:D.value},k(r.label,o.label))),o.suffix!==void 0&&o.suffix!==null&&l.push(a("div",{class:"q-field__suffix no-pointer-events row items-center"},o.suffix)),l.concat(k(r.default))}function ne(){let l,n;h.value===!0?_.value!==null?(l=[a("div",{role:"alert"},_.value)],n=`q--slot-error-${_.value}`):(l=k(r.error),n="q--slot-error"):(o.hideHint!==!0||e.focused.value===!0)&&(o.hint!==void 0?(l=[a("div",o.hint)],n=`q--slot-hint-${o.hint}`):(l=k(r.hint),n="q--slot-hint"));const Q=o.counter===!0||r.counter!==void 0;if(o.hideBottomSpace===!0&&Q===!1&&l===void 0)return;const N=a("div",{key:n,class:"q-field__messages col"},l);return a("div",{class:"q-field__bottom row items-start q-field__bottom--"+(o.hideBottomSpace!==!0?"animated":"stale"),onClick:F},[o.hideBottomSpace===!0?N:a(be,{name:"q-transition--field-message"},()=>N),Q===!0?a("div",{class:"q-field__counter"},r.counter!==void 0?r.counter():e.computedCounter.value):null])}function $(l,n){return n===null?null:a("div",{key:l,class:"q-field__append q-field__marginal row no-wrap items-center q-anchor--skip"},n)}let K=!1;return pe(()=>{K=!0}),me(()=>{K===!0&&o.autofocus===!0&&i.focus()}),o.autofocus===!0&&z(()=>{i.focus()}),H(()=>{d!==null&&clearTimeout(d)}),Object.assign(i,{focus:p,blur:m}),function(){const n=e.getControl===void 0&&r.control===void 0?{...e.splitAttrs.attributes.value,"data-autofocus":o.autofocus===!0||void 0,...B.value}:B.value;return a(e.tag.value,{ref:e.rootRef,class:[C.value,v.class],style:v.style,...n},[r.before!==void 0?a("div",{class:"q-field__before q-field__marginal row no-wrap items-center",onClick:F},r.before()):null,a("div",{class:"q-field__inner relative-position col self-stretch"},[a("div",{ref:e.controlRef,class:y.value,tabindex:-1,...e.controlEvents},le()),S.value===!0?ne():null]),r.after!==void 0?a("div",{class:"q-field__after q-field__marginal row no-wrap items-center",onClick:F},r.after()):null])}}const $e=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/,ke=/[\u4e00-\u9fff\u3400-\u4dbf\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff\u{2f800}-\u{2fa1f}]/u,Ee=/[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/,Ie=/[a-z0-9_ -]$/i;function ze(e){return function(t){if(t.type==="compositionend"||t.type==="change"){if(t.target.qComposing!==!0)return;t.target.qComposing=!1,e(t)}else t.type==="compositionupdate"&&t.target.qComposing!==!0&&typeof t.data=="string"&&(he.is.firefox===!0?Ie.test(t.data)===!1:$e.test(t.data)===!0||ke.test(t.data)===!0||Ee.test(t.data)===!0)===!0&&(t.target.qComposing=!0)}}export{De as a,Ue as b,Te as c,ze as d,Fe as f,Pe as u}; diff --git a/docs/assets/use-quasar.624d3c43.js b/docs/assets/use-quasar.624d3c43.js deleted file mode 100644 index c3858b4..0000000 --- a/docs/assets/use-quasar.624d3c43.js +++ /dev/null @@ -1 +0,0 @@ -import{n as a,H as r}from"./index.0ed11181.js";function u(){return a(r)}export{u}; diff --git a/docs/assets/vue-i18n.db8d47ce.js b/docs/assets/vue-i18n.db8d47ce.js new file mode 100644 index 0000000..b44d84a --- /dev/null +++ b/docs/assets/vue-i18n.db8d47ce.js @@ -0,0 +1,19 @@ +import{a as it,h as Jt,g as ye,e as En,i as bn,o as Ln,c as hn,f as Ee,w as qe,F as Qt,j as pn,r as Nn,s as Tn,k as In,T as kn}from"./index.ab4869ca.js";/*! + * shared v10.0.0-beta.5 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */const Se=typeof window!="undefined",re=(e,t=!1)=>t?Symbol.for(e):Symbol(e),Cn=(e,t,r)=>On({l:e,k:t,s:r}),On=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),G=e=>typeof e=="number"&&isFinite(e),yn=e=>zt(e)==="[object Date]",fe=e=>zt(e)==="[object RegExp]",Pe=e=>A(e)&&Object.keys(e).length===0,j=Object.assign;let Lt;const qt=()=>Lt||(Lt=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});function ht(e){return e.replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}const Sn=Object.prototype.hasOwnProperty;function Re(e,t){return Sn.call(e,t)}const x=Array.isArray,W=e=>typeof e=="function",k=e=>typeof e=="string",D=e=>typeof e=="boolean",M=e=>e!==null&&typeof e=="object",Rn=e=>M(e)&&W(e.then)&&W(e.catch),Zt=Object.prototype.toString,zt=e=>Zt.call(e),A=e=>{if(!M(e))return!1;const t=Object.getPrototypeOf(e);return t===null||t.constructor===Object},Pn=e=>e==null?"":x(e)||A(e)&&e.toString===Zt?JSON.stringify(e,null,2):String(e);function ot(e,t=""){return e.reduce((r,n,a)=>a===0?r+n:r+t+n,"")}function An(e,t){typeof console!="undefined"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const ke=e=>!M(e)||x(e);function Oe(e,t){if(ke(e)||ke(t))throw new Error("Invalid value");const r=[{src:e,des:t}];for(;r.length;){const{src:n,des:a}=r.pop();Object.keys(n).forEach(s=>{ke(n[s])||ke(a[s])?a[s]=n[s]:r.push({src:n[s],des:a[s]})})}}/*! + * message-compiler v10.0.0-beta.5 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */function Fn(e,t,r){return{line:e,column:t,offset:r}}function Ze(e,t,r){const n={start:e,end:t};return r!=null&&(n.source=r),n}const v={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16},Dn=17;function Ae(e,t,r={}){const{domain:n,messages:a,args:s}=r,i=e,f=new SyntaxError(String(i));return f.code=e,t&&(f.location=t),f.domain=n,f}function Mn(e){throw e}const z=" ",vn="\r",X=` +`,wn=String.fromCharCode(8232),Un=String.fromCharCode(8233);function Wn(e){const t=e;let r=0,n=1,a=1,s=0;const i=h=>t[h]===vn&&t[h+1]===X,f=h=>t[h]===X,u=h=>t[h]===Un,_=h=>t[h]===wn,T=h=>i(h)||f(h)||u(h)||_(h),p=()=>r,b=()=>n,O=()=>a,S=()=>s,P=h=>i(h)||u(h)||_(h)?X:t[h],y=()=>P(r),o=()=>P(r+s);function E(){return s=0,T(r)&&(n++,a=0),i(r)&&r++,r++,a++,t[r]}function N(){return i(r+s)&&s++,s++,t[r+s]}function d(){r=0,n=1,a=1,s=0}function I(h=0){s=h}function C(){const h=r+s;for(;h!==r;)E();s=0}return{index:p,line:b,column:O,peekOffset:S,charAt:P,currentChar:y,currentPeek:o,next:E,peek:N,reset:d,resetPeek:I,skipToPeek:C}}const ae=void 0,$n=".",pt="'",xn="tokenizer";function Vn(e,t={}){const r=t.location!==!1,n=Wn(e),a=()=>n.index(),s=()=>Fn(n.line(),n.column(),n.index()),i=s(),f=a(),u={currentType:13,offset:f,startLoc:i,endLoc:i,lastType:13,lastOffset:f,lastStartLoc:i,lastEndLoc:i,braceNest:0,inLinked:!1,text:""},_=()=>u,{onError:T}=t;function p(l,c,g,...R){const V=_();if(c.column+=g,c.offset+=g,T){const F=r?Ze(V.startLoc,c):null,m=Ae(l,F,{domain:xn,args:R});T(m)}}function b(l,c,g){l.endLoc=s(),l.currentType=c;const R={type:c};return r&&(R.loc=Ze(l.startLoc,l.endLoc)),g!=null&&(R.value=g),R}const O=l=>b(l,13);function S(l,c){return l.currentChar()===c?(l.next(),c):(p(v.EXPECTED_TOKEN,s(),0,c),"")}function P(l){let c="";for(;l.currentPeek()===z||l.currentPeek()===X;)c+=l.currentPeek(),l.peek();return c}function y(l){const c=P(l);return l.skipToPeek(),c}function o(l){if(l===ae)return!1;const c=l.charCodeAt(0);return c>=97&&c<=122||c>=65&&c<=90||c===95}function E(l){if(l===ae)return!1;const c=l.charCodeAt(0);return c>=48&&c<=57}function N(l,c){const{currentType:g}=c;if(g!==2)return!1;P(l);const R=o(l.currentPeek());return l.resetPeek(),R}function d(l,c){const{currentType:g}=c;if(g!==2)return!1;P(l);const R=l.currentPeek()==="-"?l.peek():l.currentPeek(),V=E(R);return l.resetPeek(),V}function I(l,c){const{currentType:g}=c;if(g!==2)return!1;P(l);const R=l.currentPeek()===pt;return l.resetPeek(),R}function C(l,c){const{currentType:g}=c;if(g!==7)return!1;P(l);const R=l.currentPeek()===".";return l.resetPeek(),R}function h(l,c){const{currentType:g}=c;if(g!==8)return!1;P(l);const R=o(l.currentPeek());return l.resetPeek(),R}function U(l,c){const{currentType:g}=c;if(!(g===7||g===11))return!1;P(l);const R=l.currentPeek()===":";return l.resetPeek(),R}function $(l,c){const{currentType:g}=c;if(g!==9)return!1;const R=()=>{const F=l.currentPeek();return F==="{"?o(l.peek()):F==="@"||F==="|"||F===":"||F==="."||F===z||!F?!1:F===X?(l.peek(),R()):Q(l,!1)},V=R();return l.resetPeek(),V}function J(l){P(l);const c=l.currentPeek()==="|";return l.resetPeek(),c}function Q(l,c=!0){const g=(V=!1,F="")=>{const m=l.currentPeek();return m==="{"||m==="@"||!m?V:m==="|"?!(F===z||F===X):m===z?(l.peek(),g(!0,z)):m===X?(l.peek(),g(!0,X)):!0},R=g();return c&&l.resetPeek(),R}function Y(l,c){const g=l.currentChar();return g===ae?ae:c(g)?(l.next(),g):null}function De(l){const c=l.charCodeAt(0);return c>=97&&c<=122||c>=65&&c<=90||c>=48&&c<=57||c===95||c===36}function Me(l){return Y(l,De)}function ve(l){const c=l.charCodeAt(0);return c>=97&&c<=122||c>=65&&c<=90||c>=48&&c<=57||c===95||c===36||c===45}function we(l){return Y(l,ve)}function Ue(l){const c=l.charCodeAt(0);return c>=48&&c<=57}function We(l){return Y(l,Ue)}function Z(l){const c=l.charCodeAt(0);return c>=48&&c<=57||c>=65&&c<=70||c>=97&&c<=102}function pe(l){return Y(l,Z)}function Ne(l){let c="",g="";for(;c=We(l);)g+=c;return g}function $e(l){let c="";for(;;){const g=l.currentChar();if(g==="{"||g==="}"||g==="@"||g==="|"||!g)break;if(g===z||g===X)if(Q(l))c+=g,l.next();else{if(J(l))break;c+=g,l.next()}else c+=g,l.next()}return c}function xe(l){y(l);let c="",g="";for(;c=we(l);)g+=c;return l.currentChar()===ae&&p(v.UNTERMINATED_CLOSING_BRACE,s(),0),g}function Ve(l){y(l);let c="";return l.currentChar()==="-"?(l.next(),c+=`-${Ne(l)}`):c+=Ne(l),l.currentChar()===ae&&p(v.UNTERMINATED_CLOSING_BRACE,s(),0),c}function bt(l){return l!==pt&&l!==X}function He(l){y(l),S(l,"'");let c="",g="";for(;c=Y(l,bt);)c==="\\"?g+=Ge(l):g+=c;const R=l.currentChar();return R===X||R===ae?(p(v.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,s(),0),R===X&&(l.next(),S(l,"'")),g):(S(l,"'"),g)}function Ge(l){const c=l.currentChar();switch(c){case"\\":case"'":return l.next(),`\\${c}`;case"u":return Te(l,c,4);case"U":return Te(l,c,6);default:return p(v.UNKNOWN_ESCAPE_SEQUENCE,s(),0,c),""}}function Te(l,c,g){S(l,c);let R="";for(let V=0;V{const R=l.currentChar();return R==="{"||R==="@"||R==="|"||R==="("||R===")"||!R||R===z?g:(g+=R,l.next(),c(g))};return c("")}function de(l){y(l);const c=S(l,"|");return y(l),c}function ce(l,c){let g=null;switch(l.currentChar()){case"{":return c.braceNest>=1&&p(v.NOT_ALLOW_NEST_PLACEHOLDER,s(),0),l.next(),g=b(c,2,"{"),y(l),c.braceNest++,g;case"}":return c.braceNest>0&&c.currentType===2&&p(v.EMPTY_PLACEHOLDER,s(),0),l.next(),g=b(c,3,"}"),c.braceNest--,c.braceNest>0&&y(l),c.inLinked&&c.braceNest===0&&(c.inLinked=!1),g;case"@":return c.braceNest>0&&p(v.UNTERMINATED_CLOSING_BRACE,s(),0),g=ie(l,c)||O(c),c.braceNest=0,g;default:{let V=!0,F=!0,m=!0;if(J(l))return c.braceNest>0&&p(v.UNTERMINATED_CLOSING_BRACE,s(),0),g=b(c,1,de(l)),c.braceNest=0,c.inLinked=!1,g;if(c.braceNest>0&&(c.currentType===4||c.currentType===5||c.currentType===6))return p(v.UNTERMINATED_CLOSING_BRACE,s(),0),c.braceNest=0,ge(l,c);if(V=N(l,c))return g=b(c,4,xe(l)),y(l),g;if(F=d(l,c))return g=b(c,5,Ve(l)),y(l),g;if(m=I(l,c))return g=b(c,6,He(l)),y(l),g;if(!V&&!F&&!m)return g=b(c,12,Ye(l)),p(v.INVALID_TOKEN_IN_PLACEHOLDER,s(),0,g.value),y(l),g;break}}return g}function ie(l,c){const{currentType:g}=c;let R=null;const V=l.currentChar();switch((g===7||g===8||g===11||g===9)&&(V===X||V===z)&&p(v.INVALID_LINKED_FORMAT,s(),0),V){case"@":return l.next(),R=b(c,7,"@"),c.inLinked=!0,R;case".":return y(l),l.next(),b(c,8,".");case":":return y(l),l.next(),b(c,9,":");default:return J(l)?(R=b(c,1,de(l)),c.braceNest=0,c.inLinked=!1,R):C(l,c)||U(l,c)?(y(l),ie(l,c)):h(l,c)?(y(l),b(c,11,Xe(l))):$(l,c)?(y(l),V==="{"?ce(l,c)||R:b(c,10,Ke(l))):(g===7&&p(v.INVALID_LINKED_FORMAT,s(),0),c.braceNest=0,c.inLinked=!1,ge(l,c))}}function ge(l,c){let g={type:13};if(c.braceNest>0)return ce(l,c)||O(c);if(c.inLinked)return ie(l,c)||O(c);switch(l.currentChar()){case"{":return ce(l,c)||O(c);case"}":return p(v.UNBALANCED_CLOSING_BRACE,s(),0),l.next(),b(c,3,"}");case"@":return ie(l,c)||O(c);default:{if(J(l))return g=b(c,1,de(l)),c.braceNest=0,c.inLinked=!1,g;if(Q(l))return b(c,0,$e(l));break}}return g}function Be(){const{currentType:l,offset:c,startLoc:g,endLoc:R}=u;return u.lastType=l,u.lastOffset=c,u.lastStartLoc=g,u.lastEndLoc=R,u.offset=a(),u.startLoc=s(),n.currentChar()===ae?b(u,13):ge(n,u)}return{nextToken:Be,currentOffset:a,currentPosition:s,context:_}}const Hn="parser",Gn=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function jn(e,t,r){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const n=parseInt(t||r,16);return n<=55295||n>=57344?String.fromCodePoint(n):"\uFFFD"}}}function Yn(e={}){const t=e.location!==!1,{onError:r}=e;function n(o,E,N,d,...I){const C=o.currentPosition();if(C.offset+=d,C.column+=d,r){const h=t?Ze(N,C):null,U=Ae(E,h,{domain:Hn,args:I});r(U)}}function a(o,E,N){const d={type:o};return t&&(d.start=E,d.end=E,d.loc={start:N,end:N}),d}function s(o,E,N,d){d&&(o.type=d),t&&(o.end=E,o.loc&&(o.loc.end=N))}function i(o,E){const N=o.context(),d=a(3,N.offset,N.startLoc);return d.value=E,s(d,o.currentOffset(),o.currentPosition()),d}function f(o,E){const N=o.context(),{lastOffset:d,lastStartLoc:I}=N,C=a(5,d,I);return C.index=parseInt(E,10),o.nextToken(),s(C,o.currentOffset(),o.currentPosition()),C}function u(o,E){const N=o.context(),{lastOffset:d,lastStartLoc:I}=N,C=a(4,d,I);return C.key=E,o.nextToken(),s(C,o.currentOffset(),o.currentPosition()),C}function _(o,E){const N=o.context(),{lastOffset:d,lastStartLoc:I}=N,C=a(9,d,I);return C.value=E.replace(Gn,jn),o.nextToken(),s(C,o.currentOffset(),o.currentPosition()),C}function T(o){const E=o.nextToken(),N=o.context(),{lastOffset:d,lastStartLoc:I}=N,C=a(8,d,I);return E.type!==11?(n(o,v.UNEXPECTED_EMPTY_LINKED_MODIFIER,N.lastStartLoc,0),C.value="",s(C,d,I),{nextConsumeToken:E,node:C}):(E.value==null&&n(o,v.UNEXPECTED_LEXICAL_ANALYSIS,N.lastStartLoc,0,q(E)),C.value=E.value||"",s(C,o.currentOffset(),o.currentPosition()),{node:C})}function p(o,E){const N=o.context(),d=a(7,N.offset,N.startLoc);return d.value=E,s(d,o.currentOffset(),o.currentPosition()),d}function b(o){const E=o.context(),N=a(6,E.offset,E.startLoc);let d=o.nextToken();if(d.type===8){const I=T(o);N.modifier=I.node,d=I.nextConsumeToken||o.nextToken()}switch(d.type!==9&&n(o,v.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,q(d)),d=o.nextToken(),d.type===2&&(d=o.nextToken()),d.type){case 10:d.value==null&&n(o,v.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,q(d)),N.key=p(o,d.value||"");break;case 4:d.value==null&&n(o,v.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,q(d)),N.key=u(o,d.value||"");break;case 5:d.value==null&&n(o,v.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,q(d)),N.key=f(o,d.value||"");break;case 6:d.value==null&&n(o,v.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,q(d)),N.key=_(o,d.value||"");break;default:{n(o,v.UNEXPECTED_EMPTY_LINKED_KEY,E.lastStartLoc,0);const I=o.context(),C=a(7,I.offset,I.startLoc);return C.value="",s(C,I.offset,I.startLoc),N.key=C,s(N,I.offset,I.startLoc),{nextConsumeToken:d,node:N}}}return s(N,o.currentOffset(),o.currentPosition()),{node:N}}function O(o){const E=o.context(),N=E.currentType===1?o.currentOffset():E.offset,d=E.currentType===1?E.endLoc:E.startLoc,I=a(2,N,d);I.items=[];let C=null;do{const $=C||o.nextToken();switch(C=null,$.type){case 0:$.value==null&&n(o,v.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,q($)),I.items.push(i(o,$.value||""));break;case 5:$.value==null&&n(o,v.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,q($)),I.items.push(f(o,$.value||""));break;case 4:$.value==null&&n(o,v.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,q($)),I.items.push(u(o,$.value||""));break;case 6:$.value==null&&n(o,v.UNEXPECTED_LEXICAL_ANALYSIS,E.lastStartLoc,0,q($)),I.items.push(_(o,$.value||""));break;case 7:{const J=b(o);I.items.push(J.node),C=J.nextConsumeToken||null;break}}}while(E.currentType!==13&&E.currentType!==1);const h=E.currentType===1?E.lastOffset:o.currentOffset(),U=E.currentType===1?E.lastEndLoc:o.currentPosition();return s(I,h,U),I}function S(o,E,N,d){const I=o.context();let C=d.items.length===0;const h=a(1,E,N);h.cases=[],h.cases.push(d);do{const U=O(o);C||(C=U.items.length===0),h.cases.push(U)}while(I.currentType!==13);return C&&n(o,v.MUST_HAVE_MESSAGES_IN_PLURAL,N,0),s(h,o.currentOffset(),o.currentPosition()),h}function P(o){const E=o.context(),{offset:N,startLoc:d}=E,I=O(o);return E.currentType===13?I:S(o,N,d,I)}function y(o){const E=Vn(o,j({},e)),N=E.context(),d=a(0,N.offset,N.startLoc);return t&&d.loc&&(d.loc.source=o),d.body=P(E),e.onCacheKey&&(d.cacheKey=e.onCacheKey(o)),N.currentType!==13&&n(E,v.UNEXPECTED_LEXICAL_ANALYSIS,N.lastStartLoc,0,o[N.offset]||""),s(d,E.currentOffset(),E.currentPosition()),d}return{parse:y}}function q(e){if(e.type===13)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"\u2026":t}function Xn(e,t={}){const r={ast:e,helpers:new Set};return{context:()=>r,helper:s=>(r.helpers.add(s),s)}}function Nt(e,t){for(let r=0;rTt(r)),e}function Tt(e){if(e.items.length===1){const t=e.items[0];(t.type===3||t.type===9)&&(e.static=t.value,delete t.value)}else{const t=[];for(let r=0;rf;function _(y,o){f.code+=y}function T(y,o=!0){const E=o?a:"";_(s?E+" ".repeat(y):E)}function p(y=!0){const o=++f.indentLevel;y&&T(o)}function b(y=!0){const o=--f.indentLevel;y&&T(o)}function O(){T(f.indentLevel)}return{context:u,push:_,indent:p,deindent:b,newline:O,helper:y=>`_${y}`,needIndent:()=>f.needIndent}}function Qn(e,t){const{helper:r}=e;e.push(`${r("linked")}(`),me(e,t.key),t.modifier?(e.push(", "),me(e,t.modifier),e.push(", _type")):e.push(", undefined, _type"),e.push(")")}function qn(e,t){const{helper:r,needIndent:n}=e;e.push(`${r("normalize")}([`),e.indent(n());const a=t.items.length;for(let s=0;s1){e.push(`${r("plural")}([`),e.indent(n());const a=t.cases.length;for(let s=0;s{const r=k(t.mode)?t.mode:"normal",n=k(t.filename)?t.filename:"message.intl",a=!!t.sourceMap,s=t.breakLineCode!=null?t.breakLineCode:r==="arrow"?";":` +`,i=t.needIndent?t.needIndent:r!=="arrow",f=e.helpers||[],u=Jn(e,{mode:r,filename:n,sourceMap:a,breakLineCode:s,needIndent:i});u.push(r==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),u.indent(i),f.length>0&&(u.push(`const { ${ot(f.map(p=>`${p}: _${p}`),", ")} } = ctx`),u.newline()),u.push("return "),me(u,e),u.deindent(i),u.push("}"),delete e.helpers;const{code:_,map:T}=u.context();return{ast:e,code:_,map:T?T.toJSON():void 0}};function tr(e,t={}){const r=j({},t),n=!!r.jit,a=!!r.minify,s=r.optimize==null?!0:r.optimize,f=Yn(r).parse(e);return n?(s&&Bn(f),a&&ue(f),{ast:f,code:""}):(Kn(f,r),er(f,r))}/*! + * core-base v10.0.0-beta.5 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */function nr(){typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(qt().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}const se=[];se[0]={w:[0],i:[3,0],["["]:[4],o:[7]};se[1]={w:[1],["."]:[2],["["]:[4],o:[7]};se[2]={w:[2],i:[3,0],[0]:[3,0]};se[3]={i:[3,0],[0]:[3,0],w:[1,1],["."]:[2,1],["["]:[4,1],o:[7,1]};se[4]={["'"]:[5,0],['"']:[6,0],["["]:[4,2],["]"]:[1,3],o:8,l:[4,0]};se[5]={["'"]:[4,0],o:8,l:[5,0]};se[6]={['"']:[4,0],o:8,l:[6,0]};const rr=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function ar(e){return rr.test(e)}function sr(e){const t=e.charCodeAt(0),r=e.charCodeAt(e.length-1);return t===r&&(t===34||t===39)?e.slice(1,-1):e}function lr(e){if(e==null)return"o";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}function cr(e){const t=e.trim();return e.charAt(0)==="0"&&isNaN(parseInt(e))?!1:ar(t)?sr(t):"*"+t}function ir(e){const t=[];let r=-1,n=0,a=0,s,i,f,u,_,T,p;const b=[];b[0]=()=>{i===void 0?i=f:i+=f},b[1]=()=>{i!==void 0&&(t.push(i),i=void 0)},b[2]=()=>{b[0](),a++},b[3]=()=>{if(a>0)a--,n=4,b[0]();else{if(a=0,i===void 0||(i=cr(i),i===!1))return!1;b[1]()}};function O(){const S=e[r+1];if(n===5&&S==="'"||n===6&&S==='"')return r++,f="\\"+S,b[0](),!0}for(;n!==null;)if(r++,s=e[r],!(s==="\\"&&O())){if(u=lr(s),p=se[n],_=p[u]||p.l||8,_===8||(n=_[0],_[1]!==void 0&&(T=b[_[1]],T&&(f=s,T()===!1))))return;if(n===7)return t}}const It=new Map;function or(e,t){return M(e)?e[t]:null}function ur(e,t){if(!M(e))return null;let r=It.get(t);if(r||(r=ir(t),r&&It.set(t,r)),!r)return null;const n=r.length;let a=e,s=0;for(;se,mr=e=>"",_r="text",dr=e=>e.length===0?"":ot(e),gr=Pn;function kt(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function Er(e){const t=G(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(G(e.named.count)||G(e.named.n))?G(e.named.count)?e.named.count:G(e.named.n)?e.named.n:t:t}function br(e,t){t.count||(t.count=e),t.n||(t.n=e)}function Lr(e={}){const t=e.locale,r=Er(e),n=M(e.pluralRules)&&k(t)&&W(e.pluralRules[t])?e.pluralRules[t]:kt,a=M(e.pluralRules)&&k(t)&&W(e.pluralRules[t])?kt:void 0,s=o=>o[n(r,o.length,a)],i=e.list||[],f=o=>i[o],u=e.named||{};G(e.pluralIndex)&&br(r,u);const _=o=>u[o];function T(o){const E=W(e.messages)?e.messages(o):M(e.messages)?e.messages[o]:!1;return E||(e.parent?e.parent.message(o):mr)}const p=o=>e.modifiers?e.modifiers[o]:fr,b=A(e.processor)&&W(e.processor.normalize)?e.processor.normalize:dr,O=A(e.processor)&&W(e.processor.interpolate)?e.processor.interpolate:gr,S=A(e.processor)&&k(e.processor.type)?e.processor.type:_r,y={list:f,named:_,plural:s,linked:(o,...E)=>{const[N,d]=E;let I="text",C="";E.length===1?M(N)?(C=N.modifier||C,I=N.type||I):k(N)&&(C=N||C):E.length===2&&(k(N)&&(C=N||C),k(d)&&(I=d||I));const h=T(o)(y),U=I==="vnode"&&x(h)&&C?h[0]:h;return C?p(C)(U,I):U},message:T,type:S,interpolate:O,normalize:b,values:j({},i,u)};return y}const ee={INVALID_ARGUMENT:Dn,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_NON_STRING_MESSAGE:20,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23},hr=24;function te(e){return Ae(e,null,void 0)}function ft(e,t){return t.locale!=null?Ct(t.locale):Ct(e.locale)}let Je;function Ct(e){if(k(e))return e;if(W(e)){if(e.resolvedOnce&&Je!=null)return Je;if(e.constructor.name==="Function"){const t=e();if(Rn(t))throw te(ee.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return Je=t}else throw te(ee.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw te(ee.NOT_SUPPORT_LOCALE_TYPE)}function pr(e,t,r){return[...new Set([r,...x(t)?t:M(t)?Object.keys(t):k(t)?[t]:[r]])]}function en(e,t,r){const n=k(r)?r:Le,a=e;a.__localeChainCache||(a.__localeChainCache=new Map);let s=a.__localeChainCache.get(n);if(!s){s=[];let i=[r];for(;x(i);)i=Ot(s,i,t);const f=x(t)||!A(t)?t:t.default?t.default:null;i=k(f)?[f]:f,x(i)&&Ot(s,i,!1),a.__localeChainCache.set(n,s)}return s}function Ot(e,t,r){let n=!0;for(let a=0;a`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function kr(){return{upper:(e,t)=>t==="text"&&k(e)?e.toUpperCase():t==="vnode"&&M(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&k(e)?e.toLowerCase():t==="vnode"&&M(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&k(e)?St(e):t==="vnode"&&M(e)&&"__v_isVNode"in e?St(e.children):e}}let tn;function Cr(e){tn=e}let nn;function Or(e){nn=e}let rn;function yr(e){rn=e}let an=null;const Rt=e=>{an=e},Sr=()=>an;let Pt=0;function Rr(e={}){const t=W(e.onWarn)?e.onWarn:An,r=k(e.version)?e.version:Ir,n=k(e.locale)||W(e.locale)?e.locale:Le,a=W(n)?Le:n,s=x(e.fallbackLocale)||A(e.fallbackLocale)||k(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:a,i=A(e.messages)?e.messages:{[a]:{}},f=A(e.datetimeFormats)?e.datetimeFormats:{[a]:{}},u=A(e.numberFormats)?e.numberFormats:{[a]:{}},_=j({},e.modifiers||{},kr()),T=e.pluralRules||{},p=W(e.missing)?e.missing:null,b=D(e.missingWarn)||fe(e.missingWarn)?e.missingWarn:!0,O=D(e.fallbackWarn)||fe(e.fallbackWarn)?e.fallbackWarn:!0,S=!!e.fallbackFormat,P=!!e.unresolving,y=W(e.postTranslation)?e.postTranslation:null,o=A(e.processor)?e.processor:null,E=D(e.warnHtmlMessage)?e.warnHtmlMessage:!0,N=!!e.escapeParameter,d=W(e.messageCompiler)?e.messageCompiler:tn,I=W(e.messageResolver)?e.messageResolver:nn||or,C=W(e.localeFallbacker)?e.localeFallbacker:rn||pr,h=M(e.fallbackContext)?e.fallbackContext:void 0,U=e,$=M(U.__datetimeFormatters)?U.__datetimeFormatters:new Map,J=M(U.__numberFormatters)?U.__numberFormatters:new Map,Q=M(U.__meta)?U.__meta:{};Pt++;const Y={version:r,cid:Pt,locale:n,fallbackLocale:s,messages:i,modifiers:_,pluralRules:T,missing:p,missingWarn:b,fallbackWarn:O,fallbackFormat:S,unresolving:P,postTranslation:y,processor:o,warnHtmlMessage:E,escapeParameter:N,messageCompiler:d,messageResolver:I,localeFallbacker:C,fallbackContext:h,onWarn:t,__meta:Q};return Y.datetimeFormats=f,Y.numberFormats=u,Y.__datetimeFormatters=$,Y.__numberFormatters=J,Y}function mt(e,t,r,n,a){const{missing:s,onWarn:i}=e;if(s!==null){const f=s(e,r,t,a);return k(f)?f:t}else return t}function be(e,t,r){const n=e;n.__localeChainCache=new Map,e.localeFallbacker(e,r,t)}function Pr(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function Ar(e,t){const r=t.indexOf(e);if(r===-1)return!1;for(let n=r+1;nFr(r,e)}function Fr(e,t){const r=t.b||t.body;if((r.t||r.type)===1){const n=r,a=n.c||n.cases;return e.plural(a.reduce((s,i)=>[...s,At(e,i)],[]))}else return At(e,r)}function At(e,t){const r=t.s||t.static;if(r)return e.type==="text"?r:e.normalize([r]);{const n=(t.i||t.items).reduce((a,s)=>[...a,ze(e,s)],[]);return e.normalize(n)}}function ze(e,t){const r=t.t||t.type;switch(r){case 3:{const n=t;return n.v||n.value}case 9:{const n=t;return n.v||n.value}case 4:{const n=t;return e.interpolate(e.named(n.k||n.key))}case 5:{const n=t;return e.interpolate(e.list(n.i!=null?n.i:n.index))}case 6:{const n=t,a=n.m||n.modifier;return e.linked(ze(e,n.k||n.key),a?ze(e,a):void 0,e.type)}case 7:{const n=t;return n.v||n.value}case 8:{const n=t;return n.v||n.value}default:throw new Error(`unhandled node type on format message part: ${r}`)}}const Dr=e=>e;let Ce=Object.create(null);const _e=e=>M(e)&&(e.t===0||e.type===0)&&("b"in e||"body"in e);function Mr(e,t={}){let r=!1;const n=t.onError||Mn;return t.onError=a=>{r=!0,n(a)},{...tr(e,t),detectError:r}}function vr(e,t){if(!__INTLIFY_DROP_MESSAGE_COMPILER__&&k(e)){D(t.warnHtmlMessage)&&t.warnHtmlMessage;const n=(t.onCacheKey||Dr)(e),a=Ce[n];if(a)return a;const{ast:s,detectError:i}=Mr(e,{...t,location:!1,jit:!0}),f=Qe(s);return i?f:Ce[n]=f}else{const r=e.cacheKey;if(r){const n=Ce[r];return n||(Ce[r]=Qe(e))}else return Qe(e)}}const Ft=()=>"",ne=e=>W(e);function Dt(e,...t){const{fallbackFormat:r,postTranslation:n,unresolving:a,messageCompiler:s,fallbackLocale:i,messages:f}=e,[u,_]=et(...t),T=D(_.missingWarn)?_.missingWarn:e.missingWarn,p=D(_.fallbackWarn)?_.fallbackWarn:e.fallbackWarn,b=D(_.escapeParameter)?_.escapeParameter:e.escapeParameter,O=!!_.resolvedMessage,S=k(_.default)||D(_.default)?D(_.default)?s?u:()=>u:_.default:r?s?u:()=>u:null,P=r||S!=null&&(k(S)||W(S)),y=ft(e,_);b&&wr(_);let[o,E,N]=O?[u,y,f[y]||{}]:sn(e,u,y,i,p,T),d=o,I=u;if(!O&&!(k(d)||_e(d)||ne(d))&&P&&(d=S,I=d),!O&&(!(k(d)||_e(d)||ne(d))||!k(E)))return a?Fe:u;let C=!1;const h=()=>{C=!0},U=ne(d)?d:ln(e,u,E,d,I,h);if(C)return d;const $=$r(e,E,N,_),J=Lr($),Q=Ur(e,U,J);return n?n(Q,u):Q}function wr(e){x(e.list)?e.list=e.list.map(t=>k(t)?ht(t):t):M(e.named)&&Object.keys(e.named).forEach(t=>{k(e.named[t])&&(e.named[t]=ht(e.named[t]))})}function sn(e,t,r,n,a,s){const{messages:i,onWarn:f,messageResolver:u,localeFallbacker:_}=e,T=_(e,n,r);let p={},b,O=null;const S="translate";for(let P=0;Pn;return _.locale=r,_.key=t,_}const u=i(n,Wr(e,r,a,n,f,s));return u.locale=r,u.key=t,u.source=n,u}function Ur(e,t,r){return t(r)}function et(...e){const[t,r,n]=e,a={};if(!k(t)&&!G(t)&&!ne(t)&&!_e(t))throw te(ee.INVALID_ARGUMENT);const s=G(t)?String(t):(ne(t),t);return G(r)?a.plural=r:k(r)?a.default=r:A(r)&&!Pe(r)?a.named=r:x(r)&&(a.list=r),G(n)?a.plural=n:k(n)?a.default=n:A(n)&&j(a,n),[s,a]}function Wr(e,t,r,n,a,s){return{locale:t,key:r,warnHtmlMessage:a,onError:i=>{throw s&&s(i),i},onCacheKey:i=>Cn(t,r,i)}}function $r(e,t,r,n){const{modifiers:a,pluralRules:s,messageResolver:i,fallbackLocale:f,fallbackWarn:u,missingWarn:_,fallbackContext:T}=e,b={locale:t,modifiers:a,pluralRules:s,messages:O=>{let S=i(r,O);if(S==null&&T){const[,,P]=sn(T,O,t,f,u,_);S=i(P,O)}if(k(S)||_e(S)){let P=!1;const o=ln(e,O,t,S,O,()=>{P=!0});return P?Ft:o}else return ne(S)?S:Ft}};return e.processor&&(b.processor=e.processor),n.list&&(b.list=n.list),n.named&&(b.named=n.named),G(n.plural)&&(b.pluralIndex=n.plural),b}function Mt(e,...t){const{datetimeFormats:r,unresolving:n,fallbackLocale:a,onWarn:s,localeFallbacker:i}=e,{__datetimeFormatters:f}=e,[u,_,T,p]=tt(...t),b=D(T.missingWarn)?T.missingWarn:e.missingWarn;D(T.fallbackWarn)?T.fallbackWarn:e.fallbackWarn;const O=!!T.part,S=ft(e,T),P=i(e,a,S);if(!k(u)||u==="")return new Intl.DateTimeFormat(S,p).format(_);let y={},o,E=null;const N="datetime format";for(let C=0;C{cn.includes(u)?i[u]=r[u]:s[u]=r[u]}),k(n)?s.locale=n:A(n)&&(i=n),A(a)&&(i=a),[s.key||"",f,s,i]}function vt(e,t,r){const n=e;for(const a in r){const s=`${t}__${a}`;!n.__datetimeFormatters.has(s)||n.__datetimeFormatters.delete(s)}}function wt(e,...t){const{numberFormats:r,unresolving:n,fallbackLocale:a,onWarn:s,localeFallbacker:i}=e,{__numberFormatters:f}=e,[u,_,T,p]=nt(...t),b=D(T.missingWarn)?T.missingWarn:e.missingWarn;D(T.fallbackWarn)?T.fallbackWarn:e.fallbackWarn;const O=!!T.part,S=ft(e,T),P=i(e,a,S);if(!k(u)||u==="")return new Intl.NumberFormat(S,p).format(_);let y={},o,E=null;const N="number format";for(let C=0;C{on.includes(u)?i[u]=r[u]:s[u]=r[u]}),k(n)?s.locale=n:A(n)&&(i=n),A(a)&&(i=a),[s.key||"",f,s,i]}function Ut(e,t,r){const n=e;for(const a in r){const s=`${t}__${a}`;!n.__numberFormatters.has(s)||n.__numberFormatters.delete(s)}}nr();/*! + * vue-i18n v10.0.0-beta.5 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */const xr="10.0.0-beta.5";function Vr(){typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(qt().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}const K={UNEXPECTED_RETURN_TYPE:hr,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:30,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_COMPATIBLE_LEGACY_VUE_I18N:33,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function B(e,...t){return Ae(e,null,void 0)}const rt=re("__translateVNode"),at=re("__datetimeParts"),st=re("__numberParts"),un=re("__setPluralRules");re("__intlifyMeta");const fn=re("__injectWithOption"),lt=re("__dispose");function he(e){if(!M(e))return e;for(const t in e)if(!!Re(e,t))if(!t.includes("."))M(e[t])&&he(e[t]);else{const r=t.split("."),n=r.length-1;let a=e,s=!1;for(let i=0;i{if("locale"in f&&"resource"in f){const{locale:u,resource:_}=f;u?(i[u]=i[u]||{},Oe(_,i[u])):Oe(_,i)}else k(f)&&Oe(JSON.parse(f),i)}),a==null&&s)for(const f in i)Re(i,f)&&he(i[f]);return i}function Hr(e){return e.type}function mn(e,t,r){let n=M(t.messages)?t.messages:{};"__i18nGlobal"in r&&(n=_t(e.locale.value,{messages:n,__i18n:r.__i18nGlobal}));const a=Object.keys(n);a.length&&a.forEach(s=>{e.mergeLocaleMessage(s,n[s])});{if(M(t.datetimeFormats)){const s=Object.keys(t.datetimeFormats);s.length&&s.forEach(i=>{e.mergeDateTimeFormat(i,t.datetimeFormats[i])})}if(M(t.numberFormats)){const s=Object.keys(t.numberFormats);s.length&&s.forEach(i=>{e.mergeNumberFormat(i,t.numberFormats[i])})}}}function Wt(e){return In(kn,null,e,0)}const $t=()=>[],Gr=()=>!1;let xt=0;function Vt(e){return(t,r,n,a)=>e(r,n,ye()||void 0,a)}function dt(e={}){const{__root:t,__injectWithOption:r}=e,n=t===void 0,a=e.flatJson,s=Se?Nn:Tn;let i=D(e.inheritLocale)?e.inheritLocale:!0;const f=s(t&&i?t.locale.value:k(e.locale)?e.locale:Le),u=s(t&&i?t.fallbackLocale.value:k(e.fallbackLocale)||x(e.fallbackLocale)||A(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:f.value),_=s(_t(f.value,e)),T=s(A(e.datetimeFormats)?e.datetimeFormats:{[f.value]:{}}),p=s(A(e.numberFormats)?e.numberFormats:{[f.value]:{}});let b=t?t.missingWarn:D(e.missingWarn)||fe(e.missingWarn)?e.missingWarn:!0,O=t?t.fallbackWarn:D(e.fallbackWarn)||fe(e.fallbackWarn)?e.fallbackWarn:!0,S=t?t.fallbackRoot:D(e.fallbackRoot)?e.fallbackRoot:!0,P=!!e.fallbackFormat,y=W(e.missing)?e.missing:null,o=W(e.missing)?Vt(e.missing):null,E=W(e.postTranslation)?e.postTranslation:null,N=t?t.warnHtmlMessage:D(e.warnHtmlMessage)?e.warnHtmlMessage:!0,d=!!e.escapeParameter;const I=t?t.modifiers:A(e.modifiers)?e.modifiers:{};let C=e.pluralRules||t&&t.pluralRules,h;h=(()=>{n&&Rt(null);const m={version:xr,locale:f.value,fallbackLocale:u.value,messages:_.value,modifiers:I,pluralRules:C,missing:o===null?void 0:o,missingWarn:b,fallbackWarn:O,fallbackFormat:P,unresolving:!0,postTranslation:E===null?void 0:E,warnHtmlMessage:N,escapeParameter:d,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};m.datetimeFormats=T.value,m.numberFormats=p.value,m.__datetimeFormatters=A(h)?h.__datetimeFormatters:void 0,m.__numberFormatters=A(h)?h.__numberFormatters:void 0;const L=Rr(m);return n&&Rt(L),L})(),be(h,f.value,u.value);function $(){return[f.value,u.value,_.value,T.value,p.value]}const J=Ee({get:()=>f.value,set:m=>{f.value=m,h.locale=f.value}}),Q=Ee({get:()=>u.value,set:m=>{u.value=m,h.fallbackLocale=u.value,be(h,f.value,m)}}),Y=Ee(()=>_.value),De=Ee(()=>T.value),Me=Ee(()=>p.value);function ve(){return W(E)?E:null}function we(m){E=m,h.postTranslation=m}function Ue(){return y}function We(m){m!==null&&(o=Vt(m)),y=m,h.missing=o}const Z=(m,L,w,H,le,Ie)=>{$();let oe;try{n||(h.fallbackContext=t?Sr():void 0),oe=m(h)}finally{n||(h.fallbackContext=void 0)}if(w!=="translate exists"&&G(oe)&&oe===Fe||w==="translate exists"&&!oe){const[gn,ua]=L();return t&&S?H(t):le(gn)}else{if(Ie(oe))return oe;throw B(K.UNEXPECTED_RETURN_TYPE)}};function pe(...m){return Z(L=>Reflect.apply(Dt,null,[L,...m]),()=>et(...m),"translate",L=>Reflect.apply(L.t,L,[...m]),L=>L,L=>k(L))}function Ne(...m){const[L,w,H]=m;if(H&&!M(H))throw B(K.INVALID_ARGUMENT);return pe(L,w,j({resolvedMessage:!0},H||{}))}function $e(...m){return Z(L=>Reflect.apply(Mt,null,[L,...m]),()=>tt(...m),"datetime format",L=>Reflect.apply(L.d,L,[...m]),()=>yt,L=>k(L))}function xe(...m){return Z(L=>Reflect.apply(wt,null,[L,...m]),()=>nt(...m),"number format",L=>Reflect.apply(L.n,L,[...m]),()=>yt,L=>k(L))}function Ve(m){return m.map(L=>k(L)||G(L)||D(L)?Wt(String(L)):L)}const He={normalize:Ve,interpolate:m=>m,type:"vnode"};function Ge(...m){return Z(L=>{let w;const H=L;try{H.processor=He,w=Reflect.apply(Dt,null,[H,...m])}finally{H.processor=null}return w},()=>et(...m),"translate",L=>L[rt](...m),L=>[Wt(L)],L=>x(L))}function Te(...m){return Z(L=>Reflect.apply(wt,null,[L,...m]),()=>nt(...m),"number format",L=>L[st](...m),$t,L=>k(L)||x(L))}function je(...m){return Z(L=>Reflect.apply(Mt,null,[L,...m]),()=>tt(...m),"datetime format",L=>L[at](...m),$t,L=>k(L)||x(L))}function Ye(m){C=m,h.pluralRules=C}function Xe(m,L){return Z(()=>{if(!m)return!1;const w=k(L)?L:f.value,H=ce(w),le=h.messageResolver(H,m);return _e(le)||ne(le)||k(le)},()=>[m],"translate exists",w=>Reflect.apply(w.te,w,[m,L]),Gr,w=>D(w))}function Ke(m){let L=null;const w=en(h,u.value,f.value);for(let H=0;H{i&&(f.value=m,h.locale=m,be(h,f.value,u.value))}),qe(t.fallbackLocale,m=>{i&&(u.value=m,h.fallbackLocale=m,be(h,f.value,u.value))}));const F={id:xt,locale:J,fallbackLocale:Q,get inheritLocale(){return i},set inheritLocale(m){i=m,m&&t&&(f.value=t.locale.value,u.value=t.fallbackLocale.value,be(h,f.value,u.value))},get availableLocales(){return Object.keys(_.value).sort()},messages:Y,get modifiers(){return I},get pluralRules(){return C||{}},get isGlobal(){return n},get missingWarn(){return b},set missingWarn(m){b=m,h.missingWarn=b},get fallbackWarn(){return O},set fallbackWarn(m){O=m,h.fallbackWarn=O},get fallbackRoot(){return S},set fallbackRoot(m){S=m},get fallbackFormat(){return P},set fallbackFormat(m){P=m,h.fallbackFormat=P},get warnHtmlMessage(){return N},set warnHtmlMessage(m){N=m,h.warnHtmlMessage=m},get escapeParameter(){return d},set escapeParameter(m){d=m,h.escapeParameter=m},t:pe,getLocaleMessage:ce,setLocaleMessage:ie,mergeLocaleMessage:ge,getPostTranslationHandler:ve,setPostTranslationHandler:we,getMissingHandler:Ue,setMissingHandler:We,[un]:Ye};return F.datetimeFormats=De,F.numberFormats=Me,F.rt=Ne,F.te=Xe,F.tm=de,F.d=$e,F.n=xe,F.getDateTimeFormat=Be,F.setDateTimeFormat=l,F.mergeDateTimeFormat=c,F.getNumberFormat=g,F.setNumberFormat=R,F.mergeNumberFormat=V,F[fn]=r,F[rt]=Ge,F[at]=je,F[st]=Te,F}function jr(e){const t=k(e.locale)?e.locale:Le,r=k(e.fallbackLocale)||x(e.fallbackLocale)||A(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:t,n=W(e.missing)?e.missing:void 0,a=D(e.silentTranslationWarn)||fe(e.silentTranslationWarn)?!e.silentTranslationWarn:!0,s=D(e.silentFallbackWarn)||fe(e.silentFallbackWarn)?!e.silentFallbackWarn:!0,i=D(e.fallbackRoot)?e.fallbackRoot:!0,f=!!e.formatFallbackMessages,u=A(e.modifiers)?e.modifiers:{},_=e.pluralizationRules,T=W(e.postTranslation)?e.postTranslation:void 0,p=k(e.warnHtmlInMessage)?e.warnHtmlInMessage!=="off":!0,b=!!e.escapeParameterHtml,O=D(e.sync)?e.sync:!0;let S=e.messages;if(A(e.sharedMessages)){const I=e.sharedMessages;S=Object.keys(I).reduce((h,U)=>{const $=h[U]||(h[U]={});return j($,I[U]),h},S||{})}const{__i18n:P,__root:y,__injectWithOption:o}=e,E=e.datetimeFormats,N=e.numberFormats,d=e.flatJson;return{locale:t,fallbackLocale:r,messages:S,flatJson:d,datetimeFormats:E,numberFormats:N,missing:n,missingWarn:a,fallbackWarn:s,fallbackRoot:i,fallbackFormat:f,modifiers:u,pluralRules:_,postTranslation:T,warnHtmlMessage:p,escapeParameter:b,messageResolver:e.messageResolver,inheritLocale:O,__i18n:P,__root:y,__injectWithOption:o}}function ct(e={}){const t=dt(jr(e)),{__extender:r}=e,n={id:t.id,get locale(){return t.locale.value},set locale(a){t.locale.value=a},get fallbackLocale(){return t.fallbackLocale.value},set fallbackLocale(a){t.fallbackLocale.value=a},get messages(){return t.messages.value},get datetimeFormats(){return t.datetimeFormats.value},get numberFormats(){return t.numberFormats.value},get availableLocales(){return t.availableLocales},get missing(){return t.getMissingHandler()},set missing(a){t.setMissingHandler(a)},get silentTranslationWarn(){return D(t.missingWarn)?!t.missingWarn:t.missingWarn},set silentTranslationWarn(a){t.missingWarn=D(a)?!a:a},get silentFallbackWarn(){return D(t.fallbackWarn)?!t.fallbackWarn:t.fallbackWarn},set silentFallbackWarn(a){t.fallbackWarn=D(a)?!a:a},get modifiers(){return t.modifiers},get formatFallbackMessages(){return t.fallbackFormat},set formatFallbackMessages(a){t.fallbackFormat=a},get postTranslation(){return t.getPostTranslationHandler()},set postTranslation(a){t.setPostTranslationHandler(a)},get sync(){return t.inheritLocale},set sync(a){t.inheritLocale=a},get warnHtmlInMessage(){return t.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(a){t.warnHtmlMessage=a!=="off"},get escapeParameterHtml(){return t.escapeParameter},set escapeParameterHtml(a){t.escapeParameter=a},get pluralizationRules(){return t.pluralRules||{}},__composer:t,t(...a){return Reflect.apply(t.t,t,[...a])},rt(...a){return Reflect.apply(t.rt,t,[...a])},tc(...a){const[s,i,f]=a,u={plural:1};let _=null,T=null;if(!k(s))throw B(K.INVALID_ARGUMENT);const p=s;return k(i)?u.locale=i:G(i)?u.plural=i:x(i)?_=i:A(i)&&(T=i),k(f)?u.locale=f:x(f)?_=f:A(f)&&(T=f),Reflect.apply(t.t,t,[p,_||T||{},u])},te(a,s){return t.te(a,s)},tm(a){return t.tm(a)},getLocaleMessage(a){return t.getLocaleMessage(a)},setLocaleMessage(a,s){t.setLocaleMessage(a,s)},mergeLocaleMessage(a,s){t.mergeLocaleMessage(a,s)},d(...a){return Reflect.apply(t.d,t,[...a])},getDateTimeFormat(a){return t.getDateTimeFormat(a)},setDateTimeFormat(a,s){t.setDateTimeFormat(a,s)},mergeDateTimeFormat(a,s){t.mergeDateTimeFormat(a,s)},n(...a){return Reflect.apply(t.n,t,[...a])},getNumberFormat(a){return t.getNumberFormat(a)},setNumberFormat(a,s){t.setNumberFormat(a,s)},mergeNumberFormat(a,s){t.mergeNumberFormat(a,s)}};return n.__extender=r,n}const gt={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function Yr({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((n,a)=>[...n,...a.type===Qt?a.children:[a]],[]):t.reduce((r,n)=>{const a=e[n];return a&&(r[n]=a()),r},{})}function _n(){return Qt}const Xr=it({name:"i18n-t",props:j({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>G(e)||!isNaN(e)}},gt),setup(e,t){const{slots:r,attrs:n}=t,a=e.i18n||Et({useScope:e.scope,__useComponent:!0});return()=>{const s=Object.keys(r).filter(p=>p!=="_"),i={};e.locale&&(i.locale=e.locale),e.plural!==void 0&&(i.plural=k(e.plural)?+e.plural:e.plural);const f=Yr(t,s),u=a[rt](e.keypath,f,i),_=j({},n),T=k(e.tag)||M(e.tag)?e.tag:_n();return Jt(T,_,u)}}}),Ht=Xr;function Kr(e){return x(e)&&!k(e[0])}function dn(e,t,r,n){const{slots:a,attrs:s}=t;return()=>{const i={part:!0};let f={};e.locale&&(i.locale=e.locale),k(e.format)?i.key=e.format:M(e.format)&&(k(e.format.key)&&(i.key=e.format.key),f=Object.keys(e.format).reduce((b,O)=>r.includes(O)?j({},b,{[O]:e.format[O]}):b,{}));const u=n(e.value,i,f);let _=[i.key];x(u)?_=u.map((b,O)=>{const S=a[b.type],P=S?S({[b.type]:b.value,index:O,parts:u}):[b.value];return Kr(P)&&(P[0].key=`${b.type}-${O}`),P}):k(u)&&(_=[u]);const T=j({},s),p=k(e.tag)||M(e.tag)?e.tag:_n();return Jt(p,T,_)}}const Br=it({name:"i18n-n",props:j({value:{type:Number,required:!0},format:{type:[String,Object]}},gt),setup(e,t){const r=e.i18n||Et({useScope:e.scope,__useComponent:!0});return dn(e,t,on,(...n)=>r[st](...n))}}),Gt=Br,Jr=it({name:"i18n-d",props:j({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},gt),setup(e,t){const r=e.i18n||Et({useScope:e.scope,__useComponent:!0});return dn(e,t,cn,(...n)=>r[at](...n))}}),jt=Jr;function Qr(e,t){const r=e;if(e.mode==="composition")return r.__getInstance(t)||e.global;{const n=r.__getInstance(t);return n!=null?n.__composer:e.global.__composer}}function qr(e){const t=i=>{const{instance:f,value:u}=i;if(!f||!f.$)throw B(K.UNEXPECTED_ERROR);const _=Qr(e,f.$),T=Yt(u);return[Reflect.apply(_.t,_,[...Xt(T)]),_]};return{created:(i,f)=>{const[u,_]=t(f);Se&&e.global===_&&(i.__i18nWatcher=qe(_.locale,()=>{f.instance&&f.instance.$forceUpdate()})),i.__composer=_,i.textContent=u},unmounted:i=>{Se&&i.__i18nWatcher&&(i.__i18nWatcher(),i.__i18nWatcher=void 0,delete i.__i18nWatcher),i.__composer&&(i.__composer=void 0,delete i.__composer)},beforeUpdate:(i,{value:f})=>{if(i.__composer){const u=i.__composer,_=Yt(f);i.textContent=Reflect.apply(u.t,u,[...Xt(_)])}},getSSRProps:i=>{const[f]=t(i);return{textContent:f}}}}function Yt(e){if(k(e))return{path:e};if(A(e)){if(!("path"in e))throw B(K.REQUIRED_VALUE,"path");return e}else throw B(K.INVALID_VALUE)}function Xt(e){const{path:t,locale:r,args:n,choice:a,plural:s}=e,i={},f=n||{};return k(r)&&(i.locale=r),G(a)&&(i.plural=a),G(s)&&(i.plural=s),[t,f,i]}function Zr(e,t,...r){const n=A(r[0])?r[0]:{};(D(n.globalInstall)?n.globalInstall:!0)&&([Ht.name,"I18nT"].forEach(s=>e.component(s,Ht)),[Gt.name,"I18nN"].forEach(s=>e.component(s,Gt)),[jt.name,"I18nD"].forEach(s=>e.component(s,jt))),e.directive("t",qr(t))}function zr(e,t,r){return{beforeCreate(){const n=ye();if(!n)throw B(K.UNEXPECTED_ERROR);const a=this.$options;if(a.i18n){const s=a.i18n;if(a.__i18n&&(s.__i18n=a.__i18n),s.__root=t,this===this.$root)this.$i18n=Kt(e,s);else{s.__injectWithOption=!0,s.__extender=r.__vueI18nExtend,this.$i18n=ct(s);const i=this.$i18n;i.__extender&&(i.__disposer=i.__extender(this.$i18n))}}else if(a.__i18n)if(this===this.$root)this.$i18n=Kt(e,a);else{this.$i18n=ct({__i18n:a.__i18n,__injectWithOption:!0,__extender:r.__vueI18nExtend,__root:t});const s=this.$i18n;s.__extender&&(s.__disposer=s.__extender(this.$i18n))}else this.$i18n=e;a.__i18nGlobal&&mn(t,a,a),this.$t=(...s)=>this.$i18n.t(...s),this.$rt=(...s)=>this.$i18n.rt(...s),this.$tc=(...s)=>this.$i18n.tc(...s),this.$te=(s,i)=>this.$i18n.te(s,i),this.$d=(...s)=>this.$i18n.d(...s),this.$n=(...s)=>this.$i18n.n(...s),this.$tm=s=>this.$i18n.tm(s),r.__setInstance(n,this.$i18n)},mounted(){},unmounted(){const n=ye();if(!n)throw B(K.UNEXPECTED_ERROR);const a=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,a.__disposer&&(a.__disposer(),delete a.__disposer,delete a.__extender),r.__deleteInstance(n),delete this.$i18n}}}function Kt(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[un](t.pluralizationRules||e.pluralizationRules);const r=_t(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(r).forEach(n=>e.mergeLocaleMessage(n,r[n])),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach(n=>e.mergeDateTimeFormat(n,t.datetimeFormats[n])),t.numberFormats&&Object.keys(t.numberFormats).forEach(n=>e.mergeNumberFormat(n,t.numberFormats[n])),e}const ea=re("global-vue-i18n");function ma(e={},t){const r=D(e.legacy)?e.legacy:!0,n=D(e.globalInjection)?e.globalInjection:!0,a=new Map,[s,i]=ta(e,r),f=re("");function u(b){return a.get(b)||null}function _(b,O){a.set(b,O)}function T(b){a.delete(b)}const p={get mode(){return r?"legacy":"composition"},async install(b,...O){if(b.__VUE_I18N_SYMBOL__=f,b.provide(b.__VUE_I18N_SYMBOL__,p),A(O[0])){const y=O[0];p.__composerExtend=y.__composerExtend,p.__vueI18nExtend=y.__vueI18nExtend}let S=null;!r&&n&&(S=oa(b,p.global)),Zr(b,p,...O),r&&b.mixin(zr(i,i.__composer,p));const P=b.unmount;b.unmount=()=>{S&&S(),p.dispose(),P()}},get global(){return i},dispose(){s.stop()},__instances:a,__getInstance:u,__setInstance:_,__deleteInstance:T};return p}function Et(e={}){const t=ye();if(t==null)throw B(K.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw B(K.NOT_INSTALLED);const r=na(t),n=aa(r),a=Hr(t),s=ra(e,a);if(s==="global")return mn(n,e,a),n;if(s==="parent"){let u=sa(r,t,e.__useComponent);return u==null&&(u=n),u}const i=r;let f=i.__getInstance(t);if(f==null){const u=j({},e);"__i18n"in a&&(u.__i18n=a.__i18n),n&&(u.__root=n),f=dt(u),i.__composerExtend&&(f[lt]=i.__composerExtend(f)),ca(i,t,f),i.__setInstance(t,f)}return f}function ta(e,t,r){const n=En(),a=t?n.run(()=>ct(e)):n.run(()=>dt(e));if(a==null)throw B(K.UNEXPECTED_ERROR);return[n,a]}function na(e){const t=bn(e.isCE?ea:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw B(e.isCE?K.NOT_INSTALLED_WITH_PROVIDE:K.UNEXPECTED_ERROR);return t}function ra(e,t){return Pe(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function aa(e){return e.mode==="composition"?e.global:e.global.__composer}function sa(e,t,r=!1){let n=null;const a=t.root;let s=la(t,r);for(;s!=null;){const i=e;if(e.mode==="composition")n=i.__getInstance(s);else{const f=i.__getInstance(s);f!=null&&(n=f.__composer,r&&n&&!n[fn]&&(n=null))}if(n!=null||a===s)break;s=s.parent}return n}function la(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function ca(e,t,r){Ln(()=>{},t),hn(()=>{const n=r;e.__deleteInstance(t);const a=n[lt];a&&(a(),delete n[lt])},t)}const ia=["locale","fallbackLocale","availableLocales"],Bt=["t","rt","d","n","tm","te"];function oa(e,t){const r=Object.create(null);return ia.forEach(a=>{const s=Object.getOwnPropertyDescriptor(t,a);if(!s)throw B(K.UNEXPECTED_ERROR);const i=pn(s.value)?{get(){return s.value.value},set(f){s.value.value=f}}:{get(){return s.get&&s.get()}};Object.defineProperty(r,a,i)}),e.config.globalProperties.$i18n=r,Bt.forEach(a=>{const s=Object.getOwnPropertyDescriptor(t,a);if(!s||!s.value)throw B(K.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${a}`,s)}),()=>{delete e.config.globalProperties.$i18n,Bt.forEach(a=>{delete e.config.globalProperties[`$${a}`]})}}Vr();Cr(vr);Or(ur);yr(en);export{ma as c,Et as u}; diff --git a/docs/assets/wandb_logo.43daca0d.js b/docs/assets/wandb_logo.127f2d59.js similarity index 100% rename from docs/assets/wandb_logo.43daca0d.js rename to docs/assets/wandb_logo.127f2d59.js diff --git a/docs/assets/wandb_logo.549270dc.js b/docs/assets/wandb_logo.549270dc.js deleted file mode 100644 index 6616197..0000000 --- a/docs/assets/wandb_logo.549270dc.js +++ /dev/null @@ -1 +0,0 @@ -import{j as x,ac as k,ad as C,k as l,aj as V,l as t,T as s,ae as S,aG as T,x as y,ab as K}from"./index.0ed11181.js";import{u as L,b as Z}from"./use-form.ff3f77cb.js";const I={xs:8,sm:10,md:14,lg:20,xl:24};var W=x({name:"QChip",props:{...L,...k,dense:Boolean,icon:String,iconRight:String,iconRemove:String,iconSelected:String,label:[String,Number],color:String,textColor:String,modelValue:{type:Boolean,default:!0},selected:{type:Boolean,default:null},square:Boolean,outline:Boolean,clickable:Boolean,removable:Boolean,removeAriaLabel:String,tabindex:[String,Number],disable:Boolean,ripple:{type:[Boolean,Object],default:!0}},emits:["update:modelValue","update:selected","remove","click"],setup(e,{slots:d,emit:A}){const{proxy:{$q:n}}=y(),b=Z(e,n),g=C(e,I),v=l(()=>e.selected===!0||e.icon!==void 0),h=l(()=>e.selected===!0?e.iconSelected||n.iconSet.chip.selected:e.icon),f=l(()=>e.iconRemove||n.iconSet.chip.remove),o=l(()=>e.disable===!1&&(e.clickable===!0||e.selected!==null)),q=l(()=>{const a=e.outline===!0&&e.color||e.textColor;return"q-chip row inline no-wrap items-center"+(e.outline===!1&&e.color!==void 0?` bg-${e.color}`:"")+(a?` text-${a} q-chip--colored`:"")+(e.disable===!0?" disabled":"")+(e.dense===!0?" q-chip--dense":"")+(e.outline===!0?" q-chip--outline":"")+(e.selected===!0?" q-chip--selected":"")+(o.value===!0?" q-chip--clickable cursor-pointer non-selectable q-hoverable":"")+(e.square===!0?" q-chip--square":"")+(b.value===!0?" q-chip--dark q-dark":"")}),c=l(()=>{const a=e.disable===!0?{tabindex:-1,"aria-disabled":"true"}:{tabindex:e.tabindex||0},i={...a,role:"button","aria-hidden":"false","aria-label":e.removeAriaLabel||n.lang.label.remove};return{chip:a,remove:i}});function m(a){a.keyCode===13&&r(a)}function r(a){e.disable||(A("update:selected",!e.selected),A("click",a))}function u(a){(a.keyCode===void 0||a.keyCode===13)&&(K(a),e.disable===!1&&(A("update:modelValue",!1),A("remove")))}function _(){const a=[];o.value===!0&&a.push(t("div",{class:"q-focus-helper"})),v.value===!0&&a.push(t(s,{class:"q-chip__icon q-chip__icon--left",name:h.value}));const i=e.label!==void 0?[t("div",{class:"ellipsis"},[e.label])]:void 0;return a.push(t("div",{class:"q-chip__content col row no-wrap items-center q-anchor--skip"},S(d.default,i))),e.iconRight&&a.push(t(s,{class:"q-chip__icon q-chip__icon--right",name:e.iconRight})),e.removable===!0&&a.push(t(s,{class:"q-chip__icon q-chip__icon--remove cursor-pointer",name:f.value,...c.value.remove,onClick:u,onKeyup:u})),a}return()=>{if(e.modelValue===!1)return;const a={class:q.value,style:g.value};return o.value===!0&&Object.assign(a,c.value.chip,{onClick:r,onKeyup:m}),V("div",a,_(),"ripple",e.ripple!==!1&&e.disable!==!0,()=>[[T,e.ripple]])}}}),M="./assets/azureml_logo.24212d03.png",N="./assets/clearml_logo.35503cf6.png",X="./assets/dagshub_logo.261cb52d.png",w="./assets/databricks_logo.504cad21.png",F="./assets/datarobot_logo.ec98cb05.png",P="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAA21BMVEX/5gAWFhZUWFoAABf/7AD/6gD/6AD/7gD///8TExb84wDDsAoTFBWZig+fkA2nnDtqYBECBxZMUVxDS13r1RsICxZbUxSThQ69rzFPVFtHTl1lXBMPEBZVWVdMUly7qQv/6CaCfUn/973/7nHQvAiMhkdycE//+tRORxP03AKIew8cGxV/cxCyoQz/9ri2qDXdyAbaxyI+R19nZ1I5NRRFQBM0MBXQvijMuArs1QIsKRVbXlWrmwx7bxDBrgqGgUh4dUylmjwjIhSYj0JKRBP/9gCSi0Rsa1DItzDWKK7xAAAHm0lEQVR4nO2ce1faTBDGA3sjEcUQLiYgUKUqqAW8I976Wmu//yd6k+xuICRWjjRNj+f5neMfLksyT2Z3Znbi0SgF7O33jM9Gb38v1Gb4P4e9vK3JiN6hVPjNytuSzLC+BQoPP69AX+Khr7CXtxWZ0isZe3nbkDF7xn7eJmTMvtHL24SM6eVtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPyDcJ63BdnChDVg9BOLpNcHntf5OWV5G5IVdHTmFovFTrX2V73IOQv4/T3lnHcmvXun6VkxxD2ga13IX+yS5bVAk+OMCmPc33i4GQ/88XQBnAo67W90N27G1puTVrJrx5MKi2fWWs+KnTZaAY3TuETabMnxvh5nYty8JIr29gZLebRM1LZaeg65OLkxPhwo2KiqFQ7WUkg3iR1AtuIGi5Ya35AKuegf+cIKCtMmtw9i6c7+nAYhdVNPahNS2LI+uMbYxFGrdLbeKvUVhtYkFG7bclwqZIMWqRditEkrnq5ErUHq5fgkk9h3yw9iVcvOO9KFO+sF09UU0rFNCgnI0eI+E6fETs7xNR4NPmQiHxw41arnVNYMNCsppOP5+oxJHIr5F4aknDbHn3X8sZTG6WRU2ZmuKXAlhXwaCWzLOBMZP9ZO9AVGksp2bFKhbtc+ttDWzznGqgobJAwfdXI1PO12mxfaXeReOVFsRQLrhLSGm837K0J0zKkfG781lAesq2QdhX6QfPDDor/vxoJSRunLg5JoHkvnsL7WbJLGjZ9Kqf8zbUabl2yLtJuH4iilhjUYGIIu+cu/Ucia2leMpXSwTfxdpxebH1XkeiTT4P6cXbX1Kr6JJnFhtSKJN6nrlFM+qTzOdt2Ou3v+OKrF6oudpy8BT9P1JK6o0Dd342Qe9rmhfCY3IlWCC+1CLDBwcaI/uEpxIheTr55TdV2Z99zq2cFkPo1+99yAszXr0lUVBotm8eP/TKUwTCa3beXScfwqXLTsN53Ia09OpxjDdZ6jpUorsqhx/prCGC8FpTBYQv4uVDK2lj3FByrc2MmdSJ+qxQTeo56XgUK+yO8V+vlDOq0eVMU6U5iFZFTQQdYkifqZ15ykwqIzolkp5NYi7LcKRVN+q94Inri4kIuUbCazs+9E5d9+4kLiMTwAeo5z5vjbUUnsqEL7Tyss2CSOCo6pCtlYB5pukEu4FjFOmSuOZD1L7hLyAyd67vP11GJWbTRTe7I6YtkoLJTjFN5WyA2VHNq3QVzgY7UQ7bSDnF7CZJh0sPjqjCw/DfIgLfInKdE9FxkpTCdFITcuYytPB5r2RVoJSe/kp/Z9Ml/w6WC+cznfjZ1481PIrR9aoCy85wrTChfaXdyyy9daNJ5+l050JvkqZNaFFqhsZmqVtq/SgpKuBuxWeuHGma7OxLXsW3jXLBOF7XocM10hG1zpHH6pPKD3Ybmdtg+pShfkJM2HjA6uR9+fv4Y8yXDq7WSisH3RiHNrpilk04I66pMf+rzgl3BqKM2WKLGmpBLGd14dr9rpuJJilgrJ1otY5CU1H9JaWwtszE8CQhVtKQnB32l2+Y0NbdDJzNNZcLGsyUrhClXb/KxPWgtHHV1fp4UaHWjKJNExYxNH6/s7PnxfoehHAu8X20vsRi/TjWUnRueq+lGiZLWK6lDh7Z4fBLxmug9XUChu9KGdnMT6Z5y35Qfm8XKs0eVdgZxSPVlNYSMZOt2DGpc7Y+Llq1A8RL2L5pI/dLws2D94bLfpk3LBrEthjNVqKstTGTrdGVNfYTkrFF0lsJxyRrJM7d3Lwdy9zD9Y6IcigxDdmfk19tfQ03QmC+1nfWN2natCcRcZ232hC0h/dHXdUCdblqBBk0yI/qX+Tl0WdOI5jC3VWRB1qCzSOj/18xLZ5sN3FM690b7cai4wlP1Eca8lmsTevuv3+93hRdQlN0nYMeU19Tqp+p0GPW0VO63wMyYqXo6xlDbntV07fsrqhuZwdhTNKNsk3lU1ST+8+Pxly26g8Kc+S0z8KMMnT/pdUy4K2W1qz7ugToiBRH70VoEb9N/kvZ51W8Zhi69evOLrqzvP/fkovHpPoe/F+6gDvEiZHOv2FKss+tCgX6I+jUz2ndk/rdDgottOarTJvRXNGCuvyfjJjfNYK8qpyFDz5xWaAUmFalwrNNOZK/SvZW3ZxJ6LLPtbtjVeKA7Ez1CiW5VNXm58OYvWZuesIg4yUhg2LVJ8KMe1wnI6iwoNTunGtjmPQhebtfjbc1rxPM951S9qgpbwruMFY8XnmqBPxV0fVyt0g992vXX/UkE315aGeWw83oeLsfQ9Jozxw+bwZNg87Q9EortIB5Nf44WinVOjdv3r1/VYvg4PrxZd0jJiv34Y1SB9Y5jHf0uScj1Gw3czqS/G+PL7MvnXHfowHbvkW3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwCr28DciYnrGftwkZs2/srf9vB/9p9oxSL28bMqVXMkqHn9mJ1qGvsPTt80q0vpUChaXDXt6WZETvsCQVlkp7+728rfnj9Pb3Qm3/A7ZzpoGW5rHZAAAAAElFTkSuQmCC",U="./assets/kubeflow_logo.1e6b1fb7.png",j="./assets/mlflow_logo.f196c37b.png",R="./assets/sagemaker_logo.6aab6a04.png",J="./assets/vertex_logo.4e9579f0.png",p="./assets/wandb_logo.06d884c3.png";export{W as Q,M as _,N as a,X as b,w as c,F as d,P as e,U as f,j as g,R as h,J as i,p as j}; diff --git a/docs/assets/wandb_logo.5799faed.js b/docs/assets/wandb_logo.5799faed.js new file mode 100644 index 0000000..fb92a25 --- /dev/null +++ b/docs/assets/wandb_logo.5799faed.js @@ -0,0 +1 @@ +var A="./assets/azureml_logo.24212d03.png",s="./assets/clearml_logo.35503cf6.png",a="./assets/dagshub_logo.261cb52d.png",g="./assets/databricks_logo.504cad21.png",o="./assets/datarobot_logo.ec98cb05.png",r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAA21BMVEX/5gAWFhZUWFoAABf/7AD/6gD/6AD/7gD///8TExb84wDDsAoTFBWZig+fkA2nnDtqYBECBxZMUVxDS13r1RsICxZbUxSThQ69rzFPVFtHTl1lXBMPEBZVWVdMUly7qQv/6CaCfUn/973/7nHQvAiMhkdycE//+tRORxP03AKIew8cGxV/cxCyoQz/9ri2qDXdyAbaxyI+R19nZ1I5NRRFQBM0MBXQvijMuArs1QIsKRVbXlWrmwx7bxDBrgqGgUh4dUylmjwjIhSYj0JKRBP/9gCSi0Rsa1DItzDWKK7xAAAHm0lEQVR4nO2ce1faTBDGA3sjEcUQLiYgUKUqqAW8I976Wmu//yd6k+xuICRWjjRNj+f5neMfLksyT2Z3Znbi0SgF7O33jM9Gb38v1Gb4P4e9vK3JiN6hVPjNytuSzLC+BQoPP69AX+Khr7CXtxWZ0isZe3nbkDF7xn7eJmTMvtHL24SM6eVtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPyDcJ63BdnChDVg9BOLpNcHntf5OWV5G5IVdHTmFovFTrX2V73IOQv4/T3lnHcmvXun6VkxxD2ga13IX+yS5bVAk+OMCmPc33i4GQ/88XQBnAo67W90N27G1puTVrJrx5MKi2fWWs+KnTZaAY3TuETabMnxvh5nYty8JIr29gZLebRM1LZaeg65OLkxPhwo2KiqFQ7WUkg3iR1AtuIGi5Ya35AKuegf+cIKCtMmtw9i6c7+nAYhdVNPahNS2LI+uMbYxFGrdLbeKvUVhtYkFG7bclwqZIMWqRditEkrnq5ErUHq5fgkk9h3yw9iVcvOO9KFO+sF09UU0rFNCgnI0eI+E6fETs7xNR4NPmQiHxw41arnVNYMNCsppOP5+oxJHIr5F4aknDbHn3X8sZTG6WRU2ZmuKXAlhXwaCWzLOBMZP9ZO9AVGksp2bFKhbtc+ttDWzznGqgobJAwfdXI1PO12mxfaXeReOVFsRQLrhLSGm837K0J0zKkfG781lAesq2QdhX6QfPDDor/vxoJSRunLg5JoHkvnsL7WbJLGjZ9Kqf8zbUabl2yLtJuH4iilhjUYGIIu+cu/Ucia2leMpXSwTfxdpxebH1XkeiTT4P6cXbX1Kr6JJnFhtSKJN6nrlFM+qTzOdt2Ou3v+OKrF6oudpy8BT9P1JK6o0Dd342Qe9rmhfCY3IlWCC+1CLDBwcaI/uEpxIheTr55TdV2Z99zq2cFkPo1+99yAszXr0lUVBotm8eP/TKUwTCa3beXScfwqXLTsN53Ia09OpxjDdZ6jpUorsqhx/prCGC8FpTBYQv4uVDK2lj3FByrc2MmdSJ+qxQTeo56XgUK+yO8V+vlDOq0eVMU6U5iFZFTQQdYkifqZ15ykwqIzolkp5NYi7LcKRVN+q94Inri4kIuUbCazs+9E5d9+4kLiMTwAeo5z5vjbUUnsqEL7Tyss2CSOCo6pCtlYB5pukEu4FjFOmSuOZD1L7hLyAyd67vP11GJWbTRTe7I6YtkoLJTjFN5WyA2VHNq3QVzgY7UQ7bSDnF7CZJh0sPjqjCw/DfIgLfInKdE9FxkpTCdFITcuYytPB5r2RVoJSe/kp/Z9Ml/w6WC+cznfjZ1481PIrR9aoCy85wrTChfaXdyyy9daNJ5+l050JvkqZNaFFqhsZmqVtq/SgpKuBuxWeuHGma7OxLXsW3jXLBOF7XocM10hG1zpHH6pPKD3Ybmdtg+pShfkJM2HjA6uR9+fv4Y8yXDq7WSisH3RiHNrpilk04I66pMf+rzgl3BqKM2WKLGmpBLGd14dr9rpuJJilgrJ1otY5CU1H9JaWwtszE8CQhVtKQnB32l2+Y0NbdDJzNNZcLGsyUrhClXb/KxPWgtHHV1fp4UaHWjKJNExYxNH6/s7PnxfoehHAu8X20vsRi/TjWUnRueq+lGiZLWK6lDh7Z4fBLxmug9XUChu9KGdnMT6Z5y35Qfm8XKs0eVdgZxSPVlNYSMZOt2DGpc7Y+Llq1A8RL2L5pI/dLws2D94bLfpk3LBrEthjNVqKstTGTrdGVNfYTkrFF0lsJxyRrJM7d3Lwdy9zD9Y6IcigxDdmfk19tfQ03QmC+1nfWN2natCcRcZ232hC0h/dHXdUCdblqBBk0yI/qX+Tl0WdOI5jC3VWRB1qCzSOj/18xLZ5sN3FM690b7cai4wlP1Eca8lmsTevuv3+93hRdQlN0nYMeU19Tqp+p0GPW0VO63wMyYqXo6xlDbntV07fsrqhuZwdhTNKNsk3lU1ST+8+Pxly26g8Kc+S0z8KMMnT/pdUy4K2W1qz7ugToiBRH70VoEb9N/kvZ51W8Zhi69evOLrqzvP/fkovHpPoe/F+6gDvEiZHOv2FKss+tCgX6I+jUz2ndk/rdDgottOarTJvRXNGCuvyfjJjfNYK8qpyFDz5xWaAUmFalwrNNOZK/SvZW3ZxJ6LLPtbtjVeKA7Ez1CiW5VNXm58OYvWZuesIg4yUhg2LVJ8KMe1wnI6iwoNTunGtjmPQhebtfjbc1rxPM951S9qgpbwruMFY8XnmqBPxV0fVyt0g992vXX/UkE315aGeWw83oeLsfQ9Jozxw+bwZNg87Q9EortIB5Nf44WinVOjdv3r1/VYvg4PrxZd0jJiv34Y1SB9Y5jHf0uScj1Gw3czqS/G+PL7MvnXHfowHbvkW3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwCr28DciYnrGftwkZs2/srf9vB/9p9oxSL28bMqVXMkqHn9mJ1qGvsPTt80q0vpUChaXDXt6WZETvsCQVlkp7+728rfnj9Pb3Qm3/A7ZzpoGW5rHZAAAAAElFTkSuQmCC",b="./assets/kubeflow_logo.1e6b1fb7.png",l="./assets/mlflow_logo.f196c37b.png",e="./assets/sagemaker_logo.6aab6a04.png",t="./assets/vertex_logo.4e9579f0.png",n="./assets/wandb_logo.06d884c3.png";export{A as _,s as a,a as b,g as c,o as d,r as e,b as f,l as g,e as h,t as i,n as j}; diff --git a/docs/index.html b/docs/index.html index 89c3099..e24b813 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,3 +1,3 @@ -AI-Platformwijzer +AI-Platformwijzer
\ No newline at end of file diff --git a/package.json b/package.json index 7651d03..fefa353 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "pinia-plugin-persistedstate": "^3.2.0", "quasar": "^2.14.3", "vue": "3", + "vue-i18n": "^10.0.0-beta.5", "vue-router": "^4.0.0", "vue-uuid": "^3.0.0" }, diff --git a/quasar.config.js b/quasar.config.js index 88895fd..734340d 100644 --- a/quasar.config.js +++ b/quasar.config.js @@ -27,7 +27,7 @@ module.exports = configure(function (ctx) { // app boot file (/src/boot) // --> boot files are part of "main.js" // https://v2.quasar.dev/quasar-cli-vite/boot-files - boot: ["loadTools"], + boot: ["loadTools", "i18n"], // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css css: ["app.scss"], diff --git a/src/assets/questions.en.json b/src/assets/questions.en.json new file mode 100644 index 0000000..3b18042 --- /dev/null +++ b/src/assets/questions.en.json @@ -0,0 +1,228 @@ +{ +"questions": [ +{ +"id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", +"question_text": "Are you active on any of the following cloud platforms?", +"type": "single", +"answers": [ +{ +"id": "963aaa51-8a46-4d4e-9808-d25ea810560c", +"answer_text": "Databricks", +"explanation_text": "" +}, +{ +"id": "ee245bf1-0447-4460-beb0-26ce8987a59a", +"answer_text": "AWS", +"explanation_text": "" +}, +{ +"id": "03c4d074-2773-41cd-962a-892d13882ef4", +"answer_text": "Azure", +"explanation_text": "" +}, +{ +"id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", +"answer_text": "GCP (Google cloud platform)", +"explanation_text": "" +}, +{ +"id": "af017d7a-6e66-467a-87ad-1765a07563f3", +"answer_text": "Hosted Kubernetes", +"explanation_text": "" +}, +{ +"id": "1f3396cf-8727-43c8-912d-0911517dc894", +"answer_text": "Other", +"explanation_text": "If you or your company are not using the cloud platform mentioned above, certain data platforms may not be able to integrate seamlessly." +}, +{ +"id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", +"answer_text": "I am not yet active on a cloud platform", +"explanation_text": "If you or your company is not using a cloud platform, the upside can be that it retains full control over the infrastructure. However, on the downside, this can mean limited integration capabilities with cloud-based data platforms, which will impact can be on scalability and accessibility." +} +], +"explanation_text": "If you or your company is already involved in specific cloud platforms, this may limit the flexibility of your choice regarding the use of data platforms." +}, +{ +"id": "fea3fc01-144d-4f41-b99e-0f556f6da751", +"question_text": "Which functionalities should be integrated into the data platform?", +"type": "multi", +"answers": [ +{ +"id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", +"answer_text": "ETL", +"explanation_text": " ETL stands for Extract, Transform, Load, and it refers to the process of extracting, transforming, and loading data from different sources to a destination, such as a database, to make it usable and accessible for analytics. " +}, +{ +"id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", +"answer_text": "MLOps", +"explanation_text": "MLOps, or Machine Learning Operations, is a methodology aimed at integrating machine learning models into the development and operations process, to enable efficient deployment, monitoring, and maintenance of these models." +}, +{ +"id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", +"answer_text": "DataOps", +"explanation_text": "DataOps (short for data operations) is a data management practice that deals with building, testing, deploying and managing data products. It combines technologies and processes to improve data trust and time-to-use value of your company's data products." +}, +{ +"id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", +"answer_text": "Business intelligence", +"explanation_text": "Business Intelligence (BI) involves the process of collecting, analyzing and presenting business data to support organizations in making data-driven decisions." +} +], +"explanation_text": "Data platforms offer different functionalities. A data platform is more focused on the development and use of machine learning models (MLOps). Other data platforms may have more of a focus on the real-time processing of large numbers of data ." +}, +{ +"id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", +"question_text": "Where should the data platform run?", +"type": "single", +"answers": [ +{ +"id": "37aff572-f1a8-4401-ac52-51183844c06c", +"answer_text": "On the cloud", +"explanation_text": "When the platform has to run on the cloud, for example on AWS, Azure or GCP, this means that the data is also stored and processed in the cloud. A possible disadvantage of using a data platform in the cloud is the ongoing costs, including subscription and usage costs, which may impact total usage costs in the long term. Nevertheless, the data is stored and processed securely online." +}, +{ +"id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", +"answer_text": "On premise", +"explanation_text": "If the data platform is to be deployed on-premise, this implies that you must have the necessary capabilities to perform demanding tasks such as machine learning, and that your data is stored and processed on-premise. This limits the available options, as some data platforms are only available online, which may influence the choice of a suitable data platform." +} +], +"explanation_text": "It is important to consider where the data platform should run, as this influences the choice between on-premises, cloud or hybrid solutions, impacting cost, scalability and accessibility of the data platform." +}, +{ +"id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", +"question_text": "Should the tool used be free and/or open-source?", +"type": "single", +"answers": [ +{ +"id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", +"answer_text": "Yes, the tool must be free and/or open-source", +"explanation_text": "Free tools usually don't offer official support and rely on communities and forums for help, which is important to consider when choosing a data platform." +}, +{ +"id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", +"answer_text": "No, the tool can be paid and does not have to be open source ", +"explanation_text": "Paid tools usually offer support and extra functionalities, unlike free options" +} +], +"explanation_text": "It is important to consider whether the tool used should be free and/or open-source when choosing a data platform, as this directly impacts the overall cost, flexibility and independence of the technology used." +}, +{ +"id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", +"question_text": "Are you or does your company currently have a data engineer and are you willing to invest a significant amount of time to set up a data platform?", +"type": "single", +"answers": [ +{ +"id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", +"answer_text": "Yes, the data platform must therefore be fully configurable to my wishes and advanced functionalities must be possible.", +"explanation_text": "If you can take the time to implement data platforms, it becomes possible to opt for more advanced platforms that can be more accurately integrated into your existing environment." +}, +{ +"id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", +"answer_text": "No, the data platform must therefore remain easy to use and clear.", +"explanation_text": " If you are not willing to invest significantly in a data platform, it is advisable to opt for a platform that is easy to configure, although this may come at the expense of some advanced functionalities." +} +], +"explanation_text": "This question is asked to understand the availability of technical skills and willingness to invest time, as these are crucial factors when assessing the feasibility and implementation of a data platform within the company." +}, +{ +"id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", +"question_text": "What kind of Machine learning functionality should be available in the data platform?", +"type": "multi", +"answers": [ +{ +"id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", +"answer_text": "Experiment tracking", +"explanation_text": "Experiment tracking is the process of systematically tracking, organizing, and analyzing experimental data and results within a data project." +}, +{ +"id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", +"answer_text": "Data Drift Tracking", +"explanation_text": "Data drift tracking is the continuous monitoring and analysis of changes in the distribution of data to identify unwanted anomalies and inconsistencies in machine learning models." +}, +{ +"id": "83b528f4-3ea9-427e-9ce5-772685655d43", +"answer_text": "Model Drift Tracking", +"explanation_text": "Model drift tracking is the continuous monitoring of performance deviations in machine learning models from the original training data to make timely adjustments and maintain accuracy." +}, +{ +"id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", +"answer_text": "Large Language Model Ops(LLMOps)", +"explanation_text": "Large Language Model Ops (LLM Ops) is an approach that focuses on efficiently developing, deploying, and managing large language models to optimize performance and scalability in diverse applications." +}, +{ +"id": "265f2953-f37c-4c0b-8f61-e2a15118291e", +"answer_text": "Data versioning", +"explanation_text": "Data versioning is the process of systematically maintaining and managing different versions of datasets, improving traceability, reproducibility, and collaboration in data-related projects." +}, +{ +"id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", +"answer_text": "Automatic hyperparameter tuning", +"explanation_text": "Automatic hyperparameter tuning is an optimized process that automatically adjusts machine learning models by exploring and evaluating different hyperparameter combinations to achieve the best performance." +}, +{ +"id": "3a85d010-e8c4-4a29-a3dd-330376caf110", +"answer_text": "Orchestrating data pipelines", +"explanation_text": "Orchestrating data pipelines is the automated planning, coordination, and execution of various steps within a data or machine learning pipeline to ensure a streamlined and efficient process." +}, +{ +"id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", +"answer_text": "AutoML", +"explanation_text": "AutoML, or Automated Machine Learning, is an approach that automatically builds and optimizes machine learning models with minimal human intervention, with the aim of simplifying the modeling process and accelerating the development of effective models." +}, +{ +"id": "3e6a8487-1793-4062-aee3-271c6e435818", +"answer_text": "Publishing and putting models into production", +"explanation_text": "Publishing machine learning models is the process of making trained models available and accessible for use in production environments or by external users." +} +], +"explanation_text": "This question aims to gain insight into the specific machine learning functionalities that the user wishes to use within the data platform." +}, +{ +"id": "c8775160-e498-4292-a464-b45e222f5aa7", +"question_text": "How many data specialists should use the platform?", +"type": "single", +"answers": [ +{ +"id": "3e29d8d1-aef4-45a9-9728-606880731d87", +"answer_text": "1", +"explanation_text": "If your organization has only one data scientist or AI/data engineer, the choice of data platform may be less important." +}, +{ +"id": "7ca2debe-b701-4e89-958d-6d3cff385de0", +"answer_text": "2-5", +"explanation_text": "For a team size of 2-5 data scientists or AI/data engineers, the choice of data platform is more important and should take into account collaboration requirements and security aspects." +}, +{ +"id": "6687720c-ef4d-4663-8e79-a98694bb10d9", +"answer_text": "10+", +"explanation_text": "With a team size of 10 or more data scientists or AI/data engineers, the choice of data platform becomes more important, where scalability, collaboration, security and other advanced functionalities are crucial for efficient and effective data infrastructure." +} +], +"explanation_text": "This question aims to gain insight into the number of data scientists and AI/data engineers who will use the platform, with a particular focus on aspects such as security, collaboration and other functionalities." +}, +{ +"id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", +"question_text": "Is the data labeled, meaning it is identified or characterized with specific categories or attributes?", +"type": "single", +"answers": [ +{ +"id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", +"answer_text": "Yes, the data is labeled", +"explanation_text": "Fully annotated data is essential for effective machine learning models and analytics." +}, +{ +"id": "629c3eda-64d2-4768-a26d-e5a901c4e170", +"answer_text": "No, the data still needs to be labeled", +"explanation_text": "If your data still needs to be labeled, it is recommended to use an annotation tool." +}, +{ +"id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", +"answer_text": "I don't know if my data is of good quality", +"explanation_text": "If you do not know whether your data is properly annotated, it may be advisable to perform a thorough evaluation, preferably using annotation tools or expertise, to verify the quality of the labels before choosing a data platform that depends on accurate annotations." +} +], +"explanation_text": "Labels are essential for machine learning algorithms to recognize patterns and perform tasks such as classification or prediction." +} +] +} diff --git a/src/assets/questions.json b/src/assets/questions.nl.json similarity index 100% rename from src/assets/questions.json rename to src/assets/questions.nl.json diff --git a/src/assets/tools.en.json b/src/assets/tools.en.json new file mode 100644 index 0000000..e5e8a89 --- /dev/null +++ b/src/assets/tools.en.json @@ -0,0 +1,1995 @@ +{ + "tools": [ + { + "id": "963aaa51-8a46-4d213e-9808-d25ea810560c", + "title": "Databricks", + "description": "Databricks is a powerful and integrated analytics platform built on top of Apache Spark. It provides an easy-to-use interface for performing data engineering, data science, and machine learning tasks. Databricks makes it easy to process data, analyze it and gain insights through collaboration, advanced visualizations and the ability to use different programming languages ​​such as Python, Scala, SQL and R. The platform is often used for real-time data analysis, building of data pipelines and accelerating the development of machine learning models.", + "link": "https://www.databricks.com/", + "img_link": "databricks_logo.png", + "good_compatible": [ + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "bcd62443-7827-44cb-88bb-b9fd5a3651ae", + "explanation": "Databricks is good at visualizing data due to its seamless integration with popular data analysis tools such as Apache Spark and SQL. The platform allows users to create powerful graphs and visualizations using tools such as Matplotlib, Seaborn and Databricks' proprietary visualization library. With the support of various programming languages ​​such as Python, Scala and R, users can perform complex analyzes and easily visualize them for better understanding and interpretation of data." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "e3e1cc59-5923-483a-94e7-986c96b757e0", + "explanation": "\"Databricks is hosted on cloud platforms such as Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP)" + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "6b3b3542-9081-48c6-8e45-2e0556b25f67", + "explanation": "\"Databricks is hosted on cloud platforms such as Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP)" + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "2ae2f467-4e22-47ba-9e0f-0d46a62c4f46", + "explanation": "\"Databricks is hosted on cloud platforms such as Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP)" + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "Databricks excels in ETL because of its scalability with Apache Spark, integrated environment for various data sources, various data transformation capabilities, automation and support for both batch and streaming processing of data." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "Databricks excels at MLOps because of its integrated platform, scalability, advanced machine learning capabilities, automation and orchestration capabilities, and advanced monitoring and management capabilities." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "If you are already using Databricks, we recommend that you use the functionalities that have already been implemented in Databricks. Databricks is a complete package and offers out-of-the-box a wide range of functionality regarding MLops, DataOps, visualization and orchestration." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "Databricks can be hosted on AWS. You can continue to use all the features that AWS offers and easily add Databricks to your current workflow. Installation and use is easy see: link. " + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "Databricks can be hosted on AZURE. You can continue to use all the features that Azure offers and easily add Databricks to your current workflow. Installation and use is easy see:\n link. " + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "Databricks can be hosted on GCP. You can continue to use all the features that GCP offers and easily add Databricks to your current workflow. Installation and use is easy see: link. \n" + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "Databricks excels in DataOps because of its integrated platform, which combines scalability, automation, collaboration and advanced data engineering capabilities, allowing organizations to more effectively manage, transform and analyze data." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "Databricks excels in business intelligence through its integrated platform that enables advanced data analysis, visualization and reporting, while also providing scalability, speed and collaboration, helping organizations generate faster insights and make better decisions based on their dates." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "Databricks is not open source; it is a closed source commercial platform." + }, + { + "question_id": "8aadcd11-ca15-4c09-b2d2-3159a318118b", + "answer_id": "735d232e-e287-4732-9728-d00c324343be", + "explanation": "Databricks has the ability to orchestrate tasks via Airflow. This means you need less new knowledge to apply Databricks." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "The MLflow variant of Databricks gives you an intuitive overview of your experiments, and thanks to the additions of Databricks you have many additional functionalities that are not available in the standard open source variant." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "Thanks to Lakehouse monitoring it is now possible to detect model drift. For more information, see: this link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "The MLflow variant of Databricks has been enriched with additional functionalities specifically designed for LLMOps. See this link for more details." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "The powerful combination of Apache Airflow and MLflow lets you effortlessly orchestrate pipelines, creating a seamless and integrated workflow for managing machine learning experiments and jobs." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "Thanks to Databricks AutoML, machine learning models can be easily trained and selected with just the touch of a button. For more information, see: this link." + }, + { + "question_id": "563dcdf3-985d-4e1b-b5c7-b7b24d2330a2", + "answer_id": "26449ee9-91a7-412e-ae0f-e43aaa744659", + "explanation": "Databricks' robust Spark integration and ETL capabilities enable seamless real-time processing and display of data." + }, + { + "question_id": "563dcdf3-985d-4e1b-b5c7-b7b24d2330a2", + "answer_id": "76bf60df-0e36-4013-aa63-c11fd5a38eaa", + "explanation": "Orchestration makes it easy to set up and run batch jobs, making it effortless to retrain and publish a machine learning model, for example." + }, + { + "question_id": "563dcdf3-985d-4e1b-b5c7-b7b24d2330a2", + "answer_id": "1241c1e4-b038-42f1-be01-06f45bbb2179", + "explanation": "Databricks uses a modified variant of MLflow with numerous additional functionalities. This makes Databricks an ideal data platform for a complete end-to-end data workflow." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "Databricks is designed to run on cloud infrastructure due to the complex requirements of scalability, computing power and storage required to process and analyze large amounts of data. It leverages the cloud to provide flexibility, resources and easy access to provide different data sources, which means it cannot be run on-premise." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", + "explanation": "Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality" + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "Annotating data via Databricks is not directly possible. For data annotation it is recommended to use external tools, such as Labelbox. Consult this link for more details." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "Annotating data via Databricks is not directly possible. For data annotation it is recommended to use external tools, such as Labelbox. Consult this link for more details." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "If your company is not yet active on a cloud platform, Databricks is a good choice to consider. It is a large and complete platform and offers functionalities for MLOps but also for processing large-scale data." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "Thanks to Databricks' data lake called delta lake, it is possible to detect data drift. For more information, see: this link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "Publishing and deploying machine learning models is possible using the MLflow model registry." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "Databricks offers advanced collaboration features such as real-time collaboration in notebooks, shared libraries and version control, allowing teams to efficiently collaborate on analytics and machine learning models. Role-Based Access Control (RBAC) is enabled in Databricks, which allows user permissions are managed based on roles and responsibilities. Databricks is suitable for teams of 5 or more people, taking full advantage of the collaboration features, but can also be used by individual users for smaller projects." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "Databricks offers advanced collaboration features such as real-time collaboration in notebooks, shared libraries and version control, allowing teams to efficiently collaborate on analytics and machine learning models. Role-Based Access Control (RBAC) is enabled in Databricks, which allows user permissions are managed based on roles and responsibilities. Databricks is suitable for teams of 5 or more people, taking full advantage of the collaboration features, but can also be used by individual users for smaller projects." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "Databricks offers advanced collaboration features such as real-time collaboration in notebooks, shared libraries and version control, allowing teams to efficiently collaborate on analytics and machine learning models. Role-Based Access Control (RBAC) is enabled in Databricks, which allows user permissions are managed based on roles and responsibilities. Databricks is suitable for teams of 5 or more people, taking full advantage of the collaboration features, but can also be used by individual users for smaller projects." + } + ], + "bad_compatible": [ + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "Databricks is not open source; it is a closed source commercial platform." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "Databricks is designed to run on cloud infrastructure due to the complex requirements of scalability, computing power and storage required to process and analyze large amounts of data. It leverages the cloud to provide flexibility, resources and easy access to provide different data sources, which means it cannot be run on-premise." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "If you host Kubernetes yourself or through a provider, Databricks cannot easily be added to your current system. However, you can host Databricks via Databricks, AWS, Azure or GCP and connect it to your Kubernetes solution." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "If you do not use AWS, Azure or GCP, Databricks cannot easily be added to your current system. However, you can host Databricks via Databricks, AWS, Azure or GCP and connect it to your current solution." + }, + { + "question_id": "8aadcd11-ca15-4c09-b2d2-3159a318118b", + "answer_id": "cb13fb65-7db4-4d52-b67f-39e885d023d4", + "explanation": "If you are already using a data lake or warehouse solution, Databricks will contain an unnecessary package of functions such as ETL and DataOps" + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", + "explanation": "Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "Automatically finding the optimal hyperparameters is not built into Databricks by default, but it is quite easy to implement this via code. See this link for detailed instructions." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "Annotating data via Databricks is not directly possible. For data annotation it is recommended to use external tools, such as Labelbox. Consult this link for more details." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "By default, Databricks does not support data versioning, but it is considerably easy to install and integrate DVC into the Databricks workflow for effective data versioning." + } + ] + }, + { + "id": "963aaa51-8a46-4d4e-9808-d25ea81053210c", + "title": "Sagemaker", + "description": "Amazon SageMaker is a powerful and fully managed machine learning platform offered by Amazon Web Services (AWS). It allows users to easily build, train, and deploy machine learning models at scale. SageMaker provides an integrated development environment with built-in tools for data labeling, model training, and model deployment, simplifying the process of developing machine learning applications. SageMaker allows users to use various algorithms and frameworks, such as TensorFlow, PyTorch, and Scikit-learn, and take advantage of scalable computing resources to quickly and efficiently train models. Additionally, SageMaker enables models to be easily deployed into production with managed endpoints, allowing them to be seamlessly integrated into operational systems and applications.", + "link": "https://aws.amazon.com/sagemaker/", + "img_link": "sagemaker_logo.png", + "good_compatible": [ + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "Although ETL is not possible directly in Amazon SageMaker, you can leverage AWS features to perform ETL tasks as SageMaker is an integral part of the AWS ecosystem." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "Amazon SageMaker is a machine learning (ML) service provided by Amazon Web Services (AWS), SageMaker is a proprietary service specifically designed and managed by AWS. SageMaker is built and optimized to work within the AWS ecosystem, leveraging AWS infrastructure, services, and APIs. It is tightly integrated with AWS services such as S3, IAM, and others." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "SageMaker is at the core of AWS's MLOps offering, providing all the essential capabilities needed to manage machine learning processes smoothly and at scale. With integrated tools and services, SageMaker supports various phases of the end -to-end machine learning journey, such as dataset management, model training, hyperparameter optimization, deployment and monitoring It serves as a powerful solution across the broad spectrum of AWS services." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "DataOps is not directly possible in Amazon SageMaker, but since SageMaker is part of AWS, you can leverage AWS capabilities to perform DataOps tasks." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "Direct visualization and data insights are not built into Amazon SageMaker. However, you could use various AWS features to perform these tasks since SageMaker is part of the broader AWS ecosystem." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "It is possible to annotate unlabeled data or photos in a structured way with SageMaker. See: link " + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "SageMaker has its own functionality for managing and running experiments, called SageMaker Experiments. Additionally, it offers the flexibility to integrate with MLflow, if preferred." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "SageMaker provides data drift detection functionality. More information about this is available at: this link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "SageMaker provides functionality for detecting model drift. More information about this is available at: this link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "SageMaker provides specific tools for Large Language Model (LLM) operations. For more detailed information on operationalizing LLM evaluation at scale with Amazon SageMaker Clarify and MLOps services, please see the following link link" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "It is possible to orchestrate advanced pipelines with Sagemaker. Sagemaker is connected to the AWS ecosystem which makes it possible to create state-of-the-art pipelines for both your data and machine learning issues," + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "With SageMaker it is possible to train multiple machine learning models with just one push of a button. This functionality makes it efficient and easy to develop and compare various models" + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "It is not possible to run an AWS or SageMaker instance on-premise. It is important to carefully consider local capabilities as scaling instances on-premise is often more challenging and machine learning typically requires significant resources." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "Amazon SageMaker is a machine learning (ML) service provided by Amazon Web Services (AWS), SageMaker is a proprietary service specifically designed and managed by AWS and is therefore not open source or free." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", + "explanation": "Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality" + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "It is possible to annotate unlabeled data or photos in a structured way with SageMaker. See: link " + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "It is possible to annotate unlabeled data or photos in a structured way with SageMaker. See: link " + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "Amazon SageMaker is a machine learning (ML) service offered by Amazon Web Services (AWS). SageMaker is a proprietary service specifically designed and managed by AWS. The AWS ecosystem is a good choice for to keep in mind if you are not yet using a data platform as it offers a huge number of functionalities for all your data and machine learning issues." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "With SageMaker it's easy to publish, power up, and deploy a model." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "Amazon SageMaker offers features such as sharing notebooks, model artifacts, and datasets, which promotes collaboration within teams by making it easy to share code and results. However, it lacks native support for real-time collaboration on the same notebook or documents, which can complicate team collaboration. Role-Based Access Control (RBAC) is possible in SageMaker, allowing administrators to assign specific access rights to users within the platform persons." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "Amazon SageMaker offers features such as sharing notebooks, model artifacts, and datasets, which promotes collaboration within teams by making it easy to share code and results. However, it lacks native support for real-time collaboration on the same notebook or documents, which can complicate team collaboration. Role-Based Access Control (RBAC) is possible in SageMaker, allowing administrators to assign specific access rights to users within the platform persons." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "Amazon SageMaker offers features such as sharing notebooks, model artifacts, and datasets, which promotes collaboration within teams by making it easy to share code and results. However, it lacks native support for real-time collaboration on the same notebook or documents, which can complicate team collaboration. Role-Based Access Control (RBAC) is possible in SageMaker, allowing administrators to assign specific access rights to users within the platform persons." + } + ], + "bad_compatible": [ + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "Amazon SageMaker is a machine learning (ML) service offered by Amazon Web Services (AWS), while Databricks is a cloud computing platform offered by Databricks. SageMaker is a proprietary service designed specifically and managed by AWS." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "Amazon SageMaker is a machine learning (ML) service offered by Amazon Web Services (AWS), while Azure is a cloud computing platform offered by Microsoft. SageMaker is a proprietary service designed specifically and managed by AWS." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "Amazon SageMaker is a machine learning (ML) service offered by Amazon Web Services (AWS), while GCP is a cloud computing platform offered by Google. SageMaker is a proprietary service designed specifically and managed by AWS." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "Amazon SageMaker is a machine learning (ML) service provided by Amazon Web Services (AWS). SageMaker is a proprietary service specifically designed and managed by AWS." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "Amazon SageMaker is a machine learning (ML) service provided by Amazon Web Services (AWS). SageMaker is a proprietary service specifically designed and managed by AWS." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "It is not possible to use an AWS or SageMaker instance on-premise. It is important to carefully consider local capabilities as scaling instances on-premise is often more challenging and machine learning typically requires significant resources." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "Amazon SageMaker is a machine learning (ML) service provided by Amazon Web Services (AWS), SageMaker is a proprietary service specifically designed and managed by AWS and is therefore not open source or free." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", + "explanation": "Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "Out-of-the-box, SageMaker does not support data versioning, but you can implement it yourself. For more information on implementing data versioning with SageMaker, see the following link: link. " + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "By default, SageMaker does not provide a built-in ability to automatically find the optimal hyperparameters. You will need to implement this yourself, for example by writing and using hyperparameter tuning scripts." + } + ], + "match": { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "It is possible to annotate unlabeled data or photos with Sagemaker. See: https://docs.aws.amazon.com/sagemaker/latest/dg/sms.html" + } + }, + { + "id": "963abb12-8a46-4d4e-9808-d25ea810560c", + "title": "Azure ML", + "description": "Azure Machine Learning (Azure ML) is a comprehensive cloud-based platform from Microsoft for building, training, and deploying machine learning models. It provides a suite of tools and services that support developers and data scientists in creating cutting-edge solutions for data analysis and AI. With Azure ML, users can easily run experiments, build models with popular frameworks such as TensorFlow, PyTorch, and scikit-learn, and scale these models using powerful computing resources in the cloud machine learning (AutoML) that simplify the process of model selection, training, and deployment for users without extensive machine learning expertise. Azure ML also supports model deployment using containerized solutions and provides model performance monitoring capabilities and managing the lifecycle of machine learning models. By integrating with other Azure services, users can take advantage of a wide range of data management, security, and scalability capabilities, allowing them to build end-to-end solutions for their machine learning and AI projects in the cloud.", + "link": "https://azure.microsoft.com/nl-nl/products/machine-learning", + "img_link": "azureml_logo.png", + "good_compatible": [ + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "bcd62443-7827-44cb-88bb-b9fd5a3651ae", + "explanation": "Nice" + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "6b3b3542-9081-48c6-8e45-2e0556b25f67", + "explanation": "Perfect match" + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and is the easiest and best option when using Azure due to a close and good integration of functionalities in both." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "Although ETL is not built directly into Azure Machine Learning, you can leverage the extensive capabilities within the Azure ecosystem to perform ETL tasks, leveraging specific Azure services for effective Extract, Transform, Load (ETL) processes." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "Azure Machine Learning (Azure ML) is the core component for MLOps within the extensive Azure ecosystem. With a comprehensive set of capabilities, Azure ML supports managing diverse machine learning processes seamlessly and at scale. Built-in with essential tools and services, Azure ML guides users through the entire end-to-end machine learning journey, including dataset management, model training, hyperparameter optimization, deployment, and monitoring. As a powerful and integrated solution across the broad spectrum of Azure services, Azure ML empowers users able to develop and operationalize advanced machine learning models." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "DataOps is not built directly into Azure Machine Learning, but because Azure ML is part of the broader Azure ecosystem, you can leverage features within Azure to perform DataOps tasks and manage your data workflow." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "Direct visualization and insights from data are not built into Azure Machine Learning. However, you should leverage the rich features within the broader Azure ecosystem to generate data visualization and insights." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "It is possible to annotate your data or photos via Azure Machine Learning. For detailed information about labeling data, please refer to the following link: See: link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "It is possible to create experiments and gain deep insights using tools within Azure Machine Learning. This allows you to perform deep analysis and effectively assess the results of your machine learning experiments." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "Data drift can be detected using Azure Machine Learning. For detailed information on monitoring datasets and detecting data drift, please refer to the following link: \nlink. " + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "Azure Machine Learning (Azure ML) provides the ability to detect model drift through a visual indicator in their dashboard. This allows users to easily and effectively observe and evaluate changes in the performance of machine learning models through a clean and intuitive interface. This feature helps proactively manage and maintain models in production, enabling organizations to monitor and maintain the accuracy and relevance of their models over time." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "Azure Machine Learning provides specific functionality aimed at operationalizing and training Large Language Models. For an introduction and more information about LLMOps, please see the following link: link< /a> ." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "Azure Machine Learning provides tools to track and store the versions of your datasets. For more information about versioning and tracking datasets, see the following link: link . " + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "Within Azure's extensive ecosystem, it is possible to create pipelines for both DataOps and MLOps. These pipelines provide a streamlined and automated workflow for managing both data editing and machine learning operations. By leveraging the various services and tools within Azure, users can set up end-to-end processes including data processing, model training, deployment and monitoring." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "Azure ML allows users to train and test multiple machine learning models with just the click of a button, without having to write additional code. This automated capability simplifies and accelerates the experimentation process, helping users can quickly understand the performance of different models without extensive manual interventions." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "It is possible to publish machine learning models in Azure Machine Learning. The published models are easily accessible via API calls, giving users a streamlined and flexible way to integrate their machine learning models into production environments. " + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure, so it is not possible to use a variant of it locally" + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure. It is not open source and not free." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", + "explanation": "Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible, but often comes at the expense of functionality" + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "It is possible to annotate your data or photos via Azure Machine Learning. For detailed information about labeling data, please refer to the following link: See: link." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "It is possible to annotate your data or photos via Azure Machine Learning. For detailed information about labeling data, please refer to the following link: See: link." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure. The Azure ecosystem is a good choice to consider if you are not yet using a data platform as it offers a huge number of functionalities for all your data and machine learning issues." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "Azure ML offers features such as model versioning, collaborative experimentation, and shared datasets, which promote collaboration within teams. However, it lacks real-time code editing collaboration capabilities to facilitate concurrent changes. Role-Based Access Control (RBAC) is possible in Azure ML. The system is suitable for teams of all sizes, including teams of 1, 5 or more than 10 people, due to the scalability and flexibility of the service." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "Azure ML offers features such as model versioning, collaborative experimentation, and shared datasets, which promote collaboration within teams. However, it lacks real-time code editing collaboration capabilities to facilitate concurrent changes. Role-Based Access Control (RBAC) is possible in Azure ML. The system is suitable for teams of all sizes, including teams of 1, 5 or more than 10 people, due to the scalability and flexibility of the service." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "Azure Machine Learning (Azure ML) provides features such as model versioning, collaborative experimentation, and shared datasets, which promote collaboration within teams. However, it lacks capabilities for real-time collaboration in code editing to facilitate concurrent changes . Role-Based Access Control (RBAC) is possible in Azure ML. The system is suitable for teams of all sizes, including teams of 1, 5 or more than 10 people, due to the scalability and flexibility of the service." + } + ], + "bad_compatible": [ + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "e3e1cc59-5923-483a-94e7-986c96b757e0", + "explanation": "Can't" + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "2ae2f467-4e22-47ba-9e0f-0d46a62c4f46", + "explanation": "Can't" + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and cannot be used in Databricks. It is possible to use an Azure variant of Databricks." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and cannot be used in AWS." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and cannot be used in GCP." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and cannot be used in a hosted Kubernetes architecture." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure, so it is not possible to use a variant of it locally" + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", + "explanation": "Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible, but often comes at the expense of functionality" + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "Azure Machine Learning (Azure ML) is Microsoft's cloud-based machine learning service and can only be used on Azure. It is not open source and not free." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "It is not possible to automatically find optimal hyperparameters in Azure Machine Learning. Optimizing hyperparameters requires additional work and may require the use of hyperparameter tuning techniques." + } + ], + "match": { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "It is possible to annotate your data or photos via Azure ML. See: https://learn.microsoft.com/en-us/azure/machine-learning/how-to-label-data?view =azureml-api-2" + } + }, + { + "id": "964aaa51-8a46-4d4e-9808-d25ea810560c", + "title": "Vertex ai", + "description": "Vertex AI is a comprehensive machine learning platform from Google Cloud for building, training, and deploying AI models in the cloud. It offers a range of tools and services that support developers and data scientists in creating advanced data analytics and AI solutions. Vertex AI allows users to effortlessly run experiments, build models with popular frameworks such as TensorFlow and scikit-learn, and scale them using powerful cloud computing resources. The platform includes automated machine learning (AutoML) capabilities. simplifying the process of model selection, training and deployment for users without deep machine learning expertise. Vertex AI also supports model deployment using containerized solutions and provides model performance monitoring and management capabilities. the lifecycle of AI models. With integration with other Google Cloud services, users can take advantage of a wide range of data management, security, and scalability capabilities, helping them build end-to-end solutions for their AI and machine learning projects. in the cloud.", + "link": "https://cloud.google.com/vertex-ai?hl=nl", + "img_link": "vertex_logo.png", + "good_compatible": [ + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "bcd62443-7827-44cb-88bb-b9fd5a3651ae", + "explanation": "Nice" + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "2ae2f467-4e22-47ba-9e0f-0d46a62c4f46", + "explanation": "Yes" + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "c7e8fbb4-936d-47e7-b2fe-6d21b0be5235", + "explanation": "Yes" + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "Vertex AI, Google's cutting-edge cloud-based machine learning service, has been meticulously designed to integrate seamlessly with the Google Cloud Platform (GCP), providing perfect synergy with Google's extensive cloud services." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "Google Cloud offers an integrated Kubernetes service called Google Kubernetes Engine (GKE), which is specifically designed to make Kubernetes clusters easy to create and manage in the cloud. Although Vertex AI does not specifically support running Kubernetes clusters such as Google Kubernetes Engine (GKE), Kubernetes can be used in combination with Vertex AI to deploy and manage machine learning workloads." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "Although ETL is not directly possible with Vertex AI, as it is an integral part of Google Cloud Platform (GCP), you can leverage the various features within GCP to effectively perform Extract, Transform, Load (ETL) tasks to carry out." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "Vertex AI is the advanced MLops tool within the Google Cloud Platform (GCP) ecosystem. This powerful tool is specifically designed to support the full spectrum of machine learning operations, from data entry to model deployment." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "While DataOps is not built directly into Vertex AI, as an essential part of Google Cloud Platform (GCP), you can leverage the various features within GCP to perform DataOps tasks and effectively manage your data workflow. " + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "Although gaining insights and creating visualizations is not built directly into Vertex AI, as an integrated part of Google Cloud Platform (GCP), you can leverage the various features within GCP to perform these tasks effectively feed." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "It is possible to track experiments via TensorBoard in Vertex AI." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "It is possible to detect data drift in your data using Vertex AI. See: link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "It is possible to detect model drift using Vertex AI. See: link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "Within Vertex AI and the extensive functionalities of Google Cloud Platform (GCP), it is possible to create and execute both DataOps pipelines and MLOps pipelines." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "With Vertex AI it is possible to train multiple machine learning models at the touch of a button without the need for manual coding." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "It is possible to annotate data, objects or photos with Vertex AI. For detailed instructions, see link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "With Vertex AI it is possible to publish machine learning models and easily invoke them via API calls." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "Vertex AI is Google's cloud-based machine learning service and is available exclusively on the Google Cloud Platform (GCP). Therefore, it is not possible to use a local variant of Vertex AI." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "Vertex AI is Google's cloud-based machine learning service and is available exclusively on the Google Cloud Platform (GCP). Therefore, it is not possible to use a local or free variant of Vertex AI." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", + "explanation": "Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but at the expense of functionality" + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "It is possible to annotate data, objects or photos with Vertex AI. For detailed instructions, see link." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "It is possible to annotate data, objects or photos with Vertex AI. For detailed instructions, see link." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "Vertex AI, Google's cloud-based machine learning service, is designed exclusively for use within the Google Cloud Platform (GCP) and cannot be installed or run on other cloud providers. The GCP ecosystem is a good choice for This is something to consider if you are not yet using a data platform as it offers a huge number of functionalities for all your data and machine learning issues." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "Vertex AI promotes collaboration through integrated model versioning tools, allowing teams to easily share, monitor, and deploy models. However, the lack of built-in collaborative documentation and note-taking functionality can complicate collaboration. Role-Based Access Control (RBAC ) is possible in Vertex AI, allowing teams to manage access rights based on roles and responsibilities. This system can be used effectively for teams of 5 people or more, where the structure and control of RBAC are of greater value." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "Vertex AI promotes collaboration through integrated model versioning tools, allowing teams to easily share, monitor, and deploy models. Role-Based Access Control (RBAC) is enabled in Vertex AI, allowing teams to manage access rights based on roles and responsibilities. This system can be used effectively for teams of 5 people or more, where the structure and control of RBAC are of greater value." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "Vertex AI promotes collaboration through integrated model versioning tools, allowing teams to easily share, monitor, and deploy models. Role-Based Access Control (RBAC) is enabled in Vertex AI, allowing teams to manage access rights based on roles and responsibilities. This system can be used effectively for teams of 5 people or more, where the structure and control of RBAC are of greater value." + } + ], + "bad_compatible": [ + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "e3e1cc59-5923-483a-94e7-986c96b757e0", + "explanation": "Nope" + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "6b3b3542-9081-48c6-8e45-2e0556b25f67", + "explanation": "Nope" + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "Vertex AI is Google's cloud-based machine learning service and is available exclusively on the Google Cloud Platform (GCP). Therefore, it is not possible to use a local or free variant of Vertex AI." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "Vertex AI is Google's cloud-based machine learning service and cannot be installed or run on Databricks as these platforms are from different cloud providers." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "Vertex AI is Google's cloud-based machine learning service and cannot be installed or run on AWS as these platforms are from different cloud providers." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "Vertex AI is Google's cloud-based machine learning service and cannot be installed or run on Azure as these platforms are from different cloud providers." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "Vertex AI, Google's cloud-based machine learning service, is designed exclusively for use within the Google Cloud Platform (GCP) and cannot be installed or run on other cloud providers." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "Vertex AI is Google's cloud-based machine learning service and is available exclusively on the Google Cloud Platform (GCP). Therefore, it is not possible to use a local variant of Vertex AI." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", + "explanation": "Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but at the expense of functionality" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "GCP, including Vertex AI, does not currently provide specific functionality for operationalizing or training Large Language Models. However, these tasks can be accomplished through MLops, using broader machine learning operational capabilities practices." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "Data versioning is not currently built into Vertex AI or GCP, but there are options to implement and manage this yourself." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "Automatically finding the optimal hyperparameters is not currently built directly into Vertex AI, but it is still possible to implement this through custom code." + } + ] + }, + { + "id": "ee8b301a-22ab-4e40-9ad7-3e38cc9e3723", + "title": "KubeFlow", + "description": "Kubeflow is an open-source platform designed to orchestrate and manage machine learning workflows on Kubernetes, making it easier to develop, train, and deploy scalable, portable, and reproducible AI models in production environments." , + "link": "https://www.kubeflow.org/", + "img_link": "kubeflow_logo.png", + "bad_compatible": [ + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", + "explanation": "Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality" + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "Databricks does not currently support running a Kubernetes cluster." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "KubeFlow's MLOps tooling currently does not include Data Drift detection functionality." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "KubeFlow's MLOps tooling does not currently include Model Drift detection functionality." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "KubeFlow does not provide out-of-the-box tooling for Large Language Model Operations (LLMOps). However, it is possible to use the regular MLOps functionality to develop a Large Language Model." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "KubeFlow does not provide out-of-the-box tooling for data versioning. Nevertheless, it is possible to use the regular MLOps functionality to develop a Large Language Model." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "It is currently not possible to automatically find the optimal hyperparameters through KubeFlow. Nevertheless, this functionality can still be implemented using custom code." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "Although it is not possible to annotate data with the available tools in KubeFlow, it is easy to install tools yourself using containerization in Kubernetes." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "Unfortunately, KubeFlow does not provide the ability to gain deep insights into your data to make informed business decisions. However, it is possible to add this yourself by adding the tooling to Kubernetes yourself." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "Kubeflow offers features like shared Jupyter Notebooks and automated model deployments that promote team collaboration. However, it lacks integrated code review and collaborative model versioning, which can hinder collaboration. Role-Based Access Control (RBAC) is Kubeflow can be used effectively for teams of 5 or more people, but for smaller teams of 1-4 people it may be too extensive." + } + ], + "good_compatible": [ + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "When running a Kubernetes cluster on AWS, it is possible to use KubeFlow. It is recommended to consider KubeFlow if your business is deeply integrated with Kubernetes. However, if you use AWS features extensively, Amazon SageMaker is also a suitable solution." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "When running a Kubernetes cluster on Azure, it is possible to use KubeFlow. It is recommended to consider KubeFlow if your company is deeply integrated with Kubernetes. However, if you use Azure features extensively, Azure Machine Learning is also a suitable solution." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "When running a Kubernetes cluster on GCP, it is possible to use KubeFlow. It is recommended to consider KubeFlow if your business is deeply integrated with Kubernetes. However, if you use GCP features extensively, Vertex AI is also a suitable solution." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "If you are already using Kubernetes, Kubeflow is an excellent choice to integrate seamlessly into your existing workflow." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "Kubeflow uses Argo, which allows the integration of ETL into your workflow. Thanks to containerization in Kubernetes, you also have the flexibility to implement and connect an ETL library yourself, for example with tools such as Airflow." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "With Kubeflow you have access to a diverse range of MLOps tools. What sets it apart from other tools is the ability to add desired MLOps functionality yourself, thanks to containerization in Kubernetes." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "Kubeflow uses Argo, which enables the integration of ETL into your workflow. Thanks to containerization in Kubernetes, you also have the option to implement and connect a DataOps library yourself, for example with tools such as Airflow. " + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "Kubeflow can only be integrated into Kubernetes. Because Kubernetes is not specifically tied to a particular platform, it can be deployed in a variety of ways. When a Kubernetes instance is running in the cloud, Kubeflow can be installed." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "Kubeflow is an open-source project and can only be integrated into Kubernetes. If you are running Kubernetes locally, Kubeflow can be easily installed and integrated into your local environment." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "Kubeflow is a free and open-source platform. See: link. " + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "Kubeflow is a free and open-source platform. See: link. " + }, + { + "question_id": "8aadcd11-ca15-4c09-b2d2-3159a318118b", + "answer_id": "d8d29384-8b01-47ab-848a-c5ae13cc5baa", + "explanation": "If you are already using Kubernetes, Kubeflow is an excellent choice, integrating seamlessly into your existing workflow to provide an optimized experience." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "KubeFlow pipelines allow you to effortlessly track and manage your experiments, greatly simplifying the process of experimentation and management." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "With KubeFlow pipelines it is possible to orchestrate pipelines." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "With KubeFlow AutoML, you can effortlessly train and test multiple machine learning models at the touch of a button, without having to write any code." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", + "explanation": "Keep in mind that large data platforms require a significant amount of time and knowledge to set up. A simpler solution is possible but often costs functionality" + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "Although it is not possible to annotate data with the available tools in KubeFlow, it is easy to install tools yourself using containerization in Kubernetes." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "Although it is not possible to annotate data with the available tools in KubeFlow, it is easy to install tools yourself using containerization in Kubernetes." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "If you want to use Kubeflow, you must use Kubernetes underlying it. If you do this, Kubeflow is an excellent choice to use as a data platform." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "If you have chosen a cloud platform, check carefully whether you want to use Kubernetes. If so, Kubeflow is an excellent choice." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "The Kubeflow tool called MLRun serving allows you to publish and deploy trained models. See link." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "Kubeflow offers features like shared Jupyter Notebooks and automated model deployments that promote team collaboration. However, it lacks integrated code review and collaborative model versioning, which can hinder collaboration. Role-Based Access Control (RBAC) is Kubeflow can be used effectively for teams of 5 or more people, but for smaller teams of 1-4 people it may be too extensive." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "Kubeflow offers features such as shared Jupyter Notebooks and automated model deployments that promote collaboration within teams. However, it lacks an integrated feature for code review and collaborative model versioning, which can hinder collaboration. Based Access Control (RBAC) is possible. Kubeflow can be used effectively for teams of 5 or more people, but for smaller teams of 1-4 people it may be too extensive." + } + ] + }, + { + "id": "994c4786-2a83-40e6-9ada-72b4f80268ee", + "title": "H2O.AI", + "description": "H2O.ai democratizes machine learning for business users by offering a suite of tools. Their primary platform, H2O, enables building and deploying ML models with an easy-to-use web interface. Deep Water extends this out with tighter integration for GPU-based deep learning, Sparkling Water integrates with Apache Spark and Steam is an enterprise solution for deploying ML models via APIs. Driverless AI simplifies model development for non-technical users by simplifying tasks like feature engineering and algorithm selection automate.", + "link": "https://h2o.ai/", + "img_link": "h2o_logo.png", + "bad_compatible": [ + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "H2O.AI does not offer specific capabilities for DataOps. However, they do have partnerships with several companies that do offer this." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "Although H2O.AI does not provide built-in functionality to automatically find optimal hyperparameters, this can still be implemented via code." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "Databricks acts as an advanced data platform and is a service provider. It is currently not possible to install H2O.AI directly on Databricks." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "H2O.AI does not offer specific options for ETL (Extract, Transform, Load). They do have a partnership with KNIME, which is an open source ETL tool. This makes it possible, but does require additional tooling," + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "H2O.AIO offers options for BI but this requires a lot of programming work. It does not offer visualization options. See the link for more information." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "However, H2O.ai lacks capabilities for advanced model interpretation and collaboration features such as integrated code versioning, which can hinder collaboration. Role-Based Access Control (RBAC) is possible through integration with external tools such as LDAP or Active Directory. H2O. AI is suitable for teams of 5 people or more, offering scalability for larger teams, but may be too extensive for an individual user." + } + ], + "good_compatible": [ + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "H2O.AI is an open source solution and therefore not limited to a specific vendor. It can be deployed on different cloud instances." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "H2O.AI is a specialized tool for MLOps, designed to efficiently manage and optimize machine learning workflows." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "It is possible to detect drift in the data via H2O.AI. Please refer to the link for more detailed information." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "H2O.AI enables model drift detection. This allows you to identify changes in data and proactively respond to shifts in data distribution to maintain model performance." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "The H2O.AI Feature Store makes it easy to keep track of versions of your dataset. See the link for more information." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "H2O.AI is an open source solution and therefore not limited to a specific vendor. It can be deployed on different cloud instances." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "H2O.AI is an open source solution and therefore not limited to a specific vendor. It can be deployed on different cloud instances." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "H2O.AI is an open source solution and therefore not limited to a specific vendor. It can be deployed on different cloud instances." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "H2O.AI is an open source solution and therefore not limited to a specific vendor. It can be deployed on different cloud instances." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "H2O.AI is an open source tool that can be installed and run both on-premise and in the cloud. In addition, H2O.AI offers the option to use their servers for a fee, giving users flexibility in their implementation choices." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "H2O.AI is an open source tool that can be installed and run both on-premise and in the cloud. In addition, H2O.AI offers the option to use their servers for a fee, giving users flexibility in their implementation choices." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "H2O.AI is an open source tool that can be installed and run both on-premise and in the cloud. In addition, H2O.AI offers the option to use their servers for a fee, giving users flexibility in their implementation choices." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "H2O.AI is an open source tool that can be installed and run both on-premise and in the cloud. In addition, H2O.AI offers the option to use their servers for a fee, giving users flexibility in their implementation choices." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", + "explanation": "H2O.AI stands out for its user-friendliness, with an installation process that is significantly easier compared to other tools in the same domain. This accessibility also extends to use, with H2O.AI offering intuitive features that make it easier for users to work effectively with the tool. This focus on ease of use makes H2O.AI an attractive choice for those looking for a powerful yet accessible machine learning platform." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "Setting up experiments with H2O.AI can be accomplished in several ways. H2O.AI provides separate experimental tools for each of their components, such as driverless.ai or Hydrogen Torch. This approach allows users to set up specific tools that best suit their needs, and provides flexibility in tackling various machine learning experiments." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "H2O.AI has invested significantly in LLMOps (Large Language Model Operations) and has therefore become one of the best tools for developing and deploying LLM. Please refer to the link for more information." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "The use of H2O.ASSEMBLY and Scikit pipelines makes it possible to orchestrate pipelines. There is little documentation available on how advanced this functionality is." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "H2O.AI offers a powerful tool called Driverless AI, which can train and test multiple machine learning models at the touch of a button. See the link for more information." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "H2O.AI provides advanced tooling for annotating both data and photos. For more information, see link." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", + "explanation": "H2O.AI stands out for its user-friendliness, with an installation process that is significantly easier compared to other tools in the same domain. This accessibility also extends to use, with H2O.AI offering intuitive features that make it easier for users to work effectively with the tool. This focus on ease of use makes H2O.AI an attractive choice for those looking for a powerful yet accessible machine learning platform." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "H2O.AI provides advanced tooling for annotating both data and photos. For more information, see link." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "H2O.AI provides advanced tooling for annotating both data and photos. For more information, see link." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "H2O.AI is open source and therefore not dependent on a cloud platform. Research whether you want to use the H2O.AI cloud platform or whether you want to use another cloud platform and H2O.AI on this want to configure." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "With H2O.AI MLOps it is possible to deploy and use machine learning models in production. See the link for more information." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "However, H2O.ai lacks capabilities for advanced model interpretation and collaboration features such as integrated code versioning, which can hinder collaboration. Role-Based Access Control (RBAC) is possible through integration with external tools such as LDAP or Active Directory. H2O. AI is suitable for teams of 5 people or more, offering scalability for larger teams, but may be too extensive for an individual user." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "However, H2O.ai lacks capabilities for advanced model interpretation and collaboration features such as integrated code versioning, which can hinder collaboration. Role-Based Access Control (RBAC) is possible through integration with external tools such as LDAP or Active Directory. H2O. AI is suitable for teams of 5 people or more, offering scalability for larger teams, but may be too extensive for an individual user." + } + ], + "match": { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "dwa" + } + }, + { + "id": "d5cfa187-4147-4177-8091-491f244f6344", + "title": "Data robot", + "description": "DataRobot is an automated machine learning platform that helps companies build, deploy, and manage powerful AI models without extensive programming knowledge. It provides an intuitive interface and advanced automation tools that accelerate and optimize the model development process, helping users can quickly and accurately build predictive models for various business needs.", + "link": "https://www.datarobot.com/", + "img_link": "datarobot_logo.png", + "bad_compatible": [ + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "It is not possible to run DataRobot on external cloud platforms. It is advisable to investigate whether DataRobot offers functionalities to read and use your specific stored data." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "DataRobot is primarily focused on MLOps and does not provide specific support for DataOps. DataOps-related tasks must be performed before the data is read into DataRobot. The platform focuses on managing machine learning operations." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "DataRobot is primarily designed for MLOps, and does not support ETL operations. These operations must be performed before the data is read into DataRobot." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "DataRobot is primarily intended for MLOps and does not offer specific functionalities for BI. The platform focuses on managing machine learning operations." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "Using DataRobot on-premise is not possible. Access to DataRobot is only possible via their servers and for a fee." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "Datarobot is not open source and must be purchased via a periodic subscription. Also, using more resources also entails additional costs." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "Data versioning is not directly possible with DataRobot; this would require adding additional functionality outside of DataRobot. For more information about versioning production models in machine learning, see link consult .\n " + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "DataRobot does not provide pipeline orchestration functionality on its own, but excels at integrating with various pipelining tools. This allows users to benefit from seamless collaboration between DataRobot and advanced pipelining tools for efficient management of end- to-end machine learning workflows." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "It is not possible to run DataRobot directly on Kubernetes. Other ways must be found to load data from a Kubernetes cluster to DataRobot." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "DataRobot promotes collaboration through features such as the ability to share and version control models, making it easy for team members to collaborate on machine learning projects. Role-Based Access Control (RBAC) is possible in DataRobot, allowing teams of different sizes securely access the necessary resources and functionality. DataRobot is suitable for teams of 1, 5 or more than 10 people, but larger teams may benefit more from additional collaboration features." + } + ], + "good_compatible": [ + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "It is not possible to run DataRobot directly on GCP. However, DataRobot has features that make it easy to read and use data from GCP." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "DataRobot places a strong emphasis on MLOps and provides advanced capabilities to effectively manage machine learning operations, including automating model deployment, monitoring performance, and facilitating collaboration between data scientists and operations teams." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "Running DataRobot directly on Databricks is not possible. Nevertheless, there is an efficient collaboration between DataRobot and Databricks, which means that data can easily be read from Databricks by DataRobot. For more detailed information, you can read the linkconsult." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "Running DataRobot directly on AWS is not possible. Nevertheless, DataRobot provides functionality that allows it to read and use data from, for example, an AWS bucket." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "It is not possible to run DataRobot directly on Azure. However, DataRobot has features that make it easy to read and use data from Azure." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "Running DataRobot in the cloud is the only option, but it is important to note that DataRobot is a private company. Access to their services is only available through services offered by them and for a fee." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", + "explanation": "We personally find DataRobot to be the most user-friendly option for MLOps. It installs quickly and allows you to quickly get started training machine learning models. The emphasis on AutoML makes the process even more accessible. However, it is important to note that while the easy installation and AutoML functionalities allow for a quick start, this may come at the expense of deeper functionality." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "DataRobot makes it easy to set up experiments and view the results, making the platform intuitive for creating and managing machine learning experiments." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "DataRobot provides extensive data drift monitoring capabilities, allowing users to closely observe and understand changes in input data. For a detailed explanation of data drift monitoring, please refer to this information link \n" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "DataRobot provides model drift tracking capabilities, allowing users to closely monitor changes in the performance of their machine learning models. For detailed information on model drift monitoring, please visit the link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "DataRobot offers a wide range of features for developing a fully integrated generative machine learning model. For more details about Large Language Model Operations (LLMOps), please visit link consult." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "Automatically finding optimal hyperparameters is possible within DataRobot, making hyperparameter tuning efficient and streamlined. For detailed information on hyperparameter tuning in DataRobot, please visit the link for more information." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "In our opinion, DataRobot is the most accessible tool to get started with machine learning, thanks to its extensive and easy-to-use AutoML functionality. This allows users to quickly and effectively develop machine learning models, even without deep technical expertise ." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "DataRobot provides a powerful tool to annotate data and images through collaboration with Labelbox. See the link for more information." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "Datarobot is not open source and must be purchased via a periodic subscription. Also, using more resources also entails additional costs." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", + "explanation": "We personally find DataRobot to be the most user-friendly option for MLOps. It installs quickly and allows you to quickly get started training machine learning models. The emphasis on AutoML makes the process even more accessible. However, it is important to note that while the easy installation and AutoML functionalities allow for a quick start, this may come at the expense of deeper functionality." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "DataRobot provides a powerful tool to annotate data and images through collaboration with Labelbox. See the link for more information." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "DataRobot provides a powerful tool to annotate data and images through collaboration with Labelbox. See the link for more information." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "If your company is not yet active on a cloud platform, mainly wants to use the platform to explore machine learning and has no know-how about configuring a platform effectively, then Datarobot is a good choice to start with This is because data robot is a simple tool to start experimenting with machine learning." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "It is possible to publish models to several other cloud platforms such as AWS and Azure. DataRobot also offers the option to do this via their own servers. See link for more information." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "DataRobot promotes collaboration through features such as the ability to share and version control models, making it easy for team members to collaborate on machine learning projects. Role-Based Access Control (RBAC) is possible in DataRobot, allowing teams of different sizes securely access the necessary resources and functionality. DataRobot is suitable for teams of 1, 5 or more than 10 people, but larger teams may benefit more from additional collaboration features." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "DataRobot promotes collaboration through features such as the ability to share and version control models, making it easy for team members to collaborate on machine learning projects. Role-Based Access Control (RBAC) is possible in DataRobot, allowing teams of different sizes securely access the necessary resources and functionality. DataRobot is suitable for teams of 1, 5 or more than 10 people, but larger teams may benefit more from additional collaboration features." + } + ], + "match": { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "dwad" + } + }, + { + "id": "c4cd4364-2611-4b47-a61f-c357e3163da1", + "title": "Weights&biases", + "description": "Weights and Biases is a platform for experiment tracking and visualization in machine learning. It provides tools to help researchers and data scientists track, analyze, and share their machine learning experiments. The platform captures key parameters, results, and visualizations to provide insight into model performance, allowing teams to collaborate more effectively and make more informed decisions during the AI ​​model development process.", + "link": "https://wandb.ai/site", + "img_link": "wandb_logo.png", + "bad_compatible": [ + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "Weights and Biases is designed for MLOps, which means that data must already have been processed before it can be used by Weights and Biases." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "Weights and Biases was developed for MLOps, and from this perspective it offers an extensive range of tools and functionalities. However, it is important to note that the data must be pre-processed before it can be used by Weights and Biases ." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "Weights and Biases is designed for MLOps, and therefore requires data to be processed before it can be used. For Business Intelligence purposes, other tools specifically tailored to that application will be required." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "Weights and Biases is a semi-open source program, but companies are not allowed to host it on-premise for free. Please refer to the link for the pricing model." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "Weights and Biases does not have out-of-the-box functionality to detect data drift. However, it emphasizes collaborations with other specialized tools and frameworks, giving users the ability to integrate additional data drift monitoring functionalities into their machine learning workflows." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "It is not possible to orchestrate extensive pipelines with Weights and Biases; this requires the use of a complementary tool such as MLflow. While Weights and Biases excels at experiment management and visualization, integrating MLflow is a strategic approach to end- to support end-to-end machine learning workflows with comprehensive pipeline orchestration." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "Weights and Biases does not have built-in functionality to train and test multiple machine learning models with one button." + } + ], + "good_compatible": [ + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "Weights and Biases is versatile and can be used both on-premise and in the cloud, giving users flexibility as they implement their machine learning workflows." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "It is possible to integrate Weights & Biases (w&b) with Databricks by installing Weights & Biases in a Databricks notebook. See the link for more details." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "It is possible to run Weights & Biases on AWS. For more information about integrating Weights & Biases with AWS, see link consult. " + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "It is possible to run Weights & Biases on Azure. See the link for more information." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "It is possible to run Weights & Biases on Azure. See the link for more information." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "Containerization in Kubernetes makes it easy to install and use Weights and Biases." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "Weights and Biases is an excellent starting point for experimenting with machine learning because it can be applied both on-premise and across multiple computers, allowing for flexibility and scalability." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "Weights and Biases is a specialized platform specifically focused on MLOps, providing a comprehensive set of tools and functionalities to streamline and optimize the end-to-end process of machine learning operations." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "Weights and Biases is versatile and can be used both on-premise and in the cloud, giving users flexibility as they implement their machine learning workflows." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "Weights and Biases is a highly effective platform for tracking and managing experiments, excelling not only at logging model performance, but also at providing deep insights and visualizations that facilitate the analysis of experiment results, allowing it is a valuable asset for optimizing machine learning workflows." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "It is possible to detect model drift in production through a comprehensive dashboard in Weights and Biases. Detailed information about monitoring model drift in production is available in the link ." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "Weights and Biases provides a tool called Traces, which incorporates Large Language Model Operations (LLMOps). See the link for more information." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "It is possible to track versions of data with Weights and Biases through the functionality called Artifacts. This feature provides users with a structured and traceable way to store and manage different versions of data, contributing to a accurate and reproducible experimentation process. See the link for more details." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "\"Weights and Biases provides a powerful tool called Sweeps, which allows users to automatically determine the optimal hyperparameters. This functionality streamlines the process of hyperparameter tuning, making it easy to discover the best configurations for improved model performance. See the link for more information." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "It is possible to publish trained models with Weights and Biases. This functionality makes it easy to share results and models, which promotes collaboration between team members and stakeholders." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "It is possible to annotate data and photos with a tool called Prodigy. See the link for more information." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", + "explanation": "Compared to other data platforms on this list, Weights and Biases is easy to set up, allowing users to access its features quickly and effortlessly." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "Weights and Biases is a semi-open source program, but companies are not allowed to host it on-premise for free. Please refer to the link for the pricing model." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", + "explanation": "Compared to other data platforms on this list, Weights and Biases is easy to set up, allowing users to access its features quickly and effortlessly." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "It is possible to annotate data and photos with a tool called Prodigy. See the link for more information." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "It is possible to annotate data and photos with a tool called Prodigy. See the link for more information." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "It is possible to use Weights & Biases on most cloud platforms as their code is publicly available. Please note that Weights & Biases must be purchased to use." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "Weights & Biases promotes collaboration through features such as sharing experiments and results with team members, adding comments and notes to specific runs, and facilitating discussions through saved comments. However, it lacks direct capabilities for real-time collaboration on shared projects, such as simultaneous editing of documents. Role-Based Access Control (RBAC) is possible in Weights & Biases, allowing administrators to assign different permissions to team members based on their roles. The system is suitable for teams of any size, but can are especially useful for teams of 5 or more people due to the need for coordinated collaboration and management of projects." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "Weights & Biases promotes collaboration through features such as sharing experiments and results with team members, adding comments and notes to specific runs, and facilitating discussions through saved comments. However, it lacks direct capabilities for real-time collaboration on shared projects, such as simultaneous editing of documents. Role-Based Access Control (RBAC) is possible in Weights & Biases, allowing administrators to assign different permissions to team members based on their roles. The system is suitable for teams of any size, but can are especially useful for teams of 5 or more people due to the need for coordinated collaboration and management of projects." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "Weights & Biases promotes collaboration through features such as sharing experiments and results with team members, adding comments and notes to specific runs, and facilitating discussions through saved comments. However, it lacks direct capabilities for real-time collaboration on shared projects, such as simultaneous editing of documents. Role-Based Access Control (RBAC) is possible in Weights & Biases, allowing administrators to assign different permissions to team members based on their roles. The system is suitable for teams of any size, but can are especially useful for teams of 5 or more people due to the need for coordinated collaboration and management of projects." + } + ] + }, + { + "id": "eeb904f2-67d4-40ea-a992-f09f5a2d1358", + "title": "MLflow", + "description": "MLflow is an open-source platform for managing experiments and pipelines of machine learning models. It provides tools for experiment tracking, organizing code, reproducing models, and collaborating within teams. MLflow enables users allows you to easily record experiments, compare models, manage model versions, and deploy them seamlessly into production, resulting in more streamlined and reproducible machine learning workflows. MLflow is completely open-source and can run on virtually any machine and cloud provider MLFlow is managed by Databricks. If you choose MLflow you should be careful that the Databricks version of MLflow offers more functionalities than the open source version. Many cloud providers use MLflow underwater, which is a testament to how versatile it can be.", + "link": "https://mlflow.org/", + "img_link": "mlflow_logo.png", + "bad_compatible": [ + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "If you are already using Databricks, managing a separate MLflow instance is unnecessary. Databricks manages its own version of MLflow with additional functionality, providing an integrated and seamless experience for managing machine learning workflows within the Databricks platform." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "It is important to note that MLflow is not designed to perform ETL operations. Such tasks require additional tooling outside of MLflow. MLflow focuses primarily on managing machine learning workflows, experiments, and models, while ETL functionality is supported by specialized tools." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "It is important to note that MLflow is not designed for performing DataOps. Such tasks require additional tooling outside of MLflow. MLflow focuses primarily on managing machine learning workflows, experiments, and models, while ETL functionality is supported by specialized tools." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "To gain deep insights into your business performance, it is not possible to use MLflow alone; this requires additional tooling outside of MLflow. MLflow is primarily focused on managing machine learning workflows and experiments, while more comprehensive business insights are often gained through integration with specific business intelligence and analytics tools." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "It is important to note that in MLflow it is not possible to detect data drift automatically. Detecting data drift is usually handled by specialized tools and methods outside of MLflow." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "It is important to note that in MLflow it is not possible to detect model drift automatically. Detecting model drift is usually handled by specialized tools and methods outside of MLflow." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "It is not possible to have version control on your data within MLflow; this requires the addition of an additional tool such as Data Version Control (DVC). DVC provides specific functionalities for managing versions and tracking changes to datasets , allowing for accurate and auditable data versioning." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "It is important to note that MLflow cannot automatically find optimal hyperparameters; this requires manual tuning and experimentation. However, MLflow offers integration with hyperparameter tuning libraries such as Optuna and Hyperopt, allowing users to manually perform optimization processes to find the best hyperparameters to identify." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "MLflow does not have a built-in ability to train and test multiple machine learning models with a single button. Such automation of experiments requires additional scripting and tooling, such as the use of hyperparameter tuning libraries in combination with MLflow to achieve efficient and realize automated model training." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "MLflow is not designed for annotating data or photos. For tasks such as annotation, you will need to use other specialized tools specifically designed for data annotation, such as Labelbox or similar tools." + } + ], + "good_compatible": [ + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "Containerization in Kubernetes makes it easy to use MLflow, helping to streamline deployment and management of machine learning workflows. This approach provides flexibility and scalability when running MLflow in different environments." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "AWS offers excellent capabilities for integrating MLflow, often in combination with their existing MLOps platform SageMaker. This allows users to benefit from a comprehensive environment for managing and scaling their machine learning workflows on the AWS cloud platform. " + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "Azure offers excellent capabilities to integrate MLflow, often in combination with their existing MLOps platform Azure ML. This provides users with a powerful and integrated environment for managing and scaling machine learning workflows on the Azure cloud platform." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "GCP offers excellent capabilities to integrate MLflow, often in combination with their existing MLOps platform Vertex AI. This allows users to benefit from an integrated and scalable environment for managing and optimizing machine learning workflows on the Google Cloud platform." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "It's easy to start experimenting if you're not already using a cloud platform. MLflow can run on a computer or server and isn't dependent on a specific cloud provider, making it a flexible choice. This makes it makes it possible for users to start on-premise and later, if desired, move to a cloud-based environment." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "MLflow was built for MLOps, and has been integrated with most data platforms in a custom form. This integration allows users to effectively manage and optimize machine learning workflows across diverse data and cloud environments." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "MLflow offers excellent integration with all major cloud providers, giving users flexibility in deploying and managing machine learning workflows across cloud environments. This versatile support allows them to take full advantage of the specific capabilities and services that each cloud provider offers." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "MLflow is extremely user-friendly and easy to install at a local level, providing a seamless experience for users who want to experiment and develop on-premise within their machine learning projects. This accessibility contributes to a quick start and efficient use of MLflow functionalities." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "MLflow is not only free and open source, but also offers a transparent and active community through the link, giving users access to ongoing updates, support and contributions from the wider community." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "MLflow is not only free and open source, but also offers a transparent and active community through the link, giving users access to ongoing updates, support and contributions from the wider community." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", + "explanation": "MLflow is a compact package with a focus on simplicity, and does not offer extensive features for DataOps or ETL. This makes it easy to install and ideal for users who want to quickly experiment within their machine learning projects." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "MLflow makes it easy to view and manage your experiments. The intuitive user interface makes it easy to track experiment results, manage models, and understand the performance of different iterations of your machine learning projects." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "MLflow has developed functionalities specifically for creating and maintaining large language and generative models. See link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "MLflow is ideal for orchestrating MLOps pipelines. However, if you want to do more with DataOps, such as managing end-to-end data workflows, using tools such as Apache Airflow can be a valuable addition to your toolkit. Together they provide an integrated solution for effectively managing both machine learning and data operations." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "It is possible to publish models with MLflow and view statistics about them. MLflow provides features for logging and tracking experiment results, giving users insight into the performance of trained models and the ability to Share and view via the MLflow Tracking UI." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "MLflow is open source and therefore not dependent on where it is installed. Please check carefully whether it is possible to install it in your current cloud platform." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", + "explanation": "MLflow is a compact package with a focus on simplicity, and does not offer extensive features for DataOps or ETL. This makes it easy to install and ideal for users who want to quickly experiment within their machine learning projects." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "MLflow is not designed for annotating data or photos. For tasks such as annotation, you will need to use other specialized tools specifically designed for data annotation, such as Labelbox or similar tools." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "MLflow is not designed for annotating data or photos. For tasks such as annotation, you will need to use other specialized tools specifically designed for data annotation, such as Labelbox or similar tools." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "MLflow promotes team collaboration through features such as experiment tracking, model versioning, and model deployment. Experiment tracking allows you to document experiments and share results, while model versioning facilitates model version management. However, MLflow lacks built-in support for Role-Based Access Control (RBAC), which can hinder team collaboration due to the lack of granular access control.\n\nAlthough RBAC is not natively supported, teams of 1, 5, or more than 10 people can still use MLflow effectively For teams of 1 person, MLflow provides a convenient way to manage experiments and track models. For teams of 5 or more, additional access control measures beyond MLflow may be required to ensure secure collaboration However, the lack of built-in RBAC functionality may be limiting and you may need to look for additional tools or solutions that provide this." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "MLflow promotes team collaboration through features such as experiment tracking, model versioning, and model deployment. Experiment tracking allows you to document experiments and share results, while model versioning facilitates model version management. However, MLflow lacks built-in support for Role-Based Access Control (RBAC), which can hinder team collaboration due to the lack of granular access control.\n\nAlthough RBAC is not natively supported, teams of 1, 5, or more than 10 people can still use MLflow effectively For teams of 1 person, MLflow provides a convenient way to manage experiments and track models. For teams of 5 or more, additional access control measures beyond MLflow may be required to ensure secure collaboration However, the lack of built-in RBAC functionality may be limiting and you may need to look for additional tools or solutions that provide this." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "MLflow promotes team collaboration through features such as experiment tracking, model versioning, and model deployment. Experiment tracking allows you to document experiments and share results, while model versioning facilitates model version management. However, MLflow lacks built-in support for Role-Based Access Control (RBAC), which can hinder team collaboration due to the lack of granular access control.\n\nAlthough RBAC is not natively supported, teams of 1, 5, or more than 10 people can still use MLflow effectively For teams of 1 person, MLflow provides a convenient way to manage experiments and track models. For teams of 5 or more, additional access control measures beyond MLflow may be required to ensure secure collaboration However, the lack of built-in RBAC functionality may be limiting and you may need to look for additional tools or solutions that provide this." + } + ] + }, + { + "id": "340dcd09-44de-4ff6-bddf-0503b575f5cc", + "title": "ClearML", + "description": "ClearML is an end-to-end platform for managing machine learning workflows. It provides powerful tools for experiment tracking, automation, model versioning, and collaboration. With features for tracking experiments, visualizing results, and optimizing models, ClearML enables users to work more efficiently and gain better insight into their machine learning projects, allowing teams to collaborate more effectively and move models to production faster.", + "link": "https://clear.ml/", + "img_link": "clearml_logo.png", + "bad_compatible": [ + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "bcd62443-7827-44cb-88bb-b9fd5a3651ae", + "explanation": "dwa" + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "It is not recommended to use Databricks with ClearML. Databricks uses its own variant of MLflow, which is almost identical in functionality to ClearML. Using ClearML could cause duplication of functionalities and possibly conflict with the built-in MLflow functionalities in Databricks." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "ClearML is optimized for Machine Learning Operations (MLOps) and does not currently support Extract, Transform, Load (ETL) operations. For such tasks, it is recommended to use a specific tool designed for ETL processes. " + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "ClearML is optimized for Machine Learning Operations (MLOps) and does not currently support Business Intelligence. For such tasks, it is recommended to use a specific tool designed for BI processes." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "ClearML does not currently provide an out-of-the-box ability to train and test multiple machine learning models at the touch of a button. For these types of features, you can use additional automation tools or scripts to tailor your workflow to your specific needs." + } + ], + "good_compatible": [ + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "ClearML is open source and can therefore be easily integrated into your current AWS environment. This provides flexibility and the ability to tailor ClearML to the specific needs of your AWS-based machine learning workflows." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "ClearML is open source so it can be easily integrated into your current Azure environment. This gives you the flexibility to tailor ClearML to the specific needs of your Azure-based machine learning workflows." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "ClearML is open source so it can be easily integrated into your current Google Cloud Platform (GCP) environment. This openness provides flexibility and customizability to integrate ClearML into your existing GCP-based machine learning workflows." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "ClearML is open source and can therefore be easily integrated into your current Kubernetes environment. This flexibility makes it possible to tailor ClearML to the specific needs of your Kubernetes-based machine learning workflows." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "ClearML is open source so it can be easily integrated into your current environment. This openness provides flexibility and customizability to integrate ClearML into your existing machine learning workflows." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "ClearML can easily be run on-premise on a computer to start experimenting. Moreover, it is also easy to host ClearML Flow on the cloud, allowing multiple data scientists to easily access the functionalities and experiments within their local development environment." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "ClearML is an advanced platform specifically designed to streamline Machine Learning Operations (MLOps)." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "ClearML is an open-source platform, so it is not tied to a specific supplier. Although ClearML can operate independently, some suppliers offer integration options to, for example, process data better." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "ClearML is an open source platform that can easily be installed on-premise on your own system." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "ClearML is an open source platform, meaning it's free to use if you choose to host it yourself." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "ClearML is open source and therefore free to use. For additional functionality and enhanced support, it is possible to purchase virtual private cloud (VPC) or on-premises servers." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "ClearML has excellent experiment tracking capabilities." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "It is possible to detect data drift in ClearML using additional dashboarding. More information about this can be found at the following link.\n" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": " It is possible to detect drift in models in ClearMl using additional dashboarding. See link.\n" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "ClearML has developed functionalities specifically for creating and maintaining large language and generative models. More information about this is available here link.\n" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "ClearML provides the ability to track different versions of data using hyperdatasets. More information about this is available at the following link.\n" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "With ClearML you have the ability to perform optimization tasks to automatically find optimal hyperparameters. Please refer to the following link for more information.\n" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "It is possible to orchestrate MLOps pipelines with ClearML. ClearML provides capabilities to manage and automate end-to-end machine learning workflows, including setting up MLOps pipelines. It allows you to perform tasks such as data preparation, organize and manage model training, evaluation, and deployment in an integrated and automated workflow." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "It is possible to publish models in ClearML. Published models can be called by sending specific API calls to them. ClearML provides extensive statistics on the usage and performance of the published models," + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "Using the 'annotations' tab in ClearML you can easily annotate your data or photos. For more detailed information, please visit the following link consult. " + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "ClearML provides robust data ops functionality, streamlining and improving the entire data operations process. This comprehensive set of features within ClearML includes data management, versioning, data lineage tracking, and collaborative workflows, allowing data scientists and machine learning teams to manage their data sources can efficiently manage and leverage throughout the entire life cycle of their projects." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "Using the 'annotations' tab in ClearML you can easily annotate your data or photos. For more detailed information, please visit the following link consult. " + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "Using the 'annotations' tab in ClearML you can easily annotate your data or photos. For more detailed information, please visit the following link consult. " + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "ClearML promotes collaboration by allowing sharing, tracking, and reproduction of experiments, making it easy for team members to collaborate on projects. However, it lacks direct support for real-time collaboration, such as concurrent editing of scripts or notebooks. Role-Based Access Control (RBAC) is available, allowing access control based on roles and permissions. ClearML is suitable for teams of 1, 5 or more than 10 people, depending on the needs of the team and the scale of the project. ." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "ClearML promotes collaboration by allowing sharing, tracking, and reproduction of experiments, making it easy for team members to collaborate on projects. However, it lacks direct support for real-time collaboration, such as concurrent editing of scripts or notebooks. Role-Based Access Control (RBAC) is available, allowing access control based on roles and permissions. ClearML is suitable for teams of 1, 5 or more than 10 people, depending on the needs of the team and the scale of the project. ." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "ClearML promotes collaboration by allowing sharing, tracking, and reproduction of experiments, making it easy for team members to collaborate on projects. However, it lacks direct support for real-time collaboration, such as concurrent editing of scripts or notebooks. Role-Based Access Control (RBAC) is available, allowing access control based on roles and permissions. ClearML is suitable for teams of 1, 5 or more than 10 people, depending on the needs of the team and the scale of the project. ." + } + ] + }, + { + "id": "f98aea21-f356-40ca-b064-1995ad04f720", + "title": "DagsHub", + "description": "DAGsHub is an integrated platform that simplifies the process of managing and versioning machine learning models, datasets, and code. With its easy-to-use interface and powerful features, DAGsHub facilitates collaboration among data scientists, allowing them to share their work and track changes in real time.", + "link": "https://dagshub.com/", + "img_link": "dagshub_logo.png", + "bad_compatible": [ + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "963aaa51-8a46-4d4e-9808-d25ea810560c", + "explanation": "Dagshub currently has no direct ability to leverage data made available in Databricks; however, it does support the use of S3-compatible storage as an alternative method of accessing data in Databricks. The platform itself cannot be hosted on Databricks, but offers the choice of being installed on-premise or in Dagshub's cloud, albeit at a specific price." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "ee245bf1-0447-4460-beb0-26ce8987a59a", + "explanation": "Dagshub has the ability to use data made available in AWS, but the platform cannot run on AWS. Instead, Dagshub offers the option to run on-premise or in the cloud of Dagshub itself be installed, of course at a certain price." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "03c4d074-2773-41cd-962a-892d13882ef4", + "explanation": "Dagshub has the option to use data made available in Azure, but the platform cannot run on Azure. Instead, Dagshub offers the option to use data on-premise or in the cloud of Dagshub itself be installed, of course at a certain price." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "b33b4738-05e9-42a9-8680-78a15ff65b0a", + "explanation": "Dagshub has the ability to use data made available in GCP, but the platform cannot run on GCP. Instead, Dagshub offers the option to use data on-premise or in the cloud of Dagshub itself be installed, of course at a certain price." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "af017d7a-6e66-467a-87ad-1765a07563f3", + "explanation": "Dagshub has the ability to use data made available in kubernetes, but the platform cannot run on kubernetes. Instead, Dagshub offers the option to run on-premise or in the cloud of Dagshub itself be installed, of course at a certain price." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "8be91de1-04e3-4415-91f9-9f31ce1a6ab8", + "explanation": "Within Dagshub it is not possible to perform ETL operations, as Dagshub is designed exclusively for ML Ops functionalities." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "77900f70-1a5b-4d1a-a7e9-561e80027e28", + "explanation": "Within Dagshub it is not possible to perform Data Ops operations, as Dagshub is designed exclusively for ML Ops functionalities." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "e9000130-1d1a-4898-a1ce-ef434c8ec110", + "explanation": "Within Dagshub it is not possible to perform Business Intelligence operations, as Dagshub is exclusively designed for ML Ops functionalities." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "0974c882-d9b9-4c9d-a1db-05c0fee82523", + "explanation": "Dagshub, as a non-open-source platform, is available exclusively to companies willing to pay for it." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c21f0ead-9e20-4823-8875-d61a9d7542dd", + "explanation": "Dagshub, while a powerful platform for Machine Learning Operations, does not currently support automatic detection of data drift, leaving users responsible for monitoring any changes in the datasets." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "83b528f4-3ea9-427e-9ce5-772685655d43", + "explanation": "Dagshub, while a powerful platform for Machine Learning Operations, does not currently provide built-in functionality for automatically detecting model drift, leaving users responsible for proactively monitoring changes in model performance over time ." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "c8533619-431e-48cf-b7b3-5ff5f65263d1", + "explanation": "Automatically finding optimal hyperparameters is not currently supported by Dagshub and would require writing additional code to implement it." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3bb6617b-88f2-48a3-b235-381e8edfd3d9", + "explanation": "To simultaneously train and test multiple machine learning models at the touch of a button, there is currently no built-in functionality available in Dagshub. To realize this, it would be necessary to write additional code." + }, + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "1f3396cf-8727-43c8-912d-0911517dc894", + "explanation": "Dagshub has the ability to use data made available from various cloud platforms, but it is not open source and therefore cannot run on other cloud platforms. Instead, Dagshub offers the option to run on-premise or in the Dagshub cloud itself must be installed, of course at a certain price." + } + ], + "good_compatible": [ + { + "question_id": "4ca72731-751f-4402-bcdc-a98bf89cf79d", + "answer_id": "8b084d94-059d-4443-ae7d-d8f46d2e3e52", + "explanation": "Dagshub can be considered the equivalent of GitHub for machine learning, keeping the existing functionalities of GitHub and supplementing them with specific capabilities and functionalities focused on machine learning. Especially for companies that are not yet active on a cloud platform, Dagshub is an excellent starting choice because of the simplicity with which it can be started and where collaboration is central." + }, + { + "question_id": "fea3fc01-144d-4f41-b99e-0f556f6da751", + "answer_id": "c45c0a87-dfbc-428f-93a2-825a0ab9ca51", + "explanation": "Dagshub provides an alternative platform to GitHub specifically tailored for machine learning. The user interface makes it easy to annotate data, set up experiments, and publish models." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "37aff572-f1a8-4401-ac52-51183844c06c", + "explanation": "Dagshub is a paid tool that gives companies the flexibility to operate in the cloud, on a Virtual Private Cloud (VPC), or on-premise." + }, + { + "question_id": "cfae1bd1-1680-4ae2-9bb6-4531ca819589", + "answer_id": "74085608-b0db-4f28-b1cf-ff83f87fb07c", + "explanation": "Dagshub is a paid tool that gives companies the flexibility to operate in the cloud, on a Virtual Private Cloud (VPC), or on-premise." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "7c9f2f59-d736-4f6e-aa05-d2b205d5b66d", + "explanation": "If your company is already familiar with platforms like GitHub or GitLab, the transition to Dagshub will be seamless. While using Dagshub is similar to GitHub or GitLab, it does require some knowledge of data science and machine learning. The platform provides an advanced environment for managing and sharing data science projects, making it essential to be familiar with the basics of these disciplines to make the most of them." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "6fc847a4-d0b1-4bd4-aa5d-5119e0df65e3", + "explanation": "Dagshub also offers repositories similar to GitHub. What sets Dagshub apart is the introduction of a dedicated tab for experiments, where users can view experiments and easily create new experiments." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "7a8606ca-dac3-497d-ae7e-73b6643aae4e", + "explanation": "Dagshub has developed functionalities specifically for creating and maintaining large language and generative models. For more information, see: link.\n" + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "265f2953-f37c-4c0b-8f61-e2a15118291e", + "explanation": "Dagshub offers an excellent data versioning tool called Dagshub DDA, and in addition it is possible to use DVC (Data Version Control). For more information, see this link." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3a85d010-e8c4-4a29-a3dd-330376caf110", + "explanation": "Dagshub provides tooling called Dagshub pipelines which makes it possible to perform basic data operations. Integration with MLflow makes it possible to use MLflow's orchestration tooling." + }, + { + "question_id": "193dd987-b3f2-4ef2-a9b8-a6a042d1b0f0", + "answer_id": "3e6a8487-1793-4062-aee3-271c6e435818", + "explanation": "Dagshub provides the ability to easily publish your machine learning models, making them accessible via API calls for seamless integration and deployment across applications." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "629c3eda-64d2-4768-a26d-e5a901c4e170", + "explanation": "Dagshub introduces an annotation tab, allowing users to effortlessly add annotations to both data and photos, making the annotation process efficient and easy to use." + }, + { + "question_id": "04f53c2a-e879-4343-adc2-4bd7774ac2cb", + "answer_id": "4a41cfb5-c413-48d1-bab7-7b2e320e09e3", + "explanation": "Dagshub, as a non-open-source platform, is available exclusively to companies willing to pay for it." + }, + { + "question_id": "9c5eeaa4-cc36-4895-98d8-4a2d30770612", + "answer_id": "80d91bdb-7cd4-4ab7-a8b3-7cb7d4f01332", + "explanation": "If your company is already familiar with platforms like GitHub or GitLab, the transition to Dagshub will be seamless. While using Dagshub is similar to GitHub or GitLab, it does require some knowledge of data science and machine learning. The platform provides an advanced environment for managing and sharing data science projects, making it essential to be familiar with the basics of these disciplines to make the most of them." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "f96feb5c-7f24-436e-aa35-70a170bccfd9", + "explanation": "Dagshub introduces an annotation tab, allowing users to effortlessly add annotations to both data and photos, making the annotation process efficient and easy to use." + }, + { + "question_id": "37931900-6d9a-4e56-ac8e-96ea11c970fb", + "answer_id": "6c468e8d-a48b-4e5b-ba9c-9042d82d6ff9", + "explanation": "Dagshub introduces an annotation tab, allowing users to effortlessly add annotations to both data and photos, making the annotation process efficient and easy to use." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "3e29d8d1-aef4-45a9-9728-606880731d87", + "explanation": "Dagshub promotes collaboration through real-time updates, project management tools, and integration with popular platforms such as GitHub and Slack. The platform supports Role-Based Access Control (RBAC), allowing administrators to assign specific access rights to users based on their roles. I would recommend Dagshub for teams of 5 or more people, where the need for structured collaboration and coordination is greater." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "7ca2debe-b701-4e89-958d-6d3cff385de0", + "explanation": "Dagshub promotes collaboration through real-time updates, project management tools, and integration with popular platforms such as GitHub and Slack. H The platform supports Role-Based Access Control (RBAC), allowing administrators to assign specific access rights to users based on of their roles. I would recommend Dagshub for teams of 5 or more people, where the need for structured collaboration and coordination is greater." + }, + { + "question_id": "c8775160-e498-4292-a464-b45e222f5aa7", + "answer_id": "6687720c-ef4d-4663-8e79-a98694bb10d9", + "explanation": "Dagshub promotes collaboration through real-time updates, project management tools, and integration with popular platforms such as GitHub and Slack. The platform supports Role-Based Access Control (RBAC), allowing administrators to assign specific access rights to users based on their roles. I would recommend Dagshub for teams of 5 or more people, where the need for structured collaboration and coordination is greater." + } + ] + } + ] +} diff --git a/src/assets/tools.json b/src/assets/tools.nl.json similarity index 100% rename from src/assets/tools.json rename to src/assets/tools.nl.json diff --git a/src/boot/i18n.js b/src/boot/i18n.js new file mode 100644 index 0000000..dabf10c --- /dev/null +++ b/src/boot/i18n.js @@ -0,0 +1,15 @@ +import { createI18n } from 'vue-i18n' +import messages from 'src/i18n' +import { useAnswerStore } from "../stores/answerStore"; +export default ({ app }) => { + // Create I18n instance + const answerStore = useAnswerStore() + const i18n = createI18n({ + locale: answerStore.defaultLocale, + legacy: false, // comment this out if not using Composition API + messages + }) + + // Tell app to use the I18n instance + app.use(i18n) +} diff --git a/src/boot/loadTools.js b/src/boot/loadTools.js index 0a2cbd5..d88f5e2 100644 --- a/src/boot/loadTools.js +++ b/src/boot/loadTools.js @@ -1,17 +1,12 @@ import { boot } from "quasar/wrappers"; import { useAnswerStore } from "../stores/answerStore"; - -import tools from "../assets/tools.json"; -import questions from "../assets/questions.json"; +import { useI18n } from 'vue-i18n' +import tools from "../assets/tools.nl.json"; +import questions from "assets/questions.nl.json"; // "async" is optional; // more info on params: https://v2.quasar.dev/quasar-cli/boot-files export default boot(async (/* { app, router, ... } */) => { // something to do - const answerStore = useAnswerStore(); - - console.log("Loaded tools.json"); - answerStore.tools = tools.tools; - console.log("Loaded questions.json"); - answerStore.questions = questions.questions; + answerStore.loadTools(answerStore.defaultLocale) }); diff --git a/src/components/AnswerItem.vue b/src/components/AnswerItem.vue index aec471d..c3c35ab 100644 --- a/src/components/AnswerItem.vue +++ b/src/components/AnswerItem.vue @@ -61,7 +61,7 @@
- Antwoord uitleg: {{ props.answer.explanation_text }} + {{$t('answer.explanation')}}: {{ props.answer.explanation_text }}
@@ -70,6 +70,7 @@ import { defineComponent, ref, computed } from "vue"; import { useAnswerStore } from "../stores/answerStore"; import { useQuasar } from "quasar"; +import { useI18n } from 'vue-i18n' export default defineComponent({ name: "AnswerItem", props: { @@ -83,6 +84,7 @@ export default defineComponent({ emits: ["selectAnswer", "unselectAnswer"], setup(props, { emit }) { const q = useQuasar(); + const { t } = useI18n() const answerStore = useAnswerStore(); const isMobile = computed(() => q.platform.is.mobile); const tooltipVisible = ref(false); @@ -106,6 +108,7 @@ export default defineComponent({ }; return { selectAnswer, + t, unselectAnswer, showTooltip, hideTooltip, diff --git a/src/components/LocaleSwitcher.vue b/src/components/LocaleSwitcher.vue new file mode 100644 index 0000000..023df1a --- /dev/null +++ b/src/components/LocaleSwitcher.vue @@ -0,0 +1,46 @@ + + + diff --git a/src/components/QuestionItem.vue b/src/components/QuestionItem.vue index fbeb782..a47220c 100644 --- a/src/components/QuestionItem.vue +++ b/src/components/QuestionItem.vue @@ -35,7 +35,7 @@
- Vraag uitleg: {{ props.question.explanation_text }} + {{$t('question.explanation')}}: {{ props.question.explanation_text }}
@@ -80,8 +80,8 @@ {{ props.question.type === "single" - ? "Selecteer één antwoord" - : "Meerdere antwoorden mogelijk" + ? $t("question.single_question_help") + : $t("question.multiple_question_help") }}
@@ -102,7 +102,7 @@ class="float-right" push rounded - label="Volgende vraag" + :label="$t('question.btn.next')" @click="submitAnswer" /> @@ -116,6 +116,7 @@ import { Notify, useQuasar } from "quasar"; import { useAnswerStore } from "../stores/answerStore"; import AnswerItem from "./AnswerItem.vue"; import QuestionToolIcon from "./QuestionToolIcon.vue"; +import { useI18n } from 'vue-i18n' export default defineComponent({ name: "QuestionItem", props: { @@ -128,6 +129,7 @@ export default defineComponent({ }, emits: ["submitAnswer", "previousQuestion", "updateAnswer"], setup(props, { emit }) { + const { t } = useI18n() const answerStore = useAnswerStore(); const q = useQuasar(); const isMobile = computed(() => q.platform.is.mobile); @@ -195,7 +197,7 @@ export default defineComponent({ } else { Notify.create({ position: "center", - message: "Selecteer minimaal 1 antwoord!", + message: t('question.no_selected_answer_error'), color: "negative", timeout: 200, }); @@ -235,6 +237,7 @@ export default defineComponent({ submitAnswer, unselectAnswer, fullscreen, + t, answerStore, q, previousQuestion, diff --git a/src/components/ToolDialog.vue b/src/components/ToolDialog.vue index 9c333da..8185cb3 100644 --- a/src/components/ToolDialog.vue +++ b/src/components/ToolDialog.vue @@ -80,8 +80,7 @@ !props.tool.clashes.find((e) => e.hasOwnProperty('matches')) " > - Er zijn geen clashes gevonden, deze tool voldoet voor 100% aan je - aangegeven eisen! + {{$t('tool.no_clashes_found')}}
e.hasOwnProperty('matches')) " > - Er zijn geen matches gevonden! + {{$t('tool.no_matches_found')}}
- De volgende - clashes zijn - gevonden: + +
  • @@ -41,9 +40,8 @@
- De volgende - matches zijn - gevonden: + +
  • {{ match.explanation }} @@ -51,10 +49,9 @@
- Selecteer een vraag om een beschrijving per tool te - kunnen zien +
- Tusssenstand + {$t('tool.matches_found'){}}
Clashes: {{ props.tool.numberOfClaches ? props.tool.numberOfClaches : 0 }} @@ -74,6 +71,7 @@ diff --git a/src/pages/ResultPage.vue b/src/pages/ResultPage.vue index 6d9d82b..d2bdd88 100644 --- a/src/pages/ResultPage.vue +++ b/src/pages/ResultPage.vue @@ -4,7 +4,7 @@
- Ranglijst - + {{$t('results.ranking.title')}} - {{ @@ -18,9 +18,7 @@
{{ id }}
- Hier ziet u een overzicht met de resultaten. Klik op een platform - om te zien in welke aspecten het matcht of clasht met uw gegeven - antwoorden. +
- Nakijk grafiek + {{$t('results.ranking.graph')}}
@@ -71,7 +69,7 @@ import { defineComponent, ref, computed, onMounted } from "vue"; import { useRouter, useRoute } from "vue-router"; import { useAnswerStore } from "../stores/answerStore"; import ToolDialog from "src/components/ToolDialog.vue"; - +import {useI18n} from "vue-i18n"; const columns = [ { name: "name", @@ -376,6 +374,7 @@ export default defineComponent({ }, ]); const router = useRouter(); + const { t } = useI18n() const route = useRoute(); const answerStore = useAnswerStore(); let result = answerStore.results[answerStore.results.length - 1]; @@ -557,6 +556,7 @@ export default defineComponent({ chosenTool, showDialog, openDialog, + t, sortedTools, rows, columns, diff --git a/src/stores/answerStore.js b/src/stores/answerStore.js index 5ac9189..fce6646 100644 --- a/src/stores/answerStore.js +++ b/src/stores/answerStore.js @@ -1,5 +1,9 @@ import { defineStore } from "pinia"; +import tools_nl from "../assets/tools.nl.json"; +import questions_nl from "assets/questions.nl.json"; +import tools_en from "../assets/tools.en.json"; +import questions_en from "assets/questions.en.json"; export const useAnswerStore = defineStore("answer", { state: () => ({ results: [], @@ -7,11 +11,26 @@ export const useAnswerStore = defineStore("answer", { answers: [], questions: [], tools: [], + defaultLocale: 'nl' }), persist: true, getters: {}, actions: { + loadTools(locale) { + this.defaultLocale = locale + console.log(locale) + if(locale === "en-US"){ + console.log("Load english questions + answers"); + this.tools = tools_en.tools; + this.questions = questions_en.questions; + } else { + console.log("Load dutch questions + answers"); + this.tools = tools_nl.tools; + this.questions = questions_nl.questions; + } + + }, resetQuiz(){ this.selectedAnswers = [] this.answers = [] diff --git a/yarn.lock b/yarn.lock index 8d662ef..5eca555 100644 --- a/yarn.lock +++ b/yarn.lock @@ -68,6 +68,27 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@intlify/core-base@10.0.0-beta.5": + version "10.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-10.0.0-beta.5.tgz#6a04ecbe2ed346fd8f0d10acbbd6813c24a8f36d" + integrity sha512-XWLOYbHz5QMJ1lGxjnSr3lTLB+kJqEaf507NCnqAG2X0Ffz/W6h/o7dDlvsPZ668FhnAlXc2/eQzqq5kC+NF6g== + dependencies: + "@intlify/message-compiler" "10.0.0-beta.5" + "@intlify/shared" "10.0.0-beta.5" + +"@intlify/message-compiler@10.0.0-beta.5": + version "10.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-10.0.0-beta.5.tgz#0a8d5ebc2e509a8baa419c066e3ba55339afc664" + integrity sha512-hLLchnM1dmtSEruerkzvU9vePsLqBXz3RU85SCx/Vd12fFQiymP+/5Rn9MJ8MyfLmIOLDEx4PRh+/GkIQP6oog== + dependencies: + "@intlify/shared" "10.0.0-beta.5" + source-map-js "^1.0.2" + +"@intlify/shared@10.0.0-beta.5": + version "10.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-10.0.0-beta.5.tgz#4b87237ba2091f53275368a7ecacc321b37cf258" + integrity sha512-g9bq5Y1bOcC9qxtNk4UWtF3sXm6Wh0fGISb7vD5aLyF7yQv7ZFjxQjJzBP2GqG/9+PAGYutqjP1GGadNqFtyAQ== + "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" @@ -2835,6 +2856,15 @@ vue-eslint-parser@^9.3.1: lodash "^4.17.21" semver "^7.3.6" +vue-i18n@^10.0.0-beta.5: + version "10.0.0-beta.5" + resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-10.0.0-beta.5.tgz#3645a9559c32884df2ac5c5b557ce161559e1070" + integrity sha512-P5TUo4Ux/NgQLP1OGGRnHGxkh3CPiUt4W2RcDUeoYj+26GGz9H736DY3gw5fyFdiNT9JSXhuLK7yB49pk062Yw== + dependencies: + "@intlify/core-base" "10.0.0-beta.5" + "@intlify/shared" "10.0.0-beta.5" + "@vue/devtools-api" "^6.5.0" + vue-router@^4.0.0: version "4.2.5" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.5.tgz#b9e3e08f1bd9ea363fdd173032620bc50cf0e98a"