ocean-brain 0.12.2 → 0.13.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 +1 -1
- package/server/client/dist/assets/{ArrowRight.es-CD1IMhU2.js → ArrowRight.es-BlNsZQFs.js} +1 -1
- package/server/client/dist/assets/AuxiliaryPanelHeader-HAttwVby.js +1 -0
- package/server/client/dist/assets/Calendar-CaeK7gTz.js +25 -0
- package/server/client/dist/assets/Callout-CcYyvHQP.js +1 -0
- package/server/client/dist/assets/CaretUp.es-C8iY5OlB.js +1 -0
- package/server/client/dist/assets/{CheckCircle.es-C7fkzE3t.js → CheckCircle.es-Dqr3WImn.js} +1 -1
- package/server/client/dist/assets/{Copy.es-D6rl6b78.js → Copy.es-fMv0ETir.js} +1 -1
- package/server/client/dist/assets/{File.es-CcjtzE38.js → File.es-CHtXXafR.js} +1 -1
- package/server/client/dist/assets/FileText.es-DPIwDCEe.js +1 -0
- package/server/client/dist/assets/{FlowArrow.es-CAIThqWk.js → FlowArrow.es-Dxee98ir.js} +1 -1
- package/server/client/dist/assets/Graph-CdEu8eAn.js +46 -0
- package/server/client/dist/assets/Graph-hVj6vAYJ.js +1 -0
- package/server/client/dist/assets/{Image.es-BDpo5R66.js → Image.es-CjXY1JVf.js} +1 -1
- package/server/client/dist/assets/Info.es-CYxg-Vku.js +1 -0
- package/server/client/dist/assets/LinkSimple.es-B-P-7Iem.js +1 -0
- package/server/client/dist/assets/{Note-Dq2Szaxd.js → Note-CGI-Y1__.js} +4 -4
- package/server/client/dist/assets/{NotePropertiesPanel-Cu3RgDic.js → NotePropertiesPanel-6P7UfRBR.js} +2 -2
- package/server/client/dist/assets/{Plus.es-P9Fjwtud.js → Plus.es-Dy6onD-Z.js} +1 -1
- package/server/client/dist/assets/Reminders-DnuALBL6.js +1 -0
- package/server/client/dist/assets/{Search-DVROxY_B.js → Search-DAYHxAml.js} +2 -2
- package/server/client/dist/assets/{SurfaceCard-D_OU_Oy6.js → SurfaceCard-D5QxOte_.js} +1 -1
- package/server/client/dist/assets/Tag-CG8b0l1j.js +1 -0
- package/server/client/dist/assets/TagNotes-COyaVsdn.js +1 -0
- package/server/client/dist/assets/{Trash.es-BeR1sZMe.js → Trash.es-XEcWG_aq.js} +1 -1
- package/server/client/dist/assets/{ViewChip-D-Ax5PdL.js → ViewChip-BVkZAXyx.js} +1 -1
- package/server/client/dist/assets/Views-BPxlw3vk.js +1 -0
- package/server/client/dist/assets/app-BezcjTfd.js +151 -0
- package/server/client/dist/assets/app-DjDwGe0t.css +1 -0
- package/server/client/dist/assets/calendar-data-wB0ifXdo.js +1 -0
- package/server/client/dist/assets/{image.api-CtfyPwkV.js → image.api-ChvlfuZg.js} +1 -1
- package/server/client/dist/assets/index-CzZFedXj.js +1 -0
- package/server/client/dist/assets/{manage-image-m-7v_Z1W.js → manage-image-CSJ3Flgc.js} +1 -1
- package/server/client/dist/assets/manage-image-detail-9hRTiAsR.js +1 -0
- package/server/client/dist/assets/{mcp-admin-adapter-Cw6w5mfg.js → mcp-admin-adapter-D0R8p9az.js} +1 -1
- package/server/client/dist/assets/{mcp-B-aGeAQD.js → mcp-ugdCKa6H.js} +1 -1
- package/server/client/dist/assets/{note-ui-CYsZc3DI.js → note-ui-BaqzP-YU.js} +1 -1
- package/server/client/dist/assets/placeholder-CZoqs4S3.js +34 -0
- package/server/client/dist/assets/{properties-B93_V2uD.js → properties-B7Fv95qY.js} +1 -1
- package/server/client/dist/assets/route-preload.js +2 -2
- package/server/client/dist/assets/{search-admin-adapter-Dj0KKKrJ.js → search-admin-adapter-Daf7e2YQ.js} +1 -1
- package/server/client/dist/assets/search-ddYl3qH-.js +1 -0
- package/server/client/dist/assets/{tag.api-BJ6eaHui.js → tag.api-DEUROVKQ.js} +1 -1
- package/server/client/dist/assets/time-PxWila4-.js +361 -0
- package/server/client/dist/assets/trash-BHida7BG.js +1 -0
- package/server/client/dist/assets/{url-BvjSC8PU.js → url-DKUMNVCI.js} +1 -1
- package/server/client/dist/assets/useNoteMutate-BjvZUmtX.js +9 -0
- package/server/client/dist/assets/{useReminderMutate-kTBRSjYc.js → useReminderMutate-C5n-5LM-.js} +2 -2
- package/server/client/dist/index.html +6 -6
- package/server/dist/features/note/services/properties.js +32 -8
- package/server/dist/features/view/graphql/view.query.resolver.js +20 -0
- package/server/dist/features/view/graphql/view.type-defs.js +17 -0
- package/server/dist/features/view/services/workspace.js +116 -1
- package/server/client/dist/assets/AuxiliaryPanelHeader-zoJGsYWR.js +0 -1
- package/server/client/dist/assets/Calendar-6otw_EJn.js +0 -25
- package/server/client/dist/assets/Callout-C1QiCWCa.js +0 -1
- package/server/client/dist/assets/Graph-BHsmPDPh.js +0 -46
- package/server/client/dist/assets/Reminders-DKm0GFI2.js +0 -1
- package/server/client/dist/assets/Tag-wMHTRwlF.js +0 -1
- package/server/client/dist/assets/TagNotes-BRza6i14.js +0 -1
- package/server/client/dist/assets/Views-CL7rC05G.js +0 -1
- package/server/client/dist/assets/app-CyQtGTtn.js +0 -139
- package/server/client/dist/assets/app-DGFNtdpS.css +0 -1
- package/server/client/dist/assets/index-BEfKfbvr.js +0 -1
- package/server/client/dist/assets/manage-image-detail-BNYOCSmu.js +0 -1
- package/server/client/dist/assets/placeholder-C5fNzKrL.js +0 -34
- package/server/client/dist/assets/search-BmXuuK26.js +0 -1
- package/server/client/dist/assets/sortable.esm-DgSW3bAA.js +0 -5
- package/server/client/dist/assets/time-DI902Sxa.js +0 -361
- package/server/client/dist/assets/trash-GulvRh9f.js +0 -1
- package/server/client/dist/assets/useNoteMutate-xEIypxi5.js +0 -9
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-C2tL9tq7.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 o,j as a}from"./floating-ui.react-dom-BWTnA00G.js";import{al as jn,C as vt,T as S,i as Ye,n as An,q as _,M as B,B as k,am as En,an as kn,c as V,K as wt,J as Ct,V as Tn,e as je,u as Qe,m as G,ao as Mn,ap as Dn,aq as Ln,a2 as _n,s as Pn,ar as On,a1 as Nt,ah as St,as as ze,at as Bn,W as Fn,ai as Hn,aj as $n,au as In,Q as qe,P as Ge,av as Je,h as Un,l as ie,F as zn}from"./time-DI902Sxa.js";import{M as Ae,f as Rt,m as Zn,a as Fe,b as Vn,s as Wn,k as jt,l as Kn,p as At,j as Et,o as Yn,r as rt,d as Qn}from"./useNoteMutate-xEIypxi5.js";import{m as qn,c as Gn,C as st}from"./Callout-C1QiCWCa.js";import{J as kt,g as Jn,A as Tt,S as Xn,i as er,U as at,F as tr,N as nr}from"./NotePropertiesPanel-Cu3RgDic.js";import{N as Ee,T as rr,S as sr}from"./url-BvjSC8PU.js";import{S as ar}from"./SurfaceCard-D_OU_Oy6.js";import{b as or,c as ir,u as cr,R as lr}from"./useReminderMutate-kTBRSjYc.js";import{n as dr}from"./Plus.es-P9Fjwtud.js";import{h as Xe,m as ur,L as Mt,Z as Dt,M as fr,K as pr,a as mr}from"./note-ui-CYsZc3DI.js";import{u as hr}from"./image.api-CtfyPwkV.js";import{L as gr,t as ot,q as xr,B as he,G as br,y as it}from"./note-core-DUTqUh5N.js";import{s as Lt}from"./FlowArrow.es-CAIThqWk.js";import{_ as Ze}from"./preload-helper-BXl3LOEh.js";import{s as yr}from"./Copy.es-D6rl6b78.js";import{A as vr,p as wr}from"./AuxiliaryPanelHeader-zoJGsYWR.js";import{f as Cr,c as Nr}from"./tag.api-BJ6eaHui.js";import{cn as ct}from"./note-runtime-zN5ddTba.js";import{s as Sr}from"./File.es-CcjtzE38.js";function Rr(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 jr(e,n){const{shouldBlockFn:t,enableBeforeUnload:s=!0,disabled:r=!1,withResolver:i=!1}=Rr(e),c=jn(),{history:l}=c,[f,d]=o.useState({status:"idle",current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0});return o.useEffect(()=>{const m=async x=>{function b(A){const w=c.parseLocation(A),p=c.getMatchedRoutes(w.pathname);return p.foundRoute===void 0?{routeId:"__notFound__",fullPath:w.pathname,pathname:w.pathname,params:p.routeParams,search:c.options.parseSearch(A.search)}:{routeId:p.foundRoute.id,fullPath:p.foundRoute.fullPath,pathname:w.pathname,params:p.routeParams,search:c.options.parseSearch(A.search)}}const u=b(x.currentLocation),h=b(x.nextLocation);if(u.routeId==="__notFound__"&&h.routeId!=="__notFound__")return!1;const v=await t({action:x.action,current:u,next:h});if(!i)return v;if(!v)return!1;const R=await new Promise(A=>{d({status:"blocked",current:u,next:h,action:x.action,proceed:()=>A(!1),reset:()=>A(!0)})});return d({status:"idle",current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0}),R};return r?void 0:l.block({blockerFn:m,enableBeforeUnload:s})},[t,s,r,i,l,c]),f}const Ar=new Map([["bold",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.createElement("path",{d:"M200,40V200a16,16,0,0,1-16,16H56V56A16,16,0,0,1,72,40Z",opacity:"0.2"}),o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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"}))]]),Er=new Map([["bold",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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"}),o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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"}))]]),_t=o.forwardRef((e,n)=>o.createElement(vt,{ref:n,...e,weights:Ar}));_t.displayName="FunctionIcon";const Pt=_t,Ot=o.forwardRef((e,n)=>o.createElement(vt,{ref:n,...e,weights:Er}));Ot.displayName="PencilLineIcon";const kr=Ot;function Tr({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 Mr=e=>{const{data:n}=Ye({queryKey:_.notes.backReferences(e.noteId),async queryFn(){const t=await An(e.noteId);if(t.type==="error")throw t;return t.backReferences}});return e.render(n)};function Dr({noteId:e,searchParams:n,render:t}){const{data:s}=Ye({queryKey:e?_.reminders.note(e,n):_.reminders.upcoming(n),queryFn:async()=>{if(e){const i=await or(e,n);if(i.type==="error")throw i;return i.noteReminders}const r=await ir(n);if(r.type==="error")throw r;return r.upcomingReminders}});return a.jsx(a.Fragment,{children:t(s)})}const Lr=[{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 _r({isOpen:e,onClose:n,onSave:t,currentLayout:s="wide"}){const[r,i]=o.useState(s);o.useEffect(()=>{e&&i(s)},[e,s]);const c=()=>{t(r),n()};return a.jsxs(B,{isOpen:e,onClose:n,variant:"compact",children:[a.jsx(B.Header,{title:"Layout Settings",onClose:n}),a.jsx(B.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:Lr.map(l=>a.jsx(Tr,{title:l.label,description:l.description,selected:r===l.value,onClick:()=>i(l.value)},l.value))})]})})}),a.jsx(B.Footer,{children:a.jsxs(Ae,{children:[a.jsx(k,{variant:"ghost",size:"sm",onClick:n,children:"Cancel"}),a.jsx(k,{variant:"primary",size:"sm",onClick:c,children:"Apply"})]})})]})}const ge=e=>{const n=/^\d+$/.test(e)?Number(e):Date.parse(e);return Number.isFinite(n)?n:null},Se=(e,n)=>{const t=ge(e),s=ge(n);return t===null||s===null?e===n?0:null:t===s?0:t<s?-1:1},Pr=2200;function Or({status:e,savedAt:n,savedVersion:t,confirmationRevision:s}){const[r,i]=o.useState(()=>Date.now()),[c,l]=o.useState(!1);o.useEffect(()=>{if(e!=="saved")return;const u=window.setTimeout(()=>i(Date.now()),En(ge(t),r));return()=>window.clearTimeout(u)},[r,t,e]),o.useEffect(()=>{if(s===0)return;l(!0);const u=window.setTimeout(()=>l(!1),Pr);return()=>window.clearTimeout(u)},[s]);const f=e==="saved"&&c,d=e==="pending"?"Saving...":e==="saving"?"Saving now...":e==="error"?"Save failed. Try again.":e==="conflict"?"Save paused: changed elsewhere":`Saved ${kn(ge(t),r)}`,m=V("inline-flex items-center gap-2 transition-colors",e==="saved"&&!f&&"text-fg-secondary",f&&"text-accent-success",(e==="pending"||e==="saving")&&"text-fg-default",(e==="error"||e==="conflict")&&"text-fg-error"),x=V("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"&&f&&"save-progress-ring-complete",(e==="error"||e==="conflict")&&"save-progress-ring-error"),b=e==="error"||e==="conflict"?a.jsx(qn,{className:"h-3.5 w-3.5",weight:"fill"}):a.jsx("span",{className:x,"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:[b,d]})}function Br({title:e,titleRef:n,isPinned:t,createdAt:s,saveStatus:r,savedAt:i,savedVersion:c,saveConfirmationRevision:l,onTitleChange:f,onCopyMarkdown:d,onDownloadDocument:m,onTogglePinned:x,onChangeLayout:b,onCloneNote:u,onRestoreVersion:h,onDelete:v,onSave:N}){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:R=>f(R.target.value)})]}),a.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[a.jsx(wt,{button:a.jsx(Rt,{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:x},{name:"Change layout",onClick:b},{type:"separator"},{name:"Clone this note",onClick:u},{name:"Restore previous version",onClick:h},{type:"separator"},{name:"Delete",onClick:v}]}),a.jsx(k,{size:"sm",variant:"subtle",isLoading:r==="saving",disabled:r==="conflict",onClick:N,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(Zn,{className:"h-3 w-3",weight:"fill"}),"Pinned"]}),t&&a.jsx("span",{className:"h-1 w-1 rounded-full bg-border-secondary"}),a.jsx(Or,{status:r,savedAt:i,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 Fr="/assets/images/",Hr=120,$r=100,Bt=/^(?:con|prn|aux|nul|com[1-9\u00b9\u00b2\u00b3]|lpt[1-9\u00b9\u00b2\u00b3])(?:\.|$)/i,Ft=e=>{const n=e.codePointAt(0)??0;return n<=31||n>=127&&n<=159},Ht=(e,n)=>{const t=new TextEncoder;let s=0,r="";for(const i of e){const c=t.encode(i).byteLength;if(s+c>n)break;r+=i,s+=c}return r},Ve=e=>e.replace(/^[.\s-]+|[.\s-]+$/g,""),Ir=e=>{let n=Array.from(e.normalize("NFC").trim().toLowerCase(),t=>Ft(t)||/[\\/:*?"<>|\s]/.test(t)?"-":t).join("").replace(/-+/g,"-").replace(/^[.-]+|[.-]+$/g,"");return Bt.test(n)&&(n=`note-${n}`),n=Ve(Ht(n,Hr)),n||"untitled-note"},Ce=e=>JSON.stringify(e),Ne=e=>{const n=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/--/g,"--");return Array.from(n,t=>Ft(t)?`&#${t.codePointAt(0)};`:t).join("")},Re=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()},et=()=>typeof window>"u"||!window.location?.origin?"http://localhost":window.location.origin,ke=(e,n=et())=>{try{const t=new URL(e,n);return t.origin===n&&t.pathname.startsWith(Fr)}catch{return!1}},$t=(e,n=et())=>{const t=new URL(e,n);return`${t.pathname}${t.search}`},Ur=e=>e.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase()??"",zr=(e,n)=>{let t=e.normalize("NFC").trim().replace(/[^\p{L}\p{M}\p{N}._-]+/gu,"-").replace(/-+/g,"-");return t=Ve(t),Bt.test(t)&&(t=`image-${t}`),Ve(Ht(t,$r))||n},Zr=e=>{const n=e.lastIndexOf(".");return n<=0||n===e.length-1?{baseName:e,extension:""}:{baseName:e.slice(0,n),extension:e.slice(n)}},Vr=e=>{try{return decodeURIComponent(e)}catch{return e}},Wr=(e,n,t,s)=>{const i=new URL(e,et()).pathname.split("/").filter(Boolean),c=Vr(i[i.length-1]??""),l=`image-${n+1}`,{baseName:f}=Zr(c||l),d=zr(f,l);let m=`${d}.${t}`,x=2;for(;s.has(m.normalize("NFC").toLowerCase());)m=`${d}-${x}.${t}`,x+=1;return s.add(m.normalize("NFC").toLowerCase()),`assets/${m}`},It=e=>e.replace(/\\([!"#$%&'()*+,\-./:;<=>?@[\]\\^_`{|}~])/g,"$1"),Ut=async(e,n,t,s,r)=>{const i=s.get(n);if(i)return i;const c=await t(n,{credentials:"same-origin"});if(!c.ok)throw new Error(`Failed to fetch image asset: ${n}`);const l=Jn(Ur(c));if(!l)throw new Error(`Image asset did not return image content: ${n}`);const f=Wr(n,s.size,l,r);return e.file(f,new Uint8Array(await c.arrayBuffer())),s.set(n,f),f},Kr=(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},Yr=(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],i=s===0?-1:e.lastIndexOf("<",s-1),c=s===0?-1:e.lastIndexOf(">",s-1);if(i<=c&&(!r||/[\s/>]/.test(r)))return s;t=s+4}return-1},Qr=(e,n,t,s)=>{let r=n;for(;r<t;){for(;r<t&&/[\s/]/.test(e[r]);)r+=1;const i=r;for(;r<t&&/[^\s=/>]/.test(e[r]);)r+=1;const c=e.slice(i,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 f=r;for(;r<t&&/[^\s>]/.test(e[r]);)r+=1;if(c===s)return{end:r,start:f,value:e.slice(f,r)}}},zt=e=>{const n=[];let t=0;for(;t<e.length;){const s=Yr(e,t);if(s===-1)break;const r=Kr(e,s+4);if(r===-1)break;const i=Qr(e,s+4,r,"src");i&&n.push({end:r+1,source:i,start:s}),t=r+1}return n},Zt=(e,n)=>{let t=e;for(const s of[...n].sort((r,i)=>i.start-r.start))t=`${t.slice(0,s.start)}${s.value}${t.slice(s.end)}`;return t},Vt=(e,n)=>{let t=e;for(const s of[...n].sort((r,i)=>i.start-r.start))t=`${t.slice(0,s.start)}${s.value}${t.slice(s.end)}`;return t},Wt=e=>{const n=[];let t=0;for(;t<e.length;){const s=e.indexOf("![",t);if(s===-1)break;let r=s+2,i=1;for(;r<e.length&&i>0&&e[r]!==`
|
|
2
|
+
import{r as o,j as a}from"./floating-ui.react-dom-BWTnA00G.js";import{al as jn,A as vt,T as S,i as Ye,m as An,q as L,M as B,B as k,am as En,an as kn,c as V,N as wt,K as Ct,V as Tn,e as je,u as Qe,ao as Mn,ap as Dn,aq as Ln,J as _n,s as Pn,ar as On,a1 as Nt,ah as St,as as ze,at as Bn,W as Fn,ai as Hn,aj as $n,au as In,Q as qe,P as Ge,av as Je,h as Un,l as ie,D as zn}from"./time-PxWila4-.js";import{M as Ae,h as Rt,m as Zn,a as Fe,b as Vn,d as G,s as Wn,l as jt,o as Kn,p as At,k as Et,q as Yn,r as rt,e as Qn}from"./useNoteMutate-BjvZUmtX.js";import{m as qn,C as st}from"./Callout-CcYyvHQP.js";import{J as kt,g as Gn,A as Tt,S as Jn,i as Xn,U as at,F as er,N as tr}from"./NotePropertiesPanel-6P7UfRBR.js";import{c as nr}from"./Info.es-CYxg-Vku.js";import{N as Ee,T as rr,S as sr}from"./url-DKUMNVCI.js";import{S as ar}from"./SurfaceCard-D5QxOte_.js";import{b as or,c as ir,u as cr,R as lr}from"./useReminderMutate-C5n-5LM-.js";import{n as dr}from"./Plus.es-Dy6onD-Z.js";import{h as Xe,m as ur,L as Mt,Z as Dt,M as fr,K as pr,a as mr}from"./note-ui-BaqzP-YU.js";import{u as hr}from"./image.api-ChvlfuZg.js";import{L as gr,t as ot,q as xr,B as he,G as br,y as it}from"./note-core-DUTqUh5N.js";import{s as Lt}from"./FlowArrow.es-Dxee98ir.js";import{_ as Ze}from"./preload-helper-BXl3LOEh.js";import{s as yr}from"./Copy.es-fMv0ETir.js";import{A as vr}from"./AuxiliaryPanelHeader-HAttwVby.js";import{f as wr,c as Cr}from"./tag.api-DEUROVKQ.js";import{cn as ct}from"./note-runtime-zN5ddTba.js";import{s as Nr}from"./File.es-CHtXXafR.js";import{p as Sr}from"./LinkSimple.es-B-P-7Iem.js";function Rr(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 jr(e,n){const{shouldBlockFn:t,enableBeforeUnload:s=!0,disabled:r=!1,withResolver:i=!1}=Rr(e),c=jn(),{history:l}=c,[f,d]=o.useState({status:"idle",current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0});return o.useEffect(()=>{const m=async x=>{function b(A){const w=c.parseLocation(A),p=c.getMatchedRoutes(w.pathname);return p.foundRoute===void 0?{routeId:"__notFound__",fullPath:w.pathname,pathname:w.pathname,params:p.routeParams,search:c.options.parseSearch(A.search)}:{routeId:p.foundRoute.id,fullPath:p.foundRoute.fullPath,pathname:w.pathname,params:p.routeParams,search:c.options.parseSearch(A.search)}}const u=b(x.currentLocation),h=b(x.nextLocation);if(u.routeId==="__notFound__"&&h.routeId!=="__notFound__")return!1;const v=await t({action:x.action,current:u,next:h});if(!i)return v;if(!v)return!1;const R=await new Promise(A=>{d({status:"blocked",current:u,next:h,action:x.action,proceed:()=>A(!1),reset:()=>A(!0)})});return d({status:"idle",current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0}),R};return r?void 0:l.block({blockerFn:m,enableBeforeUnload:s})},[t,s,r,i,l,c]),f}const Ar=new Map([["bold",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.createElement("path",{d:"M200,40V200a16,16,0,0,1-16,16H56V56A16,16,0,0,1,72,40Z",opacity:"0.2"}),o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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"}))]]),Er=new Map([["bold",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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"}),o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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",o.createElement(o.Fragment,null,o.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"}))]]),_t=o.forwardRef((e,n)=>o.createElement(vt,{ref:n,...e,weights:Ar}));_t.displayName="FunctionIcon";const Pt=_t,Ot=o.forwardRef((e,n)=>o.createElement(vt,{ref:n,...e,weights:Er}));Ot.displayName="PencilLineIcon";const kr=Ot;function Tr({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 Mr=e=>{const{data:n}=Ye({queryKey:L.notes.backReferences(e.noteId),async queryFn(){const t=await An(e.noteId);if(t.type==="error")throw t;return t.backReferences}});return e.render(n)};function Dr({noteId:e,searchParams:n,render:t}){const{data:s}=Ye({queryKey:e?L.reminders.note(e,n):L.reminders.upcoming(n),queryFn:async()=>{if(e){const i=await or(e,n);if(i.type==="error")throw i;return i.noteReminders}const r=await ir(n);if(r.type==="error")throw r;return r.upcomingReminders}});return a.jsx(a.Fragment,{children:t(s)})}const Lr=[{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 _r({isOpen:e,onClose:n,onSave:t,currentLayout:s="wide"}){const[r,i]=o.useState(s);o.useEffect(()=>{e&&i(s)},[e,s]);const c=()=>{t(r),n()};return a.jsxs(B,{isOpen:e,onClose:n,variant:"compact",children:[a.jsx(B.Header,{title:"Layout Settings",onClose:n}),a.jsx(B.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:Lr.map(l=>a.jsx(Tr,{title:l.label,description:l.description,selected:r===l.value,onClick:()=>i(l.value)},l.value))})]})})}),a.jsx(B.Footer,{children:a.jsxs(Ae,{children:[a.jsx(k,{variant:"ghost",size:"sm",onClick:n,children:"Cancel"}),a.jsx(k,{variant:"primary",size:"sm",onClick:c,children:"Apply"})]})})]})}const ge=e=>{const n=/^\d+$/.test(e)?Number(e):Date.parse(e);return Number.isFinite(n)?n:null},Se=(e,n)=>{const t=ge(e),s=ge(n);return t===null||s===null?e===n?0:null:t===s?0:t<s?-1:1},Pr=2200;function Or({status:e,savedAt:n,savedVersion:t,confirmationRevision:s}){const[r,i]=o.useState(()=>Date.now()),[c,l]=o.useState(!1);o.useEffect(()=>{if(e!=="saved")return;const u=window.setTimeout(()=>i(Date.now()),En(ge(t),r));return()=>window.clearTimeout(u)},[r,t,e]),o.useEffect(()=>{if(s===0)return;l(!0);const u=window.setTimeout(()=>l(!1),Pr);return()=>window.clearTimeout(u)},[s]);const f=e==="saved"&&c,d=e==="pending"?"Saving...":e==="saving"?"Saving now...":e==="error"?"Save failed. Try again.":e==="conflict"?"Save paused: changed elsewhere":`Saved ${kn(ge(t),r)}`,m=V("inline-flex items-center gap-2 transition-colors",e==="saved"&&!f&&"text-fg-secondary",f&&"text-accent-success",(e==="pending"||e==="saving")&&"text-fg-default",(e==="error"||e==="conflict")&&"text-fg-error"),x=V("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"&&f&&"save-progress-ring-complete",(e==="error"||e==="conflict")&&"save-progress-ring-error"),b=e==="error"||e==="conflict"?a.jsx(qn,{className:"h-3.5 w-3.5",weight:"fill"}):a.jsx("span",{className:x,"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:[b,d]})}function Br({title:e,titleRef:n,isPinned:t,createdAt:s,saveStatus:r,savedAt:i,savedVersion:c,saveConfirmationRevision:l,onTitleChange:f,onCopyMarkdown:d,onDownloadDocument:m,onTogglePinned:x,onChangeLayout:b,onCloneNote:u,onRestoreVersion:h,onDelete:v,onSave:N}){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:R=>f(R.target.value)})]}),a.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[a.jsx(wt,{button:a.jsx(Rt,{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:x},{name:"Change layout",onClick:b},{type:"separator"},{name:"Clone this note",onClick:u},{name:"Restore previous version",onClick:h},{type:"separator"},{name:"Delete",onClick:v}]}),a.jsx(k,{size:"sm",variant:"subtle",isLoading:r==="saving",disabled:r==="conflict",onClick:N,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(Zn,{className:"h-3 w-3",weight:"fill"}),"Pinned"]}),t&&a.jsx("span",{className:"h-1 w-1 rounded-full bg-border-secondary"}),a.jsx(Or,{status:r,savedAt:i,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 Fr="/assets/images/",Hr=120,$r=100,Bt=/^(?:con|prn|aux|nul|com[1-9\u00b9\u00b2\u00b3]|lpt[1-9\u00b9\u00b2\u00b3])(?:\.|$)/i,Ft=e=>{const n=e.codePointAt(0)??0;return n<=31||n>=127&&n<=159},Ht=(e,n)=>{const t=new TextEncoder;let s=0,r="";for(const i of e){const c=t.encode(i).byteLength;if(s+c>n)break;r+=i,s+=c}return r},Ve=e=>e.replace(/^[.\s-]+|[.\s-]+$/g,""),Ir=e=>{let n=Array.from(e.normalize("NFC").trim().toLowerCase(),t=>Ft(t)||/[\\/:*?"<>|\s]/.test(t)?"-":t).join("").replace(/-+/g,"-").replace(/^[.-]+|[.-]+$/g,"");return Bt.test(n)&&(n=`note-${n}`),n=Ve(Ht(n,Hr)),n||"untitled-note"},Ce=e=>JSON.stringify(e),Ne=e=>{const n=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/--/g,"--");return Array.from(n,t=>Ft(t)?`&#${t.codePointAt(0)};`:t).join("")},Re=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()},et=()=>typeof window>"u"||!window.location?.origin?"http://localhost":window.location.origin,ke=(e,n=et())=>{try{const t=new URL(e,n);return t.origin===n&&t.pathname.startsWith(Fr)}catch{return!1}},$t=(e,n=et())=>{const t=new URL(e,n);return`${t.pathname}${t.search}`},Ur=e=>e.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase()??"",zr=(e,n)=>{let t=e.normalize("NFC").trim().replace(/[^\p{L}\p{M}\p{N}._-]+/gu,"-").replace(/-+/g,"-");return t=Ve(t),Bt.test(t)&&(t=`image-${t}`),Ve(Ht(t,$r))||n},Zr=e=>{const n=e.lastIndexOf(".");return n<=0||n===e.length-1?{baseName:e,extension:""}:{baseName:e.slice(0,n),extension:e.slice(n)}},Vr=e=>{try{return decodeURIComponent(e)}catch{return e}},Wr=(e,n,t,s)=>{const i=new URL(e,et()).pathname.split("/").filter(Boolean),c=Vr(i[i.length-1]??""),l=`image-${n+1}`,{baseName:f}=Zr(c||l),d=zr(f,l);let m=`${d}.${t}`,x=2;for(;s.has(m.normalize("NFC").toLowerCase());)m=`${d}-${x}.${t}`,x+=1;return s.add(m.normalize("NFC").toLowerCase()),`assets/${m}`},It=e=>e.replace(/\\([!"#$%&'()*+,\-./:;<=>?@[\]\\^_`{|}~])/g,"$1"),Ut=async(e,n,t,s,r)=>{const i=s.get(n);if(i)return i;const c=await t(n,{credentials:"same-origin"});if(!c.ok)throw new Error(`Failed to fetch image asset: ${n}`);const l=Gn(Ur(c));if(!l)throw new Error(`Image asset did not return image content: ${n}`);const f=Wr(n,s.size,l,r);return e.file(f,new Uint8Array(await c.arrayBuffer())),s.set(n,f),f},Kr=(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},Yr=(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],i=s===0?-1:e.lastIndexOf("<",s-1),c=s===0?-1:e.lastIndexOf(">",s-1);if(i<=c&&(!r||/[\s/>]/.test(r)))return s;t=s+4}return-1},Qr=(e,n,t,s)=>{let r=n;for(;r<t;){for(;r<t&&/[\s/]/.test(e[r]);)r+=1;const i=r;for(;r<t&&/[^\s=/>]/.test(e[r]);)r+=1;const c=e.slice(i,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 f=r;for(;r<t&&/[^\s>]/.test(e[r]);)r+=1;if(c===s)return{end:r,start:f,value:e.slice(f,r)}}},zt=e=>{const n=[];let t=0;for(;t<e.length;){const s=Yr(e,t);if(s===-1)break;const r=Kr(e,s+4);if(r===-1)break;const i=Qr(e,s+4,r,"src");i&&n.push({end:r+1,source:i,start:s}),t=r+1}return n},Zt=(e,n)=>{let t=e;for(const s of[...n].sort((r,i)=>i.start-r.start))t=`${t.slice(0,s.start)}${s.value}${t.slice(s.end)}`;return t},Vt=(e,n)=>{let t=e;for(const s of[...n].sort((r,i)=>i.start-r.start))t=`${t.slice(0,s.start)}${s.value}${t.slice(s.end)}`;return t},Wt=e=>{const n=[];let t=0;for(;t<e.length;){const s=e.indexOf("![",t);if(s===-1)break;let r=s+2,i=1;for(;r<e.length&&i>0&&e[r]!==`
|
|
3
3
|
`;){if(e[r]==="\\"){r+=2;continue}e[r]==="["?i+=1:e[r]==="]"&&(i-=1),r+=1}if(i!==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 f=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 o,j as a}from"./floating-ui.react-dom-BWTnA00G.js";import{al as jn,C
|
|
|
11
11
|
`)},Kt=(e,n,t=!1)=>t?`${Gr(n)}
|
|
12
12
|
|
|
13
13
|
${e}`:e,Yt=(e,n,{includeMetadata:t=!1}={})=>{const s=Kt(e,n,t),r=Wt(s).filter(i=>ke(It(i.source.value))).map(i=>({end:i.end,start:i.start,value:""}));return Vt(s,r)},Qt=(e,n,{includeMetadata:t=!1}={})=>`${t?["<!--","source: ocean-brain",`note_id: ${Ne(n.id)}`,`title: ${Ne(n.title)}`,`created_at: ${Ne(Re(n.createdAt)??"")}`,`updated_at: ${Ne(Re(n.updatedAt)??"")}`,"-->",""].join(`
|
|
14
|
-
`):""}${e}`,Jr=(e,n,{includeMetadata:t=!1}={})=>{const s=Qt(e,n,{includeMetadata:t}),r=zt(s).filter(i=>ke(i.source.value)).map(i=>({end:i.end,start:i.start,value:""}));return Zt(s,r)},Xr=async(e,n,{fetchImpl:t=fetch,includeMetadata:s=!1}={})=>{const r=new kt,i=Qt(e,n,{includeMetadata:s}),c=zt(i),l=[],f=new Set,d=new Map;for(const{source:m}of c){if(!ke(m.value))continue;const x=$t(m.value),b=await Ut(r,x,t,d,f);l.push({end:m.end,start:m.start,value:`./${b}`})}return r.file("note.html",Zt(i,l)),r.generateAsync({type:"blob"})},es=async(e,n,{fetchImpl:t=fetch,includeMetadata:s=!1}={})=>{const r=new kt,i=Kt(e,n,s),c=Wt(i),l=[],f=new Set,d=new Map;for(const{source:m}of c){const x=It(m.value);if(!ke(x))continue;const b=$t(x),u=await Ut(r,b,t,d,f);l.push({end:m.end,start:m.start,value:`./${u}`})}return r.file("note.md",Vt(i,l)),r.generateAsync({type:"blob"})},ts=(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)}},qt={html:{extension:"html",getContent:e=>e.getHtml(),createDocumentBlob:(e,n)=>new Blob([Jr(e,n.metadata,{includeMetadata:n.includeMetadata})],{type:"text/html;charset=utf-8"}),createZipBlob:(e,n)=>Xr(e,n.metadata,{fetchImpl:n.fetchImpl,includeMetadata:n.includeMetadata})},markdown:{extension:"md",getContent:e=>e.getMarkdown(),createDocumentBlob:(e,n)=>new Blob([Yt(e,n.metadata,{includeMetadata:n.includeMetadata})],{type:"text/markdown;charset=utf-8"}),createZipBlob:(e,n)=>es(e,n.metadata,{fetchImpl:n.fetchImpl,includeMetadata:n.includeMetadata})}},Gt=(e,n)=>n?"zip":qt[e].extension,ns=async e=>{const n=qt[e.format],t=n.getContent(e.source);if(t===void 0)return{type:"not-ready",format:e.format};const s=Gt(e.format,e.includeAssets);return{type:"success",blob:e.includeAssets?await n.createZipBlob(t,e):n.createDocumentBlob(t,e),filename:qr(e.metadata.title,s)}},rs=e=>e==="markdown"?"Markdown is not ready yet.":"HTML is not ready yet.",lt=({checked:e,description:n,id:t,label:s,onChange:r})=>{const i=`${t}-label`;return a.jsxs("div",{className:"flex min-h-6 items-center gap-2",children:[a.jsx(Ct,{id:t,size:"sm",checked:e,onChange:c=>r(c.target.checked),"aria-labelledby":i}),a.jsx("label",{id:i,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(Tn,{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(Gn,{className:"h-3.5 w-3.5"})})})]})};function ss({isOpen:e,metadata:n,getHtml:t,getMarkdown:s,onClose:r}){const i=je(),[c,l]=o.useState("html"),[f,d]=o.useState(!0),[m,x]=o.useState(!1),[b,u]=o.useState(!1),h=Gt(c,f),v=async()=>{u(!0);try{const N=await ns({format:c,includeAssets:f,includeMetadata:m,metadata:n,source:{getHtml:t,getMarkdown:s}});if(N.type==="not-ready"){i(rs(N.format));return}ts(N.blob,N.filename),r(),i("Downloaded note.")}catch{i("Failed to download note.")}finally{u(!1)}};return a.jsxs(B,{isOpen:e,onClose:r,variant:"compact",children:[a.jsx(B.Header,{title:"Download document",onClose:r}),a.jsx(B.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(lt,{id:"note-export-include-assets",label:"Include local image assets",checked:f,onChange:d,description:"Bundle uploaded Ocean Brain images with the document. Without assets, local images are omitted."}),a.jsx(lt,{id:"note-export-include-metadata",label:"Include metadata",checked:m,onChange:x,description:"Add the note title, note id, timestamps, and Ocean Brain source information."})]})]})]})}),a.jsx(B.Footer,{children:a.jsxs(Ae,{children:[a.jsx(k,{variant:"ghost",size:"sm",onClick:r,children:"Cancel"}),a.jsx(k,{variant:"primary",size:"sm",onClick:v,disabled:b,children:b?"Downloading...":`Download .${h}`})]})})]})}const Jt=e=>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"},as=({isDeleted:e,isConflict:n,source:t})=>{const s=Jt(t);return e?`This note was moved to trash ${s.place}`:n?`Save paused: note changed ${s.place}`:`This note changed ${s.place}`},os=({isDeleted:e,isConflict:n,hasDraft:t,source:s})=>{const r=Jt(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 is({isOpen:e,isDeleted:n,isConflict:t,hasDraft:s,source:r,isReloading:i,onReload:c,onOverwrite:l,onCloneDraft:f,onOpenTrash:d}){return a.jsxs(B,{isOpen:e,onClose:()=>{},variant:"inspect",children:[a.jsx(B.Header,{title:as({isDeleted:n,isConflict:t,source:r})}),a.jsx(B.Body,{children:a.jsx(S,{as:"p",variant:"body",tone:"secondary",className:"leading-6",children:os({isDeleted:n,isConflict:t,hasDraft:s,source:r})})}),a.jsx(B.Footer,{children:a.jsx(Ae,{children:n?a.jsx(k,{type:"button",variant:"primary",size:"sm",onClick:d,children:"Open trash"}):t?a.jsxs(a.Fragment,{children:[a.jsx(k,{type:"button",variant:"subtle",size:"sm",isLoading:i,onClick:c,children:"Reload latest"}),s&&a.jsx(k,{type:"button",variant:"ghost",size:"sm",onClick:f,children:"Clone draft"}),a.jsx(k,{type:"button",variant:"danger",size:"sm",onClick:l,children:"Overwrite"})]}):a.jsx(k,{type:"button",variant:"primary",size:"sm",isLoading:i,onClick:c,children:"Reload latest"})})})]})}function cs({localDraftCreatedAt:e,hasSaveError:n,onRestoreDraft:t,onDiscardDraft:s,onRetrySave:r,onSaveAsNewNote:i}){return a.jsxs(a.Fragment,{children:[e&&a.jsx(st,{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(k,{type:"button",size:"sm",variant:"subtle",className:"self-start",onClick:t,children:"Restore draft"}),a.jsx(k,{type:"button",size:"sm",variant:"ghost",className:"self-start",onClick:s,children:"Discard"})]})]})}),n&&a.jsx(st,{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(k,{type:"button",size:"sm",variant:"subtle",className:"self-start",onClick:r,children:"Retry save"}),a.jsx(k,{type:"button",size:"sm",variant:"ghost",className:"self-start",onClick:i,children:"Save as new note"})]})]})})]})}const dt=(e,n)=>e||(n==="mobile"?"Mobile browser":n==="mcp"?"MCP":"Web browser");function ls({isOpen:e,noteId:n,onClose:t,restoreSnapshot:s,onRestored:r}){const i=je(),c=Qe(),[l,f]=o.useState(null),[d,m]=o.useState("diff"),x=o.useRef(null),b=Fe({queryKey:_.notes.snapshots(n),queryFn:async()=>{const p=await Mn(n);if(p.type==="error")throw p;return p.noteSnapshots},enabled:e}),u=Vn({mutationFn:s,onSuccess:async p=>{if(p){if(p.type==="error"){i(p.errors[0].message);return}await Promise.all([c.invalidateQueries({queryKey:_.notes.detail(n),exact:!0}),c.invalidateQueries({queryKey:_.notes.listAll(),exact:!1}),c.invalidateQueries({queryKey:_.notes.tagListAll(),exact:!1}),c.invalidateQueries({queryKey:_.notes.tagNameListAll(),exact:!1}),c.invalidateQueries({queryKey:_.notes.pinned(),exact:!0}),c.invalidateQueries({queryKey:_.notes.backReferencesAll(),exact:!1}),c.invalidateQueries({queryKey:_.notes.graph(),exact:!0}),c.invalidateQueries({queryKey:_.notes.snapshots(n),exact:!1}),c.invalidateQueries({queryKey:_.views.sectionNotesAll(),exact:!1}),c.invalidateQueries({queryKey:_.tags.all(),exact:!1})]),i("Previous version restored."),r?.(p.restoreNoteSnapshot),f(null),t()}}}),h=b.data?.find(p=>p.id===l)??null,v=Fe({queryKey:[..._.notes.snapshotDetail(l??"pending"),"diff"],queryFn:async()=>{if(!l)throw new Error("SNAPSHOT_NOT_SELECTED");const p=await Dn(l,"current");if(p.type==="error")throw p;if(!p.noteSnapshotDiff)throw new Error("SNAPSHOT_DIFF_NOT_FOUND");return p.noteSnapshotDiff},enabled:!!l&&d==="diff"}),N=Fe({queryKey:_.notes.snapshotDetail(l??"pending"),queryFn:async()=>{if(!l)throw new Error("SNAPSHOT_NOT_SELECTED");const p=await Ln(l);if(p.type==="error")throw p;if(!p.noteSnapshot)throw new Error("SNAPSHOT_NOT_FOUND");return p.noteSnapshot},enabled:!!l&&d==="content"}),R=N.data?.contentAsMarkdown.trim()??"";o.useEffect(()=>{l&&x.current?.focus()},[l]);const A=(p,y)=>{m(y),f(p)},w=()=>{f(null),m("diff"),t()};return a.jsxs(B,{isOpen:e,onClose:w,variant:"inspect",children:[a.jsx(B.Header,{title:h?d==="diff"?"Snapshot Diff":"Snapshot Content":"Restore Previous Version",onClose:w}),a.jsx(B.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(B.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"," ",dt(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(k,{variant:d==="diff"?"primary":"subtle",size:"sm",onClick:()=>m("diff"),children:"Show diff"}),a.jsx(k,{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((p,y)=>{const T=p.startsWith("+")&&!p.startsWith("+++")?"bg-emerald-500/12 text-emerald-700 dark:text-emerald-200":p.startsWith("-")&&!p.startsWith("---")?"bg-rose-500/12 text-rose-700 dark:text-rose-200":p.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 ${T}`,children:p||" "},`${y}-${p}`)})})]}):null:N.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..."}):N.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."}):R?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:R}):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."}),b.isLoading&&a.jsx(S,{as:"div",variant:"meta",tone:"secondary",children:"Loading previous versions..."}),!b.isLoading&&b.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."}),!b.isLoading&&b.data&&b.data.length>0&&a.jsx("div",{className:"flex flex-col gap-2",children:b.data.map(p=>a.jsx(ar,{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"," ",dt(p.meta.label,p.meta.entrypoint)," ","edit"]}),a.jsx(S,{as:"p",variant:"meta",truncate:!0,tone:"secondary",children:p.title}),a.jsx(S,{as:"p",variant:"label",tone:"tertiary",children:G(p.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(k,{variant:"subtle",size:"sm",onClick:()=>A(p.id,"diff"),children:"Compare"}),a.jsx(k,{size:"sm",isLoading:u.isPending,onClick:()=>u.mutate(p.id),children:"Restore"})]})]}),p.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:p.contentPreview})})]})},p.id))})]})}),h&&a.jsx(B.Footer,{children:a.jsxs(Ae,{children:[a.jsx(k,{ref:x,variant:"subtle",onClick:()=>{f(null),m("diff")},children:"Back"}),a.jsx(k,{isLoading:u.isPending,onClick:()=>u.mutate(h.id),children:"Restore this version"})]})})]})}function ds({noteId:e}){const[n,t]=o.useState(!1),[s,r]=o.useState(!1),[i,c]=o.useState("create"),[l,f]=o.useState(void 0),{onCreate:d,onUpdate:m,onDelete:x}=cr(),b=()=>{c("create"),f(void 0),r(!0)},u=w=>{c("edit"),f(w),r(!0)},h=(w,p,y)=>{i==="create"?d(e,w,p,()=>{r(!1)},y):i==="edit"&&l&&m(l.id,e,{reminderDate:w,priority:p,content:y},()=>{r(!1)})},v=w=>{m(w.id,e,{completed:!w.completed})},N=w=>{const p=G(Number(w)),y=G();return p.isSame(y,"day")?`Today at ${p.format("HH:mm")}`:p.isSame(y.add(1,"day"),"day")?`Tomorrow at ${p.format("HH:mm")}`:p.format("YYYY-MM-DD HH:mm")},R=w=>{const p=G(Number(w)),y=G(),T=p.diff(y,"hour");return T<=6?"high":T<=24?"medium":"low"},A=w=>{const p=G(Number(w)),y=G(),T=p.diff(y,"hour"),H=p.diff(y,"minute")%60;return T<0||H<0?"Overdue":T===0?`${H}m remaining`:`${T}h ${H}m remaining`};return a.jsxs(a.Fragment,{children:[a.jsx(Tt,{title:"Reminders",icon:a.jsx(Wn,{className:"h-3.5 w-3.5"}),action:a.jsxs(a.Fragment,{children:[!n&&a.jsxs(k,{size:"sm",variant:"ghost",onClick:b,children:[a.jsx(dr,{className:"w-3 h-3"}),a.jsx(S,{as:"span",variant:"label",className:"hidden sm:inline",children:"Add"})]}),a.jsxs(k,{type:"button",size:"sm",variant:"ghost","aria-label":n?"Expand reminders":"Collapse reminders","aria-expanded":!n,onClick:()=>t(!n),children:[n?a.jsx(_n,{className:"h-3.5 w-3.5"}):a.jsx(Pn,{className:"h-3.5 w-3.5"}),n?"Expand":"Collapse"]})]}),children:!n&&a.jsx(Dr,{noteId:e,searchParams:{offset:0,limit:9999},render:({reminders:w,totalCount:p})=>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:p===0?"No reminders yet":"All reminders complete"}):a.jsx("div",{className:"flex flex-col",children:w.map(y=>{const T=y.priority||R(y.reminderDate),H=A(y.reminderDate),M=H==="Overdue";return a.jsxs("div",{className:V("flex items-center gap-2.5 px-2 py-1.5"),children:[a.jsx(Ct,{checked:y.completed,onChange:()=>v(y),size:"sm","aria-label":`Reminder: ${y.content||N(y.reminderDate)}`}),a.jsx(S,{as:"div",variant:"body",weight:"medium",className:V("truncate flex-1 min-w-0",y.completed&&"line-through opacity-40"),children:y.content||N(y.reminderDate)}),a.jsxs("div",{className:V("shrink-0 flex items-center gap-1",y.completed&&"opacity-40"),children:[y.content&&a.jsx(S,{as:"span",variant:"meta",tone:"secondary",children:N(y.reminderDate)}),!y.completed&&a.jsx(S,{as:"span",variant:"label",weight:"medium",tone:M||T==="high"?"error":"tertiary",className:V(y.content&&'before:content-["·"] before:mr-1'),children:H})]}),a.jsx(wt,{button:a.jsx(Rt,{label:"Reminder actions"}),items:[{name:"Edit",onClick:()=>u(y)},{name:"Delete",onClick:()=>x(y.id,e)}]})]},y.id)})})})})}),a.jsx(lr,{isOpen:s,onClose:()=>r(!1),onSave:h,reminder:l,mode:i})]})}const us=e=>[{title:"Diagram",subtext:"Create a flowchart or diagram with Mermaid syntax",onItemClick:()=>{ot(e,{type:"codeBlock",props:{language:"mermaid"}})},aliases:["mermaid","diagram","flowchart","sequence"],group:"Other",icon:a.jsx(Lt,{})},{title:"Math Formula",subtext:"Write a formula with KaTeX or LaTeX",onItemClick:()=>{ot(e,{type:"codeBlock",props:{language:"math"}})},aliases:["math","formula","equation","katex","latex"],group:"Other",icon:a.jsx(Pt,{})}],fs=({editor:e})=>a.jsx(Xe,{triggerCharacter:"/",getItems:async n=>gr([...ur(e).filter(t=>t.title!=="Audio"&&t.title!=="Video"&&t.title!=="File"),...us(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(jt,{})}],n)}),ps=(e,n)=>n?e.filter(t=>t.id!==n):e,ms=({currentNoteId:e,onClick:n})=>a.jsx(Xe,{triggerCharacter:"[",getItems:async t=>{const s=await On({query:t,limit:5});return s.type==="error"?[]:ps(s.allNotes.notes,e).map(i=>({title:i.title,onItemClick:()=>n({type:"reference",props:{id:i.id,title:i.title}})}))}});let ut,ft;const hs=()=>(ut??=Ze(async()=>{const{default:e}=await import("./mermaid.core-C2tL9tq7.js").then(n=>n.bc);return{default:e}},__vite__mapDeps([0,1,2,3])).then(({default:e})=>e),ut),gs=()=>(ft??=Promise.all([Ze(()=>import("./katex-x288kqHd.js"),[]),Ze(()=>Promise.resolve({}),__vite__mapDeps([4]))]).then(([{default:e}])=>e),ft),xs=e=>{const n=e?.trim().toLowerCase();return n==="mermaid"?"mermaid":n==="math"||n==="katex"||n==="latex"?"math":null},bs=e=>`ocean-brain-mermaid-${e.replace(/[^a-zA-Z0-9_-]/g,"")||"diagram"}`,ys=async(e,n,t,s="light")=>{if(e==="mermaid"){const i=await hs();i.initialize({securityLevel:"strict",startOnLoad:!1,suppressErrorRendering:!0,theme:s==="dark"?"dark":"default"});const c=await i.render(bs(t),n);return{html:c.svg,bindFunctions:c.bindFunctions}}return{html:(await gs()).renderToString(n,{displayMode:!0,output:"htmlAndMathml",strict:"warn",throwOnError:!0,trust:!1})}},vs={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"},ws={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"},Cs={idle:"Copy",copied:"Copied",failed:"Copy failed"},pt=({getText:e,resetDelayMs:n=2e3,variant:t="floating"})=>{const[s,r]=o.useState("idle"),i=o.useRef(null),c=o.useCallback(()=>{i.current&&(clearTimeout(i.current),i.current=null)},[]),l=o.useCallback(()=>{c(),i.current=setTimeout(()=>{r("idle"),i.current=null},n)},[c,n]);o.useEffect(()=>c,[c]);const f=x=>{x.stopPropagation()},d=x=>{x.preventDefault(),x.stopPropagation()},m=async x=>{f(x);try{await navigator.clipboard.writeText(e()),r("copied")}catch{r("failed")}l()};return a.jsx("div",{className:V(t==="floating"&&"pointer-events-none absolute right-3 top-2 z-[1]"),contentEditable:!1,onMouseDown:d,children:a.jsxs("button",{type:"button",className:V(vs[t],ws[s]),contentEditable:!1,onClick:m,children:[a.jsx(yr,{className:"h-3.5 w-3.5"}),a.jsx("span",{"aria-live":"polite",children:Cs[s]})]})})},Ns=({kind:e,source:n})=>{const t=o.useId(),s=o.useRef(null),r=Nt(d=>d.theme),[i,c]=o.useState(()=>typeof IntersectionObserver>"u"),[l,f]=o.useState({status:"idle"});return o.useEffect(()=>{const d=s.current;if(i||!d||typeof IntersectionObserver>"u"){c(!0);return}const m=new IntersectionObserver(([x])=>{x?.isIntersecting&&(c(!0),m.disconnect())},{rootMargin:"240px"});return m.observe(d),()=>m.disconnect()},[i]),o.useEffect(()=>{if(!i)return;let d=!1;return f({status:"loading"}),ys(e,n,t,r).then(m=>{d||f({status:"success",...m})}).catch(()=>{d||f({status:"error"})}),()=>{d=!0}},[e,t,i,n,r]),o.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})})]})]})},mt="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",We=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(We).join(""):We(e.content):"",Ss=({block:e,contentRef:n})=>{const t=o.useRef(null),s=xs(e.props.language),r=e.content.map(We).join(""),[i,c]=o.useState(r),[l,f]=o.useState(r.length===0),d=s!==null&&!l,m=s==="mermaid"?"Diagram":"Math Formula",x=`${m} controls`,b=o.useCallback(h=>{t.current=h,n(h)},[n]);o.useEffect(()=>{const h=t.current;if(!h)return;const v=()=>c(h.textContent??""),N=new MutationObserver(v);return N.observe(h,{characterData:!0,childList:!0,subtree:!0}),()=>N.disconnect()},[]);const u=h=>{h.preventDefault(),h.stopPropagation()};return a.jsxs(a.Fragment,{children:[s&&a.jsxs("div",{role:"toolbar","aria-label":x,"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:u,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(Lt,{className:"h-4 w-4 shrink-0 text-fg-tertiary"}):a.jsx(Pt,{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:V(mt,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(),f(!0)},children:[a.jsx(kr,{className:"h-3.5 w-3.5"}),"Edit"]}),a.jsxs("button",{type:"button","aria-pressed":d,className:V(mt,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(),f(!1)},children:[a.jsx(Kn,{className:"h-3.5 w-3.5"}),"Preview"]})]}),a.jsx(pt,{variant:"toolbar",getText:()=>t.current?.textContent?.trimEnd()??""})]})]}),a.jsx("pre",{className:V(d&&"hidden",s&&"bg-[#181b20]"),children:a.jsx("code",{ref:b})}),s&&d&&a.jsx(Ns,{kind:s,source:i}),!s&&a.jsx(pt,{getText:()=>t.current?.textContent?.trimEnd()??""})]})},Rs="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))]",js={type:"reference",propSchema:{id:{default:""},title:{default:"Unknown"}},content:"none"};function As(e){const n=St(),t=()=>{e.editor.blur(),n({to:Ee,params:{id:e.inlineContent.props.id}})},s=r=>{r.preventDefault(),r.stopPropagation()};return a.jsx("span",{role:"link",tabIndex:0,contentEditable:!1,className:Rs,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 Es=Mt(js,{render:e=>a.jsx(As,{...e})}),ks=()=>{const e=fr(),[n,t]=o.useState([]),s={1:"pl-3",2:"pl-[26px]",3:"pl-[40px]",4:"pl-[54px]",5:"pl-[68px]",6:"pl-[82px]"};o.useEffect(()=>{const c=()=>{const f=e.document,d=[],m=x=>{for(const b of x){if(b.type==="heading"){const u=b,h=u.props.level||1,v=u.content?.map(N=>N.text||"").join("")||"";v.trim()&&d.push({id:b.id,level:h,text:v})}b.children&&Array.isArray(b.children)&&m(b.children)}};m(f),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 f=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;l.scrollIntoView({behavior:f?"auto":"smooth",block:"center"})}},i=a.jsx(vr,{icon:a.jsx(jt,{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:[i,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:i}),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:V("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)})})]})},Ts=Dt({type:"tableOfContents",propSchema:{},content:"none"},{render:()=>a.jsx(ks,{})})(),Ms="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",Ds={type:"tag",propSchema:{id:{default:""},tag:{default:"@Unknown"}},content:"none"};function Ls(e){const n=St(),t=()=>{e.editor.blur(),n({to:rr,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:Ms,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 _s=Mt(Ds,{render:e=>a.jsx(Ls,{...e})}),Ps=e=>e,Os=e=>e,Bs=Ps({tag:_s,reference:Es}),Fs=Os({tableOfContents:Ts}),ce=he.codeBlock,ht=Dt(ce.config,{meta:ce.implementation.meta,parse:ce.implementation.parse,parseContent:ce.implementation.parseContent,runsBefore:ce.implementation.runsBefore,render:Ss})(),Hs={...ht,extensions:ce.extensions,implementation:{...ht.implementation,toExternalHTML:ce.implementation.toExternalHTML}},$s={...he.image,implementation:{...he.image.implementation,meta:{...he.image.implementation.meta,fileBlockAccept:[...Xn]}}},Is=xr.create({inlineContentSpecs:{...br,...Bs},blockSpecs:{...he,image:$s,codeBlock:Hs,...Fs}}),Us=(e,n)=>n.some(t=>t.name===`@${e}`),zs=({onClick:e})=>a.jsx(Xe,{triggerCharacter:"@",getItems:async n=>{const t=await Cr({query:n,limit:5});if(t.type==="error")return[];const{tags:s}=t.allTags,r=Us(n,s),i=[{title:"Add a new tag",onItemClick:async()=>{const c=await Nr({name:"@"+n});if(c.type==="error")return;const{id:l,name:f}=c.createTag;e({type:"tag",props:{id:l,tag:f}})}}];return s.length===0?i:s.map(c=>({title:c.name,onItemClick:()=>e({type:"tag",props:{id:c.id,tag:c.name}})})).concat(n&&!r?i:[])}}),Zs=/^ {0,3}(`{3,}|~{3,})/,Vs=/<[^<>\n]*>/g,Xt=/~+/g,en=/[\p{L}\p{M}\p{N}\p{Sc}%‰.,+\-/:°℃℉µμ·²³^]/u,Ke=new RegExp("^(?:[+-]?\\p{Sc}?|\\p{Sc}[+-]?)\\p{N}","u"),tn=/&#(?:x[0-9a-f]+|\d+);/giu,Ws=new Set(["Files","blocknote/html","vscode-editor-data"]),gt="OBTILDE",xt="",Ks=[/(^|\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))/],Ys=e=>e.split(`
|
|
14
|
+
`):""}${e}`,Jr=(e,n,{includeMetadata:t=!1}={})=>{const s=Qt(e,n,{includeMetadata:t}),r=zt(s).filter(i=>ke(i.source.value)).map(i=>({end:i.end,start:i.start,value:""}));return Zt(s,r)},Xr=async(e,n,{fetchImpl:t=fetch,includeMetadata:s=!1}={})=>{const r=new kt,i=Qt(e,n,{includeMetadata:s}),c=zt(i),l=[],f=new Set,d=new Map;for(const{source:m}of c){if(!ke(m.value))continue;const x=$t(m.value),b=await Ut(r,x,t,d,f);l.push({end:m.end,start:m.start,value:`./${b}`})}return r.file("note.html",Zt(i,l)),r.generateAsync({type:"blob"})},es=async(e,n,{fetchImpl:t=fetch,includeMetadata:s=!1}={})=>{const r=new kt,i=Kt(e,n,s),c=Wt(i),l=[],f=new Set,d=new Map;for(const{source:m}of c){const x=It(m.value);if(!ke(x))continue;const b=$t(x),u=await Ut(r,b,t,d,f);l.push({end:m.end,start:m.start,value:`./${u}`})}return r.file("note.md",Vt(i,l)),r.generateAsync({type:"blob"})},ts=(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)}},qt={html:{extension:"html",getContent:e=>e.getHtml(),createDocumentBlob:(e,n)=>new Blob([Jr(e,n.metadata,{includeMetadata:n.includeMetadata})],{type:"text/html;charset=utf-8"}),createZipBlob:(e,n)=>Xr(e,n.metadata,{fetchImpl:n.fetchImpl,includeMetadata:n.includeMetadata})},markdown:{extension:"md",getContent:e=>e.getMarkdown(),createDocumentBlob:(e,n)=>new Blob([Yt(e,n.metadata,{includeMetadata:n.includeMetadata})],{type:"text/markdown;charset=utf-8"}),createZipBlob:(e,n)=>es(e,n.metadata,{fetchImpl:n.fetchImpl,includeMetadata:n.includeMetadata})}},Gt=(e,n)=>n?"zip":qt[e].extension,ns=async e=>{const n=qt[e.format],t=n.getContent(e.source);if(t===void 0)return{type:"not-ready",format:e.format};const s=Gt(e.format,e.includeAssets);return{type:"success",blob:e.includeAssets?await n.createZipBlob(t,e):n.createDocumentBlob(t,e),filename:qr(e.metadata.title,s)}},rs=e=>e==="markdown"?"Markdown is not ready yet.":"HTML is not ready yet.",lt=({checked:e,description:n,id:t,label:s,onChange:r})=>{const i=`${t}-label`;return a.jsxs("div",{className:"flex min-h-6 items-center gap-2",children:[a.jsx(Ct,{id:t,size:"sm",checked:e,onChange:c=>r(c.target.checked),"aria-labelledby":i}),a.jsx("label",{id:i,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(Tn,{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(nr,{className:"h-3.5 w-3.5"})})})]})};function ss({isOpen:e,metadata:n,getHtml:t,getMarkdown:s,onClose:r}){const i=je(),[c,l]=o.useState("html"),[f,d]=o.useState(!0),[m,x]=o.useState(!1),[b,u]=o.useState(!1),h=Gt(c,f),v=async()=>{u(!0);try{const N=await ns({format:c,includeAssets:f,includeMetadata:m,metadata:n,source:{getHtml:t,getMarkdown:s}});if(N.type==="not-ready"){i(rs(N.format));return}ts(N.blob,N.filename),r(),i("Downloaded note.")}catch{i("Failed to download note.")}finally{u(!1)}};return a.jsxs(B,{isOpen:e,onClose:r,variant:"compact",children:[a.jsx(B.Header,{title:"Download document",onClose:r}),a.jsx(B.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(lt,{id:"note-export-include-assets",label:"Include local image assets",checked:f,onChange:d,description:"Bundle uploaded Ocean Brain images with the document. Without assets, local images are omitted."}),a.jsx(lt,{id:"note-export-include-metadata",label:"Include metadata",checked:m,onChange:x,description:"Add the note title, note id, timestamps, and Ocean Brain source information."})]})]})]})}),a.jsx(B.Footer,{children:a.jsxs(Ae,{children:[a.jsx(k,{variant:"ghost",size:"sm",onClick:r,children:"Cancel"}),a.jsx(k,{variant:"primary",size:"sm",onClick:v,disabled:b,children:b?"Downloading...":`Download .${h}`})]})})]})}const Jt=e=>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"},as=({isDeleted:e,isConflict:n,source:t})=>{const s=Jt(t);return e?`This note was moved to trash ${s.place}`:n?`Save paused: note changed ${s.place}`:`This note changed ${s.place}`},os=({isDeleted:e,isConflict:n,hasDraft:t,source:s})=>{const r=Jt(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 is({isOpen:e,isDeleted:n,isConflict:t,hasDraft:s,source:r,isReloading:i,onReload:c,onOverwrite:l,onCloneDraft:f,onOpenTrash:d}){return a.jsxs(B,{isOpen:e,onClose:()=>{},variant:"inspect",children:[a.jsx(B.Header,{title:as({isDeleted:n,isConflict:t,source:r})}),a.jsx(B.Body,{children:a.jsx(S,{as:"p",variant:"body",tone:"secondary",className:"leading-6",children:os({isDeleted:n,isConflict:t,hasDraft:s,source:r})})}),a.jsx(B.Footer,{children:a.jsx(Ae,{children:n?a.jsx(k,{type:"button",variant:"primary",size:"sm",onClick:d,children:"Open trash"}):t?a.jsxs(a.Fragment,{children:[a.jsx(k,{type:"button",variant:"subtle",size:"sm",isLoading:i,onClick:c,children:"Reload latest"}),s&&a.jsx(k,{type:"button",variant:"ghost",size:"sm",onClick:f,children:"Clone draft"}),a.jsx(k,{type:"button",variant:"danger",size:"sm",onClick:l,children:"Overwrite"})]}):a.jsx(k,{type:"button",variant:"primary",size:"sm",isLoading:i,onClick:c,children:"Reload latest"})})})]})}function cs({localDraftCreatedAt:e,hasSaveError:n,onRestoreDraft:t,onDiscardDraft:s,onRetrySave:r,onSaveAsNewNote:i}){return a.jsxs(a.Fragment,{children:[e&&a.jsx(st,{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(k,{type:"button",size:"sm",variant:"subtle",className:"self-start",onClick:t,children:"Restore draft"}),a.jsx(k,{type:"button",size:"sm",variant:"ghost",className:"self-start",onClick:s,children:"Discard"})]})]})}),n&&a.jsx(st,{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(k,{type:"button",size:"sm",variant:"subtle",className:"self-start",onClick:r,children:"Retry save"}),a.jsx(k,{type:"button",size:"sm",variant:"ghost",className:"self-start",onClick:i,children:"Save as new note"})]})]})})]})}const dt=(e,n)=>e||(n==="mobile"?"Mobile browser":n==="mcp"?"MCP":"Web browser");function ls({isOpen:e,noteId:n,onClose:t,restoreSnapshot:s,onRestored:r}){const i=je(),c=Qe(),[l,f]=o.useState(null),[d,m]=o.useState("diff"),x=o.useRef(null),b=Fe({queryKey:L.notes.snapshots(n),queryFn:async()=>{const p=await Mn(n);if(p.type==="error")throw p;return p.noteSnapshots},enabled:e}),u=Vn({mutationFn:s,onSuccess:async p=>{if(p){if(p.type==="error"){i(p.errors[0].message);return}await Promise.all([c.invalidateQueries({queryKey:L.notes.detail(n),exact:!0}),c.invalidateQueries({queryKey:L.notes.listAll(),exact:!1}),c.invalidateQueries({queryKey:L.notes.tagListAll(),exact:!1}),c.invalidateQueries({queryKey:L.notes.tagNameListAll(),exact:!1}),c.invalidateQueries({queryKey:L.notes.pinned(),exact:!0}),c.invalidateQueries({queryKey:L.notes.backReferencesAll(),exact:!1}),c.invalidateQueries({queryKey:L.notes.graph(),exact:!0}),c.invalidateQueries({queryKey:L.notes.snapshots(n),exact:!1}),c.invalidateQueries({queryKey:L.views.sectionNotesAll(),exact:!1}),c.invalidateQueries({queryKey:L.views.sectionCalendarsAll(),exact:!1}),c.invalidateQueries({queryKey:L.tags.all(),exact:!1})]),i("Previous version restored."),r?.(p.restoreNoteSnapshot),f(null),t()}}}),h=b.data?.find(p=>p.id===l)??null,v=Fe({queryKey:[...L.notes.snapshotDetail(l??"pending"),"diff"],queryFn:async()=>{if(!l)throw new Error("SNAPSHOT_NOT_SELECTED");const p=await Dn(l,"current");if(p.type==="error")throw p;if(!p.noteSnapshotDiff)throw new Error("SNAPSHOT_DIFF_NOT_FOUND");return p.noteSnapshotDiff},enabled:!!l&&d==="diff"}),N=Fe({queryKey:L.notes.snapshotDetail(l??"pending"),queryFn:async()=>{if(!l)throw new Error("SNAPSHOT_NOT_SELECTED");const p=await Ln(l);if(p.type==="error")throw p;if(!p.noteSnapshot)throw new Error("SNAPSHOT_NOT_FOUND");return p.noteSnapshot},enabled:!!l&&d==="content"}),R=N.data?.contentAsMarkdown.trim()??"";o.useEffect(()=>{l&&x.current?.focus()},[l]);const A=(p,y)=>{m(y),f(p)},w=()=>{f(null),m("diff"),t()};return a.jsxs(B,{isOpen:e,onClose:w,variant:"inspect",children:[a.jsx(B.Header,{title:h?d==="diff"?"Snapshot Diff":"Snapshot Content":"Restore Previous Version",onClose:w}),a.jsx(B.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(B.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"," ",dt(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(k,{variant:d==="diff"?"primary":"subtle",size:"sm",onClick:()=>m("diff"),children:"Show diff"}),a.jsx(k,{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((p,y)=>{const T=p.startsWith("+")&&!p.startsWith("+++")?"bg-emerald-500/12 text-emerald-700 dark:text-emerald-200":p.startsWith("-")&&!p.startsWith("---")?"bg-rose-500/12 text-rose-700 dark:text-rose-200":p.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 ${T}`,children:p||" "},`${y}-${p}`)})})]}):null:N.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..."}):N.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."}):R?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:R}):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."}),b.isLoading&&a.jsx(S,{as:"div",variant:"meta",tone:"secondary",children:"Loading previous versions..."}),!b.isLoading&&b.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."}),!b.isLoading&&b.data&&b.data.length>0&&a.jsx("div",{className:"flex flex-col gap-2",children:b.data.map(p=>a.jsx(ar,{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"," ",dt(p.meta.label,p.meta.entrypoint)," ","edit"]}),a.jsx(S,{as:"p",variant:"meta",truncate:!0,tone:"secondary",children:p.title}),a.jsx(S,{as:"p",variant:"label",tone:"tertiary",children:G(p.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(k,{variant:"subtle",size:"sm",onClick:()=>A(p.id,"diff"),children:"Compare"}),a.jsx(k,{size:"sm",isLoading:u.isPending,onClick:()=>u.mutate(p.id),children:"Restore"})]})]}),p.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:p.contentPreview})})]})},p.id))})]})}),h&&a.jsx(B.Footer,{children:a.jsxs(Ae,{children:[a.jsx(k,{ref:x,variant:"subtle",onClick:()=>{f(null),m("diff")},children:"Back"}),a.jsx(k,{isLoading:u.isPending,onClick:()=>u.mutate(h.id),children:"Restore this version"})]})})]})}function ds({noteId:e}){const[n,t]=o.useState(!1),[s,r]=o.useState(!1),[i,c]=o.useState("create"),[l,f]=o.useState(void 0),{onCreate:d,onUpdate:m,onDelete:x}=cr(),b=()=>{c("create"),f(void 0),r(!0)},u=w=>{c("edit"),f(w),r(!0)},h=(w,p,y)=>{i==="create"?d(e,w,p,()=>{r(!1)},y):i==="edit"&&l&&m(l.id,e,{reminderDate:w,priority:p,content:y},()=>{r(!1)})},v=w=>{m(w.id,e,{completed:!w.completed})},N=w=>{const p=G(Number(w)),y=G();return p.isSame(y,"day")?`Today at ${p.format("HH:mm")}`:p.isSame(y.add(1,"day"),"day")?`Tomorrow at ${p.format("HH:mm")}`:p.format("YYYY-MM-DD HH:mm")},R=w=>{const p=G(Number(w)),y=G(),T=p.diff(y,"hour");return T<=6?"high":T<=24?"medium":"low"},A=w=>{const p=G(Number(w)),y=G(),T=p.diff(y,"hour"),H=p.diff(y,"minute")%60;return T<0||H<0?"Overdue":T===0?`${H}m remaining`:`${T}h ${H}m remaining`};return a.jsxs(a.Fragment,{children:[a.jsx(Tt,{title:"Reminders",icon:a.jsx(Wn,{className:"h-3.5 w-3.5"}),action:a.jsxs(a.Fragment,{children:[!n&&a.jsxs(k,{size:"sm",variant:"ghost",onClick:b,children:[a.jsx(dr,{className:"w-3 h-3"}),a.jsx(S,{as:"span",variant:"label",className:"hidden sm:inline",children:"Add"})]}),a.jsxs(k,{type:"button",size:"sm",variant:"ghost","aria-label":n?"Expand reminders":"Collapse reminders","aria-expanded":!n,onClick:()=>t(!n),children:[n?a.jsx(_n,{className:"h-3.5 w-3.5"}):a.jsx(Pn,{className:"h-3.5 w-3.5"}),n?"Expand":"Collapse"]})]}),children:!n&&a.jsx(Dr,{noteId:e,searchParams:{offset:0,limit:9999},render:({reminders:w,totalCount:p})=>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:p===0?"No reminders yet":"All reminders complete"}):a.jsx("div",{className:"flex flex-col",children:w.map(y=>{const T=y.priority||R(y.reminderDate),H=A(y.reminderDate),M=H==="Overdue";return a.jsxs("div",{className:V("flex items-center gap-2.5 px-2 py-1.5"),children:[a.jsx(Ct,{checked:y.completed,onChange:()=>v(y),size:"sm","aria-label":`Reminder: ${y.content||N(y.reminderDate)}`}),a.jsx(S,{as:"div",variant:"body",weight:"medium",className:V("truncate flex-1 min-w-0",y.completed&&"line-through opacity-40"),children:y.content||N(y.reminderDate)}),a.jsxs("div",{className:V("shrink-0 flex items-center gap-1",y.completed&&"opacity-40"),children:[y.content&&a.jsx(S,{as:"span",variant:"meta",tone:"secondary",children:N(y.reminderDate)}),!y.completed&&a.jsx(S,{as:"span",variant:"label",weight:"medium",tone:M||T==="high"?"error":"tertiary",className:V(y.content&&'before:content-["·"] before:mr-1'),children:H})]}),a.jsx(wt,{button:a.jsx(Rt,{label:"Reminder actions"}),items:[{name:"Edit",onClick:()=>u(y)},{name:"Delete",onClick:()=>x(y.id,e)}]})]},y.id)})})})})}),a.jsx(lr,{isOpen:s,onClose:()=>r(!1),onSave:h,reminder:l,mode:i})]})}const us=e=>[{title:"Diagram",subtext:"Create a flowchart or diagram with Mermaid syntax",onItemClick:()=>{ot(e,{type:"codeBlock",props:{language:"mermaid"}})},aliases:["mermaid","diagram","flowchart","sequence"],group:"Other",icon:a.jsx(Lt,{})},{title:"Math Formula",subtext:"Write a formula with KaTeX or LaTeX",onItemClick:()=>{ot(e,{type:"codeBlock",props:{language:"math"}})},aliases:["math","formula","equation","katex","latex"],group:"Other",icon:a.jsx(Pt,{})}],fs=({editor:e})=>a.jsx(Xe,{triggerCharacter:"/",getItems:async n=>gr([...ur(e).filter(t=>t.title!=="Audio"&&t.title!=="Video"&&t.title!=="File"),...us(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(jt,{})}],n)}),ps=(e,n)=>n?e.filter(t=>t.id!==n):e,ms=({currentNoteId:e,onClick:n})=>a.jsx(Xe,{triggerCharacter:"[",getItems:async t=>{const s=await On({query:t,limit:5});return s.type==="error"?[]:ps(s.allNotes.notes,e).map(i=>({title:i.title,onItemClick:()=>n({type:"reference",props:{id:i.id,title:i.title}})}))}});let ut,ft;const hs=()=>(ut??=Ze(async()=>{const{default:e}=await import("./mermaid.core-C2tL9tq7.js").then(n=>n.bc);return{default:e}},__vite__mapDeps([0,1,2,3])).then(({default:e})=>e),ut),gs=()=>(ft??=Promise.all([Ze(()=>import("./katex-x288kqHd.js"),[]),Ze(()=>Promise.resolve({}),__vite__mapDeps([4]))]).then(([{default:e}])=>e),ft),xs=e=>{const n=e?.trim().toLowerCase();return n==="mermaid"?"mermaid":n==="math"||n==="katex"||n==="latex"?"math":null},bs=e=>`ocean-brain-mermaid-${e.replace(/[^a-zA-Z0-9_-]/g,"")||"diagram"}`,ys=async(e,n,t,s="light")=>{if(e==="mermaid"){const i=await hs();i.initialize({securityLevel:"strict",startOnLoad:!1,suppressErrorRendering:!0,theme:s==="dark"?"dark":"default"});const c=await i.render(bs(t),n);return{html:c.svg,bindFunctions:c.bindFunctions}}return{html:(await gs()).renderToString(n,{displayMode:!0,output:"htmlAndMathml",strict:"warn",throwOnError:!0,trust:!1})}},vs={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"},ws={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"},Cs={idle:"Copy",copied:"Copied",failed:"Copy failed"},pt=({getText:e,resetDelayMs:n=2e3,variant:t="floating"})=>{const[s,r]=o.useState("idle"),i=o.useRef(null),c=o.useCallback(()=>{i.current&&(clearTimeout(i.current),i.current=null)},[]),l=o.useCallback(()=>{c(),i.current=setTimeout(()=>{r("idle"),i.current=null},n)},[c,n]);o.useEffect(()=>c,[c]);const f=x=>{x.stopPropagation()},d=x=>{x.preventDefault(),x.stopPropagation()},m=async x=>{f(x);try{await navigator.clipboard.writeText(e()),r("copied")}catch{r("failed")}l()};return a.jsx("div",{className:V(t==="floating"&&"pointer-events-none absolute right-3 top-2 z-[1]"),contentEditable:!1,onMouseDown:d,children:a.jsxs("button",{type:"button",className:V(vs[t],ws[s]),contentEditable:!1,onClick:m,children:[a.jsx(yr,{className:"h-3.5 w-3.5"}),a.jsx("span",{"aria-live":"polite",children:Cs[s]})]})})},Ns=({kind:e,source:n})=>{const t=o.useId(),s=o.useRef(null),r=Nt(d=>d.theme),[i,c]=o.useState(()=>typeof IntersectionObserver>"u"),[l,f]=o.useState({status:"idle"});return o.useEffect(()=>{const d=s.current;if(i||!d||typeof IntersectionObserver>"u"){c(!0);return}const m=new IntersectionObserver(([x])=>{x?.isIntersecting&&(c(!0),m.disconnect())},{rootMargin:"240px"});return m.observe(d),()=>m.disconnect()},[i]),o.useEffect(()=>{if(!i)return;let d=!1;return f({status:"loading"}),ys(e,n,t,r).then(m=>{d||f({status:"success",...m})}).catch(()=>{d||f({status:"error"})}),()=>{d=!0}},[e,t,i,n,r]),o.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})})]})]})},mt="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",We=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(We).join(""):We(e.content):"",Ss=({block:e,contentRef:n})=>{const t=o.useRef(null),s=xs(e.props.language),r=e.content.map(We).join(""),[i,c]=o.useState(r),[l,f]=o.useState(r.length===0),d=s!==null&&!l,m=s==="mermaid"?"Diagram":"Math Formula",x=`${m} controls`,b=o.useCallback(h=>{t.current=h,n(h)},[n]);o.useEffect(()=>{const h=t.current;if(!h)return;const v=()=>c(h.textContent??""),N=new MutationObserver(v);return N.observe(h,{characterData:!0,childList:!0,subtree:!0}),()=>N.disconnect()},[]);const u=h=>{h.preventDefault(),h.stopPropagation()};return a.jsxs(a.Fragment,{children:[s&&a.jsxs("div",{role:"toolbar","aria-label":x,"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:u,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(Lt,{className:"h-4 w-4 shrink-0 text-fg-tertiary"}):a.jsx(Pt,{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:V(mt,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(),f(!0)},children:[a.jsx(kr,{className:"h-3.5 w-3.5"}),"Edit"]}),a.jsxs("button",{type:"button","aria-pressed":d,className:V(mt,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(),f(!1)},children:[a.jsx(Kn,{className:"h-3.5 w-3.5"}),"Preview"]})]}),a.jsx(pt,{variant:"toolbar",getText:()=>t.current?.textContent?.trimEnd()??""})]})]}),a.jsx("pre",{className:V(d&&"hidden",s&&"bg-[#181b20]"),children:a.jsx("code",{ref:b})}),s&&d&&a.jsx(Ns,{kind:s,source:i}),!s&&a.jsx(pt,{getText:()=>t.current?.textContent?.trimEnd()??""})]})},Rs="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))]",js={type:"reference",propSchema:{id:{default:""},title:{default:"Unknown"}},content:"none"};function As(e){const n=St(),t=()=>{e.editor.blur(),n({to:Ee,params:{id:e.inlineContent.props.id}})},s=r=>{r.preventDefault(),r.stopPropagation()};return a.jsx("span",{role:"link",tabIndex:0,contentEditable:!1,className:Rs,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 Es=Mt(js,{render:e=>a.jsx(As,{...e})}),ks=()=>{const e=fr(),[n,t]=o.useState([]),s={1:"pl-3",2:"pl-[26px]",3:"pl-[40px]",4:"pl-[54px]",5:"pl-[68px]",6:"pl-[82px]"};o.useEffect(()=>{const c=()=>{const f=e.document,d=[],m=x=>{for(const b of x){if(b.type==="heading"){const u=b,h=u.props.level||1,v=u.content?.map(N=>N.text||"").join("")||"";v.trim()&&d.push({id:b.id,level:h,text:v})}b.children&&Array.isArray(b.children)&&m(b.children)}};m(f),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 f=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;l.scrollIntoView({behavior:f?"auto":"smooth",block:"center"})}},i=a.jsx(vr,{icon:a.jsx(jt,{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:[i,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:i}),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:V("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)})})]})},Ts=Dt({type:"tableOfContents",propSchema:{},content:"none"},{render:()=>a.jsx(ks,{})})(),Ms="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",Ds={type:"tag",propSchema:{id:{default:""},tag:{default:"@Unknown"}},content:"none"};function Ls(e){const n=St(),t=()=>{e.editor.blur(),n({to:rr,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:Ms,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 _s=Mt(Ds,{render:e=>a.jsx(Ls,{...e})}),Ps=e=>e,Os=e=>e,Bs=Ps({tag:_s,reference:Es}),Fs=Os({tableOfContents:Ts}),ce=he.codeBlock,ht=Dt(ce.config,{meta:ce.implementation.meta,parse:ce.implementation.parse,parseContent:ce.implementation.parseContent,runsBefore:ce.implementation.runsBefore,render:Ss})(),Hs={...ht,extensions:ce.extensions,implementation:{...ht.implementation,toExternalHTML:ce.implementation.toExternalHTML}},$s={...he.image,implementation:{...he.image.implementation,meta:{...he.image.implementation.meta,fileBlockAccept:[...Jn]}}},Is=xr.create({inlineContentSpecs:{...br,...Bs},blockSpecs:{...he,image:$s,codeBlock:Hs,...Fs}}),Us=(e,n)=>n.some(t=>t.name===`@${e}`),zs=({onClick:e})=>a.jsx(Xe,{triggerCharacter:"@",getItems:async n=>{const t=await wr({query:n,limit:5});if(t.type==="error")return[];const{tags:s}=t.allTags,r=Us(n,s),i=[{title:"Add a new tag",onItemClick:async()=>{const c=await Cr({name:"@"+n});if(c.type==="error")return;const{id:l,name:f}=c.createTag;e({type:"tag",props:{id:l,tag:f}})}}];return s.length===0?i:s.map(c=>({title:c.name,onItemClick:()=>e({type:"tag",props:{id:c.id,tag:c.name}})})).concat(n&&!r?i:[])}}),Zs=/^ {0,3}(`{3,}|~{3,})/,Vs=/<[^<>\n]*>/g,Xt=/~+/g,en=/[\p{L}\p{M}\p{N}\p{Sc}%‰.,+\-/:°℃℉µμ·²³^]/u,Ke=new RegExp("^(?:[+-]?\\p{Sc}?|\\p{Sc}[+-]?)\\p{N}","u"),tn=/&#(?:x[0-9a-f]+|\d+);/giu,Ws=new Set(["Files","blocknote/html","vscode-editor-data"]),gt="OBTILDE",xt="",Ks=[/(^|\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))/],Ys=e=>e.split(`
|
|
16
16
|
`).some(n=>{const t=n.trim();return t.length>2&&t.startsWith("|")&&t.endsWith("|")}),Qs=e=>Ks.some(n=>n.test(e))||Ys(e),qs=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:""},nn=(e,n,t)=>{let s=n;for(;e[s]===t;)s+=1;return s-n},rn=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)},Gs=e=>{const n=e.replace(tn,rn),t=e.toLowerCase();let s=0,r=`${gt}${s}${xt}`;for(;e.includes(r)||t.includes(encodeURIComponent(r).toLowerCase())||n.includes(r);)s+=1,r=`${gt}${s}${xt}`;return r},Js=(e,n,t)=>t-n>2?!1:sn(e,n)&&ea(e,t),bt=(e,n)=>{let t=n;for(;t>0&&en.test(e[t-1]??"");)t-=1;return{start:t,token:e.slice(t,n)}},Xs=(e,n)=>{let t=n;for(;t<e.length&&en.test(e[t]??"");)t+=1;return e.slice(n,t)},sn=(e,n)=>{const t=bt(e,n);if(Ke.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:Ke.test(bt(e,s).token)},ea=(e,n)=>Ke.test(Xs(e,n)),an=e=>{const n=[],t=new Set;for(const s of e.matchAll(Xt)){const r=s.index,i=s[0].length,c=r+i;if(i>2)continue;const l=c<e.length&&!/\s/u.test(e[c]??""),f=r>0&&!/\s/u.test(e[r-1]??"");if(Js(e,r,c)){if(f&&t.delete(i))continue;n.push({length:i,start:r});continue}f&&t.delete(i)||l&&sn(e,r)&&t.add(i)}return n},He=(e,n)=>{let t="",s=0;const r=new Set(an(e).map(i=>i.start));for(const i of e.matchAll(Xt)){const c=i.index,l=c+i[0].length;t+=e.slice(s,c),t+=r.has(c)?n.repeat(i[0].length):i[0],s=l}return t+e.slice(s)},ta=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},na=(e,n)=>{let t="",s=0;for(const r of e.matchAll(Vs)){const i=r.index;t+=He(e.slice(s,i),n),t+=ta(r[0])?r[0]:He(r[0],n),s=i+r[0].length}return t+He(e.slice(s),n)},on=e=>an(e).length>0,ra=e=>{if(!on(e))return it(e);const n=Gs(e),t=na(e,n),s=encodeURIComponent(n);return it(t).split(n).join("~").split(s).join("~")},sa=(e,n)=>{let t=0;for(let s=n-1;s>=0&&e[s]==="\\";s-=1)t+=1;return t%2===1},aa=(e,n,t)=>{let s=n+t;for(;s<e.length;){const r=e.indexOf("`",s);if(r===-1)return null;const i=nn(e,r,"`");if(i===t)return r+i;s=r+i}return null},oa=(e,n)=>{let t=e.indexOf("`",n);for(;t!==-1;){const s=nn(e,t,"`");if(!sa(e,t)){const r=aa(e,t,s);if(r!==null)return{start:t,end:r}}t=e.indexOf("`",t+s)}return null},ia=(e,n)=>{let t="",s=0;for(;s<e.length;){const r=oa(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},cn=(e,n)=>{let t=null;return e.split(new RegExp("(?<=\\n)")).map(s=>{const{body:r,ending:i}=qs(s);if(t)return new RegExp(`^ {0,3}${t.marker}{${t.length},} *$`).test(r)&&(t=null),s;const c=r.match(Zs)?.[1];return c?(t={marker:c[0],length:c.length},s):`${ia(r,n)}${i}`}).join("")},ca=(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},ln=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,i=ca(e,r);if(i===null){n+=e.slice(t);break}n+=e.slice(t,r),n+=e.slice(r,i).split("\\&").join("&"),n+=")",t=i+1}return n},la=(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),i=e.lastIndexOf(r,s-1);return i!==-1&&i+r.length<s},da=(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),i=e.indexOf(r,s);return i!==-1&&s<i},ua=(e,n,t)=>la(e,n)||da(e,n+t),fa=e=>cn(e,n=>{const t=n.replace(tn,(s,r,i)=>ua(i,r,s.length)?rn(s):s);return ln(t)}),pa=e=>cn(e,ln),ma=e=>{const n=e.getData("text/plain");n&&(e.setData("text/markdown",n),e.setData("text/plain",fa(n)))},ha=({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=>Ws.has(l)))return t();const i=r.includes("text/markdown"),c=s.getData(i?"text/markdown":"text/plain");return!c||!on(c)||!i&&r.includes("text/html")&&!Qs(c)?t():(n.pasteHTML(ra(c)),!0)},ga=new Set(["tableOfContents"]),xa="OCEAN_BRAIN_TAG_",ba="_TOKEN",yt=e=>`${xa}${e}${ba}`,ya=e=>{const n=JSON.stringify(e);let t=0;return()=>{let s=yt(t);for(;n.includes(s);)t+=1,s=yt(t);return t+=1,s}},va=e=>!Array.isArray(e)&&e?.type==="tableContent",wa=(e,n)=>Array.isArray(e)?e.map(n):va(e)?{...e,rows:e.rows?.map(t=>({...t,cells:t.cells?.map(s=>({...s,content:s.content?.map(n)}))}))}:e,dn=(e,n)=>e.filter(t=>!ga.has(t.type)).map(t=>({...t,content:n(t.content),children:t.children?.length?dn(t.children,n):[]}));function Ca(e){const n=new Map,t=ya(e);return{blocks:dn(e,r=>wa(r,i=>{if(i.type==="reference"){const c=String(i.props?.id||""),l=String(i.props?.title||i.props?.id||"");return{type:"text",text:c?`[[${l}]](note:${c})`:`[[${l}]]`,styles:{}}}if(i.type==="tag"){const c=i.props?.tag||"",l=t();return n.set(l,c),{type:"text",text:l,styles:{}}}return i})),placeholderToTag:n}}function Na(e,n){let t=e;for(const[s,r]of n.entries())t=t.split(s).join(`[${r}]`);return t}async function Sa(e){return new Promise((n,t)=>{const s=new FileReader;s.readAsDataURL(e),s.onload=()=>n(s.result),s.onerror=r=>t(r)})}const Ra=o.forwardRef(({content:e,currentNoteId:n,editable:t,onChange:s},r)=>{const{theme:i}=Nt(d=>d),c=je(),l=pr({schema:Is,initialContent:e&&JSON.parse(e)||void 0,pasteHandler:d=>ha(d),uploadFile:async(d,m)=>{const x=()=>{m&&l.getBlock(m)&&l.removeBlocks([m])};if(!er(d.type))throw x(),c(at),new Error(at);try{return await hr({base64:await Sa(d)})}catch(b){throw x(),c(tr),b}}},[c]);o.useImperativeHandle(r,()=>({getContent:()=>JSON.stringify(l.document),getMarkdown:()=>{const d=Ca(l.document),m=l.blocksToMarkdownLossy(d.blocks);return pa(Na(m,d.placeholderToTag))},getHtml:()=>l.blocksToHTMLLossy(l.document)}));const f=d=>{ma(d.clipboardData)};return a.jsxs(mr,{slashMenu:!1,theme:i,editor:l,editable:t,onChange:s,onCopy:f,onCut:f,children:[a.jsx(fs,{editor:l}),a.jsx(ms,{currentNoteId:n,onClick:d=>{l.insertInlineContent([d," "])}}),a.jsx(zs,{onClick:d=>{l.insertInlineContent([d," "])}})]})}),ja=({event:e,noteId:n,editSessionId:t,loadedUpdatedAt:s,acceptedUpdatedAt:r,hasUnsavedChanges:i})=>{if(e.noteId!==n||e.type==="mcp.note.created")return{type:"ignore"};if(e.source==="web"&&e.editSessionId===t)return{type:"ignore"};if(e.type==="mcp.note.deleted")return{type:"notify",change:{type:"deleted",source:e.source},shouldPauseSave:!1};const c=Se(e.updatedAt,s),l=Se(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:i}},Aa=({change:e,isConflict:n,loadedUpdatedAt:t})=>e?!(e.type==="updated"&&!n&&e.updatedAt===t):!1;function Ea({allowNextNavigationRef:e,hasExternalPendingChanges:n,saveStatus:t,flushPendingChanges:s,notify:r}){const i=o.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]);jr({disabled:t==="saved"&&!n,enableBeforeUnload:!1,shouldBlockFn:i})}const tt=e=>`ocean-brain.note-draft.${e}`,ka=e=>{if(typeof window>"u")return null;try{const n=window.localStorage.getItem(tt(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}},$e=(e,n)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(tt(e),JSON.stringify(n))}catch{}},Ie=e=>{if(!(typeof window>"u"))try{window.localStorage.removeItem(tt(e))}catch{}},Ta=1e3,Ma="NOTE_UPDATE_CONFLICT";function Da({noteId:e,initialContent:n,initialUpdatedAt:t,editSessionIdRef:s,getContent:r,beforeSave:i,hasExternalPendingChanges:c,serverVersionRef:l,executeWrite:f,onSaved:d,onConflict:m,onError:x}){const b=Qe(),u=o.useRef(null),h=o.useRef(null),v=o.useRef(!1),N=o.useRef(null),R=o.useRef(!1),A=o.useRef(t),w=l??A,p=o.useRef(0),y=o.useRef(!1),T=o.useRef(!0),H=o.useRef(d),M=o.useRef(m),W=o.useRef(x),xe=o.useRef(i),X=o.useRef(c),me=o.useRef(f),[re,ee]=o.useState("saved"),[Te,le]=o.useState(null),$=o.useCallback(()=>{u.current!==null&&(window.clearTimeout(u.current),u.current=null)},[]),P=o.useCallback(E=>{T.current&&ee(E)},[]),Me=o.useCallback(E=>{w.current=E},[]),be=o.useCallback((E,O={})=>({title:E,content:r()??n,createdAt:Date.now(),baseUpdatedAt:w.current,...O.layout?{layout:O.layout}:{}}),[r,n]),de=o.useCallback(()=>{h.current&&$e(e,h.current)},[e]),se=o.useCallback(E=>{y.current=!0,P("conflict"),M.current(E??w.current)},[P]),L=o.useCallback(async({ignoreConflict:E=!1,silent:O=!1}={})=>{if(v.current)return R.current=!0,N.current??"idle";const Le=h.current!==null,ae=X.current?.()??!1;if(!Le&&!ae)return R.current=!1,"idle";const I=p.current;R.current=!1,$(),v.current=!0,O||P("saving");const F=(async()=>{const ue=await xe.current?.()??"idle";if(I!==p.current)return"idle";if(ue==="error")return v.current=!1,N.current=null,h.current?P("error"):P("saved"),"error";const D=h.current;if(!D)return v.current=!1,N.current=null,P("saved"),ue;h.current=null;const Q=async()=>{if(I!==p.current)return"idle";let Z;try{Z=await ze({id:e,title:D.title,content:D.content,...D.layout?{layout:D.layout}:{},editSessionId:s.current,...E?{force:!0}:{expectedUpdatedAt:w.current}})}catch{Z={type:"error",category:"network",errors:[{code:"NETWORK_ERROR",message:"Failed to save note."}]}}if(I!==p.current)return"idle";if(Z.type==="error"){v.current=!1,N.current=null,h.current||(h.current=D),de();const U=Z.errors[0];if(U.code===Ma&&!E){const oe=U.details?.extensions?.currentUpdatedAt;return y.current=!0,!O&&T.current&&(P("conflict"),M.current(oe??w.current)),"conflict"}return!O&&T.current&&(P("error"),W.current(U.message)),"error"}const ve=!O&&T.current,J=_.notes.detail(e);if(await b.cancelQueries({queryKey:J,exact:!0}),I!==p.current)return"idle";v.current=!1,N.current=null,y.current=!1,w.current=Z.updateNote.updatedAt,ve&&H.current(Z.updateNote.updatedAt),b.setQueryData(J,U=>U&&{...U,title:Z.updateNote.title,content:D.content,...D.layout?{layout:D.layout}:{},updatedAt:Z.updateNote.updatedAt}),At({noteId:e,updatedAt:Z.updateNote.updatedAt,editSessionId:s.current});const fe=h.current;return fe?.baseUpdatedAt===D.baseUpdatedAt?(h.current={...fe,baseUpdatedAt:Z.updateNote.updatedAt},de()):fe||Ie(e),h.current||Et(b),ve&&(h.current?ee("pending"):ee("saved")),"saved"},z=me.current?await me.current(Q):await Q();return z?z==="saved"&&(h.current||R.current)?L({silent:O}):z:(h.current||(h.current=D),de(),v.current=!1,N.current=null,P("pending"),"idle")})();return N.current=F,F},[$,s,e,de,b,w,P]),te=o.useCallback((E,O={})=>{if(h.current=E,$e(e,E),y.current){P("conflict");return}if(P("pending"),$(),O.immediate){L();return}u.current=window.setTimeout(()=>{L()},Ta)},[$,L,e,P]),ne=o.useCallback(E=>{if(h.current=E,$e(e,E),le(null),E.baseUpdatedAt!==w.current){se(w.current);return}te(E)},[e,te,se]),ye=o.useCallback(()=>{p.current+=1,$(),h.current=null,v.current=!1,N.current=null,R.current=!1,y.current=!1,Ie(e),le(null),ee("saved")},[$,e]),De=o.useCallback(()=>{$(),N.current=null,R.current=!1,y.current=!1,P(h.current?"pending":"saved")},[$,P]),q=o.useCallback(()=>{Ie(e),le(null)},[e]),Y=o.useCallback(()=>h.current,[]),K=o.useCallback(E=>{$(),se(E)},[$,se]);return o.useEffect(()=>{xe.current=i,me.current=f,X.current=c,M.current=m,W.current=x,H.current=d},[i,f,c,m,x,d]),o.useEffect(()=>(T.current=!0,()=>{T.current=!1}),[]),o.useEffect(()=>{h.current||v.current||y.current||(w.current=t,ee("saved"))},[t]),o.useEffect(()=>{p.current+=1,h.current=null,v.current=!1,N.current=null,R.current=!1,y.current=!1,w.current=t,le(ka(e)),ee("saved")},[e]),o.useEffect(()=>{const E=O=>{!h.current&&!v.current&&!y.current&&!X.current?.()||(O.preventDefault(),O.returnValue="")};return window.addEventListener("beforeunload",E),()=>{window.removeEventListener("beforeunload",E)}},[]),o.useEffect(()=>()=>{$(),h.current&&!y.current&&L({silent:!0})},[$,L]),{saveStatus:re,localDraft:Te,serverUpdatedAtRef:w,hasUnsavedChanges:re!=="saved",buildDraft:be,queueSave:te,flushPendingSave:L,restoreLocalDraft:ne,discardLocalDraft:q,clearDrafts:ye,resolveConflict:De,pauseForConflict:K,getPendingDraft:Y,setServerUpdatedAt:Me}}function La(){const e=o.useRef(Promise.resolve()),n=o.useRef(0),t=o.useRef(0),[s,r]=o.useState(!1),i=o.useCallback(d=>{t.current+=1,r(!0);const m=n.current,x=()=>m===n.current?d():void 0,b=e.current.then(x,x);e.current=b.then(()=>{},()=>{});const u=()=>{t.current-=1,t.current===0&&r(!1)};return b.then(u,u),b},[]),c=o.useCallback(()=>{n.current+=1},[]),l=o.useCallback(()=>e.current,[]),f=o.useCallback(()=>t.current>0,[]);return o.useMemo(()=>({execute:i,invalidatePending:c,drain:l,isBusy:s,hasPendingWrites:f}),[l,i,f,c,s])}const _a="NOTE_UPDATE_CONFLICT",Ue=e=>{const n=ge(e);return G(n??Number(e)).format("YYYY-MM-DD HH:mm:ss")},Pa=e=>e?.extensions?.currentUpdatedAt;function Oa({noteId:e,navigateToNote:n,notify:t}){const s=Qe(),r=o.useRef(null),i=o.useRef(null),[c]=o.useState(ct),l=o.useRef(c),f=o.useRef(null),d=o.useRef(null),m=o.useRef(!1),x=o.useRef(0),b=Ye({queryKey:_.notes.detail(e),queryFn:async()=>{const g=await Bn(e);if(g.type==="error")throw g;return g.note},gcTime:0}),u=b.data,h=b.refetch,v=o.useRef(u.updatedAt),N=o.useRef(u.updatedAt),[R,A]=o.useState(u.title),[w,p]=o.useState(u.pinned),[y,T]=o.useState(u.layout||"wide"),H=o.useRef(y),[M,W]=o.useState(null),[xe,X]=o.useState(null),[me,re]=o.useState(0),[ee,Te]=o.useState(()=>Ue(u.updatedAt)),[le,$]=o.useState(u.updatedAt),[P,Me]=o.useState(0),[be,de]=o.useState(!1),se=o.useRef(!1),{execute:L,invalidatePending:te,drain:ne,isBusy:ye,hasPendingWrites:De}=La(),q=o.useCallback(g=>{H.current=g,T(g)},[]),Y=o.useCallback((g,C={})=>{v.current=g,N.current=g,Te(Ue(g)),$(g),C.confirmSave&&Me(j=>j+1)},[]),K=o.useCallback(async({updatedAt:g,patch:C,confirmSave:j=!0})=>{const pe=_.notes.detail(e),Oe=x.current;return await s.cancelQueries({queryKey:pe,exact:!0}),Oe!==x.current?!1:(Y(g,{confirmSave:j}),s.setQueryData(pe,Be=>Be&&{...Be,...C,updatedAt:g}),At({noteId:e,updatedAt:g,editSessionId:l.current}),Et(s),!0)},[Y,e,s]),E=o.useCallback(g=>{se.current=g,de(g)},[]),O=o.useCallback(()=>f.current?.flushPendingSave({expectedUpdatedAt:v.current})??Promise.resolve("idle"),[]),Le=Da({noteId:e,initialContent:u.content,initialUpdatedAt:u.updatedAt,editSessionIdRef:l,serverVersionRef:v,executeWrite:L,getContent:()=>r.current?.getContent(),beforeSave:O,hasExternalPendingChanges:()=>se.current||De(),onSaved:g=>{d.current=null,Y(g,{confirmSave:!0})},onConflict:g=>{W({type:"updated",updatedAt:g,source:"unknown"}),t("This note changed elsewhere. Choose how to resolve the draft.")},onError:t}),{saveStatus:ae,localDraft:I,serverUpdatedAtRef:F,hasUnsavedChanges:ue,buildDraft:D,queueSave:Q,flushPendingSave:z,restoreLocalDraft:Z,discardLocalDraft:ve,clearDrafts:J,resolveConflict:fe,pauseForConflict:U,getPendingDraft:oe}=Le,we=ue||be||ye,nt=o.useCallback(async g=>{const C=await z(g);return C==="error"||C==="conflict"||await ne(),C},[ne,z]),fn=o.useCallback(g=>L(async()=>{const C=await Fn({...g,expectedUpdatedAt:v.current});return C.type==="success"&&await K({updatedAt:C.updateNoteProperties.updatedAt,patch:{properties:C.updateNoteProperties.properties}}),C}),[K,L]);Ea({allowNextNavigationRef:m,hasExternalPendingChanges:be||ye,saveStatus:ae,flushPendingChanges:nt,notify:t}),o.useEffect(()=>{if(we){u.updatedAt!==F.current&&(Se(u.updatedAt,F.current)??0)>0&&U(u.updatedAt);return}const g=N.current;if(!(g&&u.updatedAt!==g&&(Se(u.updatedAt,g)??0)<0)&&(p(u.pinned),q(u.layout||"wide"),A(u.title),g!==u.updatedAt)){const C=r.current?.getContent();Y(u.updatedAt),(C===void 0||C!==u.content)&&(X(null),re(j=>j+1))}},[Y,we,u.content,u.layout,u.pinned,u.title,u.updatedAt,U,F]),o.useEffect(()=>{M?.type!=="updated"||ae==="conflict"||M.updatedAt!==u.updatedAt||(Y(u.updatedAt),W(null))},[Y,M,u.updatedAt,ae]),o.useEffect(()=>Yn(g=>{const C=ja({event:g,noteId:e,editSessionId:l.current,loadedUpdatedAt:u.updatedAt,acceptedUpdatedAt:F.current,hasUnsavedChanges:we});C.type!=="ignore"&&(C.shouldPauseSave&&C.change.type==="updated"&&U(C.change.updatedAt),W(C.change))}),[we,u.updatedAt,e,U,F]);const pn=o.useCallback(()=>{Q(D(R))},[D,Q,R]),mn=o.useCallback(g=>{A(g),Q(D(g))},[D,Q]),hn=o.useCallback(()=>{Q(D(R),{immediate:!0})},[D,Q,R]),gn=o.useCallback(async g=>{if(ue){q(g),Q(D(R,{layout:g}),{immediate:!0}),t("Layout will be saved with your draft.");return}const C=await z();C==="error"||C==="conflict"||await L(async()=>{const j=await ze({id:e,layout:g,editSessionId:l.current,expectedUpdatedAt:F.current});if(j.type==="error"){j.errors[0].code===_a&&(d.current=g,q(g),U(Pa(j.errors[0].details)??F.current)),t(j.errors[0].message);return}await K({updatedAt:j.updateNote.updatedAt,patch:{layout:g}})&&(d.current=null,q(g),t("Layout has been updated."))})},[K,D,L,z,ue,e,t,U,Q,F,R]),xn=o.useCallback(async()=>{const g=await z();if(g==="error"||g==="conflict")return;const C=!w;await L(async()=>{const j=await Hn(e,C);if(j.type==="error"){t(j.errors[0].message);return}await K({updatedAt:j.pinNote.updatedAt,patch:{pinned:C},confirmSave:!1})&&p(C)})},[K,L,z,w,e,t]),_e=o.useCallback(()=>({id:e,title:R,createdAt:u.createdAt,updatedAt:F.current||u.updatedAt}),[u.createdAt,u.updatedAt,e,F,R]),bn=o.useCallback(async()=>{const g=r.current?.getMarkdown();if(g===void 0){t("Markdown is not ready yet.");return}try{await navigator.clipboard.writeText(Yt(g,_e())),t("Copied note as Markdown.")}catch{t("Failed to copy Markdown.")}},[_e,t]),yn=o.useCallback(async()=>{f.current?.invalidateInFlightSave(),te(),await ne(),x.current+=1;const g=await h();if(g.error||!g.data){t("Failed to reload the latest note state.");return}f.current?.discardPendingChanges(),J(),d.current=null,Y(g.data.updatedAt),A(g.data.title),q(g.data.layout||"wide"),X(null),re(C=>C+1),W(null)},[J,Y,ne,te,t,h]),vn=o.useCallback(async()=>{if(oe()){d.current=null,W(null),await z({ignoreConflict:!0});return}const C=d.current;if(!C){W(null),await z({ignoreConflict:!0});return}await L(async()=>{const j=await ze({id:e,layout:C,editSessionId:l.current,force:!0});if(j.type==="error"){t(j.errors[0].message);return}await K({updatedAt:j.updateNote.updatedAt,patch:{layout:C}})&&(d.current=null,fe(),W(null),q(C))})},[K,L,z,oe,e,t,fe]),wn=o.useCallback(async()=>{const g=oe();if(!g||await O()==="error")return;const j=await $n({title:rt(g.title||"untitled"),content:rt(g.content),layout:g.layout??y});if(j.type==="error"){t(j.errors[0].message);return}m.current=!0,d.current=null,W(null),J(),Promise.resolve(n(j.createNote.id)).finally(()=>{m.current=!1})},[J,O,oe,y,n,t]),Cn=o.useCallback(()=>{I&&(A(I.title),I.layout&&q(I.layout),X(I.content),re(g=>g+1),Z(I))},[I,Z]),Nn=o.useCallback(()=>{},[]),Sn=o.useCallback(async g=>(f.current?.invalidateInFlightSave(),te(),await ne(),x.current+=1,L(async()=>{const C=await In(g,F.current);if(C.type==="error")return C;const j=C.restoreNoteSnapshot;return await K({updatedAt:j.updatedAt,patch:{title:j.title,content:j.content,layout:j.layout,pinned:j.pinned}})&&(l.current=ct(),f.current?.discardPendingChanges(),J(),d.current=null,W(null),A(j.title),q(j.layout||"wide"),p(j.pinned),X(j.content),re(Oe=>Oe+1)),C})),[K,J,ne,L,te]),Pe=ae==="conflict"&&M?.type==="updated",Rn=Pe?oe():null;return{document:{title:R,titleRef:i,isPinned:w,layout:y,getLayout:()=>H.current,properties:u.properties,createdAt:Ue(u.createdAt),onTitleChange:mn,onLayoutSave:gn,onTogglePinned:xn},editor:{ref:r,key:`${e}:${me}`,content:xe??u.content,getContent:()=>r.current?.getContent()??"",getHtml:()=>r.current?.getHtml(),getMarkdown:()=>r.current?.getMarkdown(),onChange:pn},save:{status:ae,lastSavedAt:ee,lastSavedVersion:le,confirmationRevision:P,onManualSave:hn,flushPendingChanges:nt},recovery:{localDraftCreatedAt:I?G(I.createdAt).format("YYYY-MM-DD HH:mm:ss"):null,onRestoreLocalDraft:Cn,onDiscardLocalDraft:ve,onClonePendingDraft:wn},externalChange:{value:M,isConflict:Pe,hasConflictDraft:Rn!==null,isBlocking:Aa({change:M,isConflict:Pe,loadedUpdatedAt:u.updatedAt}),isReloading:b.isRefetching,onReload:yn,onOverwrite:vn},properties:{ref:f,expectedUpdatedAt:F.current,editSessionId:l.current,saveProperties:fn,onPendingChange:E,onSaved:Nn},exportDocument:{metadata:_e(),onCopyMarkdown:bn},snapshots:{restore:Sn}}}const un=Un(Ee),Ba={narrow:"max-w-[640px]",wide:"max-w-[896px]",full:"max-w-full px-4"},Fa=a.jsx(Ge,{title:"Loading note",variant:"none",children:a.jsxs("main",{className:"mx-auto max-w-[896px]",children:[a.jsx(ie,{className:"mb-8",height:123}),a.jsxs("div",{className:"flex flex-col gap-5",children:[a.jsx(ie,{height:135}),a.jsx(ie,{className:"ml-12",height:320}),a.jsx(ie,{height:107}),a.jsx(ie,{height:100})]})]})});function Ha({noteId:e}){return a.jsx(qe,{fallback:a.jsx(ie,{height:107}),errorTitle:"Failed to load reminders",errorDescription:"Retry loading reminder details for this note.",renderError:({error:n,retry:t})=>a.jsx(Je,{title:"Failed to load reminders",description:"Retry loading reminder details for this note.",error:n,onRetry:t,showBackAction:!1,showHomeAction:!1}),children:a.jsx(ds,{noteId:e})})}function $a({noteId:e}){return a.jsx(qe,{fallback:a.jsx(ie,{height:100}),errorTitle:"Failed to load back references",errorDescription:"Retry loading notes that link back here.",renderError:({error:n,retry:t})=>a.jsx(Je,{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(Mr,{noteId:e,render:n=>n?.length?a.jsx(Tt,{icon:a.jsx(wr,{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(zn,{to:Ee,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(Sr,{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 Ia({id:e}){const n=je(),t=un.useNavigate(),[s,r]=o.useState(!1),[i,c]=o.useState(!1),[l,f]=o.useState(!1),d=Oa({noteId:e,notify:n,navigateToNote:M=>t({to:Ee,params:{id:M}})}),{onCreate:m,onDelete:x,deleteWarningDialog:b}=Qn(),{document:u,editor:h,save:v,recovery:N,externalChange:R,properties:A,exportDocument:w,snapshots:p}=d,y=()=>t({to:sr,search:{page:1}}),T=async()=>{const M=await v.flushPendingChanges();M==="error"||M==="conflict"||await x(e,y)},H=async()=>{const M=await v.flushPendingChanges();M==="error"||M==="conflict"||await m(u.titleRef.current?.value||"untitled",h.getContent(),u.getLayout())};return a.jsx(Ge,{title:u.title,variant:"none",children:a.jsxs("main",{className:V("mx-auto",Ba[u.layout]),children:[a.jsx(Br,{title:u.title,titleRef:u.titleRef,isPinned:u.isPinned,createdAt:u.createdAt,saveStatus:v.status,savedAt:v.lastSavedAt,savedVersion:v.lastSavedVersion,saveConfirmationRevision:v.confirmationRevision,onTitleChange:u.onTitleChange,onCopyMarkdown:()=>{w.onCopyMarkdown()},onDownloadDocument:()=>f(!0),onTogglePinned:()=>{u.onTogglePinned()},onChangeLayout:()=>r(!0),onCloneNote:()=>{H()},onRestoreVersion:()=>c(!0),onDelete:()=>{T()},onSave:v.onManualSave}),a.jsx(cs,{localDraftCreatedAt:N.localDraftCreatedAt,hasSaveError:v.status==="error",onRestoreDraft:N.onRestoreLocalDraft,onDiscardDraft:N.onDiscardLocalDraft,onRetrySave:v.onManualSave,onSaveAsNewNote:()=>{N.onClonePendingDraft()}}),a.jsxs("div",{className:"flex flex-col gap-5",children:[a.jsx(nr,{ref:A.ref,noteId:e,properties:u.properties,expectedUpdatedAt:A.expectedUpdatedAt,editSessionId:A.editSessionId,disabled:v.status!=="saved",saveProperties:A.saveProperties,onPendingChange:A.onPendingChange,onSaved:A.onSaved}),a.jsx(Ra,{ref:h.ref,content:h.content,currentNoteId:e,onChange:h.onChange},h.key),a.jsx(Ha,{noteId:e}),a.jsx($a,{noteId:e})]}),a.jsx(_r,{isOpen:s,onClose:()=>r(!1),onSave:u.onLayoutSave,currentLayout:u.layout}),a.jsx(is,{isOpen:R.isBlocking,isDeleted:R.value?.type==="deleted",isConflict:R.isConflict,hasDraft:R.hasConflictDraft,source:R.value?.source??"unknown",isReloading:R.isReloading,onReload:()=>{R.onReload()},onOverwrite:()=>{R.onOverwrite()},onCloneDraft:()=>{N.onClonePendingDraft()},onOpenTrash:()=>{y()}}),a.jsx(ss,{isOpen:l,metadata:w.metadata,getHtml:h.getHtml,getMarkdown:h.getMarkdown,onClose:()=>f(!1)}),a.jsx(ls,{isOpen:i,noteId:e,onClose:()=>c(!1),restoreSnapshot:p.restore}),b]})})}function io(){const{id:e}=un.useParams();if(!e)throw new Error("Note id is required.");return a.jsx(qe,{fallback:Fa,errorTitle:"Failed to load note",errorDescription:"Retry loading the note editor.",resetKeys:[e],renderError:({error:n,retry:t})=>a.jsx(Ge,{title:"Note",variant:"none",children:a.jsx(Je,{title:"Failed to load note",description:"Retry loading the note editor.",error:n,onRetry:t})}),children:a.jsx(Ia,{id:e},e)})}export{Ia as NoteContent,io as default};
|
|
19
|
+
`)||e.endsWith("\r")?{body:e.slice(0,-1),ending:e.slice(-1)}:{body:e,ending:""},nn=(e,n,t)=>{let s=n;for(;e[s]===t;)s+=1;return s-n},rn=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)},Gs=e=>{const n=e.replace(tn,rn),t=e.toLowerCase();let s=0,r=`${gt}${s}${xt}`;for(;e.includes(r)||t.includes(encodeURIComponent(r).toLowerCase())||n.includes(r);)s+=1,r=`${gt}${s}${xt}`;return r},Js=(e,n,t)=>t-n>2?!1:sn(e,n)&&ea(e,t),bt=(e,n)=>{let t=n;for(;t>0&&en.test(e[t-1]??"");)t-=1;return{start:t,token:e.slice(t,n)}},Xs=(e,n)=>{let t=n;for(;t<e.length&&en.test(e[t]??"");)t+=1;return e.slice(n,t)},sn=(e,n)=>{const t=bt(e,n);if(Ke.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:Ke.test(bt(e,s).token)},ea=(e,n)=>Ke.test(Xs(e,n)),an=e=>{const n=[],t=new Set;for(const s of e.matchAll(Xt)){const r=s.index,i=s[0].length,c=r+i;if(i>2)continue;const l=c<e.length&&!/\s/u.test(e[c]??""),f=r>0&&!/\s/u.test(e[r-1]??"");if(Js(e,r,c)){if(f&&t.delete(i))continue;n.push({length:i,start:r});continue}f&&t.delete(i)||l&&sn(e,r)&&t.add(i)}return n},He=(e,n)=>{let t="",s=0;const r=new Set(an(e).map(i=>i.start));for(const i of e.matchAll(Xt)){const c=i.index,l=c+i[0].length;t+=e.slice(s,c),t+=r.has(c)?n.repeat(i[0].length):i[0],s=l}return t+e.slice(s)},ta=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},na=(e,n)=>{let t="",s=0;for(const r of e.matchAll(Vs)){const i=r.index;t+=He(e.slice(s,i),n),t+=ta(r[0])?r[0]:He(r[0],n),s=i+r[0].length}return t+He(e.slice(s),n)},on=e=>an(e).length>0,ra=e=>{if(!on(e))return it(e);const n=Gs(e),t=na(e,n),s=encodeURIComponent(n);return it(t).split(n).join("~").split(s).join("~")},sa=(e,n)=>{let t=0;for(let s=n-1;s>=0&&e[s]==="\\";s-=1)t+=1;return t%2===1},aa=(e,n,t)=>{let s=n+t;for(;s<e.length;){const r=e.indexOf("`",s);if(r===-1)return null;const i=nn(e,r,"`");if(i===t)return r+i;s=r+i}return null},oa=(e,n)=>{let t=e.indexOf("`",n);for(;t!==-1;){const s=nn(e,t,"`");if(!sa(e,t)){const r=aa(e,t,s);if(r!==null)return{start:t,end:r}}t=e.indexOf("`",t+s)}return null},ia=(e,n)=>{let t="",s=0;for(;s<e.length;){const r=oa(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},cn=(e,n)=>{let t=null;return e.split(new RegExp("(?<=\\n)")).map(s=>{const{body:r,ending:i}=qs(s);if(t)return new RegExp(`^ {0,3}${t.marker}{${t.length},} *$`).test(r)&&(t=null),s;const c=r.match(Zs)?.[1];return c?(t={marker:c[0],length:c.length},s):`${ia(r,n)}${i}`}).join("")},ca=(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},ln=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,i=ca(e,r);if(i===null){n+=e.slice(t);break}n+=e.slice(t,r),n+=e.slice(r,i).split("\\&").join("&"),n+=")",t=i+1}return n},la=(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),i=e.lastIndexOf(r,s-1);return i!==-1&&i+r.length<s},da=(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),i=e.indexOf(r,s);return i!==-1&&s<i},ua=(e,n,t)=>la(e,n)||da(e,n+t),fa=e=>cn(e,n=>{const t=n.replace(tn,(s,r,i)=>ua(i,r,s.length)?rn(s):s);return ln(t)}),pa=e=>cn(e,ln),ma=e=>{const n=e.getData("text/plain");n&&(e.setData("text/markdown",n),e.setData("text/plain",fa(n)))},ha=({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=>Ws.has(l)))return t();const i=r.includes("text/markdown"),c=s.getData(i?"text/markdown":"text/plain");return!c||!on(c)||!i&&r.includes("text/html")&&!Qs(c)?t():(n.pasteHTML(ra(c)),!0)},ga=new Set(["tableOfContents"]),xa="OCEAN_BRAIN_TAG_",ba="_TOKEN",yt=e=>`${xa}${e}${ba}`,ya=e=>{const n=JSON.stringify(e);let t=0;return()=>{let s=yt(t);for(;n.includes(s);)t+=1,s=yt(t);return t+=1,s}},va=e=>!Array.isArray(e)&&e?.type==="tableContent",wa=(e,n)=>Array.isArray(e)?e.map(n):va(e)?{...e,rows:e.rows?.map(t=>({...t,cells:t.cells?.map(s=>({...s,content:s.content?.map(n)}))}))}:e,dn=(e,n)=>e.filter(t=>!ga.has(t.type)).map(t=>({...t,content:n(t.content),children:t.children?.length?dn(t.children,n):[]}));function Ca(e){const n=new Map,t=ya(e);return{blocks:dn(e,r=>wa(r,i=>{if(i.type==="reference"){const c=String(i.props?.id||""),l=String(i.props?.title||i.props?.id||"");return{type:"text",text:c?`[[${l}]](note:${c})`:`[[${l}]]`,styles:{}}}if(i.type==="tag"){const c=i.props?.tag||"",l=t();return n.set(l,c),{type:"text",text:l,styles:{}}}return i})),placeholderToTag:n}}function Na(e,n){let t=e;for(const[s,r]of n.entries())t=t.split(s).join(`[${r}]`);return t}async function Sa(e){return new Promise((n,t)=>{const s=new FileReader;s.readAsDataURL(e),s.onload=()=>n(s.result),s.onerror=r=>t(r)})}const Ra=o.forwardRef(({content:e,currentNoteId:n,editable:t,onChange:s},r)=>{const{theme:i}=Nt(d=>d),c=je(),l=pr({schema:Is,initialContent:e&&JSON.parse(e)||void 0,pasteHandler:d=>ha(d),uploadFile:async(d,m)=>{const x=()=>{m&&l.getBlock(m)&&l.removeBlocks([m])};if(!Xn(d.type))throw x(),c(at),new Error(at);try{return await hr({base64:await Sa(d)})}catch(b){throw x(),c(er),b}}},[c]);o.useImperativeHandle(r,()=>({getContent:()=>JSON.stringify(l.document),getMarkdown:()=>{const d=Ca(l.document),m=l.blocksToMarkdownLossy(d.blocks);return pa(Na(m,d.placeholderToTag))},getHtml:()=>l.blocksToHTMLLossy(l.document)}));const f=d=>{ma(d.clipboardData)};return a.jsxs(mr,{slashMenu:!1,theme:i,editor:l,editable:t,onChange:s,onCopy:f,onCut:f,children:[a.jsx(fs,{editor:l}),a.jsx(ms,{currentNoteId:n,onClick:d=>{l.insertInlineContent([d," "])}}),a.jsx(zs,{onClick:d=>{l.insertInlineContent([d," "])}})]})}),ja=({event:e,noteId:n,editSessionId:t,loadedUpdatedAt:s,acceptedUpdatedAt:r,hasUnsavedChanges:i})=>{if(e.noteId!==n||e.type==="mcp.note.created")return{type:"ignore"};if(e.source==="web"&&e.editSessionId===t)return{type:"ignore"};if(e.type==="mcp.note.deleted")return{type:"notify",change:{type:"deleted",source:e.source},shouldPauseSave:!1};const c=Se(e.updatedAt,s),l=Se(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:i}},Aa=({change:e,isConflict:n,loadedUpdatedAt:t})=>e?!(e.type==="updated"&&!n&&e.updatedAt===t):!1;function Ea({allowNextNavigationRef:e,hasExternalPendingChanges:n,saveStatus:t,flushPendingChanges:s,notify:r}){const i=o.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]);jr({disabled:t==="saved"&&!n,enableBeforeUnload:!1,shouldBlockFn:i})}const tt=e=>`ocean-brain.note-draft.${e}`,ka=e=>{if(typeof window>"u")return null;try{const n=window.localStorage.getItem(tt(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}},$e=(e,n)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(tt(e),JSON.stringify(n))}catch{}},Ie=e=>{if(!(typeof window>"u"))try{window.localStorage.removeItem(tt(e))}catch{}},Ta=1e3,Ma="NOTE_UPDATE_CONFLICT";function Da({noteId:e,initialContent:n,initialUpdatedAt:t,editSessionIdRef:s,getContent:r,beforeSave:i,hasExternalPendingChanges:c,serverVersionRef:l,executeWrite:f,onSaved:d,onConflict:m,onError:x}){const b=Qe(),u=o.useRef(null),h=o.useRef(null),v=o.useRef(!1),N=o.useRef(null),R=o.useRef(!1),A=o.useRef(t),w=l??A,p=o.useRef(0),y=o.useRef(!1),T=o.useRef(!0),H=o.useRef(d),M=o.useRef(m),W=o.useRef(x),xe=o.useRef(i),X=o.useRef(c),me=o.useRef(f),[re,ee]=o.useState("saved"),[Te,le]=o.useState(null),$=o.useCallback(()=>{u.current!==null&&(window.clearTimeout(u.current),u.current=null)},[]),P=o.useCallback(E=>{T.current&&ee(E)},[]),Me=o.useCallback(E=>{w.current=E},[]),be=o.useCallback((E,O={})=>({title:E,content:r()??n,createdAt:Date.now(),baseUpdatedAt:w.current,...O.layout?{layout:O.layout}:{}}),[r,n]),de=o.useCallback(()=>{h.current&&$e(e,h.current)},[e]),se=o.useCallback(E=>{y.current=!0,P("conflict"),M.current(E??w.current)},[P]),_=o.useCallback(async({ignoreConflict:E=!1,silent:O=!1}={})=>{if(v.current)return R.current=!0,N.current??"idle";const Le=h.current!==null,ae=X.current?.()??!1;if(!Le&&!ae)return R.current=!1,"idle";const I=p.current;R.current=!1,$(),v.current=!0,O||P("saving");const F=(async()=>{const ue=await xe.current?.()??"idle";if(I!==p.current)return"idle";if(ue==="error")return v.current=!1,N.current=null,h.current?P("error"):P("saved"),"error";const D=h.current;if(!D)return v.current=!1,N.current=null,P("saved"),ue;h.current=null;const Q=async()=>{if(I!==p.current)return"idle";let Z;try{Z=await ze({id:e,title:D.title,content:D.content,...D.layout?{layout:D.layout}:{},editSessionId:s.current,...E?{force:!0}:{expectedUpdatedAt:w.current}})}catch{Z={type:"error",category:"network",errors:[{code:"NETWORK_ERROR",message:"Failed to save note."}]}}if(I!==p.current)return"idle";if(Z.type==="error"){v.current=!1,N.current=null,h.current||(h.current=D),de();const U=Z.errors[0];if(U.code===Ma&&!E){const oe=U.details?.extensions?.currentUpdatedAt;return y.current=!0,!O&&T.current&&(P("conflict"),M.current(oe??w.current)),"conflict"}return!O&&T.current&&(P("error"),W.current(U.message)),"error"}const ve=!O&&T.current,J=L.notes.detail(e);if(await b.cancelQueries({queryKey:J,exact:!0}),I!==p.current)return"idle";v.current=!1,N.current=null,y.current=!1,w.current=Z.updateNote.updatedAt,ve&&H.current(Z.updateNote.updatedAt),b.setQueryData(J,U=>U&&{...U,title:Z.updateNote.title,content:D.content,...D.layout?{layout:D.layout}:{},updatedAt:Z.updateNote.updatedAt}),At({noteId:e,updatedAt:Z.updateNote.updatedAt,editSessionId:s.current});const fe=h.current;return fe?.baseUpdatedAt===D.baseUpdatedAt?(h.current={...fe,baseUpdatedAt:Z.updateNote.updatedAt},de()):fe||Ie(e),h.current||Et(b),ve&&(h.current?ee("pending"):ee("saved")),"saved"},z=me.current?await me.current(Q):await Q();return z?z==="saved"&&(h.current||R.current)?_({silent:O}):z:(h.current||(h.current=D),de(),v.current=!1,N.current=null,P("pending"),"idle")})();return N.current=F,F},[$,s,e,de,b,w,P]),te=o.useCallback((E,O={})=>{if(h.current=E,$e(e,E),y.current){P("conflict");return}if(P("pending"),$(),O.immediate){_();return}u.current=window.setTimeout(()=>{_()},Ta)},[$,_,e,P]),ne=o.useCallback(E=>{if(h.current=E,$e(e,E),le(null),E.baseUpdatedAt!==w.current){se(w.current);return}te(E)},[e,te,se]),ye=o.useCallback(()=>{p.current+=1,$(),h.current=null,v.current=!1,N.current=null,R.current=!1,y.current=!1,Ie(e),le(null),ee("saved")},[$,e]),De=o.useCallback(()=>{$(),N.current=null,R.current=!1,y.current=!1,P(h.current?"pending":"saved")},[$,P]),q=o.useCallback(()=>{Ie(e),le(null)},[e]),Y=o.useCallback(()=>h.current,[]),K=o.useCallback(E=>{$(),se(E)},[$,se]);return o.useEffect(()=>{xe.current=i,me.current=f,X.current=c,M.current=m,W.current=x,H.current=d},[i,f,c,m,x,d]),o.useEffect(()=>(T.current=!0,()=>{T.current=!1}),[]),o.useEffect(()=>{h.current||v.current||y.current||(w.current=t,ee("saved"))},[t]),o.useEffect(()=>{p.current+=1,h.current=null,v.current=!1,N.current=null,R.current=!1,y.current=!1,w.current=t,le(ka(e)),ee("saved")},[e]),o.useEffect(()=>{const E=O=>{!h.current&&!v.current&&!y.current&&!X.current?.()||(O.preventDefault(),O.returnValue="")};return window.addEventListener("beforeunload",E),()=>{window.removeEventListener("beforeunload",E)}},[]),o.useEffect(()=>()=>{$(),h.current&&!y.current&&_({silent:!0})},[$,_]),{saveStatus:re,localDraft:Te,serverUpdatedAtRef:w,hasUnsavedChanges:re!=="saved",buildDraft:be,queueSave:te,flushPendingSave:_,restoreLocalDraft:ne,discardLocalDraft:q,clearDrafts:ye,resolveConflict:De,pauseForConflict:K,getPendingDraft:Y,setServerUpdatedAt:Me}}function La(){const e=o.useRef(Promise.resolve()),n=o.useRef(0),t=o.useRef(0),[s,r]=o.useState(!1),i=o.useCallback(d=>{t.current+=1,r(!0);const m=n.current,x=()=>m===n.current?d():void 0,b=e.current.then(x,x);e.current=b.then(()=>{},()=>{});const u=()=>{t.current-=1,t.current===0&&r(!1)};return b.then(u,u),b},[]),c=o.useCallback(()=>{n.current+=1},[]),l=o.useCallback(()=>e.current,[]),f=o.useCallback(()=>t.current>0,[]);return o.useMemo(()=>({execute:i,invalidatePending:c,drain:l,isBusy:s,hasPendingWrites:f}),[l,i,f,c,s])}const _a="NOTE_UPDATE_CONFLICT",Ue=e=>{const n=ge(e);return G(n??Number(e)).format("YYYY-MM-DD HH:mm:ss")},Pa=e=>e?.extensions?.currentUpdatedAt;function Oa({noteId:e,navigateToNote:n,notify:t}){const s=Qe(),r=o.useRef(null),i=o.useRef(null),[c]=o.useState(ct),l=o.useRef(c),f=o.useRef(null),d=o.useRef(null),m=o.useRef(!1),x=o.useRef(0),b=Ye({queryKey:L.notes.detail(e),queryFn:async()=>{const g=await Bn(e);if(g.type==="error")throw g;return g.note},gcTime:0}),u=b.data,h=b.refetch,v=o.useRef(u.updatedAt),N=o.useRef(u.updatedAt),[R,A]=o.useState(u.title),[w,p]=o.useState(u.pinned),[y,T]=o.useState(u.layout||"wide"),H=o.useRef(y),[M,W]=o.useState(null),[xe,X]=o.useState(null),[me,re]=o.useState(0),[ee,Te]=o.useState(()=>Ue(u.updatedAt)),[le,$]=o.useState(u.updatedAt),[P,Me]=o.useState(0),[be,de]=o.useState(!1),se=o.useRef(!1),{execute:_,invalidatePending:te,drain:ne,isBusy:ye,hasPendingWrites:De}=La(),q=o.useCallback(g=>{H.current=g,T(g)},[]),Y=o.useCallback((g,C={})=>{v.current=g,N.current=g,Te(Ue(g)),$(g),C.confirmSave&&Me(j=>j+1)},[]),K=o.useCallback(async({updatedAt:g,patch:C,confirmSave:j=!0})=>{const pe=L.notes.detail(e),Oe=x.current;return await s.cancelQueries({queryKey:pe,exact:!0}),Oe!==x.current?!1:(Y(g,{confirmSave:j}),s.setQueryData(pe,Be=>Be&&{...Be,...C,updatedAt:g}),At({noteId:e,updatedAt:g,editSessionId:l.current}),Et(s),!0)},[Y,e,s]),E=o.useCallback(g=>{se.current=g,de(g)},[]),O=o.useCallback(()=>f.current?.flushPendingSave({expectedUpdatedAt:v.current})??Promise.resolve("idle"),[]),Le=Da({noteId:e,initialContent:u.content,initialUpdatedAt:u.updatedAt,editSessionIdRef:l,serverVersionRef:v,executeWrite:_,getContent:()=>r.current?.getContent(),beforeSave:O,hasExternalPendingChanges:()=>se.current||De(),onSaved:g=>{d.current=null,Y(g,{confirmSave:!0})},onConflict:g=>{W({type:"updated",updatedAt:g,source:"unknown"}),t("This note changed elsewhere. Choose how to resolve the draft.")},onError:t}),{saveStatus:ae,localDraft:I,serverUpdatedAtRef:F,hasUnsavedChanges:ue,buildDraft:D,queueSave:Q,flushPendingSave:z,restoreLocalDraft:Z,discardLocalDraft:ve,clearDrafts:J,resolveConflict:fe,pauseForConflict:U,getPendingDraft:oe}=Le,we=ue||be||ye,nt=o.useCallback(async g=>{const C=await z(g);return C==="error"||C==="conflict"||await ne(),C},[ne,z]),fn=o.useCallback(g=>_(async()=>{const C=await Fn({...g,expectedUpdatedAt:v.current});return C.type==="success"&&await K({updatedAt:C.updateNoteProperties.updatedAt,patch:{properties:C.updateNoteProperties.properties}}),C}),[K,_]);Ea({allowNextNavigationRef:m,hasExternalPendingChanges:be||ye,saveStatus:ae,flushPendingChanges:nt,notify:t}),o.useEffect(()=>{if(we){u.updatedAt!==F.current&&(Se(u.updatedAt,F.current)??0)>0&&U(u.updatedAt);return}const g=N.current;if(!(g&&u.updatedAt!==g&&(Se(u.updatedAt,g)??0)<0)&&(p(u.pinned),q(u.layout||"wide"),A(u.title),g!==u.updatedAt)){const C=r.current?.getContent();Y(u.updatedAt),(C===void 0||C!==u.content)&&(X(null),re(j=>j+1))}},[Y,we,u.content,u.layout,u.pinned,u.title,u.updatedAt,U,F]),o.useEffect(()=>{M?.type!=="updated"||ae==="conflict"||M.updatedAt!==u.updatedAt||(Y(u.updatedAt),W(null))},[Y,M,u.updatedAt,ae]),o.useEffect(()=>Yn(g=>{const C=ja({event:g,noteId:e,editSessionId:l.current,loadedUpdatedAt:u.updatedAt,acceptedUpdatedAt:F.current,hasUnsavedChanges:we});C.type!=="ignore"&&(C.shouldPauseSave&&C.change.type==="updated"&&U(C.change.updatedAt),W(C.change))}),[we,u.updatedAt,e,U,F]);const pn=o.useCallback(()=>{Q(D(R))},[D,Q,R]),mn=o.useCallback(g=>{A(g),Q(D(g))},[D,Q]),hn=o.useCallback(()=>{Q(D(R),{immediate:!0})},[D,Q,R]),gn=o.useCallback(async g=>{if(ue){q(g),Q(D(R,{layout:g}),{immediate:!0}),t("Layout will be saved with your draft.");return}const C=await z();C==="error"||C==="conflict"||await _(async()=>{const j=await ze({id:e,layout:g,editSessionId:l.current,expectedUpdatedAt:F.current});if(j.type==="error"){j.errors[0].code===_a&&(d.current=g,q(g),U(Pa(j.errors[0].details)??F.current)),t(j.errors[0].message);return}await K({updatedAt:j.updateNote.updatedAt,patch:{layout:g}})&&(d.current=null,q(g),t("Layout has been updated."))})},[K,D,_,z,ue,e,t,U,Q,F,R]),xn=o.useCallback(async()=>{const g=await z();if(g==="error"||g==="conflict")return;const C=!w;await _(async()=>{const j=await Hn(e,C);if(j.type==="error"){t(j.errors[0].message);return}await K({updatedAt:j.pinNote.updatedAt,patch:{pinned:C},confirmSave:!1})&&p(C)})},[K,_,z,w,e,t]),_e=o.useCallback(()=>({id:e,title:R,createdAt:u.createdAt,updatedAt:F.current||u.updatedAt}),[u.createdAt,u.updatedAt,e,F,R]),bn=o.useCallback(async()=>{const g=r.current?.getMarkdown();if(g===void 0){t("Markdown is not ready yet.");return}try{await navigator.clipboard.writeText(Yt(g,_e())),t("Copied note as Markdown.")}catch{t("Failed to copy Markdown.")}},[_e,t]),yn=o.useCallback(async()=>{f.current?.invalidateInFlightSave(),te(),await ne(),x.current+=1;const g=await h();if(g.error||!g.data){t("Failed to reload the latest note state.");return}f.current?.discardPendingChanges(),J(),d.current=null,Y(g.data.updatedAt),A(g.data.title),q(g.data.layout||"wide"),X(null),re(C=>C+1),W(null)},[J,Y,ne,te,t,h]),vn=o.useCallback(async()=>{if(oe()){d.current=null,W(null),await z({ignoreConflict:!0});return}const C=d.current;if(!C){W(null),await z({ignoreConflict:!0});return}await _(async()=>{const j=await ze({id:e,layout:C,editSessionId:l.current,force:!0});if(j.type==="error"){t(j.errors[0].message);return}await K({updatedAt:j.updateNote.updatedAt,patch:{layout:C}})&&(d.current=null,fe(),W(null),q(C))})},[K,_,z,oe,e,t,fe]),wn=o.useCallback(async()=>{const g=oe();if(!g||await O()==="error")return;const j=await $n({title:rt(g.title||"untitled"),content:rt(g.content),layout:g.layout??y});if(j.type==="error"){t(j.errors[0].message);return}m.current=!0,d.current=null,W(null),J(),Promise.resolve(n(j.createNote.id)).finally(()=>{m.current=!1})},[J,O,oe,y,n,t]),Cn=o.useCallback(()=>{I&&(A(I.title),I.layout&&q(I.layout),X(I.content),re(g=>g+1),Z(I))},[I,Z]),Nn=o.useCallback(()=>{},[]),Sn=o.useCallback(async g=>(f.current?.invalidateInFlightSave(),te(),await ne(),x.current+=1,_(async()=>{const C=await In(g,F.current);if(C.type==="error")return C;const j=C.restoreNoteSnapshot;return await K({updatedAt:j.updatedAt,patch:{title:j.title,content:j.content,layout:j.layout,pinned:j.pinned}})&&(l.current=ct(),f.current?.discardPendingChanges(),J(),d.current=null,W(null),A(j.title),q(j.layout||"wide"),p(j.pinned),X(j.content),re(Oe=>Oe+1)),C})),[K,J,ne,_,te]),Pe=ae==="conflict"&&M?.type==="updated",Rn=Pe?oe():null;return{document:{title:R,titleRef:i,isPinned:w,layout:y,getLayout:()=>H.current,properties:u.properties,createdAt:Ue(u.createdAt),onTitleChange:mn,onLayoutSave:gn,onTogglePinned:xn},editor:{ref:r,key:`${e}:${me}`,content:xe??u.content,getContent:()=>r.current?.getContent()??"",getHtml:()=>r.current?.getHtml(),getMarkdown:()=>r.current?.getMarkdown(),onChange:pn},save:{status:ae,lastSavedAt:ee,lastSavedVersion:le,confirmationRevision:P,onManualSave:hn,flushPendingChanges:nt},recovery:{localDraftCreatedAt:I?G(I.createdAt).format("YYYY-MM-DD HH:mm:ss"):null,onRestoreLocalDraft:Cn,onDiscardLocalDraft:ve,onClonePendingDraft:wn},externalChange:{value:M,isConflict:Pe,hasConflictDraft:Rn!==null,isBlocking:Aa({change:M,isConflict:Pe,loadedUpdatedAt:u.updatedAt}),isReloading:b.isRefetching,onReload:yn,onOverwrite:vn},properties:{ref:f,expectedUpdatedAt:F.current,editSessionId:l.current,saveProperties:fn,onPendingChange:E,onSaved:Nn},exportDocument:{metadata:_e(),onCopyMarkdown:bn},snapshots:{restore:Sn}}}const un=Un(Ee),Ba={narrow:"max-w-[640px]",wide:"max-w-[896px]",full:"max-w-full px-4"},Fa=a.jsx(Ge,{title:"Loading note",variant:"none",children:a.jsxs("main",{className:"mx-auto max-w-[896px]",children:[a.jsx(ie,{className:"mb-8",height:123}),a.jsxs("div",{className:"flex flex-col gap-5",children:[a.jsx(ie,{height:135}),a.jsx(ie,{className:"ml-12",height:320}),a.jsx(ie,{height:107}),a.jsx(ie,{height:100})]})]})});function Ha({noteId:e}){return a.jsx(qe,{fallback:a.jsx(ie,{height:107}),errorTitle:"Failed to load reminders",errorDescription:"Retry loading reminder details for this note.",renderError:({error:n,retry:t})=>a.jsx(Je,{title:"Failed to load reminders",description:"Retry loading reminder details for this note.",error:n,onRetry:t,showBackAction:!1,showHomeAction:!1}),children:a.jsx(ds,{noteId:e})})}function $a({noteId:e}){return a.jsx(qe,{fallback:a.jsx(ie,{height:100}),errorTitle:"Failed to load back references",errorDescription:"Retry loading notes that link back here.",renderError:({error:n,retry:t})=>a.jsx(Je,{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(Mr,{noteId:e,render:n=>n?.length?a.jsx(Tt,{icon:a.jsx(Sr,{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(zn,{to:Ee,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(Nr,{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 Ia({id:e}){const n=je(),t=un.useNavigate(),[s,r]=o.useState(!1),[i,c]=o.useState(!1),[l,f]=o.useState(!1),d=Oa({noteId:e,notify:n,navigateToNote:M=>t({to:Ee,params:{id:M}})}),{onCreate:m,onDelete:x,deleteWarningDialog:b}=Qn(),{document:u,editor:h,save:v,recovery:N,externalChange:R,properties:A,exportDocument:w,snapshots:p}=d,y=()=>t({to:sr,search:{page:1}}),T=async()=>{const M=await v.flushPendingChanges();M==="error"||M==="conflict"||await x(e,y)},H=async()=>{const M=await v.flushPendingChanges();M==="error"||M==="conflict"||await m(u.titleRef.current?.value||"untitled",h.getContent(),u.getLayout())};return a.jsx(Ge,{title:u.title,variant:"none",children:a.jsxs("main",{className:V("mx-auto",Ba[u.layout]),children:[a.jsx(Br,{title:u.title,titleRef:u.titleRef,isPinned:u.isPinned,createdAt:u.createdAt,saveStatus:v.status,savedAt:v.lastSavedAt,savedVersion:v.lastSavedVersion,saveConfirmationRevision:v.confirmationRevision,onTitleChange:u.onTitleChange,onCopyMarkdown:()=>{w.onCopyMarkdown()},onDownloadDocument:()=>f(!0),onTogglePinned:()=>{u.onTogglePinned()},onChangeLayout:()=>r(!0),onCloneNote:()=>{H()},onRestoreVersion:()=>c(!0),onDelete:()=>{T()},onSave:v.onManualSave}),a.jsx(cs,{localDraftCreatedAt:N.localDraftCreatedAt,hasSaveError:v.status==="error",onRestoreDraft:N.onRestoreLocalDraft,onDiscardDraft:N.onDiscardLocalDraft,onRetrySave:v.onManualSave,onSaveAsNewNote:()=>{N.onClonePendingDraft()}}),a.jsxs("div",{className:"flex flex-col gap-5",children:[a.jsx(tr,{ref:A.ref,noteId:e,properties:u.properties,expectedUpdatedAt:A.expectedUpdatedAt,editSessionId:A.editSessionId,disabled:v.status!=="saved",saveProperties:A.saveProperties,onPendingChange:A.onPendingChange,onSaved:A.onSaved}),a.jsx(Ra,{ref:h.ref,content:h.content,currentNoteId:e,onChange:h.onChange},h.key),a.jsx(Ha,{noteId:e}),a.jsx($a,{noteId:e})]}),a.jsx(_r,{isOpen:s,onClose:()=>r(!1),onSave:u.onLayoutSave,currentLayout:u.layout}),a.jsx(is,{isOpen:R.isBlocking,isDeleted:R.value?.type==="deleted",isConflict:R.isConflict,hasDraft:R.hasConflictDraft,source:R.value?.source??"unknown",isReloading:R.isReloading,onReload:()=>{R.onReload()},onOverwrite:()=>{R.onOverwrite()},onCloneDraft:()=>{N.onClonePendingDraft()},onOpenTrash:()=>{y()}}),a.jsx(ss,{isOpen:l,metadata:w.metadata,getHtml:h.getHtml,getMarkdown:h.getMarkdown,onClose:()=>f(!1)}),a.jsx(ls,{isOpen:i,noteId:e,onClose:()=>c(!1),restoreSnapshot:p.restore}),b]})})}function lo(){const{id:e}=un.useParams();if(!e)throw new Error("Note id is required.");return a.jsx(qe,{fallback:Fa,errorTitle:"Failed to load note",errorDescription:"Retry loading the note editor.",resetKeys:[e],renderError:({error:n,retry:t})=>a.jsx(Ge,{title:"Note",variant:"none",children:a.jsx(Je,{title:"Failed to load note",description:"Retry loading the note editor.",error:n,onRetry:t})}),children:a.jsx(Ia,{id:e},e)})}export{Ia as NoteContent,lo as default};
|