ocean-brain 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/server/client/dist/assets/ArrowClockwise.es-BwtKWcmj.js +1 -0
- package/server/client/dist/assets/{ArrowRight.es-nBJws3ws.js → ArrowRight.es-E09Lfefr.js} +1 -1
- package/server/client/dist/assets/{AuxiliaryPanelHeader-BN_2axQu.js → AuxiliaryPanelHeader-Bys98BJJ.js} +1 -1
- package/server/client/dist/assets/Calendar-BOhJYi8K.js +25 -0
- package/server/client/dist/assets/Callout-CAH1ua9B.js +1 -0
- package/server/client/dist/assets/{CaretUp.es-DDbqKn78.js → CaretUp.es-DSWjIa-J.js} +1 -1
- package/server/client/dist/assets/{CheckCircle.es-CyY9aLBF.js → CheckCircle.es-Cou6rItm.js} +1 -1
- package/server/client/dist/assets/{Copy.es-BwX4tEoU.js → Copy.es-ftEldGIL.js} +1 -1
- package/server/client/dist/assets/{File.es-DeTgvUnI.js → File.es-DlKAX1uO.js} +1 -1
- package/server/client/dist/assets/{FileText.es-C-bpw8dQ.js → FileText.es-D6JM_MqM.js} +1 -1
- package/server/client/dist/assets/{FlowArrow.es-CKcMBOmX.js → FlowArrow.es-BRWXqf9A.js} +1 -1
- package/server/client/dist/assets/{Graph-BNoSRJP3.js → Graph-BaqGi3M7.js} +1 -1
- package/server/client/dist/assets/{Graph-DYYxNAWn.js → Graph-L-d0cdMk.js} +1 -1
- package/server/client/dist/assets/{Image.es-d4jWnijM.js → Image.es-Bh2mTNtr.js} +1 -1
- package/server/client/dist/assets/{Info.es-DVzN2joA.js → Info.es-Bwz4CSvS.js} +1 -1
- package/server/client/dist/assets/Integration-C-rva2X9.js +1 -0
- package/server/client/dist/assets/{LinkSimple.es-BD4aGTc3.js → LinkSimple.es-iJvLf-MB.js} +1 -1
- package/server/client/dist/assets/{Note-FL31jb2U.js → Note-OO_uh2a7.js} +4 -4
- package/server/client/dist/assets/{NotePropertiesPanel-os22Ppnu.js → NotePropertiesPanel-BFWjxL_w.js} +1 -1
- package/server/client/dist/assets/{Plus.es-Cl8zOOZa.js → Plus.es-Dmb3oijD.js} +1 -1
- package/server/client/dist/assets/Reminders-CtpFtvu6.js +1 -0
- package/server/client/dist/assets/{Search-CPPTW2PO.js → Search-t48pkUg-.js} +2 -2
- package/server/client/dist/assets/{SurfaceCard-jL2qzrzF.js → SurfaceCard-zdJ8k1o0.js} +1 -1
- package/server/client/dist/assets/{Tag-3DbGmuxa.js → Tag-BL2h3ZaX.js} +1 -1
- package/server/client/dist/assets/TagNotes-BpRTCEBf.js +1 -0
- package/server/client/dist/assets/{Trash.es-fxukjAO6.js → Trash.es-DFnO8iF5.js} +1 -1
- package/server/client/dist/assets/{ViewChip-CVe_HNyd.js → ViewChip-BdPhSEvG.js} +1 -1
- package/server/client/dist/assets/Views-BoO6vgnF.js +1 -0
- package/server/client/dist/assets/WarningCircle.es-BAvgGuQK.js +1 -0
- package/server/client/dist/assets/app-OGsLwSqJ.js +151 -0
- package/server/client/dist/assets/app-yYMsgUrz.css +1 -0
- package/server/client/dist/assets/{calendar-data-BQ24n348.js → calendar-data-CwVF7Pz3.js} +1 -1
- package/server/client/dist/assets/{image.api-CyIIEGkG.js → image.api-CHuhmq_G.js} +1 -1
- package/server/client/dist/assets/index-CuCzOHJ6.js +1 -0
- package/server/client/dist/assets/integrations-B5SIEnG_.js +1 -0
- package/server/client/dist/assets/{manage-image-DXedfr7U.js → manage-image-Kd-7IGfB.js} +1 -1
- package/server/client/dist/assets/{manage-image-detail-DmifOPNU.js → manage-image-detail-HU0QLP-t.js} +1 -1
- package/server/client/dist/assets/mcp-BQ418pyx.js +5 -0
- package/server/client/dist/assets/{mcp-admin-adapter-CmKsg1vd.js → mcp-admin-adapter-CUakQ_Xm.js} +1 -1
- package/server/client/dist/assets/{note-ui-DRnAnwKv.js → note-ui-CRcP5BjO.js} +1 -1
- package/server/client/dist/assets/{placeholder-G6iEBbDy.js → placeholder-D7JKnpuh.js} +1 -1
- package/server/client/dist/assets/{properties-BPobx_Qk.js → properties-CtagYHMr.js} +1 -1
- package/server/client/dist/assets/route-preload.js +2 -2
- package/server/client/dist/assets/search-B5tCkhwj.js +1 -0
- package/server/client/dist/assets/{search-admin-adapter-7sTcWTmv.js → search-admin-adapter-Be9xSY88.js} +1 -1
- package/server/client/dist/assets/{tag.api-kKZl04yY.js → tag.api-DGfi8hWL.js} +1 -1
- package/server/client/dist/assets/{time-BwwQGbK-.js → time-Kh6oav5R.js} +9 -9
- package/server/client/dist/assets/{trash-Cepvi7G8.js → trash-Di2BWyUO.js} +1 -1
- package/server/client/dist/assets/{useNoteMutate-D-mZKXjl.js → useNoteMutate-BQj6jHhV.js} +1 -1
- package/server/client/dist/assets/{useReminderMutate-Cexk1ydX.js → useReminderMutate-jubqwSD9.js} +1 -1
- package/server/client/dist/index.html +5 -5
- package/server/dist/app.js +9 -1
- package/server/dist/features/app-gateway/access.js +73 -0
- package/server/dist/features/app-gateway/database.js +20 -0
- package/server/dist/features/app-gateway/gateway.js +208 -0
- package/server/dist/features/integration/access-events.js +17 -0
- package/server/dist/features/integration/manifest.js +31 -2
- package/server/dist/features/integration/note-sync.js +156 -0
- package/server/dist/features/integration/service.js +80 -7
- package/server/dist/features/integration/status-report.js +22 -0
- package/server/dist/features/note/graphql/note.mutation.resolver.js +20 -12
- package/server/dist/features/note/graphql/note.query.resolver.js +4 -1
- package/server/dist/features/note/services/change-events.js +26 -0
- package/server/dist/features/search/search-manager.js +4 -7
- package/server/dist/modules/server-events.js +3 -0
- package/server/dist/routes/apps.js +163 -0
- package/server/dist/routes/index.js +2 -0
- package/server/dist/routes/integrations.js +21 -1
- package/server/prisma/migrations/20260919090000_0022_integration_proxy_url/migration.sql +2 -0
- package/server/prisma/schema.prisma +2 -0
- package/server/client/dist/assets/Calendar-vA4Xa4Qr.js +0 -25
- package/server/client/dist/assets/Callout-Bo2P960P.js +0 -1
- package/server/client/dist/assets/Integration-gDDtIJYJ.js +0 -1
- package/server/client/dist/assets/Reminders-Dt2JuGci.js +0 -1
- package/server/client/dist/assets/TagNotes-DLwRF8pT.js +0 -1
- package/server/client/dist/assets/Views-8ghLRax7.js +0 -1
- package/server/client/dist/assets/app-Bcl0U7r9.css +0 -1
- package/server/client/dist/assets/app-DzChh-V0.js +0 -151
- package/server/client/dist/assets/index-Iy_BgP1R.js +0 -1
- package/server/client/dist/assets/integrations-LOdTs1T6.js +0 -1
- package/server/client/dist/assets/mcp-d8IzsoRz.js +0 -5
- package/server/client/dist/assets/search-DanMKCC8.js +0 -1
- package/server/dist/features/search/note-change.js +0 -16
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-BfUQM5vF.js","assets/preload-helper-BXl3LOEh.js","assets/floating-ui.react-dom-BWTnA00G.js","assets/transform-BUB79_za.js","assets/katex-DywYRkvg.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as i,j as a}from"./floating-ui.react-dom-BWTnA00G.js";import{at as Zn,A as Ot,T as S,i as rt,m as Kn,q as D,M as O,B as M,au as Yn,av as Qn,c as U,O as Bt,N as Ft,W as qn,e as _e,u as st,aw as Gn,ax as Jn,ay as Xn,K as er,s as tr,az as nr,a2 as Ht,ap as It,aA as Ge,aB as rr,X as sr,aq as ar,ar as or,aC as ir,Q as at,P as ot,aD as it,h as cr,l as ce,D as lr}from"./time-BwwQGbK-.js";import{M as Pe,h as $t,m as dr,a as We,b as ur,d as G,s as fr,l as Ut,o as pr,p as zt,k as Vt,q as mr,r as mt,e as hr}from"./useNoteMutate-D-mZKXjl.js";import{m as gr,C as ht}from"./Callout-Bo2P960P.js";import{J as Wt,g as xr,A as Zt,S as yr,i as br,U as gt,F as vr,N as wr}from"./NotePropertiesPanel-os22Ppnu.js";import{c as Cr}from"./Info.es-DVzN2joA.js";import{N as Oe,T as Nr,a as Sr}from"./url-Bp8sXMb4.js";import{S as Er}from"./SurfaceCard-jL2qzrzF.js";import{b as Ar,c as Rr,u as kr,R as jr}from"./useReminderMutate-Cexk1ydX.js";import{n as Tr}from"./Plus.es-Cl8zOOZa.js";import{h as ct,m as Mr,L as Kt,Z as Yt,M as Dr,K as Lr,a as _r}from"./note-ui-DRnAnwKv.js";import{u as Pr}from"./image.api-CyIIEGkG.js";import{L as Or,t as xt,q as Br,B as Ce,G as Fr,y as yt,z as Hr}from"./note-core-DRBsBf9H.js";import{s as Qt}from"./FlowArrow.es-CKcMBOmX.js";import{_ as Je}from"./preload-helper-BXl3LOEh.js";import{s as Ir}from"./Copy.es-BwX4tEoU.js";import{A as $r}from"./AuxiliaryPanelHeader-BN_2axQu.js";import{f as Ur,c as zr}from"./tag.api-kKZl04yY.js";import{cn as qt,a as Vr,P as Wr,D as je,b as Ze,co as bt}from"./note-runtime-ztZvXRIu.js";import{s as Zr}from"./File.es-DeTgvUnI.js";import{p as Kr}from"./LinkSimple.es-BD4aGTc3.js";function Yr(e,n){if(e===void 0)return{shouldBlockFn:()=>!0,withResolver:!1};if("shouldBlockFn"in e)return e;if(typeof e=="function")return{shouldBlockFn:async()=>await e(),enableBeforeUnload:!0,withResolver:!1};const t=!!(e.condition??!0),s=e.blockerFn;return{shouldBlockFn:async()=>t&&s!==void 0?await s():t,enableBeforeUnload:t,withResolver:s===void 0}}function Qr(e,n){const{shouldBlockFn:t,enableBeforeUnload:s=!0,disabled:r=!1,withResolver:o=!1}=Yr(e),c=Zn(),{history:l}=c,[u,d]=i.useState({status:"idle",current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0});return i.useEffect(()=>{const m=async f=>{function g(k){const w=c.parseLocation(k),x=c.getMatchedRoutes(w.pathname);return x.foundRoute===void 0?{routeId:"__notFound__",fullPath:w.pathname,pathname:w.pathname,params:x.routeParams,search:c.options.parseSearch(k.search)}:{routeId:x.foundRoute.id,fullPath:x.foundRoute.fullPath,pathname:w.pathname,params:x.routeParams,search:c.options.parseSearch(k.search)}}const p=g(f.currentLocation),h=g(f.nextLocation);if(p.routeId==="__notFound__"&&h.routeId!=="__notFound__")return!1;const v=await t({action:f.action,current:p,next:h});if(!o)return v;if(!v)return!1;const A=await new Promise(k=>{d({status:"blocked",current:p,next:h,action:f.action,proceed:()=>k(!1),reset:()=>k(!0)})});return d({status:"idle",current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0}),A};return r?void 0:l.block({blockerFn:m,enableBeforeUnload:s})},[t,s,r,o,l,c]),u}const qr=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M212,40a12,12,0,0,1-12,12H170.71A20,20,0,0,0,151,68.42L142.38,116H184a12,12,0,0,1,0,24H138l-9.44,51.87A44,44,0,0,1,85.29,228H56a12,12,0,0,1,0-24H85.29A20,20,0,0,0,105,187.58L113.62,140H72a12,12,0,0,1,0-24h46l9.44-51.87A44,44,0,0,1,170.71,28H200A12,12,0,0,1,212,40Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,40V200a16,16,0,0,1-16,16H56V56A16,16,0,0,1,72,40Z",opacity:"0.2"}),i.createElement("path",{d:"M208,40a8,8,0,0,1-8,8H170.71a24,24,0,0,0-23.62,19.71L137.59,120H184a8,8,0,0,1,0,16H134.68l-10,55.16A40,40,0,0,1,85.29,224H56a8,8,0,0,1,0-16H85.29a24,24,0,0,0,23.62-19.71l9.5-52.29H72a8,8,0,0,1,0-16h49.32l10-55.16A40,40,0,0,1,170.71,32H200A8,8,0,0,1,208,40Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM176,72H159.92a16,16,0,0,0-15.73,13l-6.55,35H168a8,8,0,0,1,0,16H134.64l-7.11,37.9A32,32,0,0,1,96.08,200H80a8,8,0,0,1,0-16H96.08A16,16,0,0,0,111.81,171L118.36,136H88a8,8,0,0,1,0-16h33.36l7.11-37.9A32,32,0,0,1,159.92,56H176a8,8,0,0,1,0,16Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M206,40a6,6,0,0,1-6,6H170.71a26,26,0,0,0-25.58,21.35L135.19,122H184a6,6,0,0,1,0,12H133l-10.33,56.8A38,38,0,0,1,85.29,222H56a6,6,0,0,1,0-12H85.29a26,26,0,0,0,25.58-21.35L120.81,134H72a6,6,0,0,1,0-12h51l10.33-56.8A38,38,0,0,1,170.71,34H200A6,6,0,0,1,206,40Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,40a8,8,0,0,1-8,8H170.71a24,24,0,0,0-23.62,19.71L137.59,120H184a8,8,0,0,1,0,16H134.68l-10,55.16A40,40,0,0,1,85.29,224H56a8,8,0,0,1,0-16H85.29a24,24,0,0,0,23.62-19.71l9.5-52.29H72a8,8,0,0,1,0-16h49.32l10-55.16A40,40,0,0,1,170.71,32H200A8,8,0,0,1,208,40Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M204,40a4,4,0,0,1-4,4H170.71a28,28,0,0,0-27.55,23l-10.37,57H184a4,4,0,0,1,0,8H131.34l-10.63,58.44A36,36,0,0,1,85.29,220H56a4,4,0,0,1,0-8H85.29a28,28,0,0,0,27.55-23l10.37-57H72a4,4,0,0,1,0-8h52.66l10.63-58.44A36,36,0,0,1,170.71,36H200A4,4,0,0,1,204,40Z"}))]]),Gr=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M230.15,70.54,185.46,25.86a20,20,0,0,0-28.28,0L33.86,149.17A19.86,19.86,0,0,0,28,163.31V208a20,20,0,0,0,20,20H216a12,12,0,0,0,0-24H125L230.15,98.83A20,20,0,0,0,230.15,70.54ZM136,81l11,11L76,163,65,152ZM52,204V173l15.52,15.51h0L83,204Zm52-13L93,180l71-71,11,11Zm88-88L153,64l18.34-18.34,39,39Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M221.66,90.34,192,120,136,64l29.66-29.66a8,8,0,0,1,11.31,0L221.66,79A8,8,0,0,1,221.66,90.34Z",opacity:"0.2"}),i.createElement("path",{d:"M227.32,73.37,182.63,28.69a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H216a8,8,0,0,0,0-16H115.32l112-112A16,16,0,0,0,227.32,73.37ZM79.32,188,164,103.31,180.69,120,96,204.69ZM68,176.69,51.31,160,136,75.31,152.69,92Zm-20,2.62L76.69,208H48Zm144-70.62L147.32,64l24-24L216,84.69Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M227.32,73.37,182.63,28.69a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H216a8,8,0,0,0,0-16H115.32l112-112A16,16,0,0,0,227.32,73.37ZM79.32,188l90.34-90.34,16.69,16.68L96,204.69Zm79-101.66h0L68,176.69,51.31,160l90.35-90.34ZM48,179.31,76.69,208H48Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M225.91,74.79,181.22,30.1a14,14,0,0,0-19.8,0L38.1,153.41a13.94,13.94,0,0,0-4.1,9.9V208a14,14,0,0,0,14,14H216a6,6,0,0,0,0-12H110.49L225.91,94.59A14,14,0,0,0,225.91,74.79ZM76.49,188,164,100.48,183.52,120,96,207.51ZM68,179.52,48.49,160,136,72.49,155.52,92ZM46,208V174.48L81.52,210H48A2,2,0,0,1,46,208ZM217.42,86.1,192,111.52,144.49,64,169.9,38.59a2,2,0,0,1,2.83,0l44.69,44.68A2,2,0,0,1,217.42,86.1Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M227.32,73.37,182.63,28.69a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H216a8,8,0,0,0,0-16H115.32l112-112A16,16,0,0,0,227.32,73.37ZM136,75.31,152.69,92,68,176.69,51.31,160ZM48,208V179.31L76.69,208Zm48-3.31L79.32,188,164,103.31,180.69,120Zm96-96L147.32,64l24-24L216,84.69Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224.49,76.2,179.8,31.51a12,12,0,0,0-17,0L39.51,154.83A12,12,0,0,0,36,163.31V208a12,12,0,0,0,12,12H216a4,4,0,0,0,0-8H105.66L224.49,93.17A12,12,0,0,0,224.49,76.2ZM73.66,188,164,97.66,186.35,120,96,210.34ZM68,182.34,45.66,160,136,69.66,158.35,92ZM44,208V169.66l21.17,21.17h0L86.34,212H48A4,4,0,0,1,44,208ZM218.83,87.51,192,114.34,141.66,64l26.83-26.83a4,4,0,0,1,5.66,0l44.68,44.69A4,4,0,0,1,218.83,87.51Z"}))]]),Gt=i.forwardRef((e,n)=>i.createElement(Ot,{ref:n,...e,weights:qr}));Gt.displayName="FunctionIcon";const Jt=Gt,Xt=i.forwardRef((e,n)=>i.createElement(Ot,{ref:n,...e,weights:Gr}));Xt.displayName="PencilLineIcon";const Jr=Xt;function Xr({title:e,description:n,selected:t=!1,onClick:s,children:r}){return a.jsxs("button",{type:"button","aria-pressed":t,className:`focus-ring-soft flex w-full items-start justify-between gap-3 p-3 text-left transition-colors sm:p-4 ${t?"surface-floating bg-elevated":"rounded-[14px] border border-border-subtle bg-transparent hover:border-border-secondary hover:bg-hover-subtle"}`,onClick:s,children:[a.jsxs("div",{className:"min-w-0",children:[a.jsx(S,{as:"div",variant:"body",weight:"semibold",tone:t?"default":"secondary",children:e}),a.jsx(S,{as:"div",variant:"meta",weight:"medium",tone:t?"secondary":"tertiary",className:"mt-1",children:n})]}),r?a.jsx("div",{className:"shrink-0",children:r}):null]})}const es=e=>{const{data:n}=rt({queryKey:D.notes.backReferences(e.noteId),async queryFn(){const t=await Kn(e.noteId);if(t.type==="error")throw t;return t.backReferences}});return e.render(n)};function ts({noteId:e,searchParams:n,render:t}){const{data:s}=rt({queryKey:e?D.reminders.note(e,n):D.reminders.upcoming(n),queryFn:async()=>{if(e){const o=await Ar(e,n);if(o.type==="error")throw o;return o.noteReminders}const r=await Rr(n);if(r.type==="error")throw r;return r.upcomingReminders}});return a.jsx(a.Fragment,{children:t(s)})}const ns=[{value:"narrow",label:"Narrow",description:"Optimized for reading long-form content"},{value:"wide",label:"Wide",description:"Balanced width suitable for most content"},{value:"full",label:"Full Width",description:"Maximize screen space utilization"}];function rs({isOpen:e,onClose:n,onSave:t,currentLayout:s="wide"}){const[r,o]=i.useState(s);i.useEffect(()=>{e&&o(s)},[e,s]);const c=()=>{t(r),n()};return a.jsxs(O,{isOpen:e,onClose:n,variant:"compact",children:[a.jsx(O.Header,{title:"Layout Settings",onClose:n}),a.jsx(O.Body,{children:a.jsx("div",{className:"flex flex-col gap-3 sm:gap-4",children:a.jsxs("div",{className:"flex flex-col gap-2",children:[a.jsx(S,{as:"div",variant:"body",weight:"semibold",tone:"secondary",children:"Note layout"}),a.jsx("div",{className:"flex flex-col gap-2",children:ns.map(l=>a.jsx(Xr,{title:l.label,description:l.description,selected:r===l.value,onClick:()=>o(l.value)},l.value))})]})})}),a.jsx(O.Footer,{children:a.jsxs(Pe,{children:[a.jsx(M,{variant:"ghost",size:"sm",onClick:n,children:"Cancel"}),a.jsx(M,{variant:"primary",size:"sm",onClick:c,children:"Apply"})]})})]})}const Ne=e=>{const n=/^\d+$/.test(e)?Number(e):Date.parse(e);return Number.isFinite(n)?n:null},De=(e,n)=>{const t=Ne(e),s=Ne(n);return t===null||s===null?e===n?0:null:t===s?0:t<s?-1:1},ss=2200;function as({status:e,savedAt:n,savedVersion:t,confirmationRevision:s}){const[r,o]=i.useState(()=>Date.now()),[c,l]=i.useState(!1);i.useEffect(()=>{if(e!=="saved")return;const p=window.setTimeout(()=>o(Date.now()),Yn(Ne(t),r));return()=>window.clearTimeout(p)},[r,t,e]),i.useEffect(()=>{if(s===0)return;l(!0);const p=window.setTimeout(()=>l(!1),ss);return()=>window.clearTimeout(p)},[s]);const u=e==="saved"&&c,d=e==="pending"?"Saving...":e==="saving"?"Saving now...":e==="error"?"Save failed. Try again.":e==="conflict"?"Save paused: changed elsewhere":`Saved ${Qn(Ne(t),r)}`,m=U("inline-flex items-center gap-2 transition-colors",e==="saved"&&!u&&"text-fg-secondary",u&&"text-accent-success",(e==="pending"||e==="saving")&&"text-fg-default",(e==="error"||e==="conflict")&&"text-fg-error"),f=U("save-progress-ring flex h-4 w-4 shrink-0 items-center justify-center rounded-full",(e==="pending"||e==="saving")&&"save-progress-ring-active",e==="saved"&&u&&"save-progress-ring-complete",(e==="error"||e==="conflict")&&"save-progress-ring-error"),g=e==="error"||e==="conflict"?a.jsx(gr,{className:"h-3.5 w-3.5",weight:"fill"}):a.jsx("span",{className:f,"aria-hidden":!0,children:a.jsx("span",{className:"h-2 w-2 rounded-full bg-elevated"})});return a.jsxs(S,{as:"span",variant:"label",weight:"medium",className:m,role:"status","aria-live":"polite",title:n,children:[g,d]})}function os({title:e,titleRef:n,isPinned:t,createdAt:s,saveStatus:r,savedAt:o,savedVersion:c,saveConfirmationRevision:l,onTitleChange:u,onCopyMarkdown:d,onDownloadDocument:m,onTogglePinned:f,onChangeLayout:g,onCloneNote:p,onRestoreVersion:h,onDelete:v,onSave:C}){return a.jsx("div",{className:"surface-floating sticky top-20 z-[1001] mb-7 px-5 pt-4 pb-3.5",children:a.jsxs("div",{className:"flex flex-col gap-3.5",children:[a.jsxs("div",{className:"flex items-start justify-between gap-5",children:[a.jsxs("div",{className:"min-w-0 flex-1 pt-0.5",children:[a.jsx(S,{as:"div",variant:"micro",weight:"semibold",tracking:"widest",transform:"uppercase",tone:"tertiary",className:"mb-1.5",children:"Thought in progress"}),a.jsx("input",{ref:n,"aria-label":"Note title",placeholder:"Title",className:"text-heading sm:text-display w-full bg-transparent font-semibold leading-[1.25] tracking-[-0.02em] outline-none",type:"text",value:e,onChange:A=>u(A.target.value)})]}),a.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[a.jsx(Bt,{button:a.jsx($t,{label:"Note actions",size:"lg"}),items:[{name:"Copy Markdown",onClick:d},{name:"Download document",onClick:m},{type:"separator",key:"export-separator"},{name:t?"Unpin":"Pin",onClick:f},{name:"Change layout",onClick:g},{type:"separator"},{name:"Clone this note",onClick:p},{name:"Restore previous version",onClick:h},{type:"separator"},{name:"Delete",onClick:v}]}),a.jsx(M,{size:"sm",variant:"subtle",isLoading:r==="saving",disabled:r==="conflict",onClick:C,children:"Save"})]})]}),a.jsxs("div",{className:"flex flex-wrap items-center gap-x-2.5 gap-y-1.5 border-t border-border-subtle/80 pt-3",children:[t&&a.jsxs(S,{as:"span",variant:"label",weight:"medium",tone:"secondary",className:"inline-flex items-center gap-1.5",children:[a.jsx(dr,{className:"h-3 w-3",weight:"fill"}),"Pinned"]}),t&&a.jsx("span",{className:"h-1 w-1 rounded-full bg-border-secondary"}),a.jsx(as,{status:r,savedAt:o,savedVersion:c,confirmationRevision:l}),a.jsx("span",{className:"h-1 w-1 rounded-full bg-border-secondary"}),a.jsxs(S,{as:"span",variant:"micro",weight:"medium",tone:"tertiary",children:["Created ",s]})]})]})})}const is="/assets/images/",cs=120,ls=100,en=/^(?:con|prn|aux|nul|com[1-9\u00b9\u00b2\u00b3]|lpt[1-9\u00b9\u00b2\u00b3])(?:\.|$)/i,tn=e=>{const n=e.codePointAt(0)??0;return n<=31||n>=127&&n<=159},nn=(e,n)=>{const t=new TextEncoder;let s=0,r="";for(const o of e){const c=t.encode(o).byteLength;if(s+c>n)break;r+=o,s+=c}return r},Xe=e=>e.replace(/^[.\s-]+|[.\s-]+$/g,""),ds=e=>{let n=Array.from(e.normalize("NFC").trim().toLowerCase(),t=>tn(t)||/[\\/:*?"<>|\s]/.test(t)?"-":t).join("").replace(/-+/g,"-").replace(/^[.-]+|[.-]+$/g,"");return en.test(n)&&(n=`note-${n}`),n=Xe(nn(n,cs)),n||"untitled-note"},Te=e=>JSON.stringify(e),Me=e=>{const n=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/--/g,"--");return Array.from(n,t=>tn(t)?`&#${t.codePointAt(0)};`:t).join("")},Le=e=>{if(!e)return;const n=Number(e);if(!Number.isFinite(n))return e;const t=new Date(n);return Number.isNaN(t.getTime())?e:t.toISOString()},lt=()=>typeof window>"u"||!window.location?.origin?"http://localhost":window.location.origin,Be=(e,n=lt())=>{try{const t=new URL(e,n);return t.origin===n&&t.pathname.startsWith(is)}catch{return!1}},rn=(e,n=lt())=>{const t=new URL(e,n);return`${t.pathname}${t.search}`},us=e=>e.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase()??"",fs=(e,n)=>{let t=e.normalize("NFC").trim().replace(/[^\p{L}\p{M}\p{N}._-]+/gu,"-").replace(/-+/g,"-");return t=Xe(t),en.test(t)&&(t=`image-${t}`),Xe(nn(t,ls))||n},ps=e=>{const n=e.lastIndexOf(".");return n<=0||n===e.length-1?{baseName:e,extension:""}:{baseName:e.slice(0,n),extension:e.slice(n)}},ms=e=>{try{return decodeURIComponent(e)}catch{return e}},hs=(e,n,t,s)=>{const o=new URL(e,lt()).pathname.split("/").filter(Boolean),c=ms(o[o.length-1]??""),l=`image-${n+1}`,{baseName:u}=ps(c||l),d=fs(u,l);let m=`${d}.${t}`,f=2;for(;s.has(m.normalize("NFC").toLowerCase());)m=`${d}-${f}.${t}`,f+=1;return s.add(m.normalize("NFC").toLowerCase()),`assets/${m}`},sn=e=>e.replace(/\\([!"#$%&'()*+,\-./:;<=>?@[\]\\^_`{|}~])/g,"$1"),an=async(e,n,t,s,r)=>{const o=s.get(n);if(o)return o;const c=await t(n,{credentials:"same-origin"});if(!c.ok)throw new Error(`Failed to fetch image asset: ${n}`);const l=xr(us(c));if(!l)throw new Error(`Image asset did not return image content: ${n}`);const u=hs(n,s.size,l,r);return e.file(u,new Uint8Array(await c.arrayBuffer())),s.set(n,u),u},gs=(e,n)=>{let t=null;for(let s=n;s<e.length;s+=1){const r=e[s];if(t){r===t&&(t=null);continue}if(r==='"'||r==="'"){t=r;continue}if(r===">")return s}return-1},xs=(e,n)=>{let t=n;for(;t<e.length;){const s=e.toLowerCase().indexOf("<img",t);if(s===-1)return-1;const r=e[s+4],o=s===0?-1:e.lastIndexOf("<",s-1),c=s===0?-1:e.lastIndexOf(">",s-1);if(o<=c&&(!r||/[\s/>]/.test(r)))return s;t=s+4}return-1},ys=(e,n,t,s)=>{let r=n;for(;r<t;){for(;r<t&&/[\s/]/.test(e[r]);)r+=1;const o=r;for(;r<t&&/[^\s=/>]/.test(e[r]);)r+=1;const c=e.slice(o,r).toLowerCase();for(;r<t&&/\s/.test(e[r]);)r+=1;if(e[r]!=="=")continue;for(r+=1;r<t&&/\s/.test(e[r]);)r+=1;const l=e[r];if(l==='"'||l==="'"){const d=r+1,m=e.indexOf(l,d);if(m===-1||m>t)return;if(r=m+1,c===s)return{end:m,start:d,value:e.slice(d,m)};continue}const u=r;for(;r<t&&/[^\s>]/.test(e[r]);)r+=1;if(c===s)return{end:r,start:u,value:e.slice(u,r)}}},on=e=>{const n=[];let t=0;for(;t<e.length;){const s=xs(e,t);if(s===-1)break;const r=gs(e,s+4);if(r===-1)break;const o=ys(e,s+4,r,"src");o&&n.push({end:r+1,source:o,start:s}),t=r+1}return n},cn=(e,n)=>{let t=e;for(const s of[...n].sort((r,o)=>o.start-r.start))t=`${t.slice(0,s.start)}${s.value}${t.slice(s.end)}`;return t},ln=(e,n)=>{let t=e;for(const s of[...n].sort((r,o)=>o.start-r.start))t=`${t.slice(0,s.start)}${s.value}${t.slice(s.end)}`;return t},dn=e=>{const n=[];let t=0;for(;t<e.length;){const s=e.indexOf("![",t);if(s===-1)break;let r=s+2,o=1;for(;r<e.length&&o>0&&e[r]!==`
|
|
2
|
+
import{r as i,j as a}from"./floating-ui.react-dom-BWTnA00G.js";import{av as Wn,C as Ot,T as S,l as rt,t as Kn,q as D,M as O,B as M,aw as Yn,ax as Qn,c as U,N as Bt,K as Ft,V as qn,e as _e,u as st,ay as Gn,az as Jn,aA as Xn,J as er,s as tr,aB as nr,a4 as Ht,Y as It,aC as Ge,aD as rr,Z as sr,as as ar,at as or,aE as ir,Q as at,P as ot,aF as it,k as cr,o as ce,F as lr}from"./time-Kh6oav5R.js";import{M as Pe,h as $t,m as dr,a as Ze,b as ur,d as G,s as fr,l as Ut,o as pr,p as zt,k as Vt,q as mr,r as mt,e as hr}from"./useNoteMutate-BQj6jHhV.js";import{m as gr}from"./WarningCircle.es-BAvgGuQK.js";import{J as Zt,g as xr,A as Wt,S as yr,i as br,U as ht,F as vr,N as wr}from"./NotePropertiesPanel-BFWjxL_w.js";import{c as Cr}from"./Info.es-Bwz4CSvS.js";import{N as Oe,T as Nr,a as Sr}from"./url-Bp8sXMb4.js";import{C as gt}from"./Callout-CAH1ua9B.js";import{S as Er}from"./SurfaceCard-zdJ8k1o0.js";import{b as Ar,c as Rr,u as kr,R as jr}from"./useReminderMutate-jubqwSD9.js";import{n as Tr}from"./Plus.es-Dmb3oijD.js";import{h as ct,m as Mr,L as Kt,Z as Yt,M as Dr,K as Lr,a as _r}from"./note-ui-CRcP5BjO.js";import{u as Pr}from"./image.api-CHuhmq_G.js";import{L as Or,t as xt,q as Br,B as Ce,G as Fr,y as yt,z as Hr}from"./note-core-DRBsBf9H.js";import{s as Qt}from"./FlowArrow.es-BRWXqf9A.js";import{_ as Je}from"./preload-helper-BXl3LOEh.js";import{s as Ir}from"./Copy.es-ftEldGIL.js";import{A as $r}from"./AuxiliaryPanelHeader-Bys98BJJ.js";import{f as Ur,c as zr}from"./tag.api-DGfi8hWL.js";import{cn as qt,a as Vr,P as Zr,D as je,b as We,co as bt}from"./note-runtime-ztZvXRIu.js";import{s as Wr}from"./File.es-DlKAX1uO.js";import{p as Kr}from"./LinkSimple.es-iJvLf-MB.js";function Yr(e,n){if(e===void 0)return{shouldBlockFn:()=>!0,withResolver:!1};if("shouldBlockFn"in e)return e;if(typeof e=="function")return{shouldBlockFn:async()=>await e(),enableBeforeUnload:!0,withResolver:!1};const t=!!(e.condition??!0),s=e.blockerFn;return{shouldBlockFn:async()=>t&&s!==void 0?await s():t,enableBeforeUnload:t,withResolver:s===void 0}}function Qr(e,n){const{shouldBlockFn:t,enableBeforeUnload:s=!0,disabled:r=!1,withResolver:o=!1}=Yr(e),c=Wn(),{history:l}=c,[u,d]=i.useState({status:"idle",current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0});return i.useEffect(()=>{const m=async f=>{function g(k){const w=c.parseLocation(k),x=c.getMatchedRoutes(w.pathname);return x.foundRoute===void 0?{routeId:"__notFound__",fullPath:w.pathname,pathname:w.pathname,params:x.routeParams,search:c.options.parseSearch(k.search)}:{routeId:x.foundRoute.id,fullPath:x.foundRoute.fullPath,pathname:w.pathname,params:x.routeParams,search:c.options.parseSearch(k.search)}}const p=g(f.currentLocation),h=g(f.nextLocation);if(p.routeId==="__notFound__"&&h.routeId!=="__notFound__")return!1;const v=await t({action:f.action,current:p,next:h});if(!o)return v;if(!v)return!1;const A=await new Promise(k=>{d({status:"blocked",current:p,next:h,action:f.action,proceed:()=>k(!1),reset:()=>k(!0)})});return d({status:"idle",current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0}),A};return r?void 0:l.block({blockerFn:m,enableBeforeUnload:s})},[t,s,r,o,l,c]),u}const qr=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M212,40a12,12,0,0,1-12,12H170.71A20,20,0,0,0,151,68.42L142.38,116H184a12,12,0,0,1,0,24H138l-9.44,51.87A44,44,0,0,1,85.29,228H56a12,12,0,0,1,0-24H85.29A20,20,0,0,0,105,187.58L113.62,140H72a12,12,0,0,1,0-24h46l9.44-51.87A44,44,0,0,1,170.71,28H200A12,12,0,0,1,212,40Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,40V200a16,16,0,0,1-16,16H56V56A16,16,0,0,1,72,40Z",opacity:"0.2"}),i.createElement("path",{d:"M208,40a8,8,0,0,1-8,8H170.71a24,24,0,0,0-23.62,19.71L137.59,120H184a8,8,0,0,1,0,16H134.68l-10,55.16A40,40,0,0,1,85.29,224H56a8,8,0,0,1,0-16H85.29a24,24,0,0,0,23.62-19.71l9.5-52.29H72a8,8,0,0,1,0-16h49.32l10-55.16A40,40,0,0,1,170.71,32H200A8,8,0,0,1,208,40Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM176,72H159.92a16,16,0,0,0-15.73,13l-6.55,35H168a8,8,0,0,1,0,16H134.64l-7.11,37.9A32,32,0,0,1,96.08,200H80a8,8,0,0,1,0-16H96.08A16,16,0,0,0,111.81,171L118.36,136H88a8,8,0,0,1,0-16h33.36l7.11-37.9A32,32,0,0,1,159.92,56H176a8,8,0,0,1,0,16Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M206,40a6,6,0,0,1-6,6H170.71a26,26,0,0,0-25.58,21.35L135.19,122H184a6,6,0,0,1,0,12H133l-10.33,56.8A38,38,0,0,1,85.29,222H56a6,6,0,0,1,0-12H85.29a26,26,0,0,0,25.58-21.35L120.81,134H72a6,6,0,0,1,0-12h51l10.33-56.8A38,38,0,0,1,170.71,34H200A6,6,0,0,1,206,40Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,40a8,8,0,0,1-8,8H170.71a24,24,0,0,0-23.62,19.71L137.59,120H184a8,8,0,0,1,0,16H134.68l-10,55.16A40,40,0,0,1,85.29,224H56a8,8,0,0,1,0-16H85.29a24,24,0,0,0,23.62-19.71l9.5-52.29H72a8,8,0,0,1,0-16h49.32l10-55.16A40,40,0,0,1,170.71,32H200A8,8,0,0,1,208,40Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M204,40a4,4,0,0,1-4,4H170.71a28,28,0,0,0-27.55,23l-10.37,57H184a4,4,0,0,1,0,8H131.34l-10.63,58.44A36,36,0,0,1,85.29,220H56a4,4,0,0,1,0-8H85.29a28,28,0,0,0,27.55-23l10.37-57H72a4,4,0,0,1,0-8h52.66l10.63-58.44A36,36,0,0,1,170.71,36H200A4,4,0,0,1,204,40Z"}))]]),Gr=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M230.15,70.54,185.46,25.86a20,20,0,0,0-28.28,0L33.86,149.17A19.86,19.86,0,0,0,28,163.31V208a20,20,0,0,0,20,20H216a12,12,0,0,0,0-24H125L230.15,98.83A20,20,0,0,0,230.15,70.54ZM136,81l11,11L76,163,65,152ZM52,204V173l15.52,15.51h0L83,204Zm52-13L93,180l71-71,11,11Zm88-88L153,64l18.34-18.34,39,39Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M221.66,90.34,192,120,136,64l29.66-29.66a8,8,0,0,1,11.31,0L221.66,79A8,8,0,0,1,221.66,90.34Z",opacity:"0.2"}),i.createElement("path",{d:"M227.32,73.37,182.63,28.69a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H216a8,8,0,0,0,0-16H115.32l112-112A16,16,0,0,0,227.32,73.37ZM79.32,188,164,103.31,180.69,120,96,204.69ZM68,176.69,51.31,160,136,75.31,152.69,92Zm-20,2.62L76.69,208H48Zm144-70.62L147.32,64l24-24L216,84.69Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M227.32,73.37,182.63,28.69a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H216a8,8,0,0,0,0-16H115.32l112-112A16,16,0,0,0,227.32,73.37ZM79.32,188l90.34-90.34,16.69,16.68L96,204.69Zm79-101.66h0L68,176.69,51.31,160l90.35-90.34ZM48,179.31,76.69,208H48Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M225.91,74.79,181.22,30.1a14,14,0,0,0-19.8,0L38.1,153.41a13.94,13.94,0,0,0-4.1,9.9V208a14,14,0,0,0,14,14H216a6,6,0,0,0,0-12H110.49L225.91,94.59A14,14,0,0,0,225.91,74.79ZM76.49,188,164,100.48,183.52,120,96,207.51ZM68,179.52,48.49,160,136,72.49,155.52,92ZM46,208V174.48L81.52,210H48A2,2,0,0,1,46,208ZM217.42,86.1,192,111.52,144.49,64,169.9,38.59a2,2,0,0,1,2.83,0l44.69,44.68A2,2,0,0,1,217.42,86.1Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M227.32,73.37,182.63,28.69a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H216a8,8,0,0,0,0-16H115.32l112-112A16,16,0,0,0,227.32,73.37ZM136,75.31,152.69,92,68,176.69,51.31,160ZM48,208V179.31L76.69,208Zm48-3.31L79.32,188,164,103.31,180.69,120Zm96-96L147.32,64l24-24L216,84.69Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224.49,76.2,179.8,31.51a12,12,0,0,0-17,0L39.51,154.83A12,12,0,0,0,36,163.31V208a12,12,0,0,0,12,12H216a4,4,0,0,0,0-8H105.66L224.49,93.17A12,12,0,0,0,224.49,76.2ZM73.66,188,164,97.66,186.35,120,96,210.34ZM68,182.34,45.66,160,136,69.66,158.35,92ZM44,208V169.66l21.17,21.17h0L86.34,212H48A4,4,0,0,1,44,208ZM218.83,87.51,192,114.34,141.66,64l26.83-26.83a4,4,0,0,1,5.66,0l44.68,44.69A4,4,0,0,1,218.83,87.51Z"}))]]),Gt=i.forwardRef((e,n)=>i.createElement(Ot,{ref:n,...e,weights:qr}));Gt.displayName="FunctionIcon";const Jt=Gt,Xt=i.forwardRef((e,n)=>i.createElement(Ot,{ref:n,...e,weights:Gr}));Xt.displayName="PencilLineIcon";const Jr=Xt;function Xr({title:e,description:n,selected:t=!1,onClick:s,children:r}){return a.jsxs("button",{type:"button","aria-pressed":t,className:`focus-ring-soft flex w-full items-start justify-between gap-3 p-3 text-left transition-colors sm:p-4 ${t?"surface-floating bg-elevated":"rounded-[14px] border border-border-subtle bg-transparent hover:border-border-secondary hover:bg-hover-subtle"}`,onClick:s,children:[a.jsxs("div",{className:"min-w-0",children:[a.jsx(S,{as:"div",variant:"body",weight:"semibold",tone:t?"default":"secondary",children:e}),a.jsx(S,{as:"div",variant:"meta",weight:"medium",tone:t?"secondary":"tertiary",className:"mt-1",children:n})]}),r?a.jsx("div",{className:"shrink-0",children:r}):null]})}const es=e=>{const{data:n}=rt({queryKey:D.notes.backReferences(e.noteId),async queryFn(){const t=await Kn(e.noteId);if(t.type==="error")throw t;return t.backReferences}});return e.render(n)};function ts({noteId:e,searchParams:n,render:t}){const{data:s}=rt({queryKey:e?D.reminders.note(e,n):D.reminders.upcoming(n),queryFn:async()=>{if(e){const o=await Ar(e,n);if(o.type==="error")throw o;return o.noteReminders}const r=await Rr(n);if(r.type==="error")throw r;return r.upcomingReminders}});return a.jsx(a.Fragment,{children:t(s)})}const ns=[{value:"narrow",label:"Narrow",description:"Optimized for reading long-form content"},{value:"wide",label:"Wide",description:"Balanced width suitable for most content"},{value:"full",label:"Full Width",description:"Maximize screen space utilization"}];function rs({isOpen:e,onClose:n,onSave:t,currentLayout:s="wide"}){const[r,o]=i.useState(s);i.useEffect(()=>{e&&o(s)},[e,s]);const c=()=>{t(r),n()};return a.jsxs(O,{isOpen:e,onClose:n,variant:"compact",children:[a.jsx(O.Header,{title:"Layout Settings",onClose:n}),a.jsx(O.Body,{children:a.jsx("div",{className:"flex flex-col gap-3 sm:gap-4",children:a.jsxs("div",{className:"flex flex-col gap-2",children:[a.jsx(S,{as:"div",variant:"body",weight:"semibold",tone:"secondary",children:"Note layout"}),a.jsx("div",{className:"flex flex-col gap-2",children:ns.map(l=>a.jsx(Xr,{title:l.label,description:l.description,selected:r===l.value,onClick:()=>o(l.value)},l.value))})]})})}),a.jsx(O.Footer,{children:a.jsxs(Pe,{children:[a.jsx(M,{variant:"ghost",size:"sm",onClick:n,children:"Cancel"}),a.jsx(M,{variant:"primary",size:"sm",onClick:c,children:"Apply"})]})})]})}const Ne=e=>{const n=/^\d+$/.test(e)?Number(e):Date.parse(e);return Number.isFinite(n)?n:null},De=(e,n)=>{const t=Ne(e),s=Ne(n);return t===null||s===null?e===n?0:null:t===s?0:t<s?-1:1},ss=2200;function as({status:e,savedAt:n,savedVersion:t,confirmationRevision:s}){const[r,o]=i.useState(()=>Date.now()),[c,l]=i.useState(!1);i.useEffect(()=>{if(e!=="saved")return;const p=window.setTimeout(()=>o(Date.now()),Yn(Ne(t),r));return()=>window.clearTimeout(p)},[r,t,e]),i.useEffect(()=>{if(s===0)return;l(!0);const p=window.setTimeout(()=>l(!1),ss);return()=>window.clearTimeout(p)},[s]);const u=e==="saved"&&c,d=e==="pending"?"Saving...":e==="saving"?"Saving now...":e==="error"?"Save failed. Try again.":e==="conflict"?"Save paused: changed elsewhere":`Saved ${Qn(Ne(t),r)}`,m=U("inline-flex items-center gap-2 transition-colors",e==="saved"&&!u&&"text-fg-secondary",u&&"text-accent-success",(e==="pending"||e==="saving")&&"text-fg-default",(e==="error"||e==="conflict")&&"text-fg-error"),f=U("save-progress-ring flex h-4 w-4 shrink-0 items-center justify-center rounded-full",(e==="pending"||e==="saving")&&"save-progress-ring-active",e==="saved"&&u&&"save-progress-ring-complete",(e==="error"||e==="conflict")&&"save-progress-ring-error"),g=e==="error"||e==="conflict"?a.jsx(gr,{className:"h-3.5 w-3.5",weight:"fill"}):a.jsx("span",{className:f,"aria-hidden":!0,children:a.jsx("span",{className:"h-2 w-2 rounded-full bg-elevated"})});return a.jsxs(S,{as:"span",variant:"label",weight:"medium",className:m,role:"status","aria-live":"polite",title:n,children:[g,d]})}function os({title:e,titleRef:n,isPinned:t,createdAt:s,saveStatus:r,savedAt:o,savedVersion:c,saveConfirmationRevision:l,onTitleChange:u,onCopyMarkdown:d,onDownloadDocument:m,onTogglePinned:f,onChangeLayout:g,onCloneNote:p,onRestoreVersion:h,onDelete:v,onSave:C}){return a.jsx("div",{className:"surface-floating sticky top-20 z-[1001] mb-7 px-5 pt-4 pb-3.5",children:a.jsxs("div",{className:"flex flex-col gap-3.5",children:[a.jsxs("div",{className:"flex items-start justify-between gap-5",children:[a.jsxs("div",{className:"min-w-0 flex-1 pt-0.5",children:[a.jsx(S,{as:"div",variant:"micro",weight:"semibold",tracking:"widest",transform:"uppercase",tone:"tertiary",className:"mb-1.5",children:"Thought in progress"}),a.jsx("input",{ref:n,"aria-label":"Note title",placeholder:"Title",className:"text-heading sm:text-display w-full bg-transparent font-semibold leading-[1.25] tracking-[-0.02em] outline-none",type:"text",value:e,onChange:A=>u(A.target.value)})]}),a.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[a.jsx(Bt,{button:a.jsx($t,{label:"Note actions",size:"lg"}),items:[{name:"Copy Markdown",onClick:d},{name:"Download document",onClick:m},{type:"separator",key:"export-separator"},{name:t?"Unpin":"Pin",onClick:f},{name:"Change layout",onClick:g},{type:"separator"},{name:"Clone this note",onClick:p},{name:"Restore previous version",onClick:h},{type:"separator"},{name:"Delete",onClick:v}]}),a.jsx(M,{size:"sm",variant:"subtle",isLoading:r==="saving",disabled:r==="conflict",onClick:C,children:"Save"})]})]}),a.jsxs("div",{className:"flex flex-wrap items-center gap-x-2.5 gap-y-1.5 border-t border-border-subtle/80 pt-3",children:[t&&a.jsxs(S,{as:"span",variant:"label",weight:"medium",tone:"secondary",className:"inline-flex items-center gap-1.5",children:[a.jsx(dr,{className:"h-3 w-3",weight:"fill"}),"Pinned"]}),t&&a.jsx("span",{className:"h-1 w-1 rounded-full bg-border-secondary"}),a.jsx(as,{status:r,savedAt:o,savedVersion:c,confirmationRevision:l}),a.jsx("span",{className:"h-1 w-1 rounded-full bg-border-secondary"}),a.jsxs(S,{as:"span",variant:"micro",weight:"medium",tone:"tertiary",children:["Created ",s]})]})]})})}const is="/assets/images/",cs=120,ls=100,en=/^(?:con|prn|aux|nul|com[1-9\u00b9\u00b2\u00b3]|lpt[1-9\u00b9\u00b2\u00b3])(?:\.|$)/i,tn=e=>{const n=e.codePointAt(0)??0;return n<=31||n>=127&&n<=159},nn=(e,n)=>{const t=new TextEncoder;let s=0,r="";for(const o of e){const c=t.encode(o).byteLength;if(s+c>n)break;r+=o,s+=c}return r},Xe=e=>e.replace(/^[.\s-]+|[.\s-]+$/g,""),ds=e=>{let n=Array.from(e.normalize("NFC").trim().toLowerCase(),t=>tn(t)||/[\\/:*?"<>|\s]/.test(t)?"-":t).join("").replace(/-+/g,"-").replace(/^[.-]+|[.-]+$/g,"");return en.test(n)&&(n=`note-${n}`),n=Xe(nn(n,cs)),n||"untitled-note"},Te=e=>JSON.stringify(e),Me=e=>{const n=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/--/g,"--");return Array.from(n,t=>tn(t)?`&#${t.codePointAt(0)};`:t).join("")},Le=e=>{if(!e)return;const n=Number(e);if(!Number.isFinite(n))return e;const t=new Date(n);return Number.isNaN(t.getTime())?e:t.toISOString()},lt=()=>typeof window>"u"||!window.location?.origin?"http://localhost":window.location.origin,Be=(e,n=lt())=>{try{const t=new URL(e,n);return t.origin===n&&t.pathname.startsWith(is)}catch{return!1}},rn=(e,n=lt())=>{const t=new URL(e,n);return`${t.pathname}${t.search}`},us=e=>e.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase()??"",fs=(e,n)=>{let t=e.normalize("NFC").trim().replace(/[^\p{L}\p{M}\p{N}._-]+/gu,"-").replace(/-+/g,"-");return t=Xe(t),en.test(t)&&(t=`image-${t}`),Xe(nn(t,ls))||n},ps=e=>{const n=e.lastIndexOf(".");return n<=0||n===e.length-1?{baseName:e,extension:""}:{baseName:e.slice(0,n),extension:e.slice(n)}},ms=e=>{try{return decodeURIComponent(e)}catch{return e}},hs=(e,n,t,s)=>{const o=new URL(e,lt()).pathname.split("/").filter(Boolean),c=ms(o[o.length-1]??""),l=`image-${n+1}`,{baseName:u}=ps(c||l),d=fs(u,l);let m=`${d}.${t}`,f=2;for(;s.has(m.normalize("NFC").toLowerCase());)m=`${d}-${f}.${t}`,f+=1;return s.add(m.normalize("NFC").toLowerCase()),`assets/${m}`},sn=e=>e.replace(/\\([!"#$%&'()*+,\-./:;<=>?@[\]\\^_`{|}~])/g,"$1"),an=async(e,n,t,s,r)=>{const o=s.get(n);if(o)return o;const c=await t(n,{credentials:"same-origin"});if(!c.ok)throw new Error(`Failed to fetch image asset: ${n}`);const l=xr(us(c));if(!l)throw new Error(`Image asset did not return image content: ${n}`);const u=hs(n,s.size,l,r);return e.file(u,new Uint8Array(await c.arrayBuffer())),s.set(n,u),u},gs=(e,n)=>{let t=null;for(let s=n;s<e.length;s+=1){const r=e[s];if(t){r===t&&(t=null);continue}if(r==='"'||r==="'"){t=r;continue}if(r===">")return s}return-1},xs=(e,n)=>{let t=n;for(;t<e.length;){const s=e.toLowerCase().indexOf("<img",t);if(s===-1)return-1;const r=e[s+4],o=s===0?-1:e.lastIndexOf("<",s-1),c=s===0?-1:e.lastIndexOf(">",s-1);if(o<=c&&(!r||/[\s/>]/.test(r)))return s;t=s+4}return-1},ys=(e,n,t,s)=>{let r=n;for(;r<t;){for(;r<t&&/[\s/]/.test(e[r]);)r+=1;const o=r;for(;r<t&&/[^\s=/>]/.test(e[r]);)r+=1;const c=e.slice(o,r).toLowerCase();for(;r<t&&/\s/.test(e[r]);)r+=1;if(e[r]!=="=")continue;for(r+=1;r<t&&/\s/.test(e[r]);)r+=1;const l=e[r];if(l==='"'||l==="'"){const d=r+1,m=e.indexOf(l,d);if(m===-1||m>t)return;if(r=m+1,c===s)return{end:m,start:d,value:e.slice(d,m)};continue}const u=r;for(;r<t&&/[^\s>]/.test(e[r]);)r+=1;if(c===s)return{end:r,start:u,value:e.slice(u,r)}}},on=e=>{const n=[];let t=0;for(;t<e.length;){const s=xs(e,t);if(s===-1)break;const r=gs(e,s+4);if(r===-1)break;const o=ys(e,s+4,r,"src");o&&n.push({end:r+1,source:o,start:s}),t=r+1}return n},cn=(e,n)=>{let t=e;for(const s of[...n].sort((r,o)=>o.start-r.start))t=`${t.slice(0,s.start)}${s.value}${t.slice(s.end)}`;return t},ln=(e,n)=>{let t=e;for(const s of[...n].sort((r,o)=>o.start-r.start))t=`${t.slice(0,s.start)}${s.value}${t.slice(s.end)}`;return t},dn=e=>{const n=[];let t=0;for(;t<e.length;){const s=e.indexOf("![",t);if(s===-1)break;let r=s+2,o=1;for(;r<e.length&&o>0&&e[r]!==`
|
|
3
3
|
`;){if(e[r]==="\\"){r+=2;continue}e[r]==="["?o+=1:e[r]==="]"&&(o-=1),r+=1}if(o!==0||e[r]!=="("){t=s+2;continue}const c=r+1;let l=c;for(;l<e.length&&e[l]!==`
|
|
4
4
|
`&&/\s/.test(e[l]);)l+=1;if(l>=e.length||e[l]===`
|
|
5
5
|
`){t=s+2;continue}let u=l,d=l,m=l;if(e[l]==="<"){for(r=l+1;r<e.length&&e[r]!==">"&&e[r]!==`
|
|
@@ -11,9 +11,9 @@ import{r as i,j as a}from"./floating-ui.react-dom-BWTnA00G.js";import{at as Zn,A
|
|
|
11
11
|
`)},un=(e,n,t=!1)=>t?`${vs(n)}
|
|
12
12
|
|
|
13
13
|
${e}`:e,fn=(e,n,{includeMetadata:t=!1}={})=>{const s=un(e,n,t),r=dn(s).filter(o=>Be(sn(o.source.value))).map(o=>({end:o.end,start:o.start,value:""}));return ln(s,r)},pn=(e,n,{includeMetadata:t=!1}={})=>`${t?["<!--","source: ocean-brain",`note_id: ${Me(n.id)}`,`title: ${Me(n.title)}`,`created_at: ${Me(Le(n.createdAt)??"")}`,`updated_at: ${Me(Le(n.updatedAt)??"")}`,"-->",""].join(`
|
|
14
|
-
`):""}${e}`,ws=(e,n,{includeMetadata:t=!1}={})=>{const s=pn(e,n,{includeMetadata:t}),r=on(s).filter(o=>Be(o.source.value)).map(o=>({end:o.end,start:o.start,value:""}));return cn(s,r)},Cs=async(e,n,{fetchImpl:t=fetch,includeMetadata:s=!1}={})=>{const r=new Wt,o=pn(e,n,{includeMetadata:s}),c=on(o),l=[],u=new Set,d=new Map;for(const{source:m}of c){if(!Be(m.value))continue;const f=rn(m.value),g=await an(r,f,t,d,u);l.push({end:m.end,start:m.start,value:`./${g}`})}return r.file("note.html",cn(o,l)),r.generateAsync({type:"blob"})},Ns=async(e,n,{fetchImpl:t=fetch,includeMetadata:s=!1}={})=>{const r=new Wt,o=un(e,n,s),c=dn(o),l=[],u=new Set,d=new Map;for(const{source:m}of c){const f=sn(m.value);if(!Be(f))continue;const g=rn(f),p=await an(r,g,t,d,u);l.push({end:m.end,start:m.start,value:`./${p}`})}return r.file("note.md",ln(o,l)),r.generateAsync({type:"blob"})},Ss=(e,n)=>{const t=document.createElement("a"),s=URL.createObjectURL(e);try{t.href=s,t.download=n,document.body.appendChild(t),t.click()}finally{t.remove(),URL.revokeObjectURL(s)}},mn={html:{extension:"html",getContent:e=>e.getHtml(),createDocumentBlob:(e,n)=>new Blob([ws(e,n.metadata,{includeMetadata:n.includeMetadata})],{type:"text/html;charset=utf-8"}),createZipBlob:(e,n)=>Cs(e,n.metadata,{fetchImpl:n.fetchImpl,includeMetadata:n.includeMetadata})},markdown:{extension:"md",getContent:e=>e.getMarkdown(),createDocumentBlob:(e,n)=>new Blob([fn(e,n.metadata,{includeMetadata:n.includeMetadata})],{type:"text/markdown;charset=utf-8"}),createZipBlob:(e,n)=>Ns(e,n.metadata,{fetchImpl:n.fetchImpl,includeMetadata:n.includeMetadata})}},hn=(e,n)=>n?"zip":mn[e].extension,Es=async e=>{const n=mn[e.format],t=n.getContent(e.source);if(t===void 0)return{type:"not-ready",format:e.format};const s=hn(e.format,e.includeAssets);return{type:"success",blob:e.includeAssets?await n.createZipBlob(t,e):n.createDocumentBlob(t,e),filename:bs(e.metadata.title,s)}},As=e=>e==="markdown"?"Markdown is not ready yet.":"HTML is not ready yet.",vt=({checked:e,description:n,id:t,label:s,onChange:r})=>{const o=`${t}-label`;return a.jsxs("div",{className:"flex min-h-6 items-center gap-2",children:[a.jsx(Ft,{id:t,size:"sm",checked:e,onChange:c=>r(c.target.checked),"aria-labelledby":o}),a.jsx("label",{id:o,htmlFor:t,className:"min-w-0 cursor-pointer",children:a.jsx(S,{as:"span",variant:"label",weight:"medium",tone:"secondary",className:"block",children:s})}),a.jsx(qn,{content:a.jsx("span",{className:"block max-w-[240px] leading-4",children:n}),side:"top",children:a.jsx("button",{type:"button",className:"focus-ring-soft inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-fg-tertiary transition-colors hover:bg-hover-subtle hover:text-fg-secondary","aria-label":`${s} help`,children:a.jsx(Cr,{className:"h-3.5 w-3.5"})})})]})};function Rs({isOpen:e,metadata:n,getHtml:t,getMarkdown:s,onClose:r}){const o=_e(),[c,l]=i.useState("html"),[u,d]=i.useState(!0),[m,f]=i.useState(!1),[g,p]=i.useState(!1),h=hn(c,u),v=async()=>{p(!0);try{const C=await Es({format:c,includeAssets:u,includeMetadata:m,metadata:n,source:{getHtml:t,getMarkdown:s}});if(C.type==="not-ready"){o(As(C.format));return}Ss(C.blob,C.filename),r(),o("Downloaded note.")}catch{o("Failed to download note.")}finally{p(!1)}};return a.jsxs(O,{isOpen:e,onClose:r,variant:"compact",children:[a.jsx(O.Header,{title:"Download document",onClose:r}),a.jsx(O.Body,{children:a.jsxs("div",{className:"flex flex-col gap-5",children:[a.jsxs("div",{className:"flex flex-col gap-3",role:"radiogroup","aria-label":"Format",children:[a.jsx(S,{as:"span",variant:"meta",weight:"bold",tone:"muted",children:"Format"}),a.jsxs("div",{className:"flex flex-wrap gap-4",children:[a.jsxs("label",{className:"flex cursor-pointer items-center gap-2",children:[a.jsx("input",{type:"radio",name:"note-export-format",value:"html",checked:c==="html",onChange:()=>l("html"),className:"h-4 w-4 accent-cta"}),a.jsx(S,{as:"span",variant:"label",weight:"medium",tone:"secondary",children:".html"})]}),a.jsxs("label",{className:"flex cursor-pointer items-center gap-2",children:[a.jsx("input",{type:"radio",name:"note-export-format",value:"markdown",checked:c==="markdown",onChange:()=>l("markdown"),className:"h-4 w-4 accent-cta"}),a.jsx(S,{as:"span",variant:"label",weight:"medium",tone:"secondary",children:".md"})]})]})]}),a.jsxs("div",{className:"flex flex-col gap-3",role:"group","aria-label":"Options",children:[a.jsx(S,{as:"span",variant:"meta",weight:"bold",tone:"muted",children:"Options"}),a.jsxs("div",{className:"flex flex-col gap-2",children:[a.jsx(vt,{id:"note-export-include-assets",label:"Include local image assets",checked:u,onChange:d,description:"Bundle uploaded Ocean Brain images with the document. Without assets, local images are omitted."}),a.jsx(vt,{id:"note-export-include-metadata",label:"Include metadata",checked:m,onChange:f,description:"Add the note title, note id, timestamps, and Ocean Brain source information."})]})]})]})}),a.jsx(O.Footer,{children:a.jsxs(Pe,{children:[a.jsx(M,{variant:"ghost",size:"sm",onClick:r,children:"Cancel"}),a.jsx(M,{variant:"primary",size:"sm",onClick:v,disabled:g,children:g?"Downloading...":`Download .${h}`})]})})]})}const gn=e=>e==="integration"?{actor:"An integration",place:"an integration",target:"integration version"}:e==="mcp"?{actor:"An MCP client",place:"through MCP",target:"the MCP update"}:e==="web"?{actor:"Another browser tab",place:"in another tab",target:"the tab update"}:{actor:"Another editor",place:"elsewhere",target:"the outside change"},ks=({isDeleted:e,isConflict:n,source:t})=>{const s=gn(t);return e?`This note was moved to trash ${s.place}`:n?`Save paused: note changed ${s.place}`:`This note changed ${s.place}`},js=({isDeleted:e,isConflict:n,hasDraft:t,source:s})=>{const r=gn(s);return e?`${r.actor} moved this note to trash. Open trash to review or restore it.`:n&&t?`Your draft is saved locally. Reload the latest note, overwrite ${r.target}, or clone your draft into a new note.`:n?`The layout change is paused because the note changed ${r.place}. Reload the latest note or overwrite only the layout.`:`${r.actor} changed this note while it was open here. Reload the latest version before continuing.`};function Ts({isOpen:e,isDeleted:n,isConflict:t,hasDraft:s,source:r,isReloading:o,onReload:c,onOverwrite:l,onCloneDraft:u,onOpenTrash:d}){return a.jsxs(O,{isOpen:e,onClose:()=>{},variant:"inspect",children:[a.jsx(O.Header,{title:ks({isDeleted:n,isConflict:t,source:r})}),a.jsx(O.Body,{children:a.jsx(S,{as:"p",variant:"body",tone:"secondary",className:"leading-6",children:js({isDeleted:n,isConflict:t,hasDraft:s,source:r})})}),a.jsx(O.Footer,{children:a.jsx(Pe,{children:n?a.jsx(M,{type:"button",variant:"primary",size:"sm",onClick:d,children:"Open trash"}):t?a.jsxs(a.Fragment,{children:[a.jsx(M,{type:"button",variant:"subtle",size:"sm",isLoading:o,onClick:c,children:"Reload latest"}),s&&a.jsx(M,{type:"button",variant:"ghost",size:"sm",onClick:u,children:"Clone draft"}),a.jsx(M,{type:"button",variant:"danger",size:"sm",onClick:l,children:"Overwrite"})]}):a.jsx(M,{type:"button",variant:"primary",size:"sm",isLoading:o,onClick:c,children:"Reload latest"})})})]})}function Ms({localDraftCreatedAt:e,hasSaveError:n,onRestoreDraft:t,onDiscardDraft:s,onRetrySave:r,onSaveAsNewNote:o}){return a.jsxs(a.Fragment,{children:[e&&a.jsx(ht,{tone:"danger",className:"mb-6",children:a.jsxs("div",{className:"flex w-full flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[a.jsxs("span",{children:["A draft from ",e," is saved only in this browser."]}),a.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.jsx(M,{type:"button",size:"sm",variant:"subtle",className:"self-start",onClick:t,children:"Restore draft"}),a.jsx(M,{type:"button",size:"sm",variant:"ghost",className:"self-start",onClick:s,children:"Discard"})]})]})}),n&&a.jsx(ht,{tone:"danger",className:"mb-6",children:a.jsxs("div",{className:"flex w-full flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[a.jsx("span",{children:"Save failed. Your latest draft is still available here. Retry before leaving this note."}),a.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.jsx(M,{type:"button",size:"sm",variant:"subtle",className:"self-start",onClick:r,children:"Retry save"}),a.jsx(M,{type:"button",size:"sm",variant:"ghost",className:"self-start",onClick:o,children:"Save as new note"})]})]})})]})}const wt=(e,n)=>e||(n==="mobile"?"Mobile browser":n==="mcp"?"MCP":"Web browser");function Ds({isOpen:e,noteId:n,onClose:t,restoreSnapshot:s,onRestored:r}){const o=_e(),c=st(),[l,u]=i.useState(null),[d,m]=i.useState("diff"),f=i.useRef(null),g=We({queryKey:D.notes.snapshots(n),queryFn:async()=>{const x=await Gn(n);if(x.type==="error")throw x;return x.noteSnapshots},enabled:e}),p=ur({mutationFn:s,onSuccess:async x=>{if(x){if(x.type==="error"){o(x.errors[0].message);return}await Promise.all([c.invalidateQueries({queryKey:D.notes.detail(n),exact:!0}),c.invalidateQueries({queryKey:D.notes.listAll(),exact:!1}),c.invalidateQueries({queryKey:D.notes.tagListAll(),exact:!1}),c.invalidateQueries({queryKey:D.notes.tagNameListAll(),exact:!1}),c.invalidateQueries({queryKey:D.notes.pinned(),exact:!0}),c.invalidateQueries({queryKey:D.notes.backReferencesAll(),exact:!1}),c.invalidateQueries({queryKey:D.notes.graph(),exact:!0}),c.invalidateQueries({queryKey:D.notes.snapshots(n),exact:!1}),c.invalidateQueries({queryKey:D.views.sectionNotesAll(),exact:!1}),c.invalidateQueries({queryKey:D.views.sectionCalendarsAll(),exact:!1}),c.invalidateQueries({queryKey:D.tags.all(),exact:!1})]),o("Previous version restored."),r?.(x.restoreNoteSnapshot),u(null),t()}}}),h=g.data?.find(x=>x.id===l)??null,v=We({queryKey:[...D.notes.snapshotDetail(l??"pending"),"diff"],queryFn:async()=>{if(!l)throw new Error("SNAPSHOT_NOT_SELECTED");const x=await Jn(l,"current");if(x.type==="error")throw x;if(!x.noteSnapshotDiff)throw new Error("SNAPSHOT_DIFF_NOT_FOUND");return x.noteSnapshotDiff},enabled:!!l&&d==="diff"}),C=We({queryKey:D.notes.snapshotDetail(l??"pending"),queryFn:async()=>{if(!l)throw new Error("SNAPSHOT_NOT_SELECTED");const x=await Xn(l);if(x.type==="error")throw x;if(!x.noteSnapshot)throw new Error("SNAPSHOT_NOT_FOUND");return x.noteSnapshot},enabled:!!l&&d==="content"}),A=C.data?.contentAsMarkdown.trim()??"";i.useEffect(()=>{l&&f.current?.focus()},[l]);const k=(x,b)=>{m(b),u(x)},w=()=>{u(null),m("diff"),t()};return a.jsxs(O,{isOpen:e,onClose:w,variant:"inspect",children:[a.jsx(O.Header,{title:h?d==="diff"?"Snapshot Diff":"Snapshot Content":"Restore Previous Version",onClose:w}),a.jsx(O.Description,{className:"sr-only",children:h?d==="diff"?"Review the markdown diff between this snapshot and the current note.":"Read this snapshot content before restoring it.":"Choose a previous snapshot to restore."}),a.jsx(O.Body,{children:h?a.jsxs("div",{className:"flex flex-col gap-3",children:[a.jsxs("div",{className:"min-w-0",children:[a.jsx(S,{as:"p",variant:"body",weight:"semibold",truncate:!0,children:h.title}),a.jsxs(S,{as:"p",variant:"label",tone:"tertiary",children:["Before"," ",wt(h.meta.label,h.meta.entrypoint)," ","edit - ",G(h.createdAt).format("YYYY-MM-DD HH:mm:ss")]})]}),a.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.jsx(M,{variant:d==="diff"?"primary":"subtle",size:"sm",onClick:()=>m("diff"),children:"Show diff"}),a.jsx(M,{variant:d==="content"?"primary":"subtle",size:"sm",onClick:()=>m("content"),children:"View content"})]}),d==="diff"?v.isLoading?a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"Loading snapshot diff..."}):v.isError?a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"Snapshot diff could not be loaded."}):v.data?a.jsxs("div",{className:"flex flex-col gap-2",children:[a.jsx(S,{as:"p",variant:"meta",tone:"secondary",children:"Changes from this snapshot to the current note. Red lines were in the snapshot; green lines are in the current note."}),a.jsx("pre",{className:"max-h-[60vh] overflow-y-auto overflow-x-hidden whitespace-pre-wrap break-words rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-0 py-3 text-xs leading-5 text-fg-secondary",children:v.data.diff.markdown.split(`
|
|
15
|
-
`).map((x,b)=>{const j=x.startsWith("+")&&!x.startsWith("+++")?"bg-emerald-500/12 text-emerald-700 dark:text-emerald-200":x.startsWith("-")&&!x.startsWith("---")?"bg-rose-500/12 text-rose-700 dark:text-rose-200":x.startsWith("@@")?"bg-sky-500/12 text-sky-700 dark:text-sky-200":"text-fg-secondary";return a.jsx("span",{className:`block min-w-full whitespace-pre-wrap break-words px-4 ${j}`,children:x||" "},`${b}-${x}`)})})]}):null:C.isLoading?a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"Loading snapshot content..."}):C.isError?a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"Snapshot content could not be loaded."}):A?a.jsx("pre",{className:"max-h-[60vh] overflow-auto whitespace-pre-wrap break-words rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3 text-sm leading-6 text-fg-secondary",children:A}):a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"No readable content was found for this snapshot."})]}):a.jsxs("div",{className:"flex flex-col gap-3",children:[a.jsx(S,{as:"p",variant:"meta",tone:"secondary",children:"Choose a previous snapshot to restore this note back to that state."}),g.isLoading&&a.jsx(S,{as:"div",variant:"meta",tone:"secondary",children:"Loading previous versions..."}),!g.isLoading&&g.data?.length===0&&a.jsx(S,{as:"div",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"A recovery snapshot appears before the first edit in a session. Up to 10 recent snapshots are kept for 7 days, and identical versions are skipped."}),!g.isLoading&&g.data&&g.data.length>0&&a.jsx("div",{className:"flex flex-col gap-2",children:g.data.map(x=>a.jsx(Er,{padding:"compact",children:a.jsxs("div",{className:"flex flex-col gap-3",children:[a.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[a.jsxs("div",{className:"min-w-0",children:[a.jsxs(S,{as:"p",variant:"body",weight:"semibold",children:["Before"," ",wt(x.meta.label,x.meta.entrypoint)," ","edit"]}),a.jsx(S,{as:"p",variant:"meta",truncate:!0,tone:"secondary",children:x.title}),a.jsx(S,{as:"p",variant:"label",tone:"tertiary",children:G(x.createdAt).format("YYYY-MM-DD HH:mm:ss")})]}),a.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2 sm:justify-end",children:[a.jsx(M,{variant:"subtle",size:"sm",onClick:()=>k(x.id,"diff"),children:"Compare"}),a.jsx(M,{size:"sm",isLoading:p.isPending,onClick:()=>p.mutate(x.id),children:"Restore"})]})]}),x.contentPreview&&a.jsx("div",{className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-3 py-2",children:a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"line-clamp-4 whitespace-pre-wrap break-words",children:x.contentPreview})})]})},x.id))})]})}),h&&a.jsx(O.Footer,{children:a.jsxs(Pe,{children:[a.jsx(M,{ref:f,variant:"subtle",onClick:()=>{u(null),m("diff")},children:"Back"}),a.jsx(M,{isLoading:p.isPending,onClick:()=>p.mutate(h.id),children:"Restore this version"})]})})]})}function Ls({noteId:e}){const[n,t]=i.useState(!1),[s,r]=i.useState(!1),[o,c]=i.useState("create"),[l,u]=i.useState(void 0),{onCreate:d,onUpdate:m,onDelete:f}=kr(),g=()=>{c("create"),u(void 0),r(!0)},p=w=>{c("edit"),u(w),r(!0)},h=(w,x,b)=>{o==="create"?d(e,w,x,()=>{r(!1)},b):o==="edit"&&l&&m(l.id,e,{reminderDate:w,priority:x,content:b},()=>{r(!1)})},v=w=>{m(w.id,e,{completed:!w.completed})},C=w=>{const x=G(Number(w)),b=G();return x.isSame(b,"day")?`Today at ${x.format("HH:mm")}`:x.isSame(b.add(1,"day"),"day")?`Tomorrow at ${x.format("HH:mm")}`:x.format("YYYY-MM-DD HH:mm")},A=w=>{const x=G(Number(w)),b=G(),j=x.diff(b,"hour");return j<=6?"high":j<=24?"medium":"low"},k=w=>{const x=G(Number(w)),b=G(),j=x.diff(b,"hour"),B=x.diff(b,"minute")%60;return j<0||B<0?"Overdue":j===0?`${B}m remaining`:`${j}h ${B}m remaining`};return a.jsxs(a.Fragment,{children:[a.jsx(Zt,{title:"Reminders",icon:a.jsx(fr,{className:"h-3.5 w-3.5"}),action:a.jsxs(a.Fragment,{children:[!n&&a.jsxs(M,{size:"sm",variant:"ghost",onClick:g,children:[a.jsx(Tr,{className:"w-3 h-3"}),a.jsx(S,{as:"span",variant:"label",className:"hidden sm:inline",children:"Add"})]}),a.jsxs(M,{type:"button",size:"sm",variant:"ghost","aria-label":n?"Expand reminders":"Collapse reminders","aria-expanded":!n,onClick:()=>t(!n),children:[n?a.jsx(er,{className:"h-3.5 w-3.5"}):a.jsx(tr,{className:"h-3.5 w-3.5"}),n?"Expand":"Collapse"]})]}),children:!n&&a.jsx(ts,{noteId:e,searchParams:{offset:0,limit:9999},render:({reminders:w,totalCount:x})=>a.jsx("div",{className:"flex flex-col gap-2",children:w.length===0?a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"py-3 text-center",children:x===0?"No reminders yet":"All reminders complete"}):a.jsx("div",{className:"flex flex-col",children:w.map(b=>{const j=b.priority||A(b.reminderDate),B=k(b.reminderDate),H=B==="Overdue";return a.jsxs("div",{className:U("flex items-center gap-2.5 px-2 py-1.5"),children:[a.jsx(Ft,{checked:b.completed,onChange:()=>v(b),size:"sm","aria-label":`Reminder: ${b.content||C(b.reminderDate)}`}),a.jsx(S,{as:"div",variant:"body",weight:"medium",className:U("truncate flex-1 min-w-0",b.completed&&"line-through opacity-40"),children:b.content||C(b.reminderDate)}),a.jsxs("div",{className:U("shrink-0 flex items-center gap-1",b.completed&&"opacity-40"),children:[b.content&&a.jsx(S,{as:"span",variant:"meta",tone:"secondary",children:C(b.reminderDate)}),!b.completed&&a.jsx(S,{as:"span",variant:"label",weight:"medium",tone:H||j==="high"?"error":"tertiary",className:U(b.content&&'before:content-["·"] before:mr-1'),children:B})]}),a.jsx(Bt,{button:a.jsx($t,{label:"Reminder actions"}),items:[{name:"Edit",onClick:()=>p(b)},{name:"Delete",onClick:()=>f(b.id,e)}]})]},b.id)})})})})}),a.jsx(jr,{isOpen:s,onClose:()=>r(!1),onSave:h,reminder:l,mode:o})]})}const _s=e=>[{title:"Diagram",subtext:"Create a flowchart or diagram with Mermaid syntax",onItemClick:()=>{xt(e,{type:"codeBlock",props:{language:"mermaid"}})},aliases:["mermaid","diagram","flowchart","sequence"],group:"Other",icon:a.jsx(Qt,{})},{title:"Math Formula",subtext:"Write a formula with KaTeX or LaTeX",onItemClick:()=>{xt(e,{type:"codeBlock",props:{language:"math"}})},aliases:["math","formula","equation","katex","latex"],group:"Other",icon:a.jsx(Jt,{})}],Ps=({editor:e})=>a.jsx(ct,{triggerCharacter:"/",getItems:async n=>Or([...Mr(e).filter(t=>t.title!=="Audio"&&t.title!=="Video"&&t.title!=="File"),..._s(e),{title:"Table of Contents",subtext:"Insert a table of contents based on headings",onItemClick:()=>{e.insertBlocks([{type:"tableOfContents"}],e.getTextCursorPosition().block,"after")},aliases:["toc","table of contents","contents","outline","index"],group:"Other",icon:a.jsx(Ut,{})}],n)}),Os=(e,n)=>n?e.filter(t=>t.id!==n):e,Bs=({currentNoteId:e,onClick:n})=>a.jsx(ct,{triggerCharacter:"[",getItems:async t=>{const s=await nr({query:t,limit:5});return s.type==="error"?[]:Os(s.allNotes.notes,e).map(o=>({title:o.title,onItemClick:()=>n({type:"reference",props:{id:o.id,title:o.title}})}))}});let Ct,Nt;const Fs=()=>(Ct??=Je(async()=>{const{default:e}=await import("./mermaid.core-BfUQM5vF.js").then(n=>n.bc);return{default:e}},__vite__mapDeps([0,1,2,3])).then(({default:e})=>e),Ct),Hs=()=>(Nt??=Promise.all([Je(()=>import("./katex-x288kqHd.js"),[]),Je(()=>Promise.resolve({}),__vite__mapDeps([4]))]).then(([{default:e}])=>e),Nt),Is=e=>{const n=e?.trim().toLowerCase();return n==="mermaid"?"mermaid":n==="math"||n==="katex"||n==="latex"?"math":null},$s=e=>`ocean-brain-mermaid-${e.replace(/[^a-zA-Z0-9_-]/g,"")||"diagram"}`,Us=async(e,n,t,s="light")=>{if(e==="mermaid"){const o=await Fs();o.initialize({securityLevel:"strict",startOnLoad:!1,suppressErrorRendering:!0,theme:s==="dark"?"dark":"default"});const c=await o.render($s(t),n);return{html:c.svg,bindFunctions:c.bindFunctions}}return{html:(await Hs()).renderToString(n,{displayMode:!0,output:"htmlAndMathml",strict:"warn",throwOnError:!0,trust:!1})}},zs={floating:"pointer-events-auto inline-flex h-7 cursor-pointer select-none items-center gap-1.5 rounded-[8px] border border-white/10 bg-white/10 px-2.5 text-xs font-medium text-white/60 opacity-75 shadow-[0_8px_18px_-14px_rgba(0,0,0,0.45)] backdrop-blur-sm transition-colors hover:bg-white/20 hover:text-white/90 hover:opacity-100 focus-ring-soft focus:text-white/90 focus:opacity-100",toolbar:"focus-ring-soft inline-flex h-8 cursor-pointer select-none items-center gap-1.5 rounded-[8px] border border-transparent px-2.5 text-xs font-semibold text-fg-secondary outline-none transition-colors hover:border-border-subtle hover:bg-hover-subtle hover:text-fg-default"},Vs={idle:"",copied:"text-accent-success hover:text-accent-success focus:text-accent-success",failed:"text-fg-error hover:text-fg-error focus:text-fg-error"},Ws={idle:"Copy",copied:"Copied",failed:"Copy failed"},St=({getText:e,resetDelayMs:n=2e3,variant:t="floating"})=>{const[s,r]=i.useState("idle"),o=i.useRef(null),c=i.useCallback(()=>{o.current&&(clearTimeout(o.current),o.current=null)},[]),l=i.useCallback(()=>{c(),o.current=setTimeout(()=>{r("idle"),o.current=null},n)},[c,n]);i.useEffect(()=>c,[c]);const u=f=>{f.stopPropagation()},d=f=>{f.preventDefault(),f.stopPropagation()},m=async f=>{u(f);try{await navigator.clipboard.writeText(e()),r("copied")}catch{r("failed")}l()};return a.jsx("div",{className:U(t==="floating"&&"pointer-events-none absolute right-3 top-2 z-[1]"),contentEditable:!1,onMouseDown:d,children:a.jsxs("button",{type:"button",className:U(zs[t],Vs[s]),contentEditable:!1,onClick:m,children:[a.jsx(Ir,{className:"h-3.5 w-3.5"}),a.jsx("span",{"aria-live":"polite",children:Ws[s]})]})})},Zs=({kind:e,source:n})=>{const t=i.useId(),s=i.useRef(null),r=Ht(d=>d.theme),[o,c]=i.useState(()=>typeof IntersectionObserver>"u"),[l,u]=i.useState({status:"idle"});return i.useEffect(()=>{const d=s.current;if(o||!d||typeof IntersectionObserver>"u"){c(!0);return}const m=new IntersectionObserver(([f])=>{f?.isIntersecting&&(c(!0),m.disconnect())},{rootMargin:"240px"});return m.observe(d),()=>m.disconnect()},[o]),i.useEffect(()=>{if(!o)return;let d=!1;return u({status:"loading"}),Us(e,n,t,r).then(m=>{d||u({status:"success",...m})}).catch(()=>{d||u({status:"error"})}),()=>{d=!0}},[e,t,o,n,r]),i.useEffect(()=>{l.status==="success"&&l.bindFunctions&&s.current&&l.bindFunctions(s.current)},[l]),a.jsxs("div",{ref:s,"data-rich-code-preview":!0,className:"min-h-24 w-full overflow-auto bg-surface px-4 py-5 text-fg-default sm:px-6 sm:py-6",contentEditable:!1,"aria-label":e==="mermaid"?"Mermaid diagram preview":"Math formula preview",children:[l.status==="success"&&a.jsx("div",{className:"[&_.katex-display]:m-0 [&_svg]:mx-auto [&_svg]:block [&_svg]:h-auto [&_svg]:max-h-[min(68vh,640px)] [&_svg]:max-w-full",dangerouslySetInnerHTML:{__html:l.html}}),(l.status==="idle"||l.status==="loading")&&a.jsx("div",{className:"flex min-h-8 items-center justify-center text-sm text-black/55",children:"Rendering preview…"}),l.status==="error"&&a.jsxs("div",{className:"text-left",children:[a.jsx("p",{className:"mb-3 text-sm text-red-700",children:"Preview could not be rendered. The source is preserved."}),a.jsx("pre",{className:"overflow-x-auto whitespace-pre-wrap rounded-[6px] bg-black/5 p-4 text-sm text-black",children:a.jsx("code",{children:n})})]})]})},Et="focus-ring-soft inline-flex h-8 cursor-pointer select-none items-center gap-1.5 rounded-[8px] border px-2.5 text-xs font-semibold outline-none transition-colors",et=e=>typeof e=="string"?e:!e||typeof e!="object"?"":"text"in e&&typeof e.text=="string"?e.text:"content"in e?Array.isArray(e.content)?e.content.map(et).join(""):et(e.content):"",Ks=({block:e,contentRef:n})=>{const t=i.useRef(null),s=Is(e.props.language),r=e.content.map(et).join(""),[o,c]=i.useState(r),[l,u]=i.useState(r.length===0),d=s!==null&&!l,m=s==="mermaid"?"Diagram":"Math Formula",f=`${m} controls`,g=i.useCallback(h=>{t.current=h,n(h)},[n]);i.useEffect(()=>{const h=t.current;if(!h)return;const v=()=>c(h.textContent??""),C=new MutationObserver(v);return C.observe(h,{characterData:!0,childList:!0,subtree:!0}),()=>C.disconnect()},[]);const p=h=>{h.preventDefault(),h.stopPropagation()};return a.jsxs(a.Fragment,{children:[s&&a.jsxs("div",{role:"toolbar","aria-label":f,"data-rich-code-toolbar":!0,className:"flex min-h-11 w-full flex-wrap items-center justify-between gap-2 border-b border-border-subtle bg-elevated px-3 py-1.5 text-fg-secondary",contentEditable:!1,onMouseDown:p,children:[a.jsxs("div",{className:"flex min-w-0 items-center gap-2 px-1 text-xs font-semibold text-fg-secondary",children:[s==="mermaid"?a.jsx(Qt,{className:"h-4 w-4 shrink-0 text-fg-tertiary"}):a.jsx(Jt,{className:"h-4 w-4 shrink-0 text-fg-tertiary"}),a.jsx("span",{className:"truncate",children:m})]}),a.jsxs("div",{className:"flex items-center gap-1",children:[a.jsxs("div",{className:"flex items-center gap-0.5 rounded-[10px] border border-border-subtle bg-hover-subtle/55 p-0.5",children:[a.jsxs("button",{type:"button","aria-pressed":l,className:U(Et,l?"border-border-secondary/70 bg-elevated text-fg-default shadow-[0_8px_18px_-16px_rgba(15,18,24,0.28)]":"border-transparent text-fg-secondary hover:bg-hover-subtle hover:text-fg-default"),contentEditable:!1,onClick:h=>{h.stopPropagation(),u(!0)},children:[a.jsx(Jr,{className:"h-3.5 w-3.5"}),"Edit"]}),a.jsxs("button",{type:"button","aria-pressed":d,className:U(Et,d?"border-border-secondary/70 bg-elevated text-fg-default shadow-[0_8px_18px_-16px_rgba(15,18,24,0.28)]":"border-transparent text-fg-secondary hover:bg-hover-subtle hover:text-fg-default"),contentEditable:!1,onClick:h=>{h.stopPropagation(),u(!1)},children:[a.jsx(pr,{className:"h-3.5 w-3.5"}),"Preview"]})]}),a.jsx(St,{variant:"toolbar",getText:()=>t.current?.textContent?.trimEnd()??""})]})]}),a.jsx("pre",{className:U(d&&"hidden",s&&"bg-[#181b20]"),children:a.jsx("code",{ref:g})}),s&&d&&a.jsx(Zs,{kind:s,source:o}),!s&&a.jsx(St,{getText:()=>t.current?.textContent?.trimEnd()??""})]})},Ys="focus-ring-soft inline-flex cursor-pointer items-center rounded-[8px] border border-border-subtle bg-[color-mix(in_srgb,var(--elevated)_72%,var(--hover-subtle))] px-2 py-0.5 text-xs font-semibold text-fg-secondary transition-colors hover:border-border-secondary hover:bg-elevated hover:text-fg-default dark:bg-[color-mix(in_srgb,var(--elevated)_82%,var(--hover-subtle))]",Qs={type:"reference",propSchema:{id:{default:""},title:{default:"Unknown"}},content:"none"};function qs(e){const n=It(),t=()=>{e.editor.blur(),n({to:Oe,params:{id:e.inlineContent.props.id}})},s=r=>{r.preventDefault(),r.stopPropagation()};return a.jsx("span",{role:"link",tabIndex:0,contentEditable:!1,className:Ys,onMouseDown:s,onClick:r=>{s(r),t()},onKeyDown:r=>{r.key!=="Enter"&&r.key!==" "||(s(r),t())},children:a.jsxs("span",{children:["[",e.inlineContent.props.title,"]"]})})}const Gs=Kt(Qs,{render:e=>a.jsx(qs,{...e})}),Js=()=>{const e=Dr(),[n,t]=i.useState([]),s={1:"pl-3",2:"pl-[26px]",3:"pl-[40px]",4:"pl-[54px]",5:"pl-[68px]",6:"pl-[82px]"};i.useEffect(()=>{const c=()=>{const u=e.document,d=[],m=f=>{for(const g of f){if(g.type==="heading"){const p=g,h=p.props.level||1,v=p.content?.map(C=>C.text||"").join("")||"";v.trim()&&d.push({id:g.id,level:h,text:v})}g.children&&Array.isArray(g.children)&&m(g.children)}};m(u),t(d)};c();const l=e.onChange?.(c);return()=>{l&&l()}},[e]);const r=c=>{e.setTextCursorPosition(c);const l=document.querySelector(`[data-id="${c}"]`);if(l){const u=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;l.scrollIntoView({behavior:u?"auto":"smooth",block:"center"})}},o=a.jsx($r,{icon:a.jsx(Ut,{className:"h-3.5 w-3.5"}),title:"Table of Contents",className:"text-fg-tertiary"});return n.length===0?a.jsxs("div",{className:"surface-base w-full p-4",children:[o,a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"mt-2",children:"Add headings to your document to generate a table of contents"})]}):a.jsxs("div",{className:"surface-base w-full p-4",children:[a.jsx("div",{className:"mb-2",children:o}),a.jsx("nav",{className:"space-y-0.5",children:n.map(c=>{const l=c.level===1;return a.jsxs("button",{type:"button",onClick:()=>r(c.id),className:U("focus-ring-soft","flex","w-full","items-center","gap-2","rounded-[10px]","px-2.5","py-1.5",s[c.level]??"pl-2.5","text-left","transition-colors","hover:bg-hover-subtle",l?"text-fg-default":"text-fg-secondary"),children:[a.jsxs(S,{as:"span",variant:"label",weight:"medium",tone:"tertiary",className:"min-w-[1.5rem]",children:["H",c.level]}),a.jsx(S,{as:"span",variant:"body",weight:l?"semibold":"medium",className:"line-clamp-2 text-current",children:c.text})]},c.id)})})]})},Xs=Yt({type:"tableOfContents",propSchema:{},content:"none"},{render:()=>a.jsx(Js,{})})(),ea="focus-ring-soft inline-flex cursor-pointer items-center rounded-[8px] border border-border-subtle bg-emphasis px-2 py-0.5 text-xs font-semibold text-fg-secondary transition-colors hover:border-border-secondary hover:bg-hover-subtle hover:text-fg-default dark:bg-emphasis",ta={type:"tag",propSchema:{id:{default:""},tag:{default:"@Unknown"}},content:"none"};function na(e){const n=It(),t=()=>{e.editor.blur(),n({to:Nr,params:{id:e.inlineContent.props.id},search:{page:1}})},s=r=>{r.preventDefault(),r.stopPropagation()};return a.jsx("span",{role:"link",tabIndex:0,contentEditable:!1,className:ea,onMouseDown:s,onClick:r=>{s(r),t()},onKeyDown:r=>{r.key!=="Enter"&&r.key!==" "||(s(r),t())},children:a.jsx("span",{children:e.inlineContent.props.tag})})}const ra=Kt(ta,{render:e=>a.jsx(na,{...e})}),sa=e=>e,aa=e=>e,oa=sa({tag:ra,reference:Gs}),ia=aa({tableOfContents:Xs}),le=Ce.codeBlock,At=Yt(le.config,{meta:le.implementation.meta,parse:le.implementation.parse,parseContent:le.implementation.parseContent,runsBefore:le.implementation.runsBefore,render:Ks})(),ca={...At,extensions:le.extensions,implementation:{...At.implementation,toExternalHTML:le.implementation.toExternalHTML}},la={...Ce.image,implementation:{...Ce.image.implementation,meta:{...Ce.image.implementation.meta,fileBlockAccept:[...yr]}}},da=Br.create({inlineContentSpecs:{...Fr,...oa},blockSpecs:{...Ce,image:la,codeBlock:ca,...ia}}),ua=(e,n)=>n.some(t=>t.name===`@${e}`),fa=({onClick:e})=>a.jsx(ct,{triggerCharacter:"@",getItems:async n=>{const t=await Ur({query:n,limit:5});if(t.type==="error")return[];const{tags:s}=t.allTags,r=ua(n,s),o=[{title:"Add a new tag",onItemClick:async()=>{const c=await zr({name:"@"+n});if(c.type==="error")return;const{id:l,name:u}=c.createTag;e({type:"tag",props:{id:l,tag:u}})}}];return s.length===0?o:s.map(c=>({title:c.name,onItemClick:()=>e({type:"tag",props:{id:c.id,tag:c.name}})})).concat(n&&!r?o:[])}}),pa=/^ {0,3}(`{3,}|~{3,})/,ma=/<[^<>\n]*>/g,xn=/~+/g,yn=/[\p{L}\p{M}\p{N}\p{Sc}%‰.,+\-/:°℃℉µμ·²³^]/u,tt=new RegExp("^(?:[+-]?\\p{Sc}?|\\p{Sc}[+-]?)\\p{N}","u"),bn=/&#(?:x[0-9a-f]+|\d+);/giu,ha=new Set(["Files","blocknote/html","vscode-editor-data"]),Rt="OBTILDE",kt="",ga=[/(^|\n) {0,3}#{1,6} {1,8}[^\n]{1,64}\r?\n\r?\n\s{0,32}\S/,/(_|__|\*|\*\*|~~|==|\+\+)(?!\s)(?:[^\s](?:.{0,62}[^\s])?|\S)(?=\1)/,/\[[^\]]{1,128}\]\(https?:\/\/\S{1,999}\)/,/(?:\s|^)`(?!\s)(?:[^\s`](?:[^`]{0,46}[^\s`])?|[^\s`])`([^\w]|$)/,/(?:^|\n)\s{0,5}-\s{1}[^\n]+\n\s{0,15}-\s/,/(?:^|\n)\s{0,5}\d+\.\s{1}[^\n]+\n\s{0,15}\d+\.\s/,/\n{2} {0,3}-{2,48}\n{2}/,/(?:\n|^)(```|~~~|\$\$)(?!`|~)[^\s]{0,64} {0,64}[^\n]{0,64}\n[\s\S]{0,9999}?\s*\1 {0,64}(?:\n+|$)/,/(?:\n|^)(?!\s)\w[^\n]{0,64}\n(-|=)\1{0,64}\n\n\s{0,64}(\w|$)/,/(?:^|(\r?\n\r?\n))( {0,3}>[^\n]{1,333}\n){1,999}($|(\r?\n))/],xa=e=>e.split(`
|
|
14
|
+
`):""}${e}`,ws=(e,n,{includeMetadata:t=!1}={})=>{const s=pn(e,n,{includeMetadata:t}),r=on(s).filter(o=>Be(o.source.value)).map(o=>({end:o.end,start:o.start,value:""}));return cn(s,r)},Cs=async(e,n,{fetchImpl:t=fetch,includeMetadata:s=!1}={})=>{const r=new Zt,o=pn(e,n,{includeMetadata:s}),c=on(o),l=[],u=new Set,d=new Map;for(const{source:m}of c){if(!Be(m.value))continue;const f=rn(m.value),g=await an(r,f,t,d,u);l.push({end:m.end,start:m.start,value:`./${g}`})}return r.file("note.html",cn(o,l)),r.generateAsync({type:"blob"})},Ns=async(e,n,{fetchImpl:t=fetch,includeMetadata:s=!1}={})=>{const r=new Zt,o=un(e,n,s),c=dn(o),l=[],u=new Set,d=new Map;for(const{source:m}of c){const f=sn(m.value);if(!Be(f))continue;const g=rn(f),p=await an(r,g,t,d,u);l.push({end:m.end,start:m.start,value:`./${p}`})}return r.file("note.md",ln(o,l)),r.generateAsync({type:"blob"})},Ss=(e,n)=>{const t=document.createElement("a"),s=URL.createObjectURL(e);try{t.href=s,t.download=n,document.body.appendChild(t),t.click()}finally{t.remove(),URL.revokeObjectURL(s)}},mn={html:{extension:"html",getContent:e=>e.getHtml(),createDocumentBlob:(e,n)=>new Blob([ws(e,n.metadata,{includeMetadata:n.includeMetadata})],{type:"text/html;charset=utf-8"}),createZipBlob:(e,n)=>Cs(e,n.metadata,{fetchImpl:n.fetchImpl,includeMetadata:n.includeMetadata})},markdown:{extension:"md",getContent:e=>e.getMarkdown(),createDocumentBlob:(e,n)=>new Blob([fn(e,n.metadata,{includeMetadata:n.includeMetadata})],{type:"text/markdown;charset=utf-8"}),createZipBlob:(e,n)=>Ns(e,n.metadata,{fetchImpl:n.fetchImpl,includeMetadata:n.includeMetadata})}},hn=(e,n)=>n?"zip":mn[e].extension,Es=async e=>{const n=mn[e.format],t=n.getContent(e.source);if(t===void 0)return{type:"not-ready",format:e.format};const s=hn(e.format,e.includeAssets);return{type:"success",blob:e.includeAssets?await n.createZipBlob(t,e):n.createDocumentBlob(t,e),filename:bs(e.metadata.title,s)}},As=e=>e==="markdown"?"Markdown is not ready yet.":"HTML is not ready yet.",vt=({checked:e,description:n,id:t,label:s,onChange:r})=>{const o=`${t}-label`;return a.jsxs("div",{className:"flex min-h-6 items-center gap-2",children:[a.jsx(Ft,{id:t,size:"sm",checked:e,onChange:c=>r(c.target.checked),"aria-labelledby":o}),a.jsx("label",{id:o,htmlFor:t,className:"min-w-0 cursor-pointer",children:a.jsx(S,{as:"span",variant:"label",weight:"medium",tone:"secondary",className:"block",children:s})}),a.jsx(qn,{content:a.jsx("span",{className:"block max-w-[240px] leading-4",children:n}),side:"top",children:a.jsx("button",{type:"button",className:"focus-ring-soft inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-fg-tertiary transition-colors hover:bg-hover-subtle hover:text-fg-secondary","aria-label":`${s} help`,children:a.jsx(Cr,{className:"h-3.5 w-3.5"})})})]})};function Rs({isOpen:e,metadata:n,getHtml:t,getMarkdown:s,onClose:r}){const o=_e(),[c,l]=i.useState("html"),[u,d]=i.useState(!0),[m,f]=i.useState(!1),[g,p]=i.useState(!1),h=hn(c,u),v=async()=>{p(!0);try{const C=await Es({format:c,includeAssets:u,includeMetadata:m,metadata:n,source:{getHtml:t,getMarkdown:s}});if(C.type==="not-ready"){o(As(C.format));return}Ss(C.blob,C.filename),r(),o("Downloaded note.")}catch{o("Failed to download note.")}finally{p(!1)}};return a.jsxs(O,{isOpen:e,onClose:r,variant:"compact",children:[a.jsx(O.Header,{title:"Download document",onClose:r}),a.jsx(O.Body,{children:a.jsxs("div",{className:"flex flex-col gap-5",children:[a.jsxs("div",{className:"flex flex-col gap-3",role:"radiogroup","aria-label":"Format",children:[a.jsx(S,{as:"span",variant:"meta",weight:"bold",tone:"muted",children:"Format"}),a.jsxs("div",{className:"flex flex-wrap gap-4",children:[a.jsxs("label",{className:"flex cursor-pointer items-center gap-2",children:[a.jsx("input",{type:"radio",name:"note-export-format",value:"html",checked:c==="html",onChange:()=>l("html"),className:"h-4 w-4 accent-cta"}),a.jsx(S,{as:"span",variant:"label",weight:"medium",tone:"secondary",children:".html"})]}),a.jsxs("label",{className:"flex cursor-pointer items-center gap-2",children:[a.jsx("input",{type:"radio",name:"note-export-format",value:"markdown",checked:c==="markdown",onChange:()=>l("markdown"),className:"h-4 w-4 accent-cta"}),a.jsx(S,{as:"span",variant:"label",weight:"medium",tone:"secondary",children:".md"})]})]})]}),a.jsxs("div",{className:"flex flex-col gap-3",role:"group","aria-label":"Options",children:[a.jsx(S,{as:"span",variant:"meta",weight:"bold",tone:"muted",children:"Options"}),a.jsxs("div",{className:"flex flex-col gap-2",children:[a.jsx(vt,{id:"note-export-include-assets",label:"Include local image assets",checked:u,onChange:d,description:"Bundle uploaded Ocean Brain images with the document. Without assets, local images are omitted."}),a.jsx(vt,{id:"note-export-include-metadata",label:"Include metadata",checked:m,onChange:f,description:"Add the note title, note id, timestamps, and Ocean Brain source information."})]})]})]})}),a.jsx(O.Footer,{children:a.jsxs(Pe,{children:[a.jsx(M,{variant:"ghost",size:"sm",onClick:r,children:"Cancel"}),a.jsx(M,{variant:"primary",size:"sm",onClick:v,disabled:g,children:g?"Downloading...":`Download .${h}`})]})})]})}const gn=e=>e==="integration"?{actor:"An integration",place:"an integration",target:"integration version"}:e==="mcp"?{actor:"An MCP client",place:"through MCP",target:"the MCP update"}:e==="web"?{actor:"Another browser tab",place:"in another tab",target:"the tab update"}:{actor:"Another editor",place:"elsewhere",target:"the outside change"},ks=({isDeleted:e,isConflict:n,source:t})=>{const s=gn(t);return e?`This note was moved to trash ${s.place}`:n?`Save paused: note changed ${s.place}`:`This note changed ${s.place}`},js=({isDeleted:e,isConflict:n,hasDraft:t,source:s})=>{const r=gn(s);return e?`${r.actor} moved this note to trash. Open trash to review or restore it.`:n&&t?`Your draft is saved locally. Reload the latest note, overwrite ${r.target}, or clone your draft into a new note.`:n?`The layout change is paused because the note changed ${r.place}. Reload the latest note or overwrite only the layout.`:`${r.actor} changed this note while it was open here. Reload the latest version before continuing.`};function Ts({isOpen:e,isDeleted:n,isConflict:t,hasDraft:s,source:r,isReloading:o,onReload:c,onOverwrite:l,onCloneDraft:u,onOpenTrash:d}){return a.jsxs(O,{isOpen:e,onClose:()=>{},variant:"inspect",children:[a.jsx(O.Header,{title:ks({isDeleted:n,isConflict:t,source:r})}),a.jsx(O.Body,{children:a.jsx(S,{as:"p",variant:"body",tone:"secondary",className:"leading-6",children:js({isDeleted:n,isConflict:t,hasDraft:s,source:r})})}),a.jsx(O.Footer,{children:a.jsx(Pe,{children:n?a.jsx(M,{type:"button",variant:"primary",size:"sm",onClick:d,children:"Open trash"}):t?a.jsxs(a.Fragment,{children:[a.jsx(M,{type:"button",variant:"subtle",size:"sm",isLoading:o,onClick:c,children:"Reload latest"}),s&&a.jsx(M,{type:"button",variant:"ghost",size:"sm",onClick:u,children:"Clone draft"}),a.jsx(M,{type:"button",variant:"danger",size:"sm",onClick:l,children:"Overwrite"})]}):a.jsx(M,{type:"button",variant:"primary",size:"sm",isLoading:o,onClick:c,children:"Reload latest"})})})]})}function Ms({localDraftCreatedAt:e,hasSaveError:n,onRestoreDraft:t,onDiscardDraft:s,onRetrySave:r,onSaveAsNewNote:o}){return a.jsxs(a.Fragment,{children:[e&&a.jsx(gt,{tone:"danger",className:"mb-6",children:a.jsxs("div",{className:"flex w-full flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[a.jsxs("span",{children:["A draft from ",e," is saved only in this browser."]}),a.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.jsx(M,{type:"button",size:"sm",variant:"subtle",className:"self-start",onClick:t,children:"Restore draft"}),a.jsx(M,{type:"button",size:"sm",variant:"ghost",className:"self-start",onClick:s,children:"Discard"})]})]})}),n&&a.jsx(gt,{tone:"danger",className:"mb-6",children:a.jsxs("div",{className:"flex w-full flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[a.jsx("span",{children:"Save failed. Your latest draft is still available here. Retry before leaving this note."}),a.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.jsx(M,{type:"button",size:"sm",variant:"subtle",className:"self-start",onClick:r,children:"Retry save"}),a.jsx(M,{type:"button",size:"sm",variant:"ghost",className:"self-start",onClick:o,children:"Save as new note"})]})]})})]})}const wt=(e,n)=>e||(n==="mobile"?"Mobile browser":n==="mcp"?"MCP":"Web browser");function Ds({isOpen:e,noteId:n,onClose:t,restoreSnapshot:s,onRestored:r}){const o=_e(),c=st(),[l,u]=i.useState(null),[d,m]=i.useState("diff"),f=i.useRef(null),g=Ze({queryKey:D.notes.snapshots(n),queryFn:async()=>{const x=await Gn(n);if(x.type==="error")throw x;return x.noteSnapshots},enabled:e}),p=ur({mutationFn:s,onSuccess:async x=>{if(x){if(x.type==="error"){o(x.errors[0].message);return}await Promise.all([c.invalidateQueries({queryKey:D.notes.detail(n),exact:!0}),c.invalidateQueries({queryKey:D.notes.listAll(),exact:!1}),c.invalidateQueries({queryKey:D.notes.tagListAll(),exact:!1}),c.invalidateQueries({queryKey:D.notes.tagNameListAll(),exact:!1}),c.invalidateQueries({queryKey:D.notes.pinned(),exact:!0}),c.invalidateQueries({queryKey:D.notes.backReferencesAll(),exact:!1}),c.invalidateQueries({queryKey:D.notes.graph(),exact:!0}),c.invalidateQueries({queryKey:D.notes.snapshots(n),exact:!1}),c.invalidateQueries({queryKey:D.views.sectionNotesAll(),exact:!1}),c.invalidateQueries({queryKey:D.views.sectionCalendarsAll(),exact:!1}),c.invalidateQueries({queryKey:D.tags.all(),exact:!1})]),o("Previous version restored."),r?.(x.restoreNoteSnapshot),u(null),t()}}}),h=g.data?.find(x=>x.id===l)??null,v=Ze({queryKey:[...D.notes.snapshotDetail(l??"pending"),"diff"],queryFn:async()=>{if(!l)throw new Error("SNAPSHOT_NOT_SELECTED");const x=await Jn(l,"current");if(x.type==="error")throw x;if(!x.noteSnapshotDiff)throw new Error("SNAPSHOT_DIFF_NOT_FOUND");return x.noteSnapshotDiff},enabled:!!l&&d==="diff"}),C=Ze({queryKey:D.notes.snapshotDetail(l??"pending"),queryFn:async()=>{if(!l)throw new Error("SNAPSHOT_NOT_SELECTED");const x=await Xn(l);if(x.type==="error")throw x;if(!x.noteSnapshot)throw new Error("SNAPSHOT_NOT_FOUND");return x.noteSnapshot},enabled:!!l&&d==="content"}),A=C.data?.contentAsMarkdown.trim()??"";i.useEffect(()=>{l&&f.current?.focus()},[l]);const k=(x,b)=>{m(b),u(x)},w=()=>{u(null),m("diff"),t()};return a.jsxs(O,{isOpen:e,onClose:w,variant:"inspect",children:[a.jsx(O.Header,{title:h?d==="diff"?"Snapshot Diff":"Snapshot Content":"Restore Previous Version",onClose:w}),a.jsx(O.Description,{className:"sr-only",children:h?d==="diff"?"Review the markdown diff between this snapshot and the current note.":"Read this snapshot content before restoring it.":"Choose a previous snapshot to restore."}),a.jsx(O.Body,{children:h?a.jsxs("div",{className:"flex flex-col gap-3",children:[a.jsxs("div",{className:"min-w-0",children:[a.jsx(S,{as:"p",variant:"body",weight:"semibold",truncate:!0,children:h.title}),a.jsxs(S,{as:"p",variant:"label",tone:"tertiary",children:["Before"," ",wt(h.meta.label,h.meta.entrypoint)," ","edit - ",G(h.createdAt).format("YYYY-MM-DD HH:mm:ss")]})]}),a.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.jsx(M,{variant:d==="diff"?"primary":"subtle",size:"sm",onClick:()=>m("diff"),children:"Show diff"}),a.jsx(M,{variant:d==="content"?"primary":"subtle",size:"sm",onClick:()=>m("content"),children:"View content"})]}),d==="diff"?v.isLoading?a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"Loading snapshot diff..."}):v.isError?a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"Snapshot diff could not be loaded."}):v.data?a.jsxs("div",{className:"flex flex-col gap-2",children:[a.jsx(S,{as:"p",variant:"meta",tone:"secondary",children:"Changes from this snapshot to the current note. Red lines were in the snapshot; green lines are in the current note."}),a.jsx("pre",{className:"max-h-[60vh] overflow-y-auto overflow-x-hidden whitespace-pre-wrap break-words rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-0 py-3 text-xs leading-5 text-fg-secondary",children:v.data.diff.markdown.split(`
|
|
15
|
+
`).map((x,b)=>{const j=x.startsWith("+")&&!x.startsWith("+++")?"bg-emerald-500/12 text-emerald-700 dark:text-emerald-200":x.startsWith("-")&&!x.startsWith("---")?"bg-rose-500/12 text-rose-700 dark:text-rose-200":x.startsWith("@@")?"bg-sky-500/12 text-sky-700 dark:text-sky-200":"text-fg-secondary";return a.jsx("span",{className:`block min-w-full whitespace-pre-wrap break-words px-4 ${j}`,children:x||" "},`${b}-${x}`)})})]}):null:C.isLoading?a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"Loading snapshot content..."}):C.isError?a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"Snapshot content could not be loaded."}):A?a.jsx("pre",{className:"max-h-[60vh] overflow-auto whitespace-pre-wrap break-words rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3 text-sm leading-6 text-fg-secondary",children:A}):a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"No readable content was found for this snapshot."})]}):a.jsxs("div",{className:"flex flex-col gap-3",children:[a.jsx(S,{as:"p",variant:"meta",tone:"secondary",children:"Choose a previous snapshot to restore this note back to that state."}),g.isLoading&&a.jsx(S,{as:"div",variant:"meta",tone:"secondary",children:"Loading previous versions..."}),!g.isLoading&&g.data?.length===0&&a.jsx(S,{as:"div",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"A recovery snapshot appears before the first edit in a session. Up to 10 recent snapshots are kept for 7 days, and identical versions are skipped."}),!g.isLoading&&g.data&&g.data.length>0&&a.jsx("div",{className:"flex flex-col gap-2",children:g.data.map(x=>a.jsx(Er,{padding:"compact",children:a.jsxs("div",{className:"flex flex-col gap-3",children:[a.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[a.jsxs("div",{className:"min-w-0",children:[a.jsxs(S,{as:"p",variant:"body",weight:"semibold",children:["Before"," ",wt(x.meta.label,x.meta.entrypoint)," ","edit"]}),a.jsx(S,{as:"p",variant:"meta",truncate:!0,tone:"secondary",children:x.title}),a.jsx(S,{as:"p",variant:"label",tone:"tertiary",children:G(x.createdAt).format("YYYY-MM-DD HH:mm:ss")})]}),a.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2 sm:justify-end",children:[a.jsx(M,{variant:"subtle",size:"sm",onClick:()=>k(x.id,"diff"),children:"Compare"}),a.jsx(M,{size:"sm",isLoading:p.isPending,onClick:()=>p.mutate(x.id),children:"Restore"})]})]}),x.contentPreview&&a.jsx("div",{className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-3 py-2",children:a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"line-clamp-4 whitespace-pre-wrap break-words",children:x.contentPreview})})]})},x.id))})]})}),h&&a.jsx(O.Footer,{children:a.jsxs(Pe,{children:[a.jsx(M,{ref:f,variant:"subtle",onClick:()=>{u(null),m("diff")},children:"Back"}),a.jsx(M,{isLoading:p.isPending,onClick:()=>p.mutate(h.id),children:"Restore this version"})]})})]})}function Ls({noteId:e}){const[n,t]=i.useState(!1),[s,r]=i.useState(!1),[o,c]=i.useState("create"),[l,u]=i.useState(void 0),{onCreate:d,onUpdate:m,onDelete:f}=kr(),g=()=>{c("create"),u(void 0),r(!0)},p=w=>{c("edit"),u(w),r(!0)},h=(w,x,b)=>{o==="create"?d(e,w,x,()=>{r(!1)},b):o==="edit"&&l&&m(l.id,e,{reminderDate:w,priority:x,content:b},()=>{r(!1)})},v=w=>{m(w.id,e,{completed:!w.completed})},C=w=>{const x=G(Number(w)),b=G();return x.isSame(b,"day")?`Today at ${x.format("HH:mm")}`:x.isSame(b.add(1,"day"),"day")?`Tomorrow at ${x.format("HH:mm")}`:x.format("YYYY-MM-DD HH:mm")},A=w=>{const x=G(Number(w)),b=G(),j=x.diff(b,"hour");return j<=6?"high":j<=24?"medium":"low"},k=w=>{const x=G(Number(w)),b=G(),j=x.diff(b,"hour"),B=x.diff(b,"minute")%60;return j<0||B<0?"Overdue":j===0?`${B}m remaining`:`${j}h ${B}m remaining`};return a.jsxs(a.Fragment,{children:[a.jsx(Wt,{title:"Reminders",icon:a.jsx(fr,{className:"h-3.5 w-3.5"}),action:a.jsxs(a.Fragment,{children:[!n&&a.jsxs(M,{size:"sm",variant:"ghost",onClick:g,children:[a.jsx(Tr,{className:"w-3 h-3"}),a.jsx(S,{as:"span",variant:"label",className:"hidden sm:inline",children:"Add"})]}),a.jsxs(M,{type:"button",size:"sm",variant:"ghost","aria-label":n?"Expand reminders":"Collapse reminders","aria-expanded":!n,onClick:()=>t(!n),children:[n?a.jsx(er,{className:"h-3.5 w-3.5"}):a.jsx(tr,{className:"h-3.5 w-3.5"}),n?"Expand":"Collapse"]})]}),children:!n&&a.jsx(ts,{noteId:e,searchParams:{offset:0,limit:9999},render:({reminders:w,totalCount:x})=>a.jsx("div",{className:"flex flex-col gap-2",children:w.length===0?a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"py-3 text-center",children:x===0?"No reminders yet":"All reminders complete"}):a.jsx("div",{className:"flex flex-col",children:w.map(b=>{const j=b.priority||A(b.reminderDate),B=k(b.reminderDate),H=B==="Overdue";return a.jsxs("div",{className:U("flex items-center gap-2.5 px-2 py-1.5"),children:[a.jsx(Ft,{checked:b.completed,onChange:()=>v(b),size:"sm","aria-label":`Reminder: ${b.content||C(b.reminderDate)}`}),a.jsx(S,{as:"div",variant:"body",weight:"medium",className:U("truncate flex-1 min-w-0",b.completed&&"line-through opacity-40"),children:b.content||C(b.reminderDate)}),a.jsxs("div",{className:U("shrink-0 flex items-center gap-1",b.completed&&"opacity-40"),children:[b.content&&a.jsx(S,{as:"span",variant:"meta",tone:"secondary",children:C(b.reminderDate)}),!b.completed&&a.jsx(S,{as:"span",variant:"label",weight:"medium",tone:H||j==="high"?"error":"tertiary",className:U(b.content&&'before:content-["·"] before:mr-1'),children:B})]}),a.jsx(Bt,{button:a.jsx($t,{label:"Reminder actions"}),items:[{name:"Edit",onClick:()=>p(b)},{name:"Delete",onClick:()=>f(b.id,e)}]})]},b.id)})})})})}),a.jsx(jr,{isOpen:s,onClose:()=>r(!1),onSave:h,reminder:l,mode:o})]})}const _s=e=>[{title:"Diagram",subtext:"Create a flowchart or diagram with Mermaid syntax",onItemClick:()=>{xt(e,{type:"codeBlock",props:{language:"mermaid"}})},aliases:["mermaid","diagram","flowchart","sequence"],group:"Other",icon:a.jsx(Qt,{})},{title:"Math Formula",subtext:"Write a formula with KaTeX or LaTeX",onItemClick:()=>{xt(e,{type:"codeBlock",props:{language:"math"}})},aliases:["math","formula","equation","katex","latex"],group:"Other",icon:a.jsx(Jt,{})}],Ps=({editor:e})=>a.jsx(ct,{triggerCharacter:"/",getItems:async n=>Or([...Mr(e).filter(t=>t.title!=="Audio"&&t.title!=="Video"&&t.title!=="File"),..._s(e),{title:"Table of Contents",subtext:"Insert a table of contents based on headings",onItemClick:()=>{e.insertBlocks([{type:"tableOfContents"}],e.getTextCursorPosition().block,"after")},aliases:["toc","table of contents","contents","outline","index"],group:"Other",icon:a.jsx(Ut,{})}],n)}),Os=(e,n)=>n?e.filter(t=>t.id!==n):e,Bs=({currentNoteId:e,onClick:n})=>a.jsx(ct,{triggerCharacter:"[",getItems:async t=>{const s=await nr({query:t,limit:5});return s.type==="error"?[]:Os(s.allNotes.notes,e).map(o=>({title:o.title,onItemClick:()=>n({type:"reference",props:{id:o.id,title:o.title}})}))}});let Ct,Nt;const Fs=()=>(Ct??=Je(async()=>{const{default:e}=await import("./mermaid.core-BfUQM5vF.js").then(n=>n.bc);return{default:e}},__vite__mapDeps([0,1,2,3])).then(({default:e})=>e),Ct),Hs=()=>(Nt??=Promise.all([Je(()=>import("./katex-x288kqHd.js"),[]),Je(()=>Promise.resolve({}),__vite__mapDeps([4]))]).then(([{default:e}])=>e),Nt),Is=e=>{const n=e?.trim().toLowerCase();return n==="mermaid"?"mermaid":n==="math"||n==="katex"||n==="latex"?"math":null},$s=e=>`ocean-brain-mermaid-${e.replace(/[^a-zA-Z0-9_-]/g,"")||"diagram"}`,Us=async(e,n,t,s="light")=>{if(e==="mermaid"){const o=await Fs();o.initialize({securityLevel:"strict",startOnLoad:!1,suppressErrorRendering:!0,theme:s==="dark"?"dark":"default"});const c=await o.render($s(t),n);return{html:c.svg,bindFunctions:c.bindFunctions}}return{html:(await Hs()).renderToString(n,{displayMode:!0,output:"htmlAndMathml",strict:"warn",throwOnError:!0,trust:!1})}},zs={floating:"pointer-events-auto inline-flex h-7 cursor-pointer select-none items-center gap-1.5 rounded-[8px] border border-white/10 bg-white/10 px-2.5 text-xs font-medium text-white/60 opacity-75 shadow-[0_8px_18px_-14px_rgba(0,0,0,0.45)] backdrop-blur-sm transition-colors hover:bg-white/20 hover:text-white/90 hover:opacity-100 focus-ring-soft focus:text-white/90 focus:opacity-100",toolbar:"focus-ring-soft inline-flex h-8 cursor-pointer select-none items-center gap-1.5 rounded-[8px] border border-transparent px-2.5 text-xs font-semibold text-fg-secondary outline-none transition-colors hover:border-border-subtle hover:bg-hover-subtle hover:text-fg-default"},Vs={idle:"",copied:"text-accent-success hover:text-accent-success focus:text-accent-success",failed:"text-fg-error hover:text-fg-error focus:text-fg-error"},Zs={idle:"Copy",copied:"Copied",failed:"Copy failed"},St=({getText:e,resetDelayMs:n=2e3,variant:t="floating"})=>{const[s,r]=i.useState("idle"),o=i.useRef(null),c=i.useCallback(()=>{o.current&&(clearTimeout(o.current),o.current=null)},[]),l=i.useCallback(()=>{c(),o.current=setTimeout(()=>{r("idle"),o.current=null},n)},[c,n]);i.useEffect(()=>c,[c]);const u=f=>{f.stopPropagation()},d=f=>{f.preventDefault(),f.stopPropagation()},m=async f=>{u(f);try{await navigator.clipboard.writeText(e()),r("copied")}catch{r("failed")}l()};return a.jsx("div",{className:U(t==="floating"&&"pointer-events-none absolute right-3 top-2 z-[1]"),contentEditable:!1,onMouseDown:d,children:a.jsxs("button",{type:"button",className:U(zs[t],Vs[s]),contentEditable:!1,onClick:m,children:[a.jsx(Ir,{className:"h-3.5 w-3.5"}),a.jsx("span",{"aria-live":"polite",children:Zs[s]})]})})},Ws=({kind:e,source:n})=>{const t=i.useId(),s=i.useRef(null),r=Ht(d=>d.theme),[o,c]=i.useState(()=>typeof IntersectionObserver>"u"),[l,u]=i.useState({status:"idle"});return i.useEffect(()=>{const d=s.current;if(o||!d||typeof IntersectionObserver>"u"){c(!0);return}const m=new IntersectionObserver(([f])=>{f?.isIntersecting&&(c(!0),m.disconnect())},{rootMargin:"240px"});return m.observe(d),()=>m.disconnect()},[o]),i.useEffect(()=>{if(!o)return;let d=!1;return u({status:"loading"}),Us(e,n,t,r).then(m=>{d||u({status:"success",...m})}).catch(()=>{d||u({status:"error"})}),()=>{d=!0}},[e,t,o,n,r]),i.useEffect(()=>{l.status==="success"&&l.bindFunctions&&s.current&&l.bindFunctions(s.current)},[l]),a.jsxs("div",{ref:s,"data-rich-code-preview":!0,className:"min-h-24 w-full overflow-auto bg-surface px-4 py-5 text-fg-default sm:px-6 sm:py-6",contentEditable:!1,"aria-label":e==="mermaid"?"Mermaid diagram preview":"Math formula preview",children:[l.status==="success"&&a.jsx("div",{className:"[&_.katex-display]:m-0 [&_svg]:mx-auto [&_svg]:block [&_svg]:h-auto [&_svg]:max-h-[min(68vh,640px)] [&_svg]:max-w-full",dangerouslySetInnerHTML:{__html:l.html}}),(l.status==="idle"||l.status==="loading")&&a.jsx("div",{className:"flex min-h-8 items-center justify-center text-sm text-black/55",children:"Rendering preview…"}),l.status==="error"&&a.jsxs("div",{className:"text-left",children:[a.jsx("p",{className:"mb-3 text-sm text-red-700",children:"Preview could not be rendered. The source is preserved."}),a.jsx("pre",{className:"overflow-x-auto whitespace-pre-wrap rounded-[6px] bg-black/5 p-4 text-sm text-black",children:a.jsx("code",{children:n})})]})]})},Et="focus-ring-soft inline-flex h-8 cursor-pointer select-none items-center gap-1.5 rounded-[8px] border px-2.5 text-xs font-semibold outline-none transition-colors",et=e=>typeof e=="string"?e:!e||typeof e!="object"?"":"text"in e&&typeof e.text=="string"?e.text:"content"in e?Array.isArray(e.content)?e.content.map(et).join(""):et(e.content):"",Ks=({block:e,contentRef:n})=>{const t=i.useRef(null),s=Is(e.props.language),r=e.content.map(et).join(""),[o,c]=i.useState(r),[l,u]=i.useState(r.length===0),d=s!==null&&!l,m=s==="mermaid"?"Diagram":"Math Formula",f=`${m} controls`,g=i.useCallback(h=>{t.current=h,n(h)},[n]);i.useEffect(()=>{const h=t.current;if(!h)return;const v=()=>c(h.textContent??""),C=new MutationObserver(v);return C.observe(h,{characterData:!0,childList:!0,subtree:!0}),()=>C.disconnect()},[]);const p=h=>{h.preventDefault(),h.stopPropagation()};return a.jsxs(a.Fragment,{children:[s&&a.jsxs("div",{role:"toolbar","aria-label":f,"data-rich-code-toolbar":!0,className:"flex min-h-11 w-full flex-wrap items-center justify-between gap-2 border-b border-border-subtle bg-elevated px-3 py-1.5 text-fg-secondary",contentEditable:!1,onMouseDown:p,children:[a.jsxs("div",{className:"flex min-w-0 items-center gap-2 px-1 text-xs font-semibold text-fg-secondary",children:[s==="mermaid"?a.jsx(Qt,{className:"h-4 w-4 shrink-0 text-fg-tertiary"}):a.jsx(Jt,{className:"h-4 w-4 shrink-0 text-fg-tertiary"}),a.jsx("span",{className:"truncate",children:m})]}),a.jsxs("div",{className:"flex items-center gap-1",children:[a.jsxs("div",{className:"flex items-center gap-0.5 rounded-[10px] border border-border-subtle bg-hover-subtle/55 p-0.5",children:[a.jsxs("button",{type:"button","aria-pressed":l,className:U(Et,l?"border-border-secondary/70 bg-elevated text-fg-default shadow-[0_8px_18px_-16px_rgba(15,18,24,0.28)]":"border-transparent text-fg-secondary hover:bg-hover-subtle hover:text-fg-default"),contentEditable:!1,onClick:h=>{h.stopPropagation(),u(!0)},children:[a.jsx(Jr,{className:"h-3.5 w-3.5"}),"Edit"]}),a.jsxs("button",{type:"button","aria-pressed":d,className:U(Et,d?"border-border-secondary/70 bg-elevated text-fg-default shadow-[0_8px_18px_-16px_rgba(15,18,24,0.28)]":"border-transparent text-fg-secondary hover:bg-hover-subtle hover:text-fg-default"),contentEditable:!1,onClick:h=>{h.stopPropagation(),u(!1)},children:[a.jsx(pr,{className:"h-3.5 w-3.5"}),"Preview"]})]}),a.jsx(St,{variant:"toolbar",getText:()=>t.current?.textContent?.trimEnd()??""})]})]}),a.jsx("pre",{className:U(d&&"hidden",s&&"bg-[#181b20]"),children:a.jsx("code",{ref:g})}),s&&d&&a.jsx(Ws,{kind:s,source:o}),!s&&a.jsx(St,{getText:()=>t.current?.textContent?.trimEnd()??""})]})},Ys="focus-ring-soft inline-flex cursor-pointer items-center rounded-[8px] border border-border-subtle bg-[color-mix(in_srgb,var(--elevated)_72%,var(--hover-subtle))] px-2 py-0.5 text-xs font-semibold text-fg-secondary transition-colors hover:border-border-secondary hover:bg-elevated hover:text-fg-default dark:bg-[color-mix(in_srgb,var(--elevated)_82%,var(--hover-subtle))]",Qs={type:"reference",propSchema:{id:{default:""},title:{default:"Unknown"}},content:"none"};function qs(e){const n=It(),t=()=>{e.editor.blur(),n({to:Oe,params:{id:e.inlineContent.props.id}})},s=r=>{r.preventDefault(),r.stopPropagation()};return a.jsx("span",{role:"link",tabIndex:0,contentEditable:!1,className:Ys,onMouseDown:s,onClick:r=>{s(r),t()},onKeyDown:r=>{r.key!=="Enter"&&r.key!==" "||(s(r),t())},children:a.jsxs("span",{children:["[",e.inlineContent.props.title,"]"]})})}const Gs=Kt(Qs,{render:e=>a.jsx(qs,{...e})}),Js=()=>{const e=Dr(),[n,t]=i.useState([]),s={1:"pl-3",2:"pl-[26px]",3:"pl-[40px]",4:"pl-[54px]",5:"pl-[68px]",6:"pl-[82px]"};i.useEffect(()=>{const c=()=>{const u=e.document,d=[],m=f=>{for(const g of f){if(g.type==="heading"){const p=g,h=p.props.level||1,v=p.content?.map(C=>C.text||"").join("")||"";v.trim()&&d.push({id:g.id,level:h,text:v})}g.children&&Array.isArray(g.children)&&m(g.children)}};m(u),t(d)};c();const l=e.onChange?.(c);return()=>{l&&l()}},[e]);const r=c=>{e.setTextCursorPosition(c);const l=document.querySelector(`[data-id="${c}"]`);if(l){const u=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;l.scrollIntoView({behavior:u?"auto":"smooth",block:"center"})}},o=a.jsx($r,{icon:a.jsx(Ut,{className:"h-3.5 w-3.5"}),title:"Table of Contents",className:"text-fg-tertiary"});return n.length===0?a.jsxs("div",{className:"surface-base w-full p-4",children:[o,a.jsx(S,{as:"p",variant:"meta",tone:"secondary",className:"mt-2",children:"Add headings to your document to generate a table of contents"})]}):a.jsxs("div",{className:"surface-base w-full p-4",children:[a.jsx("div",{className:"mb-2",children:o}),a.jsx("nav",{className:"space-y-0.5",children:n.map(c=>{const l=c.level===1;return a.jsxs("button",{type:"button",onClick:()=>r(c.id),className:U("focus-ring-soft","flex","w-full","items-center","gap-2","rounded-[10px]","px-2.5","py-1.5",s[c.level]??"pl-2.5","text-left","transition-colors","hover:bg-hover-subtle",l?"text-fg-default":"text-fg-secondary"),children:[a.jsxs(S,{as:"span",variant:"label",weight:"medium",tone:"tertiary",className:"min-w-[1.5rem]",children:["H",c.level]}),a.jsx(S,{as:"span",variant:"body",weight:l?"semibold":"medium",className:"line-clamp-2 text-current",children:c.text})]},c.id)})})]})},Xs=Yt({type:"tableOfContents",propSchema:{},content:"none"},{render:()=>a.jsx(Js,{})})(),ea="focus-ring-soft inline-flex cursor-pointer items-center rounded-[8px] border border-border-subtle bg-emphasis px-2 py-0.5 text-xs font-semibold text-fg-secondary transition-colors hover:border-border-secondary hover:bg-hover-subtle hover:text-fg-default dark:bg-emphasis",ta={type:"tag",propSchema:{id:{default:""},tag:{default:"@Unknown"}},content:"none"};function na(e){const n=It(),t=()=>{e.editor.blur(),n({to:Nr,params:{id:e.inlineContent.props.id},search:{page:1}})},s=r=>{r.preventDefault(),r.stopPropagation()};return a.jsx("span",{role:"link",tabIndex:0,contentEditable:!1,className:ea,onMouseDown:s,onClick:r=>{s(r),t()},onKeyDown:r=>{r.key!=="Enter"&&r.key!==" "||(s(r),t())},children:a.jsx("span",{children:e.inlineContent.props.tag})})}const ra=Kt(ta,{render:e=>a.jsx(na,{...e})}),sa=e=>e,aa=e=>e,oa=sa({tag:ra,reference:Gs}),ia=aa({tableOfContents:Xs}),le=Ce.codeBlock,At=Yt(le.config,{meta:le.implementation.meta,parse:le.implementation.parse,parseContent:le.implementation.parseContent,runsBefore:le.implementation.runsBefore,render:Ks})(),ca={...At,extensions:le.extensions,implementation:{...At.implementation,toExternalHTML:le.implementation.toExternalHTML}},la={...Ce.image,implementation:{...Ce.image.implementation,meta:{...Ce.image.implementation.meta,fileBlockAccept:[...yr]}}},da=Br.create({inlineContentSpecs:{...Fr,...oa},blockSpecs:{...Ce,image:la,codeBlock:ca,...ia}}),ua=(e,n)=>n.some(t=>t.name===`@${e}`),fa=({onClick:e})=>a.jsx(ct,{triggerCharacter:"@",getItems:async n=>{const t=await Ur({query:n,limit:5});if(t.type==="error")return[];const{tags:s}=t.allTags,r=ua(n,s),o=[{title:"Add a new tag",onItemClick:async()=>{const c=await zr({name:"@"+n});if(c.type==="error")return;const{id:l,name:u}=c.createTag;e({type:"tag",props:{id:l,tag:u}})}}];return s.length===0?o:s.map(c=>({title:c.name,onItemClick:()=>e({type:"tag",props:{id:c.id,tag:c.name}})})).concat(n&&!r?o:[])}}),pa=/^ {0,3}(`{3,}|~{3,})/,ma=/<[^<>\n]*>/g,xn=/~+/g,yn=/[\p{L}\p{M}\p{N}\p{Sc}%‰.,+\-/:°℃℉µμ·²³^]/u,tt=new RegExp("^(?:[+-]?\\p{Sc}?|\\p{Sc}[+-]?)\\p{N}","u"),bn=/&#(?:x[0-9a-f]+|\d+);/giu,ha=new Set(["Files","blocknote/html","vscode-editor-data"]),Rt="OBTILDE",kt="",ga=[/(^|\n) {0,3}#{1,6} {1,8}[^\n]{1,64}\r?\n\r?\n\s{0,32}\S/,/(_|__|\*|\*\*|~~|==|\+\+)(?!\s)(?:[^\s](?:.{0,62}[^\s])?|\S)(?=\1)/,/\[[^\]]{1,128}\]\(https?:\/\/\S{1,999}\)/,/(?:\s|^)`(?!\s)(?:[^\s`](?:[^`]{0,46}[^\s`])?|[^\s`])`([^\w]|$)/,/(?:^|\n)\s{0,5}-\s{1}[^\n]+\n\s{0,15}-\s/,/(?:^|\n)\s{0,5}\d+\.\s{1}[^\n]+\n\s{0,15}\d+\.\s/,/\n{2} {0,3}-{2,48}\n{2}/,/(?:\n|^)(```|~~~|\$\$)(?!`|~)[^\s]{0,64} {0,64}[^\n]{0,64}\n[\s\S]{0,9999}?\s*\1 {0,64}(?:\n+|$)/,/(?:\n|^)(?!\s)\w[^\n]{0,64}\n(-|=)\1{0,64}\n\n\s{0,64}(\w|$)/,/(?:^|(\r?\n\r?\n))( {0,3}>[^\n]{1,333}\n){1,999}($|(\r?\n))/],xa=e=>e.split(`
|
|
16
16
|
`).some(n=>{const t=n.trim();return t.length>2&&t.startsWith("|")&&t.endsWith("|")}),ya=e=>ga.some(n=>n.test(e))||xa(e),ba=e=>e.endsWith(`\r
|
|
17
17
|
`)?{body:e.slice(0,-2),ending:`\r
|
|
18
18
|
`}:e.endsWith(`
|
|
19
|
-
`)||e.endsWith("\r")?{body:e.slice(0,-1),ending:e.slice(-1)}:{body:e,ending:""},vn=(e,n,t)=>{let s=n;for(;e[s]===t;)s+=1;return s-n},wn=e=>{const n=e.slice(2,-1),t=n[0]?.toLowerCase()==="x",s=Number.parseInt(t?n.slice(1):n,t?16:10);return!Number.isSafeInteger(s)||s<0||s>1114111?e:String.fromCodePoint(s)},va=e=>{const n=e.replace(bn,wn),t=e.toLowerCase();let s=0,r=`${Rt}${s}${kt}`;for(;e.includes(r)||t.includes(encodeURIComponent(r).toLowerCase())||n.includes(r);)s+=1,r=`${Rt}${s}${kt}`;return r},wa=(e,n,t)=>t-n>2?!1:Cn(e,n)&&Na(e,t),jt=(e,n)=>{let t=n;for(;t>0&&yn.test(e[t-1]??"");)t-=1;return{start:t,token:e.slice(t,n)}},Ca=(e,n)=>{let t=n;for(;t<e.length&&yn.test(e[t]??"");)t+=1;return e.slice(n,t)},Cn=(e,n)=>{const t=jt(e,n);if(tt.test(t.token))return!0;if(!t.token)return!1;let s=t.start;for(;s>0&&(e[s-1]===" "||e[s-1]===" ");)s-=1;return s===t.start?!1:tt.test(jt(e,s).token)},Na=(e,n)=>tt.test(Ca(e,n)),Nn=e=>{const n=[],t=new Set;for(const s of e.matchAll(xn)){const r=s.index,o=s[0].length,c=r+o;if(o>2)continue;const l=c<e.length&&!/\s/u.test(e[c]??""),u=r>0&&!/\s/u.test(e[r-1]??"");if(wa(e,r,c)){if(u&&t.delete(o))continue;n.push({length:o,start:r});continue}u&&t.delete(o)||l&&Cn(e,r)&&t.add(o)}return n},Ke=(e,n)=>{let t="",s=0;const r=new Set(Nn(e).map(o=>o.start));for(const o of e.matchAll(xn)){const c=o.index,l=c+o[0].length;t+=e.slice(s,c),t+=r.has(c)?n.repeat(o[0].length):o[0],s=l}return t+e.slice(s)},Sa=e=>{const n=e.slice(1,-1),t=/^[a-z][a-z0-9.+-]{1,31}:[^\s<>]*$/i.test(n)||/^[^\s@<>]+@[^\s@<>]+\.[^\s@<>]+$/.test(n),s=/^<\/?[a-z][\w:-]*(?:\s[^<>]*)?\/?\s*>$/i.test(e)||/^<![^<>]*>$/.test(e);return t||s},Ea=(e,n)=>{let t="",s=0;for(const r of e.matchAll(ma)){const o=r.index;t+=Ke(e.slice(s,o),n),t+=Sa(r[0])?r[0]:Ke(r[0],n),s=o+r[0].length}return t+Ke(e.slice(s),n)},Sn=e=>Nn(e).length>0,Aa=e=>{if(!Sn(e))return yt(e);const n=va(e),t=Ea(e,n),s=encodeURIComponent(n);return yt(t).split(n).join("~").split(s).join("~")},Ra=(e,n)=>{let t=0;for(let s=n-1;s>=0&&e[s]==="\\";s-=1)t+=1;return t%2===1},ka=(e,n,t)=>{let s=n+t;for(;s<e.length;){const r=e.indexOf("`",s);if(r===-1)return null;const o=vn(e,r,"`");if(o===t)return r+o;s=r+o}return null},ja=(e,n)=>{let t=e.indexOf("`",n);for(;t!==-1;){const s=vn(e,t,"`");if(!Ra(e,t)){const r=ka(e,t,s);if(r!==null)return{start:t,end:r}}t=e.indexOf("`",t+s)}return null},Ta=(e,n)=>{let t="",s=0;for(;s<e.length;){const r=ja(e,s);if(!r){t+=n(e.slice(s));break}t+=n(e.slice(s,r.start)),t+=e.slice(r.start,r.end),s=r.end}return t},En=(e,n)=>{let t=null;return e.split(new RegExp("(?<=\\n)")).map(s=>{const{body:r,ending:o}=ba(s);if(t)return new RegExp(`^ {0,3}${t.marker}{${t.length},} *$`).test(r)&&(t=null),s;const c=r.match(pa)?.[1];return c?(t={marker:c[0],length:c.length},s):`${Ta(r,n)}${o}`}).join("")},Ma=(e,n)=>{let t=0;for(let s=n;s<e.length;s+=1){const r=e[s];if(r==="\\"){s+=1;continue}if(r==="("){t+=1;continue}if(r===")"){if(t>0){t-=1;continue}return s}}return null},An=e=>{let n="",t=0;for(;t<e.length;){const s=e.indexOf("](",t);if(s===-1){n+=e.slice(t);break}const r=s+2,o=Ma(e,r);if(o===null){n+=e.slice(t);break}n+=e.slice(t,r),n+=e.slice(r,o).split("\\&").join("&"),n+=")",t=o+1}return n},Da=(e,n)=>{const t=e[n-1];if(t!=="*"&&t!=="_")return!1;let s=n-1;for(;s>0&&e[s-1]===t;)s-=1;const r=e.slice(s,n),o=e.lastIndexOf(r,s-1);return o!==-1&&o+r.length<s},La=(e,n)=>{const t=e[n];if(t!=="*"&&t!=="_")return!1;let s=n+1;for(;s<e.length&&e[s]===t;)s+=1;const r=e.slice(n,s),o=e.indexOf(r,s);return o!==-1&&s<o},_a=(e,n,t)=>Da(e,n)||La(e,n+t),Pa=e=>En(e,n=>{const t=n.replace(bn,(s,r,o)=>_a(o,r,s.length)?wn(s):s);return An(t)}),Oa=e=>En(e,An),Ba=e=>{const n=e.getData("text/plain");n&&(e.setData("text/markdown",n),e.setData("text/plain",Pa(n)))},Fa=({event:e,editor:n,defaultPasteHandler:t})=>{const s=e.clipboardData;if(!s||n.getTextCursorPosition().block.type==="codeBlock")return t();const r=Array.from(s.types);if(r.some(l=>ha.has(l)))return t();const o=r.includes("text/markdown"),c=s.getData(o?"text/markdown":"text/plain");return!c||!Sn(c)||!o&&r.includes("text/html")&&!ya(c)?t():(n.pasteHTML(Aa(c)),!0)},Ha=new Set(["tableOfContents"]),Ia="OCEAN_BRAIN_TAG_",$a="_TOKEN",Tt=e=>`${Ia}${e}${$a}`,Ua=e=>{const n=JSON.stringify(e);let t=0;return()=>{let s=Tt(t);for(;n.includes(s);)t+=1,s=Tt(t);return t+=1,s}},za=e=>!Array.isArray(e)&&e?.type==="tableContent",Va=(e,n)=>Array.isArray(e)?e.map(n):za(e)?{...e,rows:e.rows?.map(t=>({...t,cells:t.cells?.map(s=>({...s,content:s.content?.map(n)}))}))}:e,Rn=(e,n)=>e.filter(t=>!Ha.has(t.type)).map(t=>({...t,content:n(t.content),children:t.children?.length?Rn(t.children,n):[]}));function Wa(e){const n=new Map,t=Ua(e);return{blocks:Rn(e,r=>Va(r,o=>{if(o.type==="reference"){const c=String(o.props?.id||""),l=String(o.props?.title||o.props?.id||"");return{type:"text",text:c?`[[${l}]](note:${c})`:`[[${l}]]`,styles:{}}}if(o.type==="tag"){const c=o.props?.tag||"",l=t();return n.set(l,c),{type:"text",text:l,styles:{}}}return o})),placeholderToTag:n}}function Za(e,n){let t=e;for(const[s,r]of n.entries())t=t.split(s).join(`[${r}]`);return t}async function Ka(e){return new Promise((n,t)=>{const s=new FileReader;s.readAsDataURL(e),s.onload=()=>n(s.result),s.onerror=r=>t(r)})}const Ya=128,kn=(e,n)=>e.id===n.id||e.fingerprint===n.fingerprint,jn=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),nt=e=>Array.isArray(e)?e.map(nt):jn(e)?Object.fromEntries(Object.keys(e).sort().map(n=>[n,nt(e[n])])):e,Mt=e=>{const n=[],t=s=>{if(Array.isArray(s))for(const r of s)!jn(r)||typeof r.id!="string"||(n.push({id:r.id,fingerprint:JSON.stringify(nt({type:r.type,props:r.props,content:r.content}))}),t(r.children))};try{t(JSON.parse(e))}catch{}return n},Dt=(e,n)=>{const t=new Set(n.map(r=>r.id)),s=new Set(n.map(r=>r.fingerprint));return e.map((r,o)=>({...r,index:o})).filter(r=>t.has(r.id)||s.has(r.fingerprint))},Qa=(e,n)=>{const t=Dt(e,n),s=Dt(n,e),r=qt(t,s,{comparator:kn}),o=[];let c=0,l=0;const u=(f,g)=>{const p=Math.min(f-c,g-l);for(let h=l;h<g;h++)o.push({id:n[h].id,kind:h-l<p?"modified":"added"})};let d=0,m=0;for(const f of r)if(f.removed)d+=f.value.length;else if(f.added)m+=f.value.length;else{for(let g=0;g<f.value.length;g++){const p=t[d+g],h=s[m+g];u(p.index,h.index),p.fingerprint!==h.fingerprint&&o.push({id:h.id,kind:"modified"}),c=p.index+1,l=h.index+1}d+=f.value.length,m+=f.value.length}return u(e.length,n.length),o};function qa(e,n){const t=Mt(e),s=Mt(n),r=[],o=qt(t,s,{comparator:kn,maxEditLength:Ya});if(!o)return{changes:Qa(t,s)};let c=0,l=0;for(let u=0;u<o.length;u++){const d=o[u];if(d.removed){const m=o[u+1]?.added?o[u+1].value:[],f=Math.min(d.value.length,m.length);for(let g=0;g<f;g++)r.push({id:m[g].id,kind:"modified"});for(const g of m.slice(f))r.push({id:g.id,kind:"added"});c+=d.value.length,m.length&&(l+=m.length,u++)}else if(d.added){for(const m of d.value)r.push({id:m.id,kind:"added"});l+=d.value.length}else{for(let m=0;m<d.value.length;m++)t[c+m].fingerprint!==s[l+m].fingerprint&&r.push({id:s[l+m].id,kind:"modified"});c+=d.value.length,l+=d.value.length}}return{changes:r}}function Lt(e){const n=[];let t=e?.parentElement;for(;t;)(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth)&&n.push({element:t,top:t.scrollTop,left:t.scrollLeft}),t=t.parentElement;return{scroll:n}}function _t(e){for(const{element:n,top:t,left:s}of e?.scroll??[])n.isConnected&&(n.scrollTop=t,n.scrollLeft=s)}const we=new Vr("external-note-changes"),Pt=Hr(({editor:e})=>({key:"externalNoteChanges",prosemirrorPlugins:[new Wr({key:we,state:{init:()=>je.empty,apply:(n,t)=>{const s=n.getMeta(we);return s instanceof je?s:t.map(n.mapping,n.doc)}},props:{decorations:n=>we.getState(n)}})],showChanges(n,t){const{changes:s}=qa(n,JSON.stringify(e.document));e.transact(r=>{const o=[],c=new Map(s.map(u=>[u.id,u.kind]));let l=null;r.doc.descendants((u,d)=>{if(typeof u.attrs.id!="string")return;const m=c.get(u.attrs.id);m&&(l=Math.max(l??0,d+u.nodeSize),o.push(Ze.node(d,d+u.nodeSize,{"data-external-change":m,"aria-label":m==="added"?"Added by MCP":"Updated by MCP"})),u.descendants((f,g)=>{if(typeof f.attrs.id=="string")return!1;if(f.isTextblock){if(f.content.size>0){const p=d+g+2;o.push(Ze.inline(p,p+f.content.size,{class:"note-change-text"}))}return!1}}))}),l!==null&&t&&o.push(Ze.widget(l,()=>{const u=document.createElement("div");u.className="note-change-review",u.contentEditable="false";const d=document.createElement("span");d.className="note-change-status";const m=document.createElement("span");m.className="note-change-status__label",m.textContent="AI changes",d.append(m);const f=document.createElement("button");return f.type="button",f.className="note-change-review__done focus-ring-soft",f.textContent="Done reviewing",f.title="Hide AI change highlights",f.addEventListener("click",t),u.append(d,f),u},{side:1,ignoreSelection:!0,stopEvent:()=>!0})),r.setMeta(we,je.create(r.doc,o))})},clearChanges(){e.transact(n=>n.setMeta(we,je.empty))}})),Ga=i.forwardRef(({content:e,currentNoteId:n,editable:t,onChange:s,externalUpdate:r,onClearChangeMarks:o},c)=>{const{theme:l}=Ht(f=>f),u=_e(),d=Lr({schema:da,extensions:[Pt()],initialContent:e&&JSON.parse(e)||void 0,pasteHandler:f=>Fa(f),uploadFile:async(f,g)=>{const p=()=>{g&&d.getBlock(g)&&d.removeBlocks([g])};if(!br(f.type))throw p(),u(gt),new Error(gt);try{return await Pr({base64:await Ka(f)})}catch(h){throw p(),u(vr),h}}},[u]);i.useLayoutEffect(()=>{const f=d.getExtension(Pt);if(!r){const g=Lt(d.domElement);f?.clearChanges(),_t(g);return}f?.showChanges(r.previousContent,o),_t(r.viewport)},[d,r,o]),i.useImperativeHandle(c,()=>({captureViewport:()=>Lt(d.domElement),getContent:()=>JSON.stringify(d.document),getMarkdown:()=>{const f=Wa(d.document),g=d.blocksToMarkdownLossy(f.blocks);return Oa(Za(g,f.placeholderToTag))},getHtml:()=>d.blocksToHTMLLossy(d.document)}));const m=f=>{Ba(f.clipboardData)};return a.jsxs(_r,{slashMenu:!1,theme:l,editor:d,editable:t,onChange:s,onCopy:m,onCut:m,children:[a.jsx(Ps,{editor:d}),a.jsx(Bs,{currentNoteId:n,onClick:f=>{d.insertInlineContent([f," "])}}),a.jsx(fa,{onClick:f=>{d.insertInlineContent([f," "])}})]})}),Ja=({event:e,noteId:n,editSessionId:t,loadedUpdatedAt:s,acceptedUpdatedAt:r,hasUnsavedChanges:o})=>{if(e.noteId!==n||e.type==="mcp.note.created"||e.type==="integration.note.created")return{type:"ignore"};if(e.source==="web"&&e.editSessionId===t)return{type:"ignore"};if(e.type==="mcp.note.deleted"||e.type==="integration.note.deleted")return{type:"notify",change:{type:"deleted",source:e.source},shouldPauseSave:!1};const c=De(e.updatedAt,s),l=De(e.updatedAt,r);return c!==null&&c<=0||l!==null&&l<=0?{type:"ignore"}:{type:"notify",change:{type:"updated",updatedAt:e.updatedAt,source:e.source},shouldPauseSave:o}},Xa=({change:e,isConflict:n,loadedUpdatedAt:t})=>e?!(e.type==="updated"&&!n&&e.updatedAt===t):!1;function eo({allowNextNavigationRef:e,hasExternalPendingChanges:n,saveStatus:t,flushPendingChanges:s,notify:r}){const o=i.useCallback(async()=>{if(e.current)return e.current=!1,!1;if(t==="conflict")return r("Resolve the note conflict before leaving."),!0;const c=await s();return c==="error"?(r("Save failed. Stay on this note and try again."),!0):c==="conflict"},[e,s,r,t]);Qr({disabled:t==="saved"&&!n,enableBeforeUnload:!1,shouldBlockFn:o})}const dt=e=>`ocean-brain.note-draft.${e}`,to=e=>{if(typeof window>"u")return null;try{const n=window.localStorage.getItem(dt(e));if(!n)return null;const t=JSON.parse(n);return typeof t.title!="string"||typeof t.content!="string"||typeof t.baseUpdatedAt!="string"?null:{title:t.title,content:t.content,baseUpdatedAt:t.baseUpdatedAt,createdAt:typeof t.createdAt=="number"?t.createdAt:Date.now(),...t.layout==="narrow"||t.layout==="wide"||t.layout==="full"?{layout:t.layout}:{}}}catch{return null}},Ye=(e,n)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(dt(e),JSON.stringify(n))}catch{}},Qe=e=>{if(!(typeof window>"u"))try{window.localStorage.removeItem(dt(e))}catch{}},no=1e3,ro="NOTE_UPDATE_CONFLICT";function so({noteId:e,initialContent:n,initialUpdatedAt:t,editSessionIdRef:s,getContent:r,beforeSave:o,hasExternalPendingChanges:c,serverVersionRef:l,executeWrite:u,onSaved:d,onConflict:m,onError:f}){const g=st(),p=i.useRef(null),h=i.useRef(null),v=i.useRef(!1),C=i.useRef(null),A=i.useRef(!1),k=i.useRef(t),w=l??k,x=i.useRef(0),b=i.useRef(!1),j=i.useRef(!0),B=i.useRef(d),H=i.useRef(m),ge=i.useRef(f),Z=i.useRef(o),I=i.useRef(c),xe=i.useRef(u),[oe,ee]=i.useState("saved"),[de,ue]=i.useState(null),L=i.useCallback(()=>{p.current!==null&&(window.clearTimeout(p.current),p.current=null)},[]),P=i.useCallback(R=>{j.current&&ee(R)},[]),Fe=i.useCallback(R=>{w.current=R},[]),Se=i.useCallback((R,_={})=>({title:R,content:r()??n,createdAt:Date.now(),baseUpdatedAt:w.current,..._.layout?{layout:_.layout}:{}}),[r,n]),te=i.useCallback(()=>{h.current&&Ye(e,h.current)},[e]),fe=i.useCallback(R=>{b.current=!0,P("conflict"),H.current(R??w.current)},[P]),J=i.useCallback(async({ignoreConflict:R=!1,silent:_=!1}={})=>{if(v.current)return A.current=!0,C.current??"idle";const ne=h.current!==null,Ae=I.current?.()??!1;if(!ne&&!Ae)return A.current=!1,"idle";const re=x.current;A.current=!1,L(),v.current=!0,_||P("saving");const K=(async()=>{const z=await Z.current?.()??"idle";if(re!==x.current)return"idle";if(z==="error")return v.current=!1,C.current=null,h.current?P("error"):P("saved"),"error";const T=h.current;if(!T)return v.current=!1,C.current=null,P("saved"),z;h.current=null;const Re=async()=>{if(re!==x.current)return"idle";let V;try{V=await Ge({id:e,title:T.title,content:T.content,...T.layout?{layout:T.layout}:{},editSessionId:s.current,...R?{force:!0}:{expectedUpdatedAt:w.current}})}catch{V={type:"error",category:"network",errors:[{code:"NETWORK_ERROR",message:"Failed to save note."}]}}if(re!==x.current)return"idle";if(V.type==="error"){v.current=!1,C.current=null,h.current||(h.current=T),te();const Y=V.errors[0];if(Y.code===ro&&!R){const q=Y.details?.extensions?.currentUpdatedAt;return b.current=!0,!_&&j.current&&(P("conflict"),H.current(q??w.current)),"conflict"}return!_&&j.current&&(P("error"),ge.current(Y.message)),"error"}const se=!_&&j.current,W=D.notes.detail(e);if(await g.cancelQueries({queryKey:W,exact:!0}),re!==x.current)return"idle";v.current=!1,C.current=null,b.current=!1,w.current=V.updateNote.updatedAt,se&&B.current(V.updateNote.updatedAt),g.setQueryData(W,Y=>Y&&{...Y,title:V.updateNote.title,content:T.content,...T.layout?{layout:T.layout}:{},updatedAt:V.updateNote.updatedAt}),zt({noteId:e,updatedAt:V.updateNote.updatedAt,editSessionId:s.current});const F=h.current;return F?.baseUpdatedAt===T.baseUpdatedAt?(h.current={...F,baseUpdatedAt:V.updateNote.updatedAt},te()):F||Qe(e),h.current||Vt(g),se&&(h.current?ee("pending"):ee("saved")),"saved"},ie=xe.current?await xe.current(Re):await Re();return ie?ie==="saved"&&(h.current||A.current)?J({silent:_}):ie:(h.current||(h.current=T),te(),v.current=!1,C.current=null,P("pending"),"idle")})();return C.current=K,K},[L,s,e,te,g,w,P]),ye=i.useCallback((R,_={})=>{if(h.current=R,Ye(e,R),b.current){P("conflict");return}if(P("pending"),L(),_.immediate){J();return}p.current=window.setTimeout(()=>{J()},no)},[L,J,e,P]),He=i.useCallback(R=>{if(h.current=R,Ye(e,R),ue(null),R.baseUpdatedAt!==w.current){fe(w.current);return}ye(R)},[e,ye,fe]),Ie=i.useCallback(()=>{x.current+=1,L(),h.current=null,v.current=!1,C.current=null,A.current=!1,b.current=!1,Qe(e),ue(null),ee("saved")},[L,e]),$e=i.useCallback(()=>{L(),C.current=null,A.current=!1,b.current=!1,P(h.current?"pending":"saved")},[L,P]),Ee=i.useCallback(()=>{Qe(e),ue(null)},[e]),Ue=i.useCallback(()=>h.current,[]),be=i.useCallback(R=>{L(),fe(R)},[L,fe]);return i.useEffect(()=>{Z.current=o,xe.current=u,I.current=c,H.current=m,ge.current=f,B.current=d},[o,u,c,m,f,d]),i.useEffect(()=>(j.current=!0,()=>{j.current=!1}),[]),i.useEffect(()=>{h.current||v.current||b.current||(w.current=t,ee("saved"))},[t]),i.useEffect(()=>{x.current+=1,h.current=null,v.current=!1,C.current=null,A.current=!1,b.current=!1,w.current=t,ue(to(e)),ee("saved")},[e]),i.useEffect(()=>{const R=_=>{!h.current&&!v.current&&!b.current&&!I.current?.()||(_.preventDefault(),_.returnValue="")};return window.addEventListener("beforeunload",R),()=>{window.removeEventListener("beforeunload",R)}},[]),i.useEffect(()=>()=>{L(),h.current&&!b.current&&J({silent:!0})},[L,J]),{saveStatus:oe,localDraft:de,serverUpdatedAtRef:w,hasUnsavedChanges:oe!=="saved",buildDraft:Se,queueSave:ye,flushPendingSave:J,restoreLocalDraft:He,discardLocalDraft:Ee,clearDrafts:Ie,resolveConflict:$e,pauseForConflict:be,getPendingDraft:Ue,setServerUpdatedAt:Fe}}function ao(){const e=i.useRef(Promise.resolve()),n=i.useRef(0),t=i.useRef(0),[s,r]=i.useState(!1),o=i.useCallback(d=>{t.current+=1,r(!0);const m=n.current,f=()=>m===n.current?d():void 0,g=e.current.then(f,f);e.current=g.then(()=>{},()=>{});const p=()=>{t.current-=1,t.current===0&&r(!1)};return g.then(p,p),g},[]),c=i.useCallback(()=>{n.current+=1},[]),l=i.useCallback(()=>e.current,[]),u=i.useCallback(()=>t.current>0,[]);return i.useMemo(()=>({execute:o,invalidatePending:c,drain:l,isBusy:s,hasPendingWrites:u}),[l,o,u,c,s])}const oo="NOTE_UPDATE_CONFLICT",qe=e=>{const n=Ne(e);return G(n??Number(e)).format("YYYY-MM-DD HH:mm:ss")},io=e=>e?.extensions?.currentUpdatedAt;function co({noteId:e,navigateToNote:n,notify:t}){const s=st(),r=i.useRef(null),o=i.useRef(null),[c]=i.useState(bt),l=i.useRef(c),u=i.useRef(null),d=i.useRef(null),m=i.useRef(!1),f=i.useRef(0),g=rt({queryKey:D.notes.detail(e),queryFn:async()=>{const y=await rr(e);if(y.type==="error")throw y;return y.note},gcTime:0}),p=g.data,h=g.refetch,v=i.useRef(p.updatedAt),C=i.useRef(p.updatedAt),[A,k]=i.useState(p.title),[w,x]=i.useState(p.properties),[b,j]=i.useState(p.pinned),[B,H]=i.useState(p.layout||"wide"),ge=i.useRef(B),[Z,I]=i.useState(null),[xe,oe]=i.useState(null),[ee,de]=i.useState(0),[ue,L]=i.useState(null),P=i.useCallback(()=>L(null),[]),[Fe,Se]=i.useState(!1),te=i.useRef(!1),[fe,J]=i.useState(()=>qe(p.updatedAt)),[ye,He]=i.useState(p.updatedAt),[Ie,$e]=i.useState(0),[Ee,Ue]=i.useState(!1),be=i.useRef(!1),{execute:R,invalidatePending:_,drain:ne,isBusy:Ae,hasPendingWrites:re}=ao(),K=i.useCallback(y=>{ge.current=y,H(y)},[]),z=i.useCallback((y,N={})=>{v.current=y,C.current=y,J(qe(y)),He(y),N.confirmSave&&$e(E=>E+1)},[]),T=i.useCallback(async({updatedAt:y,patch:N,confirmSave:E=!0})=>{const $=D.notes.detail(e),ve=f.current;return await s.cancelQueries({queryKey:$,exact:!0}),ve!==f.current?!1:(z(y,{confirmSave:E}),s.setQueryData($,Ve=>Ve&&{...Ve,...N,updatedAt:y}),zt({noteId:e,updatedAt:y,editSessionId:l.current}),Vt(s),!0)},[z,e,s]),Re=i.useCallback(y=>{be.current=y,Ue(y)},[]),ie=i.useCallback(()=>u.current?.flushPendingSave({expectedUpdatedAt:v.current})??Promise.resolve("idle"),[]),V=so({noteId:e,initialContent:p.content,initialUpdatedAt:C.current,editSessionIdRef:l,serverVersionRef:v,executeWrite:R,getContent:()=>r.current?.getContent(),beforeSave:ie,hasExternalPendingChanges:()=>be.current||re(),onSaved:y=>{d.current=null,z(y,{confirmSave:!0})},onConflict:y=>{I({type:"updated",updatedAt:y,source:"unknown"}),t("This note changed elsewhere. Choose how to resolve the draft.")},onError:t}),{saveStatus:se,localDraft:W,serverUpdatedAtRef:F,hasUnsavedChanges:Y,buildDraft:q,queueSave:ae,flushPendingSave:X,restoreLocalDraft:ut,discardLocalDraft:Mn,clearDrafts:pe,resolveConflict:ft,pauseForConflict:me,getPendingDraft:Q}=V,he=Y||Ee||Ae,pt=i.useCallback(async y=>{const N=await X(y);return N==="error"||N==="conflict"||await ne(),N},[ne,X]),Dn=i.useCallback(y=>R(async()=>{const N=await sr({...y,expectedUpdatedAt:v.current});return N.type==="success"&&await T({updatedAt:N.updateNoteProperties.updatedAt,patch:{properties:N.updateNoteProperties.properties}}),N}),[T,R]);eo({allowNextNavigationRef:m,hasExternalPendingChanges:Ee||Ae,saveStatus:se,flushPendingChanges:pt,notify:t}),i.useEffect(()=>{if(he||Q()){p.updatedAt!==F.current&&(De(p.updatedAt,F.current)??0)>0&&me(p.updatedAt);return}const y=C.current;if(!(y&&p.updatedAt!==y&&(De(p.updatedAt,y)??0)<0)&&(j(p.pinned),x(p.properties),K(p.layout||"wide"),k(p.title),y!==p.updatedAt)){const N=r.current?.getContent();z(p.updatedAt),(N===void 0||N!==p.content)&&(L(te.current&&N!==void 0?{previousContent:N,viewport:r.current?.captureViewport()}:null),oe(null),de(E=>E+1)),te.current=!1}},[z,he,Q,p.content,p.layout,p.pinned,p.properties,p.title,p.updatedAt,me,F]),i.useEffect(()=>{Z?.type!=="updated"||he||Q()||se==="conflict"||Z.updatedAt!==p.updatedAt||(z(p.updatedAt),I(null))},[z,Z,Q,he,p.updatedAt,se]),i.useEffect(()=>{let y=!0;const N=mr(E=>{const $=Ja({event:E,noteId:e,editSessionId:l.current,loadedUpdatedAt:p.updatedAt,acceptedUpdatedAt:F.current,hasUnsavedChanges:he||Q()!==null||be.current||re()});$.type!=="ignore"&&($.shouldPauseSave&&$.change.type==="updated"&&me($.change.updatedAt),I($.change),E.type==="mcp.note.updated"&&!$.shouldPauseSave&&(te.current=!0,Se(!1),h().then(ve=>{y&&ve.error&&Se(!0)})))});return()=>{y=!1,N()}},[Q,re,he,p.updatedAt,e,me,h,F]);const Ln=i.useCallback(()=>{ae(q(A))},[q,ae,A]),_n=i.useCallback(y=>{k(y),ae(q(y))},[q,ae]),Pn=i.useCallback(()=>{ae(q(A),{immediate:!0})},[q,ae,A]),On=i.useCallback(async y=>{if(Y){K(y),ae(q(A,{layout:y}),{immediate:!0}),t("Layout will be saved with your draft.");return}const N=await X();N==="error"||N==="conflict"||await R(async()=>{const E=await Ge({id:e,layout:y,editSessionId:l.current,expectedUpdatedAt:F.current});if(E.type==="error"){E.errors[0].code===oo&&(d.current=y,K(y),me(io(E.errors[0].details)??F.current)),t(E.errors[0].message);return}await T({updatedAt:E.updateNote.updatedAt,patch:{layout:y}})&&(d.current=null,K(y),t("Layout has been updated."))})},[T,q,R,X,Y,e,t,me,ae,F,A]),Bn=i.useCallback(async()=>{const y=await X();if(y==="error"||y==="conflict")return;const N=!b;await R(async()=>{const E=await ar(e,N);if(E.type==="error"){t(E.errors[0].message);return}await T({updatedAt:E.pinNote.updatedAt,patch:{pinned:N},confirmSave:!1})&&j(N)})},[T,R,X,b,e,t]),ze=i.useCallback(()=>({id:e,title:A,createdAt:p.createdAt,updatedAt:F.current||p.updatedAt}),[p.createdAt,p.updatedAt,e,F,A]),Fn=i.useCallback(async()=>{const y=r.current?.getMarkdown();if(y===void 0){t("Markdown is not ready yet.");return}try{await navigator.clipboard.writeText(fn(y,ze())),t("Copied note as Markdown.")}catch{t("Failed to copy Markdown.")}},[ze,t]),Hn=i.useCallback(async()=>{u.current?.invalidateInFlightSave(),_(),await ne(),f.current+=1;const y=await h();if(y.error||!y.data){t("Failed to reload the latest note state.");return}u.current?.discardPendingChanges(),pe(),d.current=null,z(y.data.updatedAt),k(y.data.title),x(y.data.properties),K(y.data.layout||"wide"),L(null),oe(null),de(N=>N+1),I(null)},[pe,z,ne,_,t,h]),In=i.useCallback(async()=>{if(Q()){d.current=null,I(null),await X({ignoreConflict:!0});return}const N=d.current;if(!N){I(null),await X({ignoreConflict:!0});return}await R(async()=>{const E=await Ge({id:e,layout:N,editSessionId:l.current,force:!0});if(E.type==="error"){t(E.errors[0].message);return}await T({updatedAt:E.updateNote.updatedAt,patch:{layout:N}})&&(d.current=null,ft(),I(null),K(N))})},[T,R,X,Q,e,t,ft]),$n=i.useCallback(async()=>{const y=Q();if(!y||await ie()==="error")return;const E=await or({title:mt(y.title||"untitled"),content:mt(y.content),layout:y.layout??B});if(E.type==="error"){t(E.errors[0].message);return}m.current=!0,d.current=null,I(null),pe(),Promise.resolve(n(E.createNote.id)).finally(()=>{m.current=!1})},[pe,ie,Q,B,n,t]),Un=i.useCallback(()=>{W&&(k(W.title),W.layout&&K(W.layout),oe(W.content),L(null),de(y=>y+1),ut(W))},[W,ut]),zn=i.useCallback(()=>{},[]),Vn=i.useCallback(async y=>(u.current?.invalidateInFlightSave(),_(),await ne(),f.current+=1,R(async()=>{const N=await ir(y,F.current);if(N.type==="error")return N;const E=N.restoreNoteSnapshot;return await T({updatedAt:E.updatedAt,patch:{title:E.title,content:E.content,layout:E.layout,pinned:E.pinned}})&&(l.current=bt(),u.current?.discardPendingChanges(),pe(),d.current=null,I(null),k(E.title),K(E.layout||"wide"),j(E.pinned),oe(E.content),L(null),de(ve=>ve+1)),N})),[T,pe,ne,R,_]),ke=se==="conflict"&&Z?.type==="updated",Wn=ke?Q():null;return{document:{title:A,titleRef:o,isPinned:b,layout:B,getLayout:()=>ge.current,properties:w,createdAt:qe(p.createdAt),onTitleChange:_n,onLayoutSave:On,onTogglePinned:Bn},editor:{ref:r,key:`${e}:${ee}`,content:xe??p.content,externalUpdate:ue,onClearChangeMarks:P,getContent:()=>r.current?.getContent()??"",getHtml:()=>r.current?.getHtml(),getMarkdown:()=>r.current?.getMarkdown(),onChange:Ln},save:{status:se,lastSavedAt:fe,lastSavedVersion:ye,confirmationRevision:Ie,onManualSave:Pn,flushPendingChanges:pt},recovery:{localDraftCreatedAt:W?G(W.createdAt).format("YYYY-MM-DD HH:mm:ss"):null,onRestoreLocalDraft:Un,onDiscardLocalDraft:Mn,onClonePendingDraft:$n},externalChange:{value:Z,isConflict:ke,hasConflictDraft:Wn!==null,isBlocking:!(Z?.source==="mcp"&&Z.type==="updated"&&!ke&&!Fe)&&Xa({change:Z,isConflict:ke,loadedUpdatedAt:p.updatedAt}),isReloading:g.isRefetching,onReload:Hn,onOverwrite:In},properties:{ref:u,expectedUpdatedAt:F.current,editSessionId:l.current,saveProperties:Dn,onPendingChange:Re,onSaved:zn},exportDocument:{metadata:ze(),onCopyMarkdown:Fn},snapshots:{restore:Vn}}}const Tn=cr(Oe),lo={narrow:"max-w-[640px]",wide:"max-w-[896px]",full:"max-w-full px-4"},uo=a.jsx(ot,{title:"Loading note",variant:"none",children:a.jsxs("main",{className:"mx-auto max-w-[896px]",children:[a.jsx(ce,{className:"mb-8",height:123}),a.jsxs("div",{className:"flex flex-col gap-5",children:[a.jsx(ce,{height:135}),a.jsx(ce,{className:"ml-12",height:320}),a.jsx(ce,{height:107}),a.jsx(ce,{height:100})]})]})});function fo({noteId:e}){return a.jsx(at,{fallback:a.jsx(ce,{height:107}),errorTitle:"Failed to load reminders",errorDescription:"Retry loading reminder details for this note.",renderError:({error:n,retry:t})=>a.jsx(it,{title:"Failed to load reminders",description:"Retry loading reminder details for this note.",error:n,onRetry:t,showBackAction:!1,showHomeAction:!1}),children:a.jsx(Ls,{noteId:e})})}function po({noteId:e}){return a.jsx(at,{fallback:a.jsx(ce,{height:100}),errorTitle:"Failed to load back references",errorDescription:"Retry loading notes that link back here.",renderError:({error:n,retry:t})=>a.jsx(it,{title:"Failed to load back references",description:"Retry loading notes that link back here.",error:n,onRetry:t,showBackAction:!1,showHomeAction:!1}),children:a.jsx(es,{noteId:e,render:n=>n?.length?a.jsx(Zt,{icon:a.jsx(Kr,{className:"h-3.5 w-3.5"}),title:"Back References",children:a.jsx("ul",{className:"flex flex-col",children:n.map(t=>a.jsx("li",{children:a.jsxs(lr,{to:Oe,params:{id:t.id},className:"flex items-center gap-2 rounded-[10px] px-2.5 py-1.5 text-fg-secondary transition-colors hover:bg-hover-subtle hover:text-fg-default",children:[a.jsx(Zr,{className:"h-3.5 w-3.5 shrink-0 text-fg-tertiary"}),a.jsx(S,{as:"span",variant:"body",weight:"medium",className:"text-current",children:t.title})]})},t.id))})}):null})})}function mo({id:e}){const n=_e(),t=Tn.useNavigate(),[s,r]=i.useState(!1),[o,c]=i.useState(!1),[l,u]=i.useState(!1),d=co({noteId:e,notify:n,navigateToNote:H=>t({to:Oe,params:{id:H}})}),{onCreate:m,onDelete:f,deleteWarningDialog:g}=hr(),{document:p,editor:h,save:v,recovery:C,externalChange:A,properties:k,exportDocument:w,snapshots:x}=d,b=()=>t({to:Sr,search:{page:1}}),j=async()=>{const H=await v.flushPendingChanges();H==="error"||H==="conflict"||await f(e,b)},B=async()=>{const H=await v.flushPendingChanges();H==="error"||H==="conflict"||await m(p.titleRef.current?.value||"untitled",h.getContent(),p.getLayout())};return a.jsx(ot,{title:p.title,variant:"none",children:a.jsxs("main",{className:U("mx-auto",lo[p.layout]),children:[a.jsx(os,{title:p.title,titleRef:p.titleRef,isPinned:p.isPinned,createdAt:p.createdAt,saveStatus:v.status,savedAt:v.lastSavedAt,savedVersion:v.lastSavedVersion,saveConfirmationRevision:v.confirmationRevision,onTitleChange:p.onTitleChange,onCopyMarkdown:()=>{w.onCopyMarkdown()},onDownloadDocument:()=>u(!0),onTogglePinned:()=>{p.onTogglePinned()},onChangeLayout:()=>r(!0),onCloneNote:()=>{B()},onRestoreVersion:()=>c(!0),onDelete:()=>{j()},onSave:v.onManualSave}),a.jsx(Ms,{localDraftCreatedAt:C.localDraftCreatedAt,hasSaveError:v.status==="error",onRestoreDraft:C.onRestoreLocalDraft,onDiscardDraft:C.onDiscardLocalDraft,onRetrySave:v.onManualSave,onSaveAsNewNote:()=>{C.onClonePendingDraft()}}),a.jsxs("div",{className:"flex flex-col gap-5",children:[a.jsx(wr,{ref:k.ref,noteId:e,properties:p.properties,expectedUpdatedAt:k.expectedUpdatedAt,editSessionId:k.editSessionId,disabled:v.status!=="saved",saveProperties:k.saveProperties,onPendingChange:k.onPendingChange,onSaved:k.onSaved}),a.jsx(Ga,{ref:h.ref,content:h.content,currentNoteId:e,onChange:h.onChange,externalUpdate:h.externalUpdate,onClearChangeMarks:h.onClearChangeMarks},h.key),a.jsx(fo,{noteId:e}),a.jsx(po,{noteId:e})]}),a.jsx(rs,{isOpen:s,onClose:()=>r(!1),onSave:p.onLayoutSave,currentLayout:p.layout}),a.jsx(Ts,{isOpen:A.isBlocking,isDeleted:A.value?.type==="deleted",isConflict:A.isConflict,hasDraft:A.hasConflictDraft,source:A.value?.source??"unknown",isReloading:A.isReloading,onReload:()=>{A.onReload()},onOverwrite:()=>{A.onOverwrite()},onCloneDraft:()=>{C.onClonePendingDraft()},onOpenTrash:()=>{b()}}),a.jsx(Rs,{isOpen:l,metadata:w.metadata,getHtml:h.getHtml,getMarkdown:h.getMarkdown,onClose:()=>u(!1)}),a.jsx(Ds,{isOpen:o,noteId:e,onClose:()=>c(!1),restoreSnapshot:x.restore}),g]})})}function Oo(){const{id:e}=Tn.useParams();if(!e)throw new Error("Note id is required.");return a.jsx(at,{fallback:uo,errorTitle:"Failed to load note",errorDescription:"Retry loading the note editor.",resetKeys:[e],renderError:({error:n,retry:t})=>a.jsx(ot,{title:"Note",variant:"none",children:a.jsx(it,{title:"Failed to load note",description:"Retry loading the note editor.",error:n,onRetry:t})}),children:a.jsx(mo,{id:e},e)})}export{mo as NoteContent,Oo as default};
|
|
19
|
+
`)||e.endsWith("\r")?{body:e.slice(0,-1),ending:e.slice(-1)}:{body:e,ending:""},vn=(e,n,t)=>{let s=n;for(;e[s]===t;)s+=1;return s-n},wn=e=>{const n=e.slice(2,-1),t=n[0]?.toLowerCase()==="x",s=Number.parseInt(t?n.slice(1):n,t?16:10);return!Number.isSafeInteger(s)||s<0||s>1114111?e:String.fromCodePoint(s)},va=e=>{const n=e.replace(bn,wn),t=e.toLowerCase();let s=0,r=`${Rt}${s}${kt}`;for(;e.includes(r)||t.includes(encodeURIComponent(r).toLowerCase())||n.includes(r);)s+=1,r=`${Rt}${s}${kt}`;return r},wa=(e,n,t)=>t-n>2?!1:Cn(e,n)&&Na(e,t),jt=(e,n)=>{let t=n;for(;t>0&&yn.test(e[t-1]??"");)t-=1;return{start:t,token:e.slice(t,n)}},Ca=(e,n)=>{let t=n;for(;t<e.length&&yn.test(e[t]??"");)t+=1;return e.slice(n,t)},Cn=(e,n)=>{const t=jt(e,n);if(tt.test(t.token))return!0;if(!t.token)return!1;let s=t.start;for(;s>0&&(e[s-1]===" "||e[s-1]===" ");)s-=1;return s===t.start?!1:tt.test(jt(e,s).token)},Na=(e,n)=>tt.test(Ca(e,n)),Nn=e=>{const n=[],t=new Set;for(const s of e.matchAll(xn)){const r=s.index,o=s[0].length,c=r+o;if(o>2)continue;const l=c<e.length&&!/\s/u.test(e[c]??""),u=r>0&&!/\s/u.test(e[r-1]??"");if(wa(e,r,c)){if(u&&t.delete(o))continue;n.push({length:o,start:r});continue}u&&t.delete(o)||l&&Cn(e,r)&&t.add(o)}return n},Ke=(e,n)=>{let t="",s=0;const r=new Set(Nn(e).map(o=>o.start));for(const o of e.matchAll(xn)){const c=o.index,l=c+o[0].length;t+=e.slice(s,c),t+=r.has(c)?n.repeat(o[0].length):o[0],s=l}return t+e.slice(s)},Sa=e=>{const n=e.slice(1,-1),t=/^[a-z][a-z0-9.+-]{1,31}:[^\s<>]*$/i.test(n)||/^[^\s@<>]+@[^\s@<>]+\.[^\s@<>]+$/.test(n),s=/^<\/?[a-z][\w:-]*(?:\s[^<>]*)?\/?\s*>$/i.test(e)||/^<![^<>]*>$/.test(e);return t||s},Ea=(e,n)=>{let t="",s=0;for(const r of e.matchAll(ma)){const o=r.index;t+=Ke(e.slice(s,o),n),t+=Sa(r[0])?r[0]:Ke(r[0],n),s=o+r[0].length}return t+Ke(e.slice(s),n)},Sn=e=>Nn(e).length>0,Aa=e=>{if(!Sn(e))return yt(e);const n=va(e),t=Ea(e,n),s=encodeURIComponent(n);return yt(t).split(n).join("~").split(s).join("~")},Ra=(e,n)=>{let t=0;for(let s=n-1;s>=0&&e[s]==="\\";s-=1)t+=1;return t%2===1},ka=(e,n,t)=>{let s=n+t;for(;s<e.length;){const r=e.indexOf("`",s);if(r===-1)return null;const o=vn(e,r,"`");if(o===t)return r+o;s=r+o}return null},ja=(e,n)=>{let t=e.indexOf("`",n);for(;t!==-1;){const s=vn(e,t,"`");if(!Ra(e,t)){const r=ka(e,t,s);if(r!==null)return{start:t,end:r}}t=e.indexOf("`",t+s)}return null},Ta=(e,n)=>{let t="",s=0;for(;s<e.length;){const r=ja(e,s);if(!r){t+=n(e.slice(s));break}t+=n(e.slice(s,r.start)),t+=e.slice(r.start,r.end),s=r.end}return t},En=(e,n)=>{let t=null;return e.split(new RegExp("(?<=\\n)")).map(s=>{const{body:r,ending:o}=ba(s);if(t)return new RegExp(`^ {0,3}${t.marker}{${t.length},} *$`).test(r)&&(t=null),s;const c=r.match(pa)?.[1];return c?(t={marker:c[0],length:c.length},s):`${Ta(r,n)}${o}`}).join("")},Ma=(e,n)=>{let t=0;for(let s=n;s<e.length;s+=1){const r=e[s];if(r==="\\"){s+=1;continue}if(r==="("){t+=1;continue}if(r===")"){if(t>0){t-=1;continue}return s}}return null},An=e=>{let n="",t=0;for(;t<e.length;){const s=e.indexOf("](",t);if(s===-1){n+=e.slice(t);break}const r=s+2,o=Ma(e,r);if(o===null){n+=e.slice(t);break}n+=e.slice(t,r),n+=e.slice(r,o).split("\\&").join("&"),n+=")",t=o+1}return n},Da=(e,n)=>{const t=e[n-1];if(t!=="*"&&t!=="_")return!1;let s=n-1;for(;s>0&&e[s-1]===t;)s-=1;const r=e.slice(s,n),o=e.lastIndexOf(r,s-1);return o!==-1&&o+r.length<s},La=(e,n)=>{const t=e[n];if(t!=="*"&&t!=="_")return!1;let s=n+1;for(;s<e.length&&e[s]===t;)s+=1;const r=e.slice(n,s),o=e.indexOf(r,s);return o!==-1&&s<o},_a=(e,n,t)=>Da(e,n)||La(e,n+t),Pa=e=>En(e,n=>{const t=n.replace(bn,(s,r,o)=>_a(o,r,s.length)?wn(s):s);return An(t)}),Oa=e=>En(e,An),Ba=e=>{const n=e.getData("text/plain");n&&(e.setData("text/markdown",n),e.setData("text/plain",Pa(n)))},Fa=({event:e,editor:n,defaultPasteHandler:t})=>{const s=e.clipboardData;if(!s||n.getTextCursorPosition().block.type==="codeBlock")return t();const r=Array.from(s.types);if(r.some(l=>ha.has(l)))return t();const o=r.includes("text/markdown"),c=s.getData(o?"text/markdown":"text/plain");return!c||!Sn(c)||!o&&r.includes("text/html")&&!ya(c)?t():(n.pasteHTML(Aa(c)),!0)},Ha=new Set(["tableOfContents"]),Ia="OCEAN_BRAIN_TAG_",$a="_TOKEN",Tt=e=>`${Ia}${e}${$a}`,Ua=e=>{const n=JSON.stringify(e);let t=0;return()=>{let s=Tt(t);for(;n.includes(s);)t+=1,s=Tt(t);return t+=1,s}},za=e=>!Array.isArray(e)&&e?.type==="tableContent",Va=(e,n)=>Array.isArray(e)?e.map(n):za(e)?{...e,rows:e.rows?.map(t=>({...t,cells:t.cells?.map(s=>({...s,content:s.content?.map(n)}))}))}:e,Rn=(e,n)=>e.filter(t=>!Ha.has(t.type)).map(t=>({...t,content:n(t.content),children:t.children?.length?Rn(t.children,n):[]}));function Za(e){const n=new Map,t=Ua(e);return{blocks:Rn(e,r=>Va(r,o=>{if(o.type==="reference"){const c=String(o.props?.id||""),l=String(o.props?.title||o.props?.id||"");return{type:"text",text:c?`[[${l}]](note:${c})`:`[[${l}]]`,styles:{}}}if(o.type==="tag"){const c=o.props?.tag||"",l=t();return n.set(l,c),{type:"text",text:l,styles:{}}}return o})),placeholderToTag:n}}function Wa(e,n){let t=e;for(const[s,r]of n.entries())t=t.split(s).join(`[${r}]`);return t}async function Ka(e){return new Promise((n,t)=>{const s=new FileReader;s.readAsDataURL(e),s.onload=()=>n(s.result),s.onerror=r=>t(r)})}const Ya=128,kn=(e,n)=>e.id===n.id||e.fingerprint===n.fingerprint,jn=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),nt=e=>Array.isArray(e)?e.map(nt):jn(e)?Object.fromEntries(Object.keys(e).sort().map(n=>[n,nt(e[n])])):e,Mt=e=>{const n=[],t=s=>{if(Array.isArray(s))for(const r of s)!jn(r)||typeof r.id!="string"||(n.push({id:r.id,fingerprint:JSON.stringify(nt({type:r.type,props:r.props,content:r.content}))}),t(r.children))};try{t(JSON.parse(e))}catch{}return n},Dt=(e,n)=>{const t=new Set(n.map(r=>r.id)),s=new Set(n.map(r=>r.fingerprint));return e.map((r,o)=>({...r,index:o})).filter(r=>t.has(r.id)||s.has(r.fingerprint))},Qa=(e,n)=>{const t=Dt(e,n),s=Dt(n,e),r=qt(t,s,{comparator:kn}),o=[];let c=0,l=0;const u=(f,g)=>{const p=Math.min(f-c,g-l);for(let h=l;h<g;h++)o.push({id:n[h].id,kind:h-l<p?"modified":"added"})};let d=0,m=0;for(const f of r)if(f.removed)d+=f.value.length;else if(f.added)m+=f.value.length;else{for(let g=0;g<f.value.length;g++){const p=t[d+g],h=s[m+g];u(p.index,h.index),p.fingerprint!==h.fingerprint&&o.push({id:h.id,kind:"modified"}),c=p.index+1,l=h.index+1}d+=f.value.length,m+=f.value.length}return u(e.length,n.length),o};function qa(e,n){const t=Mt(e),s=Mt(n),r=[],o=qt(t,s,{comparator:kn,maxEditLength:Ya});if(!o)return{changes:Qa(t,s)};let c=0,l=0;for(let u=0;u<o.length;u++){const d=o[u];if(d.removed){const m=o[u+1]?.added?o[u+1].value:[],f=Math.min(d.value.length,m.length);for(let g=0;g<f;g++)r.push({id:m[g].id,kind:"modified"});for(const g of m.slice(f))r.push({id:g.id,kind:"added"});c+=d.value.length,m.length&&(l+=m.length,u++)}else if(d.added){for(const m of d.value)r.push({id:m.id,kind:"added"});l+=d.value.length}else{for(let m=0;m<d.value.length;m++)t[c+m].fingerprint!==s[l+m].fingerprint&&r.push({id:s[l+m].id,kind:"modified"});c+=d.value.length,l+=d.value.length}}return{changes:r}}function Lt(e){const n=[];let t=e?.parentElement;for(;t;)(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth)&&n.push({element:t,top:t.scrollTop,left:t.scrollLeft}),t=t.parentElement;return{scroll:n}}function _t(e){for(const{element:n,top:t,left:s}of e?.scroll??[])n.isConnected&&(n.scrollTop=t,n.scrollLeft=s)}const we=new Vr("external-note-changes"),Pt=Hr(({editor:e})=>({key:"externalNoteChanges",prosemirrorPlugins:[new Zr({key:we,state:{init:()=>je.empty,apply:(n,t)=>{const s=n.getMeta(we);return s instanceof je?s:t.map(n.mapping,n.doc)}},props:{decorations:n=>we.getState(n)}})],showChanges(n,t){const{changes:s}=qa(n,JSON.stringify(e.document));e.transact(r=>{const o=[],c=new Map(s.map(u=>[u.id,u.kind]));let l=null;r.doc.descendants((u,d)=>{if(typeof u.attrs.id!="string")return;const m=c.get(u.attrs.id);m&&(l=Math.max(l??0,d+u.nodeSize),o.push(We.node(d,d+u.nodeSize,{"data-external-change":m,"aria-label":m==="added"?"Added by MCP":"Updated by MCP"})),u.descendants((f,g)=>{if(typeof f.attrs.id=="string")return!1;if(f.isTextblock){if(f.content.size>0){const p=d+g+2;o.push(We.inline(p,p+f.content.size,{class:"note-change-text"}))}return!1}}))}),l!==null&&t&&o.push(We.widget(l,()=>{const u=document.createElement("div");u.className="note-change-review",u.contentEditable="false";const d=document.createElement("span");d.className="note-change-status";const m=document.createElement("span");m.className="note-change-status__label",m.textContent="AI changes",d.append(m);const f=document.createElement("button");return f.type="button",f.className="note-change-review__done focus-ring-soft",f.textContent="Done reviewing",f.title="Hide AI change highlights",f.addEventListener("click",t),u.append(d,f),u},{side:1,ignoreSelection:!0,stopEvent:()=>!0})),r.setMeta(we,je.create(r.doc,o))})},clearChanges(){e.transact(n=>n.setMeta(we,je.empty))}})),Ga=i.forwardRef(({content:e,currentNoteId:n,editable:t,onChange:s,externalUpdate:r,onClearChangeMarks:o},c)=>{const{theme:l}=Ht(f=>f),u=_e(),d=Lr({schema:da,extensions:[Pt()],initialContent:e&&JSON.parse(e)||void 0,pasteHandler:f=>Fa(f),uploadFile:async(f,g)=>{const p=()=>{g&&d.getBlock(g)&&d.removeBlocks([g])};if(!br(f.type))throw p(),u(ht),new Error(ht);try{return await Pr({base64:await Ka(f)})}catch(h){throw p(),u(vr),h}}},[u]);i.useLayoutEffect(()=>{const f=d.getExtension(Pt);if(!r){const g=Lt(d.domElement);f?.clearChanges(),_t(g);return}f?.showChanges(r.previousContent,o),_t(r.viewport)},[d,r,o]),i.useImperativeHandle(c,()=>({captureViewport:()=>Lt(d.domElement),getContent:()=>JSON.stringify(d.document),getMarkdown:()=>{const f=Za(d.document),g=d.blocksToMarkdownLossy(f.blocks);return Oa(Wa(g,f.placeholderToTag))},getHtml:()=>d.blocksToHTMLLossy(d.document)}));const m=f=>{Ba(f.clipboardData)};return a.jsxs(_r,{slashMenu:!1,theme:l,editor:d,editable:t,onChange:s,onCopy:m,onCut:m,children:[a.jsx(Ps,{editor:d}),a.jsx(Bs,{currentNoteId:n,onClick:f=>{d.insertInlineContent([f," "])}}),a.jsx(fa,{onClick:f=>{d.insertInlineContent([f," "])}})]})}),Ja=({event:e,noteId:n,editSessionId:t,loadedUpdatedAt:s,acceptedUpdatedAt:r,hasUnsavedChanges:o})=>{if(e.noteId!==n||e.type==="mcp.note.created"||e.type==="integration.note.created")return{type:"ignore"};if(e.source==="web"&&e.editSessionId===t)return{type:"ignore"};if(e.type==="mcp.note.deleted"||e.type==="integration.note.deleted")return{type:"notify",change:{type:"deleted",source:e.source},shouldPauseSave:!1};const c=De(e.updatedAt,s),l=De(e.updatedAt,r);return c!==null&&c<=0||l!==null&&l<=0?{type:"ignore"}:{type:"notify",change:{type:"updated",updatedAt:e.updatedAt,source:e.source},shouldPauseSave:o}},Xa=({change:e,isConflict:n,loadedUpdatedAt:t})=>e?!(e.type==="updated"&&!n&&e.updatedAt===t):!1;function eo({allowNextNavigationRef:e,hasExternalPendingChanges:n,saveStatus:t,flushPendingChanges:s,notify:r}){const o=i.useCallback(async()=>{if(e.current)return e.current=!1,!1;if(t==="conflict")return r("Resolve the note conflict before leaving."),!0;const c=await s();return c==="error"?(r("Save failed. Stay on this note and try again."),!0):c==="conflict"},[e,s,r,t]);Qr({disabled:t==="saved"&&!n,enableBeforeUnload:!1,shouldBlockFn:o})}const dt=e=>`ocean-brain.note-draft.${e}`,to=e=>{if(typeof window>"u")return null;try{const n=window.localStorage.getItem(dt(e));if(!n)return null;const t=JSON.parse(n);return typeof t.title!="string"||typeof t.content!="string"||typeof t.baseUpdatedAt!="string"?null:{title:t.title,content:t.content,baseUpdatedAt:t.baseUpdatedAt,createdAt:typeof t.createdAt=="number"?t.createdAt:Date.now(),...t.layout==="narrow"||t.layout==="wide"||t.layout==="full"?{layout:t.layout}:{}}}catch{return null}},Ye=(e,n)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(dt(e),JSON.stringify(n))}catch{}},Qe=e=>{if(!(typeof window>"u"))try{window.localStorage.removeItem(dt(e))}catch{}},no=1e3,ro="NOTE_UPDATE_CONFLICT";function so({noteId:e,initialContent:n,initialUpdatedAt:t,editSessionIdRef:s,getContent:r,beforeSave:o,hasExternalPendingChanges:c,serverVersionRef:l,executeWrite:u,onSaved:d,onConflict:m,onError:f}){const g=st(),p=i.useRef(null),h=i.useRef(null),v=i.useRef(!1),C=i.useRef(null),A=i.useRef(!1),k=i.useRef(t),w=l??k,x=i.useRef(0),b=i.useRef(!1),j=i.useRef(!0),B=i.useRef(d),H=i.useRef(m),ge=i.useRef(f),W=i.useRef(o),I=i.useRef(c),xe=i.useRef(u),[oe,ee]=i.useState("saved"),[de,ue]=i.useState(null),L=i.useCallback(()=>{p.current!==null&&(window.clearTimeout(p.current),p.current=null)},[]),P=i.useCallback(R=>{j.current&&ee(R)},[]),Fe=i.useCallback(R=>{w.current=R},[]),Se=i.useCallback((R,_={})=>({title:R,content:r()??n,createdAt:Date.now(),baseUpdatedAt:w.current,..._.layout?{layout:_.layout}:{}}),[r,n]),te=i.useCallback(()=>{h.current&&Ye(e,h.current)},[e]),fe=i.useCallback(R=>{b.current=!0,P("conflict"),H.current(R??w.current)},[P]),J=i.useCallback(async({ignoreConflict:R=!1,silent:_=!1}={})=>{if(v.current)return A.current=!0,C.current??"idle";const ne=h.current!==null,Ae=I.current?.()??!1;if(!ne&&!Ae)return A.current=!1,"idle";const re=x.current;A.current=!1,L(),v.current=!0,_||P("saving");const K=(async()=>{const z=await W.current?.()??"idle";if(re!==x.current)return"idle";if(z==="error")return v.current=!1,C.current=null,h.current?P("error"):P("saved"),"error";const T=h.current;if(!T)return v.current=!1,C.current=null,P("saved"),z;h.current=null;const Re=async()=>{if(re!==x.current)return"idle";let V;try{V=await Ge({id:e,title:T.title,content:T.content,...T.layout?{layout:T.layout}:{},editSessionId:s.current,...R?{force:!0}:{expectedUpdatedAt:w.current}})}catch{V={type:"error",category:"network",errors:[{code:"NETWORK_ERROR",message:"Failed to save note."}]}}if(re!==x.current)return"idle";if(V.type==="error"){v.current=!1,C.current=null,h.current||(h.current=T),te();const Y=V.errors[0];if(Y.code===ro&&!R){const q=Y.details?.extensions?.currentUpdatedAt;return b.current=!0,!_&&j.current&&(P("conflict"),H.current(q??w.current)),"conflict"}return!_&&j.current&&(P("error"),ge.current(Y.message)),"error"}const se=!_&&j.current,Z=D.notes.detail(e);if(await g.cancelQueries({queryKey:Z,exact:!0}),re!==x.current)return"idle";v.current=!1,C.current=null,b.current=!1,w.current=V.updateNote.updatedAt,se&&B.current(V.updateNote.updatedAt),g.setQueryData(Z,Y=>Y&&{...Y,title:V.updateNote.title,content:T.content,...T.layout?{layout:T.layout}:{},updatedAt:V.updateNote.updatedAt}),zt({noteId:e,updatedAt:V.updateNote.updatedAt,editSessionId:s.current});const F=h.current;return F?.baseUpdatedAt===T.baseUpdatedAt?(h.current={...F,baseUpdatedAt:V.updateNote.updatedAt},te()):F||Qe(e),h.current||Vt(g),se&&(h.current?ee("pending"):ee("saved")),"saved"},ie=xe.current?await xe.current(Re):await Re();return ie?ie==="saved"&&(h.current||A.current)?J({silent:_}):ie:(h.current||(h.current=T),te(),v.current=!1,C.current=null,P("pending"),"idle")})();return C.current=K,K},[L,s,e,te,g,w,P]),ye=i.useCallback((R,_={})=>{if(h.current=R,Ye(e,R),b.current){P("conflict");return}if(P("pending"),L(),_.immediate){J();return}p.current=window.setTimeout(()=>{J()},no)},[L,J,e,P]),He=i.useCallback(R=>{if(h.current=R,Ye(e,R),ue(null),R.baseUpdatedAt!==w.current){fe(w.current);return}ye(R)},[e,ye,fe]),Ie=i.useCallback(()=>{x.current+=1,L(),h.current=null,v.current=!1,C.current=null,A.current=!1,b.current=!1,Qe(e),ue(null),ee("saved")},[L,e]),$e=i.useCallback(()=>{L(),C.current=null,A.current=!1,b.current=!1,P(h.current?"pending":"saved")},[L,P]),Ee=i.useCallback(()=>{Qe(e),ue(null)},[e]),Ue=i.useCallback(()=>h.current,[]),be=i.useCallback(R=>{L(),fe(R)},[L,fe]);return i.useEffect(()=>{W.current=o,xe.current=u,I.current=c,H.current=m,ge.current=f,B.current=d},[o,u,c,m,f,d]),i.useEffect(()=>(j.current=!0,()=>{j.current=!1}),[]),i.useEffect(()=>{h.current||v.current||b.current||(w.current=t,ee("saved"))},[t]),i.useEffect(()=>{x.current+=1,h.current=null,v.current=!1,C.current=null,A.current=!1,b.current=!1,w.current=t,ue(to(e)),ee("saved")},[e]),i.useEffect(()=>{const R=_=>{!h.current&&!v.current&&!b.current&&!I.current?.()||(_.preventDefault(),_.returnValue="")};return window.addEventListener("beforeunload",R),()=>{window.removeEventListener("beforeunload",R)}},[]),i.useEffect(()=>()=>{L(),h.current&&!b.current&&J({silent:!0})},[L,J]),{saveStatus:oe,localDraft:de,serverUpdatedAtRef:w,hasUnsavedChanges:oe!=="saved",buildDraft:Se,queueSave:ye,flushPendingSave:J,restoreLocalDraft:He,discardLocalDraft:Ee,clearDrafts:Ie,resolveConflict:$e,pauseForConflict:be,getPendingDraft:Ue,setServerUpdatedAt:Fe}}function ao(){const e=i.useRef(Promise.resolve()),n=i.useRef(0),t=i.useRef(0),[s,r]=i.useState(!1),o=i.useCallback(d=>{t.current+=1,r(!0);const m=n.current,f=()=>m===n.current?d():void 0,g=e.current.then(f,f);e.current=g.then(()=>{},()=>{});const p=()=>{t.current-=1,t.current===0&&r(!1)};return g.then(p,p),g},[]),c=i.useCallback(()=>{n.current+=1},[]),l=i.useCallback(()=>e.current,[]),u=i.useCallback(()=>t.current>0,[]);return i.useMemo(()=>({execute:o,invalidatePending:c,drain:l,isBusy:s,hasPendingWrites:u}),[l,o,u,c,s])}const oo="NOTE_UPDATE_CONFLICT",qe=e=>{const n=Ne(e);return G(n??Number(e)).format("YYYY-MM-DD HH:mm:ss")},io=e=>e?.extensions?.currentUpdatedAt;function co({noteId:e,navigateToNote:n,notify:t}){const s=st(),r=i.useRef(null),o=i.useRef(null),[c]=i.useState(bt),l=i.useRef(c),u=i.useRef(null),d=i.useRef(null),m=i.useRef(!1),f=i.useRef(0),g=rt({queryKey:D.notes.detail(e),queryFn:async()=>{const y=await rr(e);if(y.type==="error")throw y;return y.note},gcTime:0}),p=g.data,h=g.refetch,v=i.useRef(p.updatedAt),C=i.useRef(p.updatedAt),[A,k]=i.useState(p.title),[w,x]=i.useState(p.properties),[b,j]=i.useState(p.pinned),[B,H]=i.useState(p.layout||"wide"),ge=i.useRef(B),[W,I]=i.useState(null),[xe,oe]=i.useState(null),[ee,de]=i.useState(0),[ue,L]=i.useState(null),P=i.useCallback(()=>L(null),[]),[Fe,Se]=i.useState(!1),te=i.useRef(!1),[fe,J]=i.useState(()=>qe(p.updatedAt)),[ye,He]=i.useState(p.updatedAt),[Ie,$e]=i.useState(0),[Ee,Ue]=i.useState(!1),be=i.useRef(!1),{execute:R,invalidatePending:_,drain:ne,isBusy:Ae,hasPendingWrites:re}=ao(),K=i.useCallback(y=>{ge.current=y,H(y)},[]),z=i.useCallback((y,N={})=>{v.current=y,C.current=y,J(qe(y)),He(y),N.confirmSave&&$e(E=>E+1)},[]),T=i.useCallback(async({updatedAt:y,patch:N,confirmSave:E=!0})=>{const $=D.notes.detail(e),ve=f.current;return await s.cancelQueries({queryKey:$,exact:!0}),ve!==f.current?!1:(z(y,{confirmSave:E}),s.setQueryData($,Ve=>Ve&&{...Ve,...N,updatedAt:y}),zt({noteId:e,updatedAt:y,editSessionId:l.current}),Vt(s),!0)},[z,e,s]),Re=i.useCallback(y=>{be.current=y,Ue(y)},[]),ie=i.useCallback(()=>u.current?.flushPendingSave({expectedUpdatedAt:v.current})??Promise.resolve("idle"),[]),V=so({noteId:e,initialContent:p.content,initialUpdatedAt:C.current,editSessionIdRef:l,serverVersionRef:v,executeWrite:R,getContent:()=>r.current?.getContent(),beforeSave:ie,hasExternalPendingChanges:()=>be.current||re(),onSaved:y=>{d.current=null,z(y,{confirmSave:!0})},onConflict:y=>{I({type:"updated",updatedAt:y,source:"unknown"}),t("This note changed elsewhere. Choose how to resolve the draft.")},onError:t}),{saveStatus:se,localDraft:Z,serverUpdatedAtRef:F,hasUnsavedChanges:Y,buildDraft:q,queueSave:ae,flushPendingSave:X,restoreLocalDraft:ut,discardLocalDraft:Mn,clearDrafts:pe,resolveConflict:ft,pauseForConflict:me,getPendingDraft:Q}=V,he=Y||Ee||Ae,pt=i.useCallback(async y=>{const N=await X(y);return N==="error"||N==="conflict"||await ne(),N},[ne,X]),Dn=i.useCallback(y=>R(async()=>{const N=await sr({...y,expectedUpdatedAt:v.current});return N.type==="success"&&await T({updatedAt:N.updateNoteProperties.updatedAt,patch:{properties:N.updateNoteProperties.properties}}),N}),[T,R]);eo({allowNextNavigationRef:m,hasExternalPendingChanges:Ee||Ae,saveStatus:se,flushPendingChanges:pt,notify:t}),i.useEffect(()=>{if(he||Q()){p.updatedAt!==F.current&&(De(p.updatedAt,F.current)??0)>0&&me(p.updatedAt);return}const y=C.current;if(!(y&&p.updatedAt!==y&&(De(p.updatedAt,y)??0)<0)&&(j(p.pinned),x(p.properties),K(p.layout||"wide"),k(p.title),y!==p.updatedAt)){const N=r.current?.getContent();z(p.updatedAt),(N===void 0||N!==p.content)&&(L(te.current&&N!==void 0?{previousContent:N,viewport:r.current?.captureViewport()}:null),oe(null),de(E=>E+1)),te.current=!1}},[z,he,Q,p.content,p.layout,p.pinned,p.properties,p.title,p.updatedAt,me,F]),i.useEffect(()=>{W?.type!=="updated"||he||Q()||se==="conflict"||W.updatedAt!==p.updatedAt||(z(p.updatedAt),I(null))},[z,W,Q,he,p.updatedAt,se]),i.useEffect(()=>{let y=!0;const N=mr(E=>{const $=Ja({event:E,noteId:e,editSessionId:l.current,loadedUpdatedAt:p.updatedAt,acceptedUpdatedAt:F.current,hasUnsavedChanges:he||Q()!==null||be.current||re()});$.type!=="ignore"&&($.shouldPauseSave&&$.change.type==="updated"&&me($.change.updatedAt),I($.change),E.type==="mcp.note.updated"&&!$.shouldPauseSave&&(te.current=!0,Se(!1),h().then(ve=>{y&&ve.error&&Se(!0)})))});return()=>{y=!1,N()}},[Q,re,he,p.updatedAt,e,me,h,F]);const Ln=i.useCallback(()=>{ae(q(A))},[q,ae,A]),_n=i.useCallback(y=>{k(y),ae(q(y))},[q,ae]),Pn=i.useCallback(()=>{ae(q(A),{immediate:!0})},[q,ae,A]),On=i.useCallback(async y=>{if(Y){K(y),ae(q(A,{layout:y}),{immediate:!0}),t("Layout will be saved with your draft.");return}const N=await X();N==="error"||N==="conflict"||await R(async()=>{const E=await Ge({id:e,layout:y,editSessionId:l.current,expectedUpdatedAt:F.current});if(E.type==="error"){E.errors[0].code===oo&&(d.current=y,K(y),me(io(E.errors[0].details)??F.current)),t(E.errors[0].message);return}await T({updatedAt:E.updateNote.updatedAt,patch:{layout:y}})&&(d.current=null,K(y),t("Layout has been updated."))})},[T,q,R,X,Y,e,t,me,ae,F,A]),Bn=i.useCallback(async()=>{const y=await X();if(y==="error"||y==="conflict")return;const N=!b;await R(async()=>{const E=await ar(e,N);if(E.type==="error"){t(E.errors[0].message);return}await T({updatedAt:E.pinNote.updatedAt,patch:{pinned:N},confirmSave:!1})&&j(N)})},[T,R,X,b,e,t]),ze=i.useCallback(()=>({id:e,title:A,createdAt:p.createdAt,updatedAt:F.current||p.updatedAt}),[p.createdAt,p.updatedAt,e,F,A]),Fn=i.useCallback(async()=>{const y=r.current?.getMarkdown();if(y===void 0){t("Markdown is not ready yet.");return}try{await navigator.clipboard.writeText(fn(y,ze())),t("Copied note as Markdown.")}catch{t("Failed to copy Markdown.")}},[ze,t]),Hn=i.useCallback(async()=>{u.current?.invalidateInFlightSave(),_(),await ne(),f.current+=1;const y=await h();if(y.error||!y.data){t("Failed to reload the latest note state.");return}u.current?.discardPendingChanges(),pe(),d.current=null,z(y.data.updatedAt),k(y.data.title),x(y.data.properties),K(y.data.layout||"wide"),L(null),oe(null),de(N=>N+1),I(null)},[pe,z,ne,_,t,h]),In=i.useCallback(async()=>{if(Q()){d.current=null,I(null),await X({ignoreConflict:!0});return}const N=d.current;if(!N){I(null),await X({ignoreConflict:!0});return}await R(async()=>{const E=await Ge({id:e,layout:N,editSessionId:l.current,force:!0});if(E.type==="error"){t(E.errors[0].message);return}await T({updatedAt:E.updateNote.updatedAt,patch:{layout:N}})&&(d.current=null,ft(),I(null),K(N))})},[T,R,X,Q,e,t,ft]),$n=i.useCallback(async()=>{const y=Q();if(!y||await ie()==="error")return;const E=await or({title:mt(y.title||"untitled"),content:mt(y.content),layout:y.layout??B});if(E.type==="error"){t(E.errors[0].message);return}m.current=!0,d.current=null,I(null),pe(),Promise.resolve(n(E.createNote.id)).finally(()=>{m.current=!1})},[pe,ie,Q,B,n,t]),Un=i.useCallback(()=>{Z&&(k(Z.title),Z.layout&&K(Z.layout),oe(Z.content),L(null),de(y=>y+1),ut(Z))},[Z,ut]),zn=i.useCallback(()=>{},[]),Vn=i.useCallback(async y=>(u.current?.invalidateInFlightSave(),_(),await ne(),f.current+=1,R(async()=>{const N=await ir(y,F.current);if(N.type==="error")return N;const E=N.restoreNoteSnapshot;return await T({updatedAt:E.updatedAt,patch:{title:E.title,content:E.content,layout:E.layout,pinned:E.pinned}})&&(l.current=bt(),u.current?.discardPendingChanges(),pe(),d.current=null,I(null),k(E.title),K(E.layout||"wide"),j(E.pinned),oe(E.content),L(null),de(ve=>ve+1)),N})),[T,pe,ne,R,_]),ke=se==="conflict"&&W?.type==="updated",Zn=ke?Q():null;return{document:{title:A,titleRef:o,isPinned:b,layout:B,getLayout:()=>ge.current,properties:w,createdAt:qe(p.createdAt),onTitleChange:_n,onLayoutSave:On,onTogglePinned:Bn},editor:{ref:r,key:`${e}:${ee}`,content:xe??p.content,externalUpdate:ue,onClearChangeMarks:P,getContent:()=>r.current?.getContent()??"",getHtml:()=>r.current?.getHtml(),getMarkdown:()=>r.current?.getMarkdown(),onChange:Ln},save:{status:se,lastSavedAt:fe,lastSavedVersion:ye,confirmationRevision:Ie,onManualSave:Pn,flushPendingChanges:pt},recovery:{localDraftCreatedAt:Z?G(Z.createdAt).format("YYYY-MM-DD HH:mm:ss"):null,onRestoreLocalDraft:Un,onDiscardLocalDraft:Mn,onClonePendingDraft:$n},externalChange:{value:W,isConflict:ke,hasConflictDraft:Zn!==null,isBlocking:!(W?.source==="mcp"&&W.type==="updated"&&!ke&&!Fe)&&Xa({change:W,isConflict:ke,loadedUpdatedAt:p.updatedAt}),isReloading:g.isRefetching,onReload:Hn,onOverwrite:In},properties:{ref:u,expectedUpdatedAt:F.current,editSessionId:l.current,saveProperties:Dn,onPendingChange:Re,onSaved:zn},exportDocument:{metadata:ze(),onCopyMarkdown:Fn},snapshots:{restore:Vn}}}const Tn=cr(Oe),lo={narrow:"max-w-[640px]",wide:"max-w-[896px]",full:"max-w-full px-4"},uo=a.jsx(ot,{title:"Loading note",variant:"none",children:a.jsxs("main",{className:"mx-auto max-w-[896px]",children:[a.jsx(ce,{className:"mb-8",height:123}),a.jsxs("div",{className:"flex flex-col gap-5",children:[a.jsx(ce,{height:135}),a.jsx(ce,{className:"ml-12",height:320}),a.jsx(ce,{height:107}),a.jsx(ce,{height:100})]})]})});function fo({noteId:e}){return a.jsx(at,{fallback:a.jsx(ce,{height:107}),errorTitle:"Failed to load reminders",errorDescription:"Retry loading reminder details for this note.",renderError:({error:n,retry:t})=>a.jsx(it,{title:"Failed to load reminders",description:"Retry loading reminder details for this note.",error:n,onRetry:t,showBackAction:!1,showHomeAction:!1}),children:a.jsx(Ls,{noteId:e})})}function po({noteId:e}){return a.jsx(at,{fallback:a.jsx(ce,{height:100}),errorTitle:"Failed to load back references",errorDescription:"Retry loading notes that link back here.",renderError:({error:n,retry:t})=>a.jsx(it,{title:"Failed to load back references",description:"Retry loading notes that link back here.",error:n,onRetry:t,showBackAction:!1,showHomeAction:!1}),children:a.jsx(es,{noteId:e,render:n=>n?.length?a.jsx(Wt,{icon:a.jsx(Kr,{className:"h-3.5 w-3.5"}),title:"Back References",children:a.jsx("ul",{className:"flex flex-col",children:n.map(t=>a.jsx("li",{children:a.jsxs(lr,{to:Oe,params:{id:t.id},className:"flex items-center gap-2 rounded-[10px] px-2.5 py-1.5 text-fg-secondary transition-colors hover:bg-hover-subtle hover:text-fg-default",children:[a.jsx(Wr,{className:"h-3.5 w-3.5 shrink-0 text-fg-tertiary"}),a.jsx(S,{as:"span",variant:"body",weight:"medium",className:"text-current",children:t.title})]})},t.id))})}):null})})}function mo({id:e}){const n=_e(),t=Tn.useNavigate(),[s,r]=i.useState(!1),[o,c]=i.useState(!1),[l,u]=i.useState(!1),d=co({noteId:e,notify:n,navigateToNote:H=>t({to:Oe,params:{id:H}})}),{onCreate:m,onDelete:f,deleteWarningDialog:g}=hr(),{document:p,editor:h,save:v,recovery:C,externalChange:A,properties:k,exportDocument:w,snapshots:x}=d,b=()=>t({to:Sr,search:{page:1}}),j=async()=>{const H=await v.flushPendingChanges();H==="error"||H==="conflict"||await f(e,b)},B=async()=>{const H=await v.flushPendingChanges();H==="error"||H==="conflict"||await m(p.titleRef.current?.value||"untitled",h.getContent(),p.getLayout())};return a.jsx(ot,{title:p.title,variant:"none",children:a.jsxs("main",{className:U("mx-auto",lo[p.layout]),children:[a.jsx(os,{title:p.title,titleRef:p.titleRef,isPinned:p.isPinned,createdAt:p.createdAt,saveStatus:v.status,savedAt:v.lastSavedAt,savedVersion:v.lastSavedVersion,saveConfirmationRevision:v.confirmationRevision,onTitleChange:p.onTitleChange,onCopyMarkdown:()=>{w.onCopyMarkdown()},onDownloadDocument:()=>u(!0),onTogglePinned:()=>{p.onTogglePinned()},onChangeLayout:()=>r(!0),onCloneNote:()=>{B()},onRestoreVersion:()=>c(!0),onDelete:()=>{j()},onSave:v.onManualSave}),a.jsx(Ms,{localDraftCreatedAt:C.localDraftCreatedAt,hasSaveError:v.status==="error",onRestoreDraft:C.onRestoreLocalDraft,onDiscardDraft:C.onDiscardLocalDraft,onRetrySave:v.onManualSave,onSaveAsNewNote:()=>{C.onClonePendingDraft()}}),a.jsxs("div",{className:"flex flex-col gap-5",children:[a.jsx(wr,{ref:k.ref,noteId:e,properties:p.properties,expectedUpdatedAt:k.expectedUpdatedAt,editSessionId:k.editSessionId,disabled:v.status!=="saved",saveProperties:k.saveProperties,onPendingChange:k.onPendingChange,onSaved:k.onSaved}),a.jsx(Ga,{ref:h.ref,content:h.content,currentNoteId:e,onChange:h.onChange,externalUpdate:h.externalUpdate,onClearChangeMarks:h.onClearChangeMarks},h.key),a.jsx(fo,{noteId:e}),a.jsx(po,{noteId:e})]}),a.jsx(rs,{isOpen:s,onClose:()=>r(!1),onSave:p.onLayoutSave,currentLayout:p.layout}),a.jsx(Ts,{isOpen:A.isBlocking,isDeleted:A.value?.type==="deleted",isConflict:A.isConflict,hasDraft:A.hasConflictDraft,source:A.value?.source??"unknown",isReloading:A.isReloading,onReload:()=>{A.onReload()},onOverwrite:()=>{A.onOverwrite()},onCloneDraft:()=>{C.onClonePendingDraft()},onOpenTrash:()=>{b()}}),a.jsx(Rs,{isOpen:l,metadata:w.metadata,getHtml:h.getHtml,getMarkdown:h.getMarkdown,onClose:()=>u(!1)}),a.jsx(Ds,{isOpen:o,noteId:e,onClose:()=>c(!1),restoreSnapshot:x.restore}),g]})})}function Bo(){const{id:e}=Tn.useParams();if(!e)throw new Error("Note id is required.");return a.jsx(at,{fallback:uo,errorTitle:"Failed to load note",errorDescription:"Retry loading the note editor.",resetKeys:[e],renderError:({error:n,retry:t})=>a.jsx(ot,{title:"Note",variant:"none",children:a.jsx(it,{title:"Failed to load note",description:"Retry loading the note editor.",error:n,onRetry:t})}),children:a.jsx(mo,{id:e},e)})}export{mo as NoteContent,Bo as default};
|