PageSourceSearch

https://kindredly.ai/js/StandaloneFamilyBoardAppBlR1CwA5.js

js kindredly.ai collected 2026-09-24 14:31:05 UTC 15,251 bytes, 1 lines download raw bytes

1import{d as At,q as v,a1 as Tt,c as L,i as j,O as Dt,a4 as Nt,b as i,o,x as k,e,j as z,F as I,n as st,B as C,C as p,l as V,v as S,a7 as w,S as $t,R,u as J,L as Bt}from"./vue-runtimeBcw72k-n.js";import{t as E,j as Lt,_ as Vt}from"./chunkReloadRecoveryC4XyrbqR.js";import{I as nt}from"./ItemImageD8NxRVYv.js";import{u as Ut}from"./useTaskLinkedItemPreviewsBixZ1NGG.js";import{r as Ot}from"./OperationQueueDV3oPNrt.js";import"./cjs-helpersC4iS2aBk.js";import"./bootstrap-vue-nextD6HU9H8G.js";import"./dexie2jmnBxhj.js";import"./itemImageSourcesB5F3pjKY.js";import"./extraction.pure.utilsDQPW8yIh.js";import"./TIIconDefaultCYA3LJyP.js";import"./item.typesx7Q7rrX9.js";import"./imageRenditionsDqNw8UDr.js";import"./refresh.storeCFjy7nst.js";import"./file_utilsBz4gEirg.js";import"./item-name.utilsCH3lkmjj.js";import"./agentParentalGrantCz4Xs1Ac.js";import"./content.typesCQ2lHcy0.js";import"./constantsDsHwd9pV.js";import"./url.utilsCetgXmY_.js";const it=1;let Q=0;function A(m){Q=(Q+1)%1e6;const l=Math.floor(Math.random()*1e9).toString(36);return`${m}_${Date.now().toString(36)}${Q.toString(36)}${l}`}function Ft(m){const l=new Date().toISOString();return{id:A("card"),title:m.trim(),notes:"",log:[],linkedItemIds:[],createdAt:l,updatedAt:l}}function P(m){return{id:A("col"),title:m,cards:[]}}function lt(){return{version:it,columns:[P("To do"),P("Doing"),P("Done")],updatedAt:new Date().toISOString()}}function Rt(m){if(!m||typeof m!="object"||!Array.isArray(m.columns))return null;const l=new Date().toISOString(),_=m.columns.map(f=>({id:String((f==null?void 0:f.id)||A("col")),title:String((f==null?void 0:f.title)??"Untitled"),cards:Array.isArray(f==null?void 0:f.cards)?f.cards.map(a=>({id:String((a==null?void 0:a.id)||A("card")),title:String((a==null?void 0:a.title)??""),notes:String((a==null?void 0:a.notes)??""),log:Array.isArray(a==null?void 0:a.log)?a.log.map(u=>({id:String((u==null?void 0:u.id)||A("log")),text:String((u==null?void 0:u.text)??""),at:String((u==null?void 0:u.at)||l)})):[],linkedItemIds:Array.isArray(a==null?void 0:a.linkedItemIds)?Array.from(new Set(a.linkedItemIds.map(u=>String(u||"").trim()).filter(Boolean))):[],createdAt:String((a==null?void 0:a.createdAt)||l),updatedAt:String((a==null?void 0:a.updatedAt)||l)})):[]}));return{version:it,columns:_,updatedAt:String(m.updatedAt||l)}}const ot="app_global",rt="family_board",dt="kanban",ut="board";async function Pt(){var l,_;const m=await E("/artifact/get",{refType:ot,refId:rt,artifactType:dt,artifactKey:ut,forceRemote:!0});return Rt((_=(l=m.result)==null?void 0:l.entry)==null?void 0:_.data)}async function at(m){const l=JSON.parse(JSON.stringify(m));l.updatedAt=new Date().toISOString(),await E("/artifact/upsert",{refType:ot,refId:rt,artifactType:dt,artifactKey:ut,data:l})}const Et={class:"fb-shell"},Kt={key:0,class:"fb-state text-muted text-center px-4"},Mt={key:1,class:"fb-state text-muted text-center px-4"},qt={class:"fb-topbar d-flex align-items-center gap-2 px-3 py-2"},Yt={key:0,class:"bi bi-arrow-repeat fb-spin","aria-hidden":"true"},jt={key:1,class:"bi bi-check2","aria-hidden":"true"},zt={key:2,class:"bi bi-exclamation-triangle","aria-hidden":"true"},Jt={key:0,class:"alert alert-warning mx-3 mb-0 py-2 small"},Qt={class:"fb-board"},Gt={class:"fb-col__head d-flex align-items-center gap-1 mb-2"},Ht=["onUpdate:modelValue"],Wt={class:"fb-col__count"},Xt=["onClick"],Zt={class:"fb-col__cards"},te=["onClick","onKeydown"],ee={class:"fb-card__title"},se={key:0,class:"fb-card__notes"},ne={class:"fb-card__foot d-flex align-items-center gap-2 mt-1"},le={key:0,class:"fb-chip small text-muted"},ae={key:1,class:"fb-chip small text-muted"},ie=["disabled","onClick"],oe=["disabled","onClick"],re={key:0,class:"fb-col__empty small text-muted text-center mb-0"},de=["onSubmit"],ue=["onUpdate:modelValue"],ce=["disabled"],me={class:"fb-modal__card",role:"dialog","aria-modal":"true","aria-label":"Card details"},be={class:"fb-modal__head d-flex align-items-start gap-2 mb-3"},fe={class:"mb-3"},pe={key:0,class:"fb-links mb-2"},ve=["onClick"],_e={class:"fb-link__body"},ke={class:"fb-link__name text-truncate"},ye={class:"fb-link__type small text-muted text-truncate"},ge=["onClick"],he={key:1,class:"small text-muted mb-2"},xe={key:3,class:"fb-picker"},Ie={class:"d-flex align-items-center gap-2 mb-2"},Ce={key:0,class:"small text-muted px-1 py-2"},Se={key:1,class:"fb-picker__results list-unstyled mb-0"},we=["disabled","onClick"],Ae={class:"fb-link__body"},Te={class:"text-truncate"},De={class:"small text-muted text-truncate"},Ne={key:2,class:"small text-muted px-1 py-2"},$e=["disabled"],Be={key:0,class:"fb-log list-unstyled mb-3"},Le={class:"fb-log__text"},Ve={class:"fb-log__time small text-muted"},Ue={key:1,class:"text-muted small mb-3"},Oe=At({__name:"StandaloneFamilyBoardApp",setup(m){const l=v(null),_=v(!1),f=v(""),a=v("idle"),u=Tt({}),T=v(null),g=v(""),D=L(()=>{var s;return((s=Lt.currentUser)==null?void 0:s._id)||null}),c=L(()=>{const s=T.value,t=l.value;if(!s||!t)return null;for(let r=0;r<t.columns.length;r++){const n=t.columns[r].cards.findIndex(b=>b.id===s);if(n>=0)return{ci:r,idx:n,card:t.columns[r].cards[n]}}return null}),ct=L(()=>{var t;const s=[];for(const r of((t=l.value)==null?void 0:t.columns)||[])for(const n of r.cards)s.push({taskId:n.id,linkedItemIds:n.linkedItemIds});return s}),{linkedItemsForTask:G,linkedItemsLoading:mt}=Ut({tasks:ct,enabled:L(()=>!!D.value)}),N=v(!1),y=v(""),U=v([]),K=v(!1);let $=null,O=0;async function H(){var r;const s=y.value.trim(),t=++O;K.value=!0;try{let n=[];if(s?n=(await E("/search/main",{searchType:"text",searchLookupValue:s,filters:{}})).result||[]:n=((r=(await E("/item/query",{userId:D.value||void 0,filters:{},includes:{},sort:{field:"created",order:"desc"},pagination:{limit:30}})).result)==null?void 0:r.items)||[],t!==O)return;U.value=Ot(n,60,!1)}catch{t===O&&(U.value=[])}finally{t===O&&(K.value=!1)}}j(y,()=>{N.value&&($&&clearTimeout($),$=setTimeout(H,250))});function W(s){return s.typeName||s.subType||s.type||""}function bt(s){s&&window.open(`/kindredapp/#/item/${s}`,"_blank","noopener")}function ft(){N.value=!0,y.value="",H()}function pt(){N.value=!1}function M(s){var t;return!!s&&!!((t=c.value)!=null&&t.card.linkedItemIds.includes(s))}function vt(s){const t=c.value;!t||!s._id||M(s._id)||(t.card.linkedItemIds.push(s._id),t.card.updatedAt=x())}function _t(s){const t=c.value;t&&(t.card.linkedItemIds=t.card.linkedItemIds.filter(r=>r!==s),t.card.updatedAt=x())}const kt=L(()=>{switch(a.value){case"saving":return"Saving…";case"saved":return"Saved";case"error":return"Couldn’t save";default:return""}});let q=!1,h=null,B=!1;function yt(){q&&(B=!0,h&&clearTimeout(h),h=setTimeout(X,700))}
1async function X(){if(h&&(clearTimeout(h),h=null),!(!B||!l.value)){B=!1,a.value="saving";try{await at(l.value),a.value="saved"}catch{a.value="error",B=!0}}}j(l,yt,{deep:!0});async function gt(){if(q=!1,f.value="",a.value="idle",T.value=null,!D.value){l.value=null,_.value=!1;return}_.value=!0;try{const s=await Pt();if(s)l.value=s;else{const t=lt();l.value=t,await at(t)}}catch(s){f.value=(s==null?void 0:s.message)||"Could not load your board.",l.value||(l.value=lt())}finally{_.value=!1}await Bt(),q=!0}j(D,gt,{immediate:!0}),Dt(()=>{$&&clearTimeout($),B&&X()});function x(){return new Date().toISOString()}function ht(s){const t=l.value;if(!t)return;const r=t.columns[s],n=(u[r.id]||"").trim();n&&(r.cards.push(Ft(n)),u[r.id]="")}function Z(s,t,r){const n=l.value;if(!n)return;const b=n.columns[s+r];if(!b)return;const[d]=n.columns[s].cards.splice(t,1);d&&(d.updatedAt=x(),b.cards.push(d))}function xt(){const s=l.value;s&&s.columns.push(P("New list"))}function It(s){const t=l.value;if(!t)return;const r=t.columns[s],n=r.cards.length?`Delete “${r.title||"this list"}” and its ${r.cards.length} card(s)?`:`Delete “${r.title||"this list"}”?`;window.confirm(n)&&t.columns.splice(s,1)}function tt(){const s=c.value;s&&(s.card.updatedAt=x())}function Ct(){const s=c.value,t=g.value.trim();!s||!t||(s.card.log.unshift({id:A("log"),text:t,at:x()}),s.card.updatedAt=x(),g.value="")}function St(){const s=c.value,t=l.value;!s||!t||window.confirm("Delete this card?")&&(t.columns[s.ci].cards.splice(s.idx,1),F())}function F(){T.value=null,g.value="",N.value=!1,y.value=""}function wt(s){const t=new Date(s);return Number.isNaN(t.getTime())?"":t.toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}return(s,t)=>{const r=Nt("b-spinner");return o(),i("div",Et,[D.value?_.value?(o(),i("div",Mt,[z(r,{small:"",class:"mb-2"}),t[6]||(t[6]=e("div",null,"Loading your board…",-1))])):l.value?(o(),i(I,{key:2},[e("div",qt,[t[7]||(t[7]=e("span",{class:"fb-eyebrow text-uppercase small fw-semibold"},"Family Board",-1)),e("span",{class:st(["ms-auto fb-save small d-flex align-items-center gap-1",`fb-save--${a.value}`])},[a.value==="saving"?(o(),i("i",Yt)):a.value==="saved"?(o(),i("i",jt)):a.value==="error"?(o(),i("i",zt)):k("",!0),C(" "+p(kt.value),1)],2)]),f.value?(o(),i("div",Jt,p(f.value),1)):k("",!0),e("div",Qt,[(o(!0),i(I,null,V(l.value.columns,(n,b)=>(o(),i("section",{key:n.id,class:"fb-col"},[e("header",Gt,[S(e("input",{"onUpdate:modelValue":d=>n.title=d,class:"fb-col__title","aria-label":"List name",maxlength:"60"},null,8,Ht),[[w,n.title]]),e("span",Wt,p(n.cards.length),1),e("button",{type:"button",class:"fb-icon-btn","aria-label":"Delete list",onClick:d=>It(b)},[...t[8]||(t[8]=[e("i",{class:"bi bi-trash","aria-hidden":"true"},null,-1)])],8,Xt)]),e("div",Zt,[(o(!0),i(I,null,V(n.cards,(d,et)=>(o(),i("article",{key:d.id,class:"fb-card",tabindex:"0",role:"button",onClick:Y=>T.value=d.id,onKeydown:$t(Y=>T.value=d.id,["enter"])},[e("div",ee,p(d.title||"Untitled"),1),d.notes?(o(),i("div",se,p(d.notes),1)):k("",!0),e("div",ne,[d.linkedItemIds.length?(o(),i("span",le,[t[9]||(t[9]=e("i",{class:"bi bi-link-45deg","aria-hidden":"true"},null,-1)),C(" "+p(d.linkedItemIds.length),1)])):k("",!0),d.log.length?(o(),i("span",ae,[t[10]||(t[10]=e("i",{class:"bi bi-journal-text","aria-hidden":"true"},null,-1)),C(" "+p(d.log.length),1)])):k("",!0),e("div",{class:"ms-auto d-flex gap-1",onClick:t[0]||(t[0]=R(()=>{},["stop"]))},[e("button",{type:"button",class:"fb-icon-btn",disabled:b===0,"aria-label":"Move to previous list",onClick:Y=>Z(b,et,-1)},[...t[11]||(t[11]=[e("i",{class:"bi bi-chevron-left","aria-hidden":"true"},null,-1)])],8,ie),e("button",{type:"button",class:"fb-icon-btn",disabled:b===l.value.columns.length-1,"aria-label":"Move to next list",onClick:Y=>Z(b,et,1)},[...t[12]||(t[12]=[e("i",{class:"bi bi-chevron-right","aria-hidden":"true"},null,-1)])],8,oe)])])],40,te))),128)),n.cards.length?k("",!0):(o(),i("p",re,"No cards yet"))]),e("form",{class:"fb-add mt-2",onSubmit:R(d=>ht(b),["prevent"])},[S(e("input",{"onUpdate:modelValue":d=>u[n.id]=d,class:"form-control form-control-sm",placeholder:"Add a card…","aria-label":"New card title"},null,8,ue),[[w,u[n.id]]]),e("button",{type:"submit",class:"btn btn-sm btn-primary",disabled:!(u[n.id]||"").trim(),"aria-label":"Add card"},[...t[13]||(t[13]=[e("i",{class:"bi bi-plus-lg","aria-hidden":"true"},null,-1)])],8,ce)],40,de)]))),128)),e("button",{type:"button",class:"fb-addcol",onClick:xt},[...t[14]||(t[14]=[e("i",{class:"bi bi-plus-lg","aria-hidden":"true"},null,-1),C(" Add list ",-1)])])])],64)):k("",!0):(o(),i("div",Kt,[...t[5]||(t[5]=[e("i",{class:"bi bi-kanban fb-state__icon","aria-hidden":"true"},null,-1),e("div",{class:"fw-semibold mb-1"},"Sign in to use Family Board",-1),e("div",{class:"small"}
1,"Your board is private and end-to-end encrypted.",-1)])])),c.value?(o(),i("div",{key:3,class:"fb-modal",onClick:R(F,["self"])},[e("div",me,[e("div",be,[S(e("input",{"onUpdate:modelValue":t[1]||(t[1]=n=>c.value.card.title=n),class:"fb-modal__title","aria-label":"Card title",onInput:tt},null,544),[[w,c.value.card.title]]),e("button",{type:"button",class:"btn-close flex-shrink-0","aria-label":"Close",onClick:F})]),t[19]||(t[19]=e("label",{class:"form-label small text-muted mb-1"},"Notes",-1)),S(e("textarea",{"onUpdate:modelValue":t[2]||(t[2]=n=>c.value.card.notes=n),class:"form-control form-control-sm mb-3",rows:"4",placeholder:"Details, links, anything…",onInput:tt},null,544),[[w,c.value.card.notes]]),t[20]||(t[20]=e("label",{class:"form-label small text-muted mb-1"},"Linked items",-1)),e("div",fe,[J(G)(c.value.card.id).length?(o(),i("div",pe,[(o(!0),i(I,null,V(J(G)(c.value.card.id),n=>(o(),i("div",{key:n._id,class:"fb-link"},[e("button",{type:"button",class:"fb-link__main",onClick:b=>bt(n._id)},[z(nt,{item:n,width:34,height:34,class:"rounded flex-shrink-0"},null,8,["item"]),e("span",_e,[e("span",ke,p(n.name||n._id),1),e("span",ye,p(W(n)),1)]),t[15]||(t[15]=e("i",{class:"bi bi-box-arrow-up-right text-muted flex-shrink-0","aria-hidden":"true"},null,-1))],8,ve),e("button",{type:"button",class:"fb-icon-btn flex-shrink-0","aria-label":"Unlink item",onClick:b=>_t(n._id)},[...t[16]||(t[16]=[e("i",{class:"bi bi-x-lg","aria-hidden":"true"},null,-1)])],8,ge)]))),128))])):c.value.card.linkedItemIds.length&&J(mt)(c.value.card.id)?(o(),i("div",he," Loading… ")):k("",!0),N.value?(o(),i("div",xe,[e("div",Ie,[S(e("input",{"onUpdate:modelValue":t[3]||(t[3]=n=>y.value=n),class:"form-control form-control-sm",placeholder:"Search your library…","aria-label":"Search library"},null,512),[[w,y.value]]),e("button",{type:"button",class:"btn-close flex-shrink-0","aria-label":"Close picker",onClick:pt})]),K.value?(o(),i("div",Ce,"Searching…")):U.value.length?(o(),i("ul",Se,[(o(!0),i(I,null,V(U.value,n=>(o(),i("li",{key:n._id},[e("button",{type:"button",class:"fb-picker__item",disabled:M(n._id),onClick:b=>vt(n)},[z(nt,{item:n,width:30,height:30,class:"rounded flex-shrink-0"},null,8,["item"]),e("span",Ae,[e("span",Te,p(n.name||n._id),1),e("span",De,p(W(n)),1)]),e("i",{class:st([M(n._id)?"bi bi-check2 text-success":"bi bi-plus-lg","flex-shrink-0"]),"aria-hidden":"true"},null,2)],8,we)]))),128))])):(o(),i("div",Ne,p(y.value.trim()?"No matching items.":"Your library is empty."),1))])):(o(),i("button",{key:2,type:"button",class:"btn btn-sm btn-outline-secondary",onClick:ft},[...t[17]||(t[17]=[e("i",{class:"bi bi-link-45deg me-1","aria-hidden":"true"},null,-1),C("Link an item ",-1)])]))]),t[21]||(t[21]=e("label",{class:"form-label small text-muted mb-1"},"Log",-1)),e("form",{class:"fb-add mb-2",onSubmit:R(Ct,["prevent"])},[S(e("input",{"onUpdate:modelValue":t[4]||(t[4]=n=>g.value=n),class:"form-control form-control-sm",placeholder:"Add a log entry…","aria-label":"New log entry"},null,512),[[w,g.value]]),e("button",{type:"submit",class:"btn btn-sm btn-outline-primary",disabled:!g.value.trim()},"Add",8,$e)],32),c.value.card.log.length?(o(),i("ul",Be,[(o(!0),i(I,null,V(c.value.card.log,n=>(o(),i("li",{key:n.id,class:"fb-log__item"},[e("div",Le,p(n.text),1),e("div",Ve,p(wt(n.at)),1)]))),128))])):(o(),i("div",Ue,"No log entries yet.")),e("div",{class:"d-flex align-items-center"},[e("button",{type:"button",class:"btn btn-sm btn-outline-danger",onClick:St},[...t[18]||(t[18]=[e("i",{class:"bi bi-trash me-1","aria-hidden":"true"},null,-1),C("Delete ",-1)])]),e("button",{type:"button",class:"btn btn-sm btn-primary ms-auto",onClick:F},"Done")])])])):k("",!0)])}}}),ns=Vt(Oe,[["__scopeId","data-v-5fd62ab8"]]);export{ns as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.