PageSourceSearch

https://kindredly.ai/js/StandaloneFamilyBoardAppCXRM9fmz.js

js kindredly.ai collected 2026-10-02 01:13:31 UTC 15,278 bytes, 1 lines download raw bytes

1import{d as At,v,a1 as Tt,c as L,i as j,P as Dt,a4 as Nt,b as a,o,z as k,e,j as z,F as I,n as st,k as S,l as p,q as U,y as C,a7 as w,U as $t,S as R,u as J,N as Bt}from"./vue-runtimeBHGad_ZB.js";import{t as E,l as Lt,_ as Ut}from"./chunkReloadRecoveryrjuMb-b8.js";import{I as nt}from"./ItemImageB_r-DJOg.js";import{u as Vt}from"./useTaskLinkedItemPreviewsDSy5QZAl.js";import{r as Ft}from"./OperationQueueKzEpmh-u.js";import"./cjs-helpersC4iS2aBk.js";import"./bootstrap-vue-nextDXY4qsO1.js";import"./dexie2jmnBxhj.js";import"./itemImageSourcesCubmTdva.js";import"./extraction.pure.utilsDQPW8yIh.js";import"./TIIconDefaultBy4qT9Q2.js";import"./item.typesx7Q7rrX9.js";import"./imageRenditionsYS3BoGkH.js";import"./refresh.storeCM69jM7x.js";import"./file_utilsBvAXo0vA.js";import"./item-name.utilsBH3paGZr.js";import"./agentParentalGrantCz4Xs1Ac.js";import"./trackCl4T-c2s.js";import"./content.typesyje91KzF.js";import"./constantsDW26WJ6H.js";import"./url.utils3SlYVg-c.js";const at=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 Ot(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:at,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(i=>({id:String((i==null?void 0:i.id)||A("card")),title:String((i==null?void 0:i.title)??""),notes:String((i==null?void 0:i.notes)??""),log:Array.isArray(i==null?void 0:i.log)?i.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(i==null?void 0:i.linkedItemIds)?Array.from(new Set(i.linkedItemIds.map(u=>String(u||"").trim()).filter(Boolean))):[],createdAt:String((i==null?void 0:i.createdAt)||l),updatedAt:String((i==null?void 0:i.updatedAt)||l)})):[]}));return{version:at,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 it(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"},ie={key:1,class:"fb-chip small text-muted"},ae=["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"},Se={key:0,class:"small text-muted px-1 py-2"},Ce={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"},Ue={class:"fb-log__time small text-muted"},Ve={key:1,class:"text-muted small mb-3"},Fe=At({__name:"StandaloneFamilyBoardApp",setup(m){const l=v(null),_=v(!1),f=v(""),i=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}=Vt({tasks:ct,enabled:L(()=>!!D.value)}
1),N=v(!1),y=v(""),V=v([]),K=v(!1);let $=null,F=0;async function H(){var r;const s=y.value.trim(),t=++F;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!==F)return;V.value=Ft(n,60,!1)}catch{t===F&&(V.value=[])}finally{t===F&&(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(i.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))}async function X(){if(h&&(clearTimeout(h),h=null),!(!B||!l.value)){B=!1,i.value="saving";try{await it(l.value),i.value="saved"}catch{i.value="error",B=!0}}}j(l,yt,{deep:!0});async function gt(){if(q=!1,f.value="",i.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 it(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(Ot(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 St(){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 Ct(){const s=c.value,t=l.value;!s||!t||window.confirm("Delete this card?")&&(t.columns[s.ci].cards.splice(s.idx,1),O())}function O(){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(),a("div",Et,[D.value?_.value?(o(),a("div",Mt,[z(r,{small:"",class:"mb-2"}),t[6]||(t[6]=e("div",null,"Loading your board…",-1))])):l.value?(o(),a(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--${i.value}`])},[i.value==="saving"?(o(),a("i",Yt)):i.value==="saved"?(o(),a("i",jt)):i.value==="error"?(o(),a("i",zt)):k("",!0),S(" "+p(kt.value),1)],2)]),f.value?(o(),a("div",Jt,p(f.value),1)):k("",!0),e("div",Qt,[(o(!0),a(I,null,U(l.value.columns,(n,b)=>(o(),a("section",{key:n.id,class:"fb-col"},[e("header",Gt,[C(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),a(I,null,U(n.cards,(d,et)=>(o(),a("article",{key:d.id,class:"fb-card",tabindex:"0",role:"button",onClick:Y=>
1T.value=d.id,onKeydown:$t(Y=>T.value=d.id,["enter"])},[e("div",ee,p(d.title||"Untitled"),1),d.notes?(o(),a("div",se,p(d.notes),1)):k("",!0),e("div",ne,[d.linkedItemIds.length?(o(),a("span",le,[t[9]||(t[9]=e("i",{class:"bi bi-link-45deg","aria-hidden":"true"},null,-1)),S(" "+p(d.linkedItemIds.length),1)])):k("",!0),d.log.length?(o(),a("span",ie,[t[10]||(t[10]=e("i",{class:"bi bi-journal-text","aria-hidden":"true"},null,-1)),S(" "+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,ae),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(),a("p",re,"No cards yet"))]),e("form",{class:"fb-add mt-2",onSubmit:R(d=>ht(b),["prevent"])},[C(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),S(" Add list ",-1)])])])],64)):k("",!0):(o(),a("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"},"Your board is private and end-to-end encrypted.",-1)])])),c.value?(o(),a("div",{key:3,class:"fb-modal",onClick:R(O,["self"])},[e("div",me,[e("div",be,[C(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:O})]),t[19]||(t[19]=e("label",{class:"form-label small text-muted mb-1"},"Notes",-1)),C(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(),a("div",pe,[(o(!0),a(I,null,U(J(G)(c.value.card.id),n=>(o(),a("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(),a("div",he," Loading… ")):k("",!0),N.value?(o(),a("div",xe,[e("div",Ie,[C(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(),a("div",Se,"Searching…")):V.value.length?(o(),a("ul",Ce,[(o(!0),a(I,null,U(V.value,n=>(o(),a("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(),a("div",Ne,p(y.value.trim()?"No matching items.":"Your library is empty."),1))])):(o(),a("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),S("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(St,["prevent"])},[C(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(),a("ul",Be,[(o(!0),a(I,null,U(c.value.card.log,n=>(o(),a("li",{key:n.id,class:"fb-log__item"},[e("div",Le,p(n.text),1),e("div",Ue,p(wt(n.at)),1)]))),128))])):(o(),a("div",Ve,"No log entries yet.")),e("div",{class:"d-flex align-items-center"},[e("button",{type:"button",class:"btn btn-sm btn-outline-danger",onClick:Ct},[...t[18]||(t[18]=[e("i",{class:"bi bi-trash me-1","aria-hidden":"true"},null,-1),S("Delete ",-1)])]),e("button",{type:"button",class:"btn btn-sm btn-primary ms-auto",onClick:O},"Done")])])])):k("",!0)])}}}),ls=Ut(Fe,[["__scopeId","data-v-5fd62ab8"]]);export{ls 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.