@augmentd-labs/canvas-web 2.26.39 → 2.26.41

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.
Files changed (82) hide show
  1. package/dist/assets/CalendarApplet-Bno3IDzO.js +2 -0
  2. package/dist/assets/FileForm-CDiVKvxq.js +1 -0
  3. package/dist/assets/{FiltersApplet-CvdFlyn1.js → FiltersApplet-PclPc7fz.js} +1 -1
  4. package/dist/assets/{HomeFab-DRmbW2Uu.js → HomeFab-B3f-hO-p.js} +1 -1
  5. package/dist/assets/{IdentityFields-C7sv9pMk.js → IdentityFields-D-NCTUaE.js} +1 -1
  6. package/dist/assets/{LensApplet-gIiGSdLb.js → LensApplet-BnW7b0KX.js} +1 -1
  7. package/dist/assets/LinkToCard-CKVi4Nrg.js +1 -0
  8. package/dist/assets/{NextShell-DiyMsTp5.js → NextShell-ull6WmMg.js} +1 -1
  9. package/dist/assets/{NotesApplet-BUXkez68.js → NotesApplet-FjdHMWCV.js} +1 -1
  10. package/dist/assets/{ObjectPropertiesCard-pE3IL82x.js → ObjectPropertiesCard-D2lrTQqT.js} +4 -4
  11. package/dist/assets/{PathPickerField-D7SubxSh.js → PathPickerField-CW2yG2Yg.js} +1 -1
  12. package/dist/assets/{PickDocumentsCard-BhJbPlxk.js → PickDocumentsCard-BWgc-A02.js} +1 -1
  13. package/dist/assets/{SketchApplet-CQexRECa.js → SketchApplet-BKnhzTBA.js} +1 -1
  14. package/dist/assets/{SketchEditor-DxIN-6wI.js → SketchEditor-DmGMcbU0.js} +2 -2
  15. package/dist/assets/{TerminalApplet-D-F4-4Zt.js → TerminalApplet-D7YxftqM.js} +1 -1
  16. package/dist/assets/{TextDocumentEditor-YAeo69K7.js → TextDocumentEditor-BQnVD0dd.js} +1 -1
  17. package/dist/assets/{TodosApplet-OBi0XUdm.js → TodosApplet-DU5VWc5i.js} +1 -1
  18. package/dist/assets/{TodosWidget-B_R-vHxf.js → TodosWidget-CNnfNk4L.js} +1 -1
  19. package/dist/assets/{UploadProgressList-C9teR7r-.js → UploadProgressList-D2wEpa7t.js} +1 -1
  20. package/dist/assets/{_agentId_-CYfkXrJk.js → _agentId_-CW33ane1.js} +0 -0
  21. package/dist/assets/_contextId_-wbu8w6OE.js +1 -0
  22. package/dist/assets/_workspaceName_-Ck6op9kd.js +1 -0
  23. package/dist/assets/{about-CCShKl-5.js → about-DRzhyy-e.js} +1 -1
  24. package/dist/assets/{add-G2dEzOng.js → add-BeESP_fg.js} +1 -1
  25. package/dist/assets/{agents-vx49b2X5.js → agents-BYNJHrPc.js} +1 -1
  26. package/dist/assets/{appearance-Dmzr0s9n.js → appearance-DiQhAis2.js} +1 -1
  27. package/dist/assets/{applet-target-DYrCD8BZ.js → applet-target-pLdP-R76.js} +1 -1
  28. package/dist/assets/{apps-B6DG6ZpO.js → apps-C2mb0HML.js} +1 -1
  29. package/dist/assets/backend-sync-progress-CFe6JPuR.js +6 -0
  30. package/dist/assets/{context-1vR30CeC.js → context-t3rdtGUB.js} +1 -1
  31. package/dist/assets/{contexts-DFYjIhsj2.js → contexts-Bq8LHUTK2.js} +1 -1
  32. package/dist/assets/{date-time-picker-C40sYmga.js → date-time-picker-DCikruos.js} +1 -1
  33. package/dist/assets/{document-BiNwuf1n.js → document-Cr7GhnVd.js} +1 -1
  34. package/dist/assets/document-list-CUmMhD6M.js +3 -0
  35. package/dist/assets/{home-B1ilyR89.js → home-BRx1tOR-.js} +1 -1
  36. package/dist/assets/index-CYvpxvg6.css +2 -0
  37. package/dist/assets/{index-CXPA9Fj8.js → index-I9cslsRe.js} +6 -6
  38. package/dist/assets/{key-bindings-DXepopri.js → key-bindings-CvzGVYrr.js} +1 -1
  39. package/dist/assets/{offline-DonGsRsw.js → offline-ByoT6JJX.js} +1 -1
  40. package/dist/assets/{public-share-DLXh7Ie6.js → public-share-CXR25Q1X.js} +1 -1
  41. package/dist/assets/query-debug-lD5vbJGi.js +1 -0
  42. package/dist/assets/{registry-eFbDXN9w.js → registry-NAExJwr9.js} +2 -2
  43. package/dist/assets/{roles-DDiKiRii.js → roles-sb8vgjV_.js} +1 -1
  44. package/dist/assets/{settings-D-yPOLZk.js → settings-CjKOuPew.js} +1 -1
  45. package/dist/assets/settings-DMM8k_4o.js +16 -0
  46. package/dist/assets/{settings-CwyGwKFU.js → settings-DrQdeEUS.js} +1 -1
  47. package/dist/assets/{settings-CgjGE01m.js → settings-HBpYbGPW.js} +1 -1
  48. package/dist/assets/{share-target-BhGDitlj.js → share-target-q77WkQhO.js} +1 -1
  49. package/dist/assets/{shared-XYVtCrC8.js → shared-BLOuO2Is.js} +1 -1
  50. package/dist/assets/{shared-DimeKqW8.js → shared-DsgNtRuD.js} +1 -1
  51. package/dist/assets/{sketch-lazy-6eEi8GIA.js → sketch-lazy-BY_ka1hw.js} +2 -2
  52. package/dist/assets/{text-documents-DxVsu9zG.js → text-documents-Cdb3U63i.js} +2 -2
  53. package/dist/assets/tree-folders-CNu09uPg.js +1 -0
  54. package/dist/assets/{use-applet-docs-FqhvvOWx.js → use-applet-docs-rimRHjID.js} +1 -1
  55. package/dist/assets/{use-applet-target-1DU4mgJH.js → use-applet-target-BygCSj5n.js} +1 -1
  56. package/dist/assets/use-canvas-pins-Bhd7_wde.js +3 -0
  57. package/dist/assets/{use-workspace-identity-KEG0VpcX.js → use-workspace-identity-CSkRwVyo.js} +1 -1
  58. package/dist/assets/{useAddTarget-BEgKjqGj.js → useAddTarget-DeRZWtGg.js} +1 -1
  59. package/dist/assets/{useAgentModels-CI7iZlUR.js → useAgentModels-B48KqDI7.js} +1 -1
  60. package/dist/assets/{useDocumentThumbnail-DutrNFK3.js → useDocumentThumbnail-Cj4UYyhC.js} +1 -1
  61. package/dist/assets/{useEditNoteFields-HAsbBak7.js → useEditNoteFields-BT1ASu_q.js} +1 -1
  62. package/dist/assets/{workspace-cv6Hrfhh.js → workspace-C5V-ZCOE.js} +1 -1
  63. package/dist/assets/{workspace-area-menu-CUqTxXmz.js → workspace-area-menu-B-bXURzn.js} +1 -1
  64. package/dist/assets/{workspace-content-gate-B6T3nLfW.js → workspace-content-gate-C54J9Man.js} +1 -1
  65. package/dist/assets/{workspace-import-form-D5qPcNFq.js → workspace-import-form-DTvV9jYt.js} +1 -1
  66. package/dist/assets/workspaces-y3zARr9A.js +1 -0
  67. package/dist/index.html +26 -26
  68. package/dist/sw.js +1 -1
  69. package/package.json +2 -2
  70. package/dist/assets/CalendarApplet-DVUCGIPB.js +0 -2
  71. package/dist/assets/FileForm-CMuWZbUX.js +0 -1
  72. package/dist/assets/LinkToCard-DGpvNE_V.js +0 -1
  73. package/dist/assets/_contextId_-CkahAS5d.js +0 -1
  74. package/dist/assets/_workspaceName_--lNvJpY1.js +0 -1
  75. package/dist/assets/backend-sync-progress-m7wUKTJn.js +0 -7
  76. package/dist/assets/document-list-ASCemk7T.js +0 -2
  77. package/dist/assets/index-Bi5-zGgp.css +0 -2
  78. package/dist/assets/query-debug-DhboV3qX.js +0 -1
  79. package/dist/assets/settings-CcdxMKot.js +0 -16
  80. package/dist/assets/tree-folders-whK_PK4c.js +0 -1
  81. package/dist/assets/use-canvas-pins-DqkSe_aU.js +0 -3
  82. package/dist/assets/workspaces-yHyufXqs.js +0 -1
@@ -0,0 +1,2 @@
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{g as r,r as i}from"./chunk-62JRHF6Z-vspAGgtK.js";import{Fr as a,Hr as o,Jr as s,L as c,Ot as l,Pt as u,Vr as d,X as f,ct as p,et as m,fr as h,jr as g,mr as _,pn as v,qr as y,vn as ee}from"./ui-CDoK3F3U.js";import{t as b}from"./utils-2pl1SbIp.js";import{h as x}from"./LinkToCard-CKVi4Nrg.js";import{Nn as S,bt as C,hn as w,kt as T,nt as E,w as D,xn as O,zn as k}from"./workspace-C5V-ZCOE.js";import{o as te,t as A}from"./useAddTarget-DeRZWtGg.js";import{a as j,o as M}from"./context-t3rdtGUB.js";import{n as N,o as P,s as F,t as I}from"./date-time-picker-DCikruos.js";import{n as ne}from"./use-applet-target-BygCSj5n.js";import{y as L}from"./index-I9cslsRe.js";import{r as re,t as ie}from"./shared-BLOuO2Is.js";var R=e(n(),1),ae=864e5,oe=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`];function z(e){return String(e).padStart(2,`0`)}function B(e){return`${e.getFullYear()}-${z(e.getMonth()+1)}-${z(e.getDate())}`}function V(e){let[t,n,r]=e.split(`-`).map(Number);return new Date(t,n-1,r)}function se(e){return`${B(e)}T${z(e.getHours())}:${z(e.getMinutes())}`}function H(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function U(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t,e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())}function ce(e,t){return new Date(e.getFullYear(),e.getMonth()+t,1)}function le(e){let t=H(e);return U(t,-((t.getDay()+6)%7))}function ue(e){return new Date(e.getFullYear(),e.getMonth(),1)}function W(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function de(e){let t=le(ue(e));return Array.from({length:42},(e,n)=>U(t,n))}function G(e,t){let n=[],r=t.getTime()>e.getTime()?new Date(t.getTime()-1):e;for(let t=H(e);t.getTime()<=r.getTime();t=U(t,1))n.push(t);return n}function K(e,t){let n=e.getTime()-H(t).getTime();return Math.max(0,Math.min(ae,n))/6e4}var fe=new Intl.DateTimeFormat(void 0,{month:`long`,year:`numeric`}),q=new Intl.DateTimeFormat(void 0,{month:`short`}),pe=new Intl.DateTimeFormat(void 0,{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`}),J=new Intl.DateTimeFormat(void 0,{weekday:`short`,day:`numeric`,month:`short`}),Y=new Intl.DateTimeFormat(void 0,{hour:`numeric`,minute:`2-digit`});function me(e){return fe.format(e)}function he(e){return q.format(e)}function X(e){return pe.format(e)}function ge(e){return J.format(e)}function Z(e){return Y.format(e)}function _e(e,t){return W(e,t)?X(e):e.getFullYear()===t.getFullYear()?e.getMonth()===t.getMonth()?`${e.getDate()} – ${t.getDate()} ${q.format(e)} ${e.getFullYear()}`:`${e.getDate()} ${q.format(e)} – ${t.getDate()} ${q.format(t)} ${t.getFullYear()}`:`${e.getDate()} ${q.format(e)} ${e.getFullYear()} – ${t.getDate()} ${q.format(t)} ${t.getFullYear()}`}function ve(e){return _e(e,U(e,6))}function ye(e){return Y.format(new Date(2e3,0,1,e,0)).replace(/:00(?=\s|$)/,``)}var be={SU:0,MO:1,TU:2,WE:3,TH:4,FR:5,SA:6},xe=new Set([`FREQ`,`INTERVAL`,`COUNT`,`UNTIL`,`BYDAY`,`BYMONTHDAY`,`BYMONTH`,`WKST`]);function Se(e){let t={};for(let n of e.replace(/^RRULE:/i,``).split(`;`)){let e=n.trim();if(!e)continue;let r=e.indexOf(`=`);if(r<1)return null;t[e.slice(0,r).toUpperCase()]=e.slice(r+1).toUpperCase()}if(Object.keys(t).some(e=>!xe.has(e)))return null;let n=t.FREQ;if(n!==`DAILY`&&n!==`WEEKLY`&&n!==`MONTHLY`&&n!==`YEARLY`)return null;let r=t.INTERVAL?Number(t.INTERVAL):1;if(!Number.isInteger(r)||r<1)return null;let i=t.COUNT?Number(t.COUNT):null;if(i!==null&&(!Number.isInteger(i)||i<1))return null;let a=null;if(t.UNTIL){let e=/^(\d{4})(\d{2})(\d{2})(?:T(\d{2})(\d{2})(\d{2})(Z?))?$/.exec(t.UNTIL);if(!e)return null;let[,n,r,i,o,s,c,l]=e;if(a=o===void 0?new Date(Number(n),Number(r)-1,Number(i),23,59,59,999):l?new Date(Date.UTC(Number(n),Number(r)-1,Number(i),Number(o),Number(s),Number(c))):new Date(Number(n),Number(r)-1,Number(i),Number(o),Number(s),Number(c)),Number.isNaN(a.getTime()))return null}let o=[];if(t.BYDAY)for(let e of t.BYDAY.split(`,`)){let t=/^([+-]?\d{1,2})?(SU|MO|TU|WE|TH|FR|SA)$/.exec(e.trim());if(!t)return null;o.push({day:be[t[2]],ordinal:t[1]?Number(t[1]):null})}let s=t.BYMONTHDAY?t.BYMONTHDAY.split(`,`).map(Number):[];if(s.some(e=>!Number.isInteger(e)||e===0||e<-31||e>31))return null;let c=t.BYMONTH?t.BYMONTH.split(`,`).map(Number):[];return c.some(e=>!Number.isInteger(e)||e<1||e>12)||o.some(e=>e.ordinal!==null)&&n!==`MONTHLY`&&n!==`YEARLY`?null:{freq:n,interval:r,count:i,until:a,byDay:o,byMonthDay:s,byMonth:c}}function Ce(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds())}function we(e,t){return new Date(e,t+1,0).getDate()}function Te(e,t,n,r){let i=we(e,t),a=new Set;if(n.byMonthDay.length)for(let e of n.byMonthDay){let t=e>0?e:i+1+e;t>=1&&t<=i&&a.add(t)}if(n.byDay.length){let r=new Set;for(let{day:a,ordinal:o}of n.byDay){let n=[];for(let r=1;r<=i;r++)new Date(e,t,r).getDay()===a&&n.push(r);if(o===null)n.forEach(e=>r.add(e));else{let e=o>0?n[o-1]:n[n.length+o];e&&r.add(e)}}if(n.byMonthDay.length)for(let e of[...a])r.has(e)||a.delete(e);else r.forEach(e=>a.add(e))}return!n.byMonthDay.length&&!n.byDay.length&&r.getDate()<=i&&a.add(r.getDate()),[...a].sort((e,t)=>e-t).map(n=>Ce(new Date(e,t,n),r))}function Ee(e,t,n,r,i=0,a=5e3){let o=[],s=n.getTime()-Math.max(0,i),c=r.getTime(),l=0,u=t=>{let n=t.getTime();return e.until&&n>e.until.getTime()||(l++,n>=s&&n<c&&o.push(t),e.count!==null&&l>=e.count)?!1:l<a};if(!u(t))return o;let d=t.getTime();if(e.freq===`DAILY`){for(let n=e.interval,r=0;r<a*12;n+=e.interval,r++){let r=Ce(new Date(t.getFullYear(),t.getMonth(),t.getDate()+n),t);if(r.getTime()>=c&&e.count===null||!(e.byMonth.length&&!e.byMonth.includes(r.getMonth()+1))&&!u(r))break}return o}if(e.freq===`WEEKLY`){let n=e.byDay.length?[...new Set(e.byDay.map(e=>e.day))]:[t.getDay()],r=new Date(t.getFullYear(),t.getMonth(),t.getDate()-(t.getDay()+6)%7);for(let i=0;;i+=e.interval){let a=new Date(r.getFullYear(),r.getMonth(),r.getDate()+i*7);if(a.getTime()>=c+6048e5&&e.count===null)break;let o=!1;for(let e=0;e<7;e++){let r=new Date(a.getFullYear(),a.getMonth(),a.getDate()+e);if(!n.includes(r.getDay()))continue;let i=Ce(r,t);if(!(i.getTime()<=d)&&!u(i)){o=!0;break}}if(o)break}return o}let f=e.freq===`MONTHLY`?e.interval:12*e.interval;for(let n=0;;n+=f){let r=t.getFullYear()+Math.floor((t.getMonth()+n)/12),i=(t.getMonth()+n)%12;if(new Date(r,i,1).getTime()>=c&&e.count===null)break;if(e.freq===`YEARLY`&&e.byMonth.length&&!e.byMonth.includes(i+1)){let n=!1;for(let i of e.byMonth){for(let a of Te(r,i-1,e,t))if(!(a.getTime()<=d)&&!u(a)){n=!0;break}if(n)break}if(n)break;continue}if(e.freq===`MONTHLY`&&e.byMonth.length&&!e.byMonth.includes(i+1))continue;let a=!1;for(let n of Te(r,i,e,t))if(!(n.getTime()<=d)&&!u(n)){a=!0;break}if(a||n>4800)break}return o}function De(e){let t={DAILY:`day`,WEEKLY:`week`,MONTHLY:`month`,YEARLY:`year`}[e.freq],n=e.interval===1?`Every ${t}`:`Every ${e.interval} ${t}s`,r=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`];return e.byDay.length?n+=` on `+e.byDay.map(({day:e,ordinal:t})=>t===null?r[e]:`${t===-1?`last`:`${t}.`} ${r[e]}`).join(`, `):e.byMonthDay.length&&(n+=` on day `+e.byMonthDay.join(`, `)),e.count!==null&&(n+=`, ${e.count} times`),e.until&&(n+=` until ${e.until.toLocaleDateString(void 0,{day:`numeric`,month:`short`,year:`numeric`})}`),n}function Oe(e){if(!e)return`none`;let t=Se(e);return!t||t.interval!==1||t.byMonthDay.length||t.byMonth.length?`custom`:t.freq===`WEEKLY`&&t.byDay.length===5&&t.byDay.every(e=>e.ordinal===null&&e.day>=1&&e.day<=5)?`weekdays`:t.byDay.length?`custom`:{DAILY:`daily`,WEEKLY:`weekly`,MONTHLY:`monthly`,YEARLY:`yearly`}[t.freq]}function ke(e,t){let n={daily:`FREQ=DAILY`,weekly:`FREQ=WEEKLY`,monthly:`FREQ=MONTHLY`,yearly:`FREQ=YEARLY`,weekdays:`FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR`}[e];if(n)return t?.until?`${n};UNTIL=${t.until.replace(/-/g,``)}`:t?.count?`${n};COUNT=${t.count}`:n}function Ae(e){let t=e?Se(e):null;if(!t)return{until:``,count:null};let n=t.until,r=e=>String(e).padStart(2,`0`);return{until:n?`${n.getFullYear()}-${r(n.getMonth()+1)}-${r(n.getDate())}`:``,count:t.count}}var je=`tasks`,Me=`data/schema/event`,Ne=`data/schema/task`;function Pe(e){if(typeof e!=`string`||!e)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:t}function Fe(e){return new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())}function Ie(e){return e.schema.startsWith(Me)}function Le(e){return e.schema===Ne}function Re(e,t,n){let r=e.data??{};if(Le(e)){let i=Pe(r.dueDate);if(!i||i<t||i>=n)return[];let a=String(r.status??`pending`);return[{key:`${e.id}@${i.getTime()}`,doc:e,kind:`task`,title:String(r.title??`Untitled`),start:i,end:i,allDay:!1,calendar:je,recurring:!1,unsupportedRule:!1,done:a===`completed`||a===`cancelled`}]}if(!Ie(e))return[];let i=Pe(r.start);if(!i)return[];let a=r.allDay===!0,o=r.end===null?null:Pe(r.end),s=a?Fe(i):i,c=a?o?Fe(o):U(s,1):o??(r.end===null?n:s),l=Math.max(0,c.getTime()-s.getTime()),u={doc:e,kind:`event`,title:String(r.title??`Untitled`),allDay:a,calendar:typeof r.calendar==`string`?r.calendar:``,done:!1},d=typeof r.recurrence==`string`?r.recurrence:``;if(!d)return c.getTime()<=t.getTime()&&!(c.getTime()===s.getTime()&&s>=t)||s>=n?[]:[{...u,key:`${e.id}@${s.getTime()}`,start:s,end:c,recurring:!1,unsupportedRule:!1}];let f=Se(d);return f?Ee(f,s,t,n,l).map(t=>({...u,key:`${e.id}@${t.getTime()}`,start:t,end:new Date(t.getTime()+l),recurring:!0,unsupportedRule:!1})):c<=t||s>=n?[]:[{...u,key:`${e.id}@${s.getTime()}`,start:s,end:c,recurring:!0,unsupportedRule:!0}]}function ze(e,t,n){return e.flatMap(e=>Re(e,t,n)).sort((e,t)=>e.start.getTime()-t.start.getTime()||t.end.getTime()-e.end.getTime()||e.title.localeCompare(t.title))}function Be(e){let t=new Map;for(let n of e)for(let e of G(n.start,n.end)){let r=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`,i=t.get(r);i?i.push(n):t.set(r,[n])}return t}function Ve(e){return e.allDay||e.end.getTime()-e.start.getTime()>=864e5||!W(e.start,new Date(e.end.getTime()-1))&&e.end.getTime()>e.start.getTime()}function He(e,t,n=30){let r=H(e),i=t.filter(e=>!Ve(e)).map(e=>{let t=K(e.start,r),i=Math.max(n,K(e.end,r)-t);return{occurrence:e,top:t,height:Math.min(i,1440-t),column:0,columns:1}}).sort((e,t)=>e.top-t.top||t.height-e.height),a=[],o=-1,s=()=>{let e=[];for(let t of a){let n=e.findIndex(e=>e<=t.top);n<0&&(n=e.length,e.push(0)),e[n]=t.top+t.height,t.column=n}for(let t of a)t.columns=e.length;a=[]};for(let e of i)a.length&&e.top>=o&&s(),a.push(e),o=Math.max(o,e.top+e.height);return a.length&&s(),i}function Ue(e,t,n,r){if(t.kind===`task`)return{...e,dueDate:n.toISOString()};if(t.allDay)return{...e,start:`${B(n)}T00:00:00.000Z`,end:`${B(r)}T00:00:00.000Z`};let i={...e,start:n.toISOString()};return e.end===null||(r.getTime()>n.getTime()?i.end=r.toISOString():delete i.end),i}var We=[{id:`day`,label:`Day`,key:`d`},{id:`week`,label:`Week`,key:`w`},{id:`month`,label:`Month`,key:`m`},{id:`year`,label:`Year`,key:`y`},{id:`schedule`,label:`Schedule`,key:`s`}],Ge={view:`week`,hidden:[],showTasks:!0,defaultCalendar:`Personal`},Ke=`canvas:calendar:prefs`;function qe(e){return`${Ke}:${e??`global`}`}function Je(e){try{let t=JSON.parse(localStorage.getItem(qe(e))||`null`);if(!t||typeof t!=`object`)return Ge;let n=t;return{view:We.some(e=>e.id===n.view)?n.view:Ge.view,hidden:Array.isArray(n.hidden)?n.hidden.filter(e=>typeof e==`string`):[],showTasks:n.showTasks!==!1,defaultCalendar:typeof n.defaultCalendar==`string`&&n.defaultCalendar.trim()?n.defaultCalendar:Ge.defaultCalendar}}catch{return Ge}}function Ye(e,t){try{localStorage.setItem(qe(e),JSON.stringify(t))}catch{}}function Xe(e,t){let n=B(U(H(e),-1)),r=B(U(H(t),1));return{events:`t:events:${n}..${r}`,tasks:`t:tasks:${n}..${r}`}}var Ze=5e3;function Qe(e){return!!e&&!e.includes(`:`)&&![`content`,`events`,`tasks`].includes(e.toLowerCase())}function $e(e){return e?e.mode===`context`?`ctx:${e.contextId}`:`${e.workspaceName}:${e.treeName}:${e.treeType}:${e.path}`:``}function et(e,t,n,r){let[i,a]=(0,R.useState)([]),[o,s]=(0,R.useState)(!1),[c,l]=(0,R.useState)(null),[u,d]=(0,R.useState)(null),[f,p]=(0,R.useState)([]),m=t.getTime(),h=n.getTime(),g=(0,R.useCallback)(()=>{if(!e)return Promise.resolve();let t=Xe(new Date(m),new Date(h));return(e.mode===`context`?Promise.all([M(e.contextId,[S],[t.events],{limit:Ze}),r?M(e.contextId,[k],[t.tasks],{limit:Ze}):Promise.resolve([]),j(e.contextId)]).then(([e,t,n])=>{a([...e,...t]);let r=n.workspaceName||n.workspaceId;d(r?{workspaceName:r,path:n.path||`/`,treeName:n.treeId||`context`,treeType:`context`}:null)}):(()=>{let{workspaceName:n,path:i,treeName:o,treeType:s}=e,c={treeName:o,treeType:s,limit:0};return Promise.all([E(n,i,[S],{...c,filters:[t.events]}),r?E(n,i,[k],{...c,filters:[t.tasks]}):Promise.resolve({payload:[]})]).then(([e,t])=>{a([...e.payload||[],...t.payload||[]]),d({workspaceName:n,path:i,treeName:o,treeType:s})})})()).catch(e=>l(e instanceof Error?e.message:`Failed to load calendar`)).finally(()=>s(!1))},[e,m,h,r]),_=(0,R.useCallback)(async()=>{if(!e){a([]),d(null);return}s(!0),l(null),await g()},[e,g]),[v,y]=(0,R.useState)(null),ee=`${$e(e)}|${m}|${h}|${r}`;v!==ee&&(y(ee),e?(s(!0),l(null)):(a([]),d(null))),(0,R.useEffect)(()=>{g()},[g]),(0,R.useEffect)(()=>{let e=()=>{_()};return window.addEventListener(`workspace:documents:refresh`,e),()=>window.removeEventListener(`workspace:documents:refresh`,e)},[_]);let b=u?.workspaceName??null,x=(0,R.useCallback)(()=>b?Promise.all([C(b),T(b)]).then(([e,t])=>{let n=new Set;for(let t of e)t.startsWith(`data/calendar/`)&&t.length>14&&n.add(t.slice(14));for(let e of t)Qe(e.name)&&n.add(e.name);p([...n].sort())}).catch(()=>{}):Promise.resolve(),[b]);(0,R.useEffect)(()=>{x()},[x,i.length]),(0,R.useEffect)(()=>{let e=()=>{x()};return window.addEventListener(`workspace:timelines:changed`,e),()=>window.removeEventListener(`workspace:timelines:changed`,e)},[x]);let w=(0,R.useCallback)(async e=>{if(!u)throw Error(`No workspace scope resolved`);await D(u.workspaceName,[e],u.path,[],u.treeName,u.treeType),a(t=>t.filter(t=>t.id!==e))},[u]),O=(0,R.useCallback)(e=>{a(t=>t.some(t=>t.id===e.id)?t.map(t=>t.id===e.id?e:t):[...t,e])},[]);return(0,R.useMemo)(()=>({docs:i,loading:o,error:c,scope:u,knownCalendars:f,reload:_,removeDoc:w,patchDoc:O}),[i,o,c,u,f,_,w,O])}function tt(e){return L(e?e.toLowerCase():`events`)}function nt(e){return e.kind===`task`?L(je):tt(e.calendar)}function rt(e,t=18){return`color-mix(in oklch, ${e} ${t}%, transparent)`}function it(e,t,n,r,i,a=30){let o=Math.max(0,Math.min(e.length-1,t)),s=Math.max(0,Math.min(e.length-1,r));if(o!==s){let[t,n]=o<s?[o,s]:[s,o];return{start:H(e[t]),end:U(H(e[n]),1),allDay:!0}}let c=e=>Math.floor(e/a)*a,l=c(Math.min(n,i)),u=c(Math.max(n,i))+a;l=Math.max(0,Math.min(1440-a,l)),u=Math.max(l+a,Math.min(1440,u));let d=H(e[o]);return{start:new Date(d.getTime()+l*6e4),end:new Date(d.getTime()+u*6e4),allDay:!1}}function at(e,t){let[n,r]=e.getTime()<=t.getTime()?[e,t]:[t,e];return{start:H(n),end:U(H(r),1),allDay:!0}}function ot(e,t,n,r,i,a,o=15){let s=t=>Math.max(0,Math.min(e.length-1,t)),c=s(i)-s(n),l=Math.round((a-r)/o)*o,u=t.end.getTime()-t.start.getTime(),d=U(t.start,c),f=H(d),p=Math.max(0,Math.min(1440-o,(d.getTime()-f.getTime())/6e4+l)),m=new Date(f.getTime()+p*6e4);return{start:m,end:new Date(m.getTime()+u)}}function st(e,t,n,r,i=15){let a=H(e[Math.max(0,Math.min(e.length-1,n))]),o=Math.min(1440,Math.ceil(r/i)*i),s=new Date(a.getTime()+o*6e4);return{start:t.start,end:s.getTime()<t.start.getTime()+i*6e4?new Date(t.start.getTime()+i*6e4):s}}function ct(e,t){return{start:U(e.start,t),end:U(e.end,t)}}var Q=t();function lt({month:e,selection:t,marks:n,onPick:r,onPickRange:i,onPrev:a,onNext:s,onTitle:c,onDayMenu:l,title:u,className:f}){let p=new Date,m=de(e),h=u??me(e),[g,_]=(0,R.useState)(null),v=(0,R.useRef)(g);(0,R.useEffect)(()=>{v.current=g});let y=e=>(document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-day]`))?.dataset.day??null,ee=e=>{if(!i||e.button!==0)return;let t=y(e);t&&(e.currentTarget.setPointerCapture(e.pointerId),_({from:t,to:t}))},x=e=>{if(!v.current)return;let t=y(e);t&&t!==v.current.to&&_({...v.current,to:t})},S=e=>{let t=v.current;if(!t)return;if(e.currentTarget.releasePointerCapture(e.pointerId),_(null),t.from===t.to){C(e,V(t.from));return}let n=at(V(t.from),V(t.to));i?.(n.start,n.end)},C=(e,n)=>{if(e.shiftKey&&i&&t){let e=at(t.start,n);i(e.start,e.end)}else r(n)},w=g?at(V(g.from),V(g.to)):t;return(0,Q.jsxs)(`div`,{className:b(`select-none`,f),children:[(0,Q.jsxs)(`div`,{className:`mb-1 flex items-center justify-between`,children:[a?(0,Q.jsx)(`button`,{type:`button`,onClick:a,className:`rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground`,"aria-label":`Previous month`,children:(0,Q.jsx)(o,{className:`h-3.5 w-3.5`})}):(0,Q.jsx)(`span`,{}),c?(0,Q.jsx)(`button`,{type:`button`,onClick:c,className:`text-xs font-semibold hover:underline`,children:h}):(0,Q.jsx)(`span`,{className:`text-xs font-semibold`,children:h}),s?(0,Q.jsx)(`button`,{type:`button`,onClick:s,className:`rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground`,"aria-label":`Next month`,children:(0,Q.jsx)(d,{className:`h-3.5 w-3.5`})}):(0,Q.jsx)(`span`,{})]}),(0,Q.jsx)(`div`,{className:`grid grid-cols-7 text-center text-[10px] text-muted-foreground`,children:oe.map(e=>(0,Q.jsx)(`span`,{children:e[0]},e))}),(0,Q.jsx)(`div`,{className:b(`grid grid-cols-7 gap-y-px text-center text-[11px]`,g&&`cursor-crosshair`),onPointerDown:ee,onPointerMove:x,onPointerUp:S,onPointerCancel:()=>_(null),children:m.map(t=>{let r=B(t),a=t.getMonth()===e.getMonth(),o=W(t,p),s=!!w&&t>=w.start&&t<w.end,c=!!w&&s&&W(t,w.start),u=!!w&&s&&W(t,new Date(w.end.getTime()-1)),d=n?.get(r)??[],f=[...new Set(d.map(nt))].slice(0,3);return(0,Q.jsxs)(`button`,{type:`button`,"data-day":r,onClick:e=>{(e.detail===0||!i)&&C(e,t)},onContextMenu:l?e=>{e.preventDefault(),l(e,t)}:void 0,"aria-label":d.length?`${t.toDateString()}, ${d.length} ${d.length===1?`entry`:`entries`}`:t.toDateString(),title:d.length?d.slice(0,6).map(e=>e.title).join(`
2
+ `)+(d.length>6?`\n+${d.length-6} more`:``):void 0,className:b(`relative mx-auto flex h-6 w-full items-center justify-center transition-colors hover:bg-muted`,c&&u?`rounded-full`:c?`rounded-l-full`:u?`rounded-r-full`:s?``:`rounded-full`,!a&&`text-muted-foreground/40`,o&&!s&&`font-bold text-primary`,s&&`bg-primary text-primary-foreground hover:bg-primary`,d.length>0&&!s&&`font-semibold`),style:d.length&&!s?{background:`color-mix(in srgb, ${f[0]} 22%, transparent)`}:void 0,children:[t.getDate(),d.length>0&&!s&&(0,Q.jsx)(`span`,{className:`absolute bottom-0 left-1/2 flex -translate-x-1/2 gap-px`,children:f.map(e=>(0,Q.jsx)(`span`,{className:`h-1 w-1 rounded-full`,style:{background:e}},e))})]},r)})})]})}function ut({occurrence:e,selected:t,moving:n,showTime:r=!0,onSelect:i,className:o,...s}){let c=nt(e),u=!e.allDay&&e.kind===`event`&&e.end.getTime()>e.start.getTime();return(0,Q.jsxs)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),i(e)},title:`${e.title}${e.calendar?` · ${e.calendar}`:``}`,className:b(`flex w-full min-w-0 items-center gap-1 truncate rounded px-1 py-px text-left text-[11px] leading-4 text-foreground transition-colors hover:brightness-110`,!e.recurring&&`touch-none`,t&&`ring-1 ring-ring`,n&&`cursor-grabbing ring-2 ring-primary shadow-elevation-2`,e.done&&`line-through opacity-60`,o),style:{background:rt(c,e.allDay||e.kind===`task`?28:14),borderLeft:`3px solid ${c}`},...s,children:[e.kind===`task`&&(0,Q.jsx)(a,{className:`h-3 w-3 shrink-0`,style:{color:c}}),r&&u&&(0,Q.jsx)(`span`,{className:`shrink-0 tabular-nums text-muted-foreground`,children:Z(e.start)}),(0,Q.jsx)(`span`,{className:`truncate`,children:e.title}),e.recurring&&(0,Q.jsx)(l,{className:`ml-auto h-2.5 w-2.5 shrink-0 text-muted-foreground`})]})}function dt(e){let[t,n]=(0,R.useState)(null),r=(0,R.useRef)(e);(0,R.useEffect)(()=>{r.current=e});let i=(0,R.useRef)(null),a=(0,R.useRef)(!1);(0,R.useEffect)(()=>()=>i.current?.stop(),[]);let o=e=>(document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-day]`))?.dataset.day??null;return{moving:t,handlers:e=>e.recurring?{}:{onPointerDown:t=>{if(t.button!==0||i.current)return;let s=o(t);if(!s)return;let c=e=>{let t=i.current;if(!t)return;let r=o(e);if(!r)return;let a=Math.round((V(r).getTime()-V(t.fromKey).getTime())/ae);a!==t.delta&&(t.delta=a,n(a?{key:t.o.key,...ct(t.o,a)}:null))},l=()=>{let e=i.current;if(!e||(e.stop(),n(null),!e.delta))return;a.current=!0,setTimeout(()=>{a.current=!1},0);let t=ct(e.o,e.delta);r.current(e.o,t.start,t.end)},u=()=>{i.current?.stop(),n(null)};window.addEventListener(`pointermove`,c),window.addEventListener(`pointerup`,l),window.addEventListener(`pointercancel`,u),i.current={o:e,fromKey:s,delta:0,stop:()=>{i.current=null,window.removeEventListener(`pointermove`,c),window.removeEventListener(`pointerup`,l),window.removeEventListener(`pointercancel`,u)}}},onClickCapture:e=>{a.current&&(a.current=!1,e.stopPropagation(),e.preventDefault())}},apply:e=>t?e.map(e=>e.key===t.key?{...e,start:t.start,end:t.end}:e):e}}var $=48,ft=30,pt=15,mt=`w-12`,ht=48;function gt({days:e,occurrences:t,selectedKey:n,pending:r,onSelect:i,onCreate:a,onMove:o,onPickDay:s,onEntryMenu:c,onSlotMenu:l,compact:u}){let d=(0,R.useRef)(null),f=(0,R.useRef)(null),[p,m]=(0,R.useState)(null),h=(0,R.useRef)(p);(0,R.useEffect)(()=>{h.current=p});let g=t=>{let n=f.current;if(!n)return null;let r=n.getBoundingClientRect(),i=(r.width-ht)/e.length,a=Math.floor((t.clientX-r.left-ht)/i),o=Math.max(0,Math.min(1439,(t.clientY-r.top)/$*60));return a<0||a>=e.length?null:{day:a,min:o}},_=e=>{if(e.button!==0||e.target.closest(`button`))return;let t=g(e);t&&(e.currentTarget.setPointerCapture(e.pointerId),m({fromDay:t.day,fromMin:t.min,toDay:t.day,toMin:t.min}))},v=e=>{if(!h.current)return;let t=g(e);t&&m({...h.current,toDay:t.day,toMin:t.min})},y=t=>{let n=h.current;if(!n)return;t.currentTarget.releasePointerCapture(t.pointerId),m(null);let r=it(e,n.fromDay,n.fromMin,n.toDay,n.toMin,ft);a(r.start,r.allDay,r.end)},ee=t=>{let n=g(t);n&&(t.preventDefault(),l(t,it(e,n.day,n.min,n.day,n.min,ft).start,!1))},x=p?it(e,p.fromDay,p.fromMin,p.toDay,p.toMin,ft):r,[S,C]=(0,R.useState)(null),w=(0,R.useRef)(o);(0,R.useEffect)(()=>{w.current=o});let T=(0,R.useRef)(null);(0,R.useEffect)(()=>()=>T.current?.stop(),[]);let E=(0,R.useRef)(!1),D=(t,n)=>{if(t.button!==0||n.recurring||T.current)return;let r=g(t);if(!r)return;let i=t.target.dataset.resize?`resize`:`move`,a=null,o=t=>{let o=g(t);if(!o)return;let s=i===`move`?ot(e,n,r.day,r.min,o.day,o.min,pt):st(e,n,o.day,o.min,pt);a=s.start.getTime()===n.start.getTime()&&s.end.getTime()===n.end.getTime()?null:s,C(a?{key:n.key,...a,mode:i}:null)},s=()=>{l(),C(null),a&&(E.current=!0,setTimeout(()=>{E.current=!1},0),w.current(n,a.start,a.end))},c=()=>{l(),C(null)},l=()=>{T.current=null,window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),window.removeEventListener(`pointercancel`,c)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s),window.addEventListener(`pointercancel`,c),T.current={stop:l}},O=dt(o),k=O.apply(t),te=(0,R.useMemo)(()=>S?k.map(e=>e.key===S.key?{...e,start:S.start,end:S.end}:e):k,[k,S]),A=(0,R.useMemo)(()=>Be(te),[te]),[j,M]=(0,R.useState)(()=>new Date);(0,R.useEffect)(()=>{let e=setInterval(()=>M(new Date),6e4);return()=>clearInterval(e)},[]);let N=B(e[0]);(0,R.useEffect)(()=>{let t=d.current;t&&(t.scrollTop=(e.some(e=>W(e,j))?Math.max(0,j.getHours()-1):7)*$)},[N,e.length]);let P=Array.from({length:24},(e,t)=>t),F=e.map(e=>(A.get(B(e))??[]).filter(Ve)),I=Math.max(0,...F.map(e=>e.length)),ne=!!p||!!S||!!O.moving;return(0,Q.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,Q.jsxs)(`div`,{className:`flex shrink-0 border-b border-border`,children:[(0,Q.jsx)(`div`,{className:b(mt,`shrink-0`)}),e.map(e=>{let t=W(e,j);return(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>s(e),className:`flex min-w-0 flex-1 flex-col items-center border-l border-border/60 py-1 hover:bg-muted/50`,title:`Open day`,children:[(0,Q.jsx)(`span`,{className:`text-[10px] uppercase tracking-wide text-muted-foreground`,children:oe[(e.getDay()+6)%7]}),(0,Q.jsx)(`span`,{className:b(`flex h-7 w-7 items-center justify-center rounded-full text-sm font-semibold`,t&&`bg-primary text-primary-foreground`),children:e.getDate()})]},B(e))})]}),I>0&&(0,Q.jsxs)(`div`,{className:b(`flex shrink-0 border-b border-border bg-muted/20`,O.moving&&`select-none`),children:[(0,Q.jsx)(`div`,{className:b(mt,`shrink-0 py-1 pr-1 text-right text-[10px] text-muted-foreground`),children:u?``:`all day`}),e.map((e,t)=>(0,Q.jsx)(`div`,{"data-day":B(e),className:`flex min-w-0 flex-1 flex-col gap-0.5 border-l border-border/60 p-0.5`,onClick:t=>{t.target===t.currentTarget&&a(H(e),!0)},onContextMenu:t=>{t.preventDefault(),l(t,H(e),!0)},children:F[t].map(e=>(0,Q.jsx)(ut,{occurrence:e,selected:e.key===n,moving:O.moving?.key===e.key,showTime:!1,onSelect:i,onContextMenu:t=>{t.preventDefault(),t.stopPropagation(),c(t,e)},...O.handlers(e)},e.key))},B(e)))]}),(0,Q.jsx)(`div`,{ref:d,className:`min-h-0 flex-1 overflow-y-auto`,children:(0,Q.jsxs)(`div`,{ref:f,className:b(`relative flex select-none`,p&&`cursor-crosshair`,S?.mode===`move`&&`cursor-grabbing`,S?.mode===`resize`&&`cursor-ns-resize`),style:{height:1152},onPointerDown:_,onPointerMove:v,onPointerUp:y,onPointerCancel:()=>m(null),onContextMenu:ee,children:[(0,Q.jsx)(`div`,{className:b(mt,`relative shrink-0`),children:P.map(e=>(0,Q.jsx)(`div`,{className:`absolute right-1 -translate-y-1/2 text-[10px] tabular-nums text-muted-foreground`,style:{top:e*$},children:e===0?``:ye(e)},e))}),e.map(e=>{let t=He(e,A.get(B(e))??[]),r=W(e,j)?(j.getHours()*60+j.getMinutes())/60*$:null;return(0,Q.jsxs)(`div`,{"data-day":B(e),className:`relative min-w-0 flex-1 cursor-cell border-l border-border/60`,role:`presentation`,children:[x&&x.end>e&&x.start<H(new Date(e.getTime()+864e5))&&(0,Q.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0.5 z-[5] rounded-md border border-primary bg-primary/15`,style:{top:K(x.start,e)/60*$,height:Math.max(8,(K(x.end,e)-K(x.start,e))/60*$)},children:(0,Q.jsx)(`span`,{className:`absolute left-1 top-0.5 text-[10px] font-medium text-primary`,children:x.allDay?`All day`:`${Z(x.start)} – ${Z(x.end)}`})}),P.map(e=>(0,Q.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 border-t border-border/50`,style:{top:e*$}},e)),t.map(e=>{let t=e.occurrence,r=nt(t),a=100/e.columns,o=e.height<45,s=S?.key===t.key,l=!t.recurring;return(0,Q.jsxs)(`button`,{type:`button`,onClick:e=>{if(e.stopPropagation(),E.current){E.current=!1;return}i(t)},onContextMenu:e=>{e.preventDefault(),e.stopPropagation(),c(e,t)},onPointerDown:e=>D(e,t),title:`${t.title} · ${Z(t.start)}${t.end>t.start?` – ${Z(t.end)}`:``}`,className:b(`absolute overflow-hidden rounded-md border-l-[3px] px-1.5 text-left text-[11px] leading-tight text-foreground shadow-elevation-1 transition-[filter] hover:brightness-110`,l&&`touch-none`,s?`z-20 ring-2 ring-primary shadow-elevation-2`:ne&&`pointer-events-none`,t.key===n&&!s&&`ring-1 ring-ring`,t.done&&`line-through opacity-60`),style:{top:e.top/60*$,height:Math.max(18,e.height/60*$-2),left:`calc(${e.column*a}% + 2px)`,width:`calc(${a}% - 4px)`,background:rt(r,24),borderLeftColor:r,paddingTop:o?1:3},children:[(0,Q.jsx)(`span`,{className:b(`font-medium`,o?`inline`:`block truncate`),children:t.title}),!o&&(0,Q.jsxs)(`span`,{className:`block truncate text-[10px] text-muted-foreground`,children:[Z(t.start),t.end>t.start?` – ${Z(t.end)}`:``,t.calendar&&!u?` · ${t.calendar}`:``]}),l&&t.kind===`event`&&(0,Q.jsx)(`span`,{"data-resize":`1`,className:`absolute inset-x-0 bottom-0 h-1.5 cursor-ns-resize`})]},t.key)}),r!==null&&(0,Q.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 z-10 border-t-2 border-destructive`,style:{top:r},children:(0,Q.jsx)(`span`,{className:`absolute -left-1 -top-[5px] h-2 w-2 rounded-full bg-destructive`})})]},B(e))})]})})]})}var _t=3;function vt({month:e,occurrences:t,selectedKey:n,pending:r,onSelect:i,onCreate:a,onMove:o,onPickDay:s,onEntryMenu:c,onSlotMenu:l,narrow:u}){let d=de(e),f=dt(o),p=f.apply(t),m=(0,R.useMemo)(()=>Be(p),[p]),h=new Date,[g,_]=(0,R.useState)(null),v=(0,R.useRef)(g);(0,R.useEffect)(()=>{v.current=g});let y=e=>(document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-day]`))?.dataset.day??null,ee=e=>{if(u||e.button!==0||e.target.closest(`button`))return;let t=y(e);t&&(e.currentTarget.setPointerCapture(e.pointerId),_({from:t,to:t}))},x=e=>{if(!v.current)return;let t=y(e);t&&t!==v.current.to&&_({...v.current,to:t})},S=e=>{let t=v.current;if(!t)return;e.currentTarget.releasePointerCapture(e.pointerId),_(null);let n=at(V(t.from),V(t.to));a(n.start,!0,n.end)},C=e=>{let t=y(e);t&&(e.preventDefault(),l(e,V(t),!0))},w=g?at(V(g.from),V(g.to)):r;return(0,Q.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,Q.jsx)(`div`,{className:`grid shrink-0 grid-cols-7 border-b border-border text-center text-[10px] uppercase tracking-wide text-muted-foreground`,children:oe.map(e=>(0,Q.jsx)(`span`,{className:`py-1`,children:u?e[0]:e},e))}),(0,Q.jsx)(`div`,{className:b(`grid min-h-0 flex-1 grid-cols-7 grid-rows-6 overflow-y-auto`,g&&`cursor-crosshair select-none`,f.moving&&`select-none`),onPointerDown:ee,onPointerMove:x,onPointerUp:S,onPointerCancel:()=>_(null),onContextMenu:C,children:d.map(t=>{let r=B(t),a=m.get(r)??[],o=t.getMonth()===e.getMonth(),l=W(t,h),d=a.length-_t;return(0,Q.jsxs)(`div`,{role:`presentation`,"data-day":r,onClick:e=>{u&&e.target===e.currentTarget&&s(t)},className:b(`flex min-h-[3.5rem] min-w-0 flex-col gap-0.5 border-b border-r border-border/60 p-0.5`,!o&&`bg-muted/20 text-muted-foreground/60`,!u&&`cursor-cell`,w&&t>=w.start&&t<w.end&&`bg-primary/15 ring-1 ring-inset ring-primary`),children:[(0,Q.jsx)(`button`,{type:`button`,onClick:()=>s(t),className:b(`mx-auto flex h-5 w-5 items-center justify-center rounded-full text-[11px] hover:bg-muted sm:mx-0`,l&&`bg-primary font-bold text-primary-foreground hover:bg-primary`),title:`Open day`,children:t.getDate()}),u?(0,Q.jsx)(`div`,{className:`flex flex-wrap justify-center gap-0.5 px-0.5`,children:a.slice(0,4).map(e=>(0,Q.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full`,style:{background:nt(e)}},e.key))}):(0,Q.jsxs)(Q.Fragment,{children:[a.slice(0,_t).map(e=>(0,Q.jsx)(ut,{occurrence:e,selected:e.key===n,moving:f.moving?.key===e.key,onSelect:i,onContextMenu:t=>{t.preventDefault(),t.stopPropagation(),c(t,e)},...f.handlers(e)},e.key)),d>0&&(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>s(t),className:`px-1 text-left text-[10px] text-muted-foreground hover:text-foreground`,children:[`+`,d,` more`]})]})]},r)})})]})}function yt({year:e,occurrences:t,onPickDay:n,onPickRange:r,onPickMonth:i,onSlotMenu:a}){let o=(0,R.useMemo)(()=>Be(t),[t]),s=Array.from({length:12},(t,n)=>new Date(e,n,1));return(0,Q.jsx)(`div`,{className:`grid h-full min-h-0 grid-cols-[repeat(auto-fill,minmax(11rem,1fr))] gap-x-4 gap-y-5 overflow-y-auto p-3`,children:s.map(e=>(0,Q.jsx)(lt,{month:e,marks:o,title:e.toLocaleDateString(void 0,{month:`long`}),onTitle:()=>i(e),onPick:n,onPickRange:r,onDayMenu:(e,t)=>a(e,t,!0)},B(e)))})}function bt({occurrences:e,selectedKey:t,onSelect:n,onEntryMenu:r,onEarlier:i,onLater:a,onPickDay:o,loading:s}){let c=(0,R.useMemo)(()=>[...Be(e).entries()].sort(([e],[t])=>e.localeCompare(t)),[e]),l=new Date;return(0,Q.jsxs)(`div`,{className:`h-full min-h-0 overflow-y-auto`,children:[(0,Q.jsx)(`div`,{className:`flex justify-center py-2`,children:(0,Q.jsx)(`button`,{type:`button`,onClick:i,className:`rounded-md border border-border px-3 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground`,children:`Earlier`})}),!s&&!c.length&&(0,Q.jsx)(`p`,{className:`py-10 text-center text-sm text-muted-foreground`,children:`Nothing scheduled in this range.`}),c.map(([e,i])=>{let a=V(e),s=W(a,l);return(0,Q.jsxs)(`div`,{className:`flex border-t border-border/60 px-2 py-2`,children:[(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>o(a),className:`flex w-14 shrink-0 flex-col items-start`,title:`Open day`,children:[(0,Q.jsx)(`span`,{className:b(`flex h-8 w-8 items-center justify-center rounded-full text-lg font-semibold`,s&&`bg-primary text-primary-foreground`),children:a.getDate()}),(0,Q.jsxs)(`span`,{className:`text-[10px] uppercase tracking-wide text-muted-foreground`,children:[he(a),`, `,oe[(a.getDay()+6)%7]]})]}),(0,Q.jsx)(`div`,{className:`min-w-0 flex-1 space-y-0.5`,children:i.map(e=>{let i=nt(e),a=!Ve(e)&&e.kind===`event`;return(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>n(e),onContextMenu:t=>{t.preventDefault(),r(t,e)},className:b(`flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-sm hover:bg-muted`,e.key===t&&`bg-muted ring-1 ring-ring`,e.done&&`line-through opacity-60`),children:[(0,Q.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 rounded-full`,style:{background:i}}),(0,Q.jsx)(`span`,{className:`w-[7.5rem] shrink-0 text-xs tabular-nums text-muted-foreground`,children:a?`${Z(e.start)}${e.end>e.start?` – ${Z(e.end)}`:``}`:e.kind===`task`?`due ${Z(e.start)}`:`All day`}),(0,Q.jsx)(`span`,{className:`truncate`,children:e.title}),e.calendar&&e.kind===`event`&&(0,Q.jsx)(`span`,{className:`ml-auto shrink-0 text-[10px] text-muted-foreground`,children:e.calendar})]},e.key)})})]},e)}),(0,Q.jsx)(`div`,{className:`flex justify-center py-2`,children:(0,Q.jsx)(`button`,{type:`button`,onClick:a,className:`rounded-md border border-border px-3 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground`,children:`Later`})})]})}var xt=`3.0`,St=[{id:`none`,label:`Does not repeat`},{id:`daily`,label:`Every day`},{id:`weekdays`,label:`Every weekday`},{id:`weekly`,label:`Every week`},{id:`monthly`,label:`Every month`},{id:`yearly`,label:`Every year`},{id:`custom`,label:`Custom (RRULE)…`}];function Ct(e,t){let n=e.data??{},r=n.allDay===!0,i=String(n.start??``),a=typeof n.end==`string`?n.end:``,o=typeof n.recurrence==`string`?n.recurrence:``,s=Oe(o||void 0),c=Ae(o||void 0);return{title:String(n.title??``),calendar:typeof n.calendar==`string`?n.calendar:Et(e)?``:t,allDay:r,start:r?i.slice(0,10):P(i),end:r?Dt(i.slice(0,10),a):P(a),location:String(n.location??``),description:String(n.description??``),repeat:s,until:c.until,count:c.count===null?``:String(c.count),rrule:o}}function wt(e,t){let n=e.end??new Date(e.start.getTime()+36e5);return{title:``,calendar:t,allDay:e.allDay,start:e.allDay?B(e.start):se(e.start),end:e.allDay?B(U(n,-1)<e.start?e.start:U(n,-1)):se(n),location:``,description:``,repeat:`none`,until:``,count:``,rrule:``}}function Tt(e){if(e.repeat===`custom`)return e.rrule.trim();let t=Number(e.count);return ke(e.repeat,{until:e.until,count:Number.isInteger(t)&&t>0?t:null})}function Et(e){let t=e.metadata;return typeof t?.source==`string`&&t.source?{source:t.source,connector:typeof t.connector==`string`?t.connector:``}:null}function Dt(e,t){if(!t)return``;let[n,r,i]=t.slice(0,10).split(`-`).map(Number),a=B(new Date(n,r-1,i-1));return a<e?e:a}function Ot(e){return`${B(U(V(e),1))}T00:00:00.000Z`}function kt(e,t){let n={...e,title:t.title.trim()},r=(e,t)=>{t===void 0||t===``||t===!1?delete n[e]:n[e]=t};return r(`calendar`,t.calendar.trim()),r(`allDay`,t.allDay),r(`location`,t.location.trim()),r(`description`,t.description.trim()),r(`recurrence`,Tt(t)),t.allDay?(n.start=`${t.start}T00:00:00.000Z`,r(`end`,t.end?Ot(t.end):void 0)):(n.start=F(t.start),r(`end`,F(t.end))),n}function At(e){return e.title.trim()?e.start?e.end&&e.end<e.start?`The end is before the start.`:e.calendar.includes(`:`)?`A calendar name cannot contain ":".`:e.repeat===`custom`&&(!e.rrule.trim()||!Se(e.rrule))?`Enter a supported RRULE (FREQ=…, INTERVAL, COUNT, UNTIL, BYDAY, BYMONTHDAY, BYMONTH).`:e.repeat!==`none`&&e.repeat!==`custom`&&e.until&&e.until<e.start.slice(0,10)?`The series ends before it starts.`:e.repeat!==`none`&&e.repeat!==`custom`&&e.count&&!(Number.isInteger(Number(e.count))&&Number(e.count)>0)?`The number of occurrences must be a whole number above zero.`:null:`Pick a start.`:`Give the event a title.`}function jt({subject:e,target:t,workspaceName:n,calendars:r,defaultCalendar:a,onClose:o,onSaved:s,onDelete:u}){let d=e.kind===`occurrence`?e.occurrence.doc:null,p=e.kind===`occurrence`&&e.occurrence.kind===`task`,[m,h]=(0,R.useState)(()=>d?Ct(d,a):wt(e.draft,a)),[g,y]=(0,R.useState)(!1),[x,C]=(0,R.useState)(null),[T,E]=(0,R.useState)(!1),D=e.kind===`draft`?`draft:${e.draft.start.getTime()}:${e.draft.end?.getTime()??``}:${e.draft.allDay}`:e.occurrence.key,[O,k]=(0,R.useState)(D);O!==D&&(k(D),h(d?Ct(d,a):wt(e.draft,a)),C(null)),(0,R.useEffect)(()=>{let e=e=>{e.key===`Escape`&&o()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[o]);let A=e=>h(t=>({...t,...e})),j=d?Et(d):null,M=typeof d?.data?.htmlLink==`string`?d.data.htmlLink:null,P=async()=>{let e=At(m);if(e){C(e);return}y(!0),C(null);try{if(d){if(!n)throw Error(`No workspace resolved for this calendar`);await w(n,{id:d.id,schema:d.schema,schemaVersion:d.schemaVersion||xt,data:kt(d.data??{},m),metadata:d.metadata})}else await te(t,[{schema:S,schemaVersion:xt,data:kt({},m),metadata:{features:[]}}]);s(m.calendar.trim())}catch(e){C(e instanceof Error?e.message:`Failed to save the event`)}finally{y(!1)}},F=p?`Task`:d?`Event`:`New event`;return(0,Q.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-border px-3 py-2`,children:[(0,Q.jsx)(`span`,{className:`h-3 w-3 rounded-full`,style:{background:tt(p?`tasks`:m.calendar)}}),(0,Q.jsx)(`span`,{className:`text-sm font-semibold`,children:F}),d&&(0,Q.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[`#`,d.id]}),(0,Q.jsx)(`span`,{className:`flex-1`}),d&&n&&(0,Q.jsx)(i,{to:`/workspaces/${encodeURIComponent(n)}/documents/${d.id}`,className:`rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground`,title:`Open document`,"aria-label":`Open document`,children:(0,Q.jsx)(_,{className:`h-3.5 w-3.5`})}),d&&(0,Q.jsx)(`button`,{type:`button`,onClick:()=>E(!0),className:`rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground`,title:`Link to…`,"aria-label":`Link to…`,children:(0,Q.jsx)(ee,{className:`h-3.5 w-3.5`})}),d&&!p&&(0,Q.jsx)(`button`,{type:`button`,onClick:()=>{u(d)},className:`rounded p-1 text-muted-foreground hover:bg-muted hover:text-destructive`,title:`Delete (moves to trash)`,"aria-label":`Delete`,children:(0,Q.jsx)(f,{className:`h-3.5 w-3.5`})}),(0,Q.jsx)(`button`,{type:`button`,onClick:o,className:`rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground`,"aria-label":`Close`,children:(0,Q.jsx)(c,{className:`h-4 w-4`})})]}),p&&d?(0,Q.jsx)(Ft,{doc:d,occurrence:e.occurrence,workspaceName:n,onSaved:()=>s(``)}):(0,Q.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-3 overflow-y-auto p-3`,children:[(0,Q.jsx)(`input`,{value:m.title,onChange:e=>A({title:e.target.value}),placeholder:`Title`,autoFocus:!d,spellCheck:!1,className:`w-full border-0 border-b border-border bg-transparent px-0 py-1 text-base font-semibold outline-none placeholder:text-muted-foreground/60 focus:border-ring`}),(0,Q.jsx)(Nt,{value:m.calendar,calendars:r,onChange:e=>A({calendar:e})}),(0,Q.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:m.allDay,onChange:e=>{let t=e.target.checked;if(t)A({allDay:t,start:m.start.slice(0,10),end:(m.end||m.start).slice(0,10)});else{let e=m.start.slice(0,10)||B(new Date),n=(m.end||e).slice(0,10);A(n>e?{allDay:t,start:`${e}T09:00`,end:`${e}T10:00`,repeat:m.repeat===`none`?`daily`:m.repeat,until:n,count:``}:{allDay:t,start:`${e}T09:00`,end:`${e}T10:00`})}},className:`h-4 w-4 accent-primary`}),`All day`]}),(0,Q.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[(0,Q.jsxs)(`label`,{className:`block text-xs`,children:[(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:`Start`}),m.allDay?(0,Q.jsx)(`div`,{className:`mt-1`,children:(0,Q.jsx)(I,{value:m.start,onChange:e=>A({start:e,end:m.end&&m.end<e?e:m.end})})}):(0,Q.jsx)(`div`,{className:`mt-1`,children:(0,Q.jsx)(N,{value:m.start,onChange:e=>A({start:e}),clearable:!1})})]}),(0,Q.jsxs)(`label`,{className:`block text-xs`,children:[(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:`End`}),m.allDay?(0,Q.jsx)(`div`,{className:`mt-1`,children:(0,Q.jsx)(I,{value:m.end,min:m.start,placeholder:`Same day`,onChange:e=>A({end:e})})}):(0,Q.jsx)(`div`,{className:`mt-1`,children:(0,Q.jsx)(N,{value:m.end,onChange:e=>A({end:e}),placeholder:`No end`})})]})]}),(0,Q.jsxs)(`label`,{className:`block text-xs`,children:[(0,Q.jsxs)(`span`,{className:`flex items-center gap-1 text-muted-foreground`,children:[(0,Q.jsx)(l,{className:`h-3 w-3`}),` Repeat`]}),(0,Q.jsx)(`select`,{value:m.repeat,onChange:e=>A({repeat:e.target.value,rrule:e.target.value===`custom`?m.rrule||ke(m.repeat)||`FREQ=WEEKLY`:m.rrule}),className:`mt-1 h-8 w-full rounded-md border border-input bg-transparent px-2 text-sm`,children:St.map(e=>(0,Q.jsx)(`option`,{value:e.id,children:e.label},e.id))}),m.repeat===`custom`&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`input`,{value:m.rrule,onChange:e=>A({rrule:e.target.value}),placeholder:`FREQ=WEEKLY;INTERVAL=2;BYDAY=TU,TH`,spellCheck:!1,className:`mt-1 h-8 w-full rounded-md border border-input bg-transparent px-2 font-mono text-xs`}),(0,Q.jsx)(`span`,{className:`mt-0.5 block text-[11px] text-muted-foreground`,children:Se(m.rrule)?De(Se(m.rrule)):`RFC 5545 RRULE value`})]})]}),m.repeat!==`none`&&m.repeat!==`custom`&&(0,Q.jsx)(Mt,{fields:m,patch:A}),(0,Q.jsxs)(`label`,{className:`block text-xs`,children:[(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:`Location`}),(0,Q.jsx)(`input`,{value:m.location,onChange:e=>A({location:e.target.value}),spellCheck:!1,className:`mt-1 h-8 w-full rounded-md border border-input bg-transparent px-2 text-sm`})]}),(0,Q.jsxs)(`div`,{className:`text-xs`,children:[(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:`Description`}),(0,Q.jsx)(`div`,{className:`mt-1 rounded-md border border-input px-2 py-1.5`,children:(0,Q.jsx)(ie,{value:m.description,onChange:e=>A({description:e}),placeholder:`Notes, agenda, links…`})})]}),j&&(0,Q.jsxs)(`p`,{className:`rounded-md bg-muted/50 px-2 py-1.5 text-[11px] text-muted-foreground`,children:[`Synced from `,j.connector||j.source,`. Edits stay in Canvas unless the connector supports write-back.`,M&&(0,Q.jsxs)(Q.Fragment,{children:[` `,(0,Q.jsx)(`a`,{href:M,target:`_blank`,rel:`noopener noreferrer`,className:`underline hover:text-foreground`,children:`Open at source`})]})]}),e.kind===`occurrence`&&e.occurrence.unsupportedRule&&(0,Q.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`This series uses RRULE parts the calendar cannot expand; only its first occurrence is shown.`}),x&&(0,Q.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:x})]}),!p&&(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center justify-end gap-2 border-t border-border px-3 py-2`,children:[(0,Q.jsx)(Pt,{doc:d}),(0,Q.jsx)(`button`,{type:`button`,onClick:o,className:`rounded-md border border-border px-3 py-1.5 text-xs hover:bg-muted`,children:`Cancel`}),(0,Q.jsxs)(`button`,{type:`button`,onClick:P,disabled:g,className:b(`flex items-center gap-1 rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground disabled:opacity-50`),children:[g&&(0,Q.jsx)(v,{className:`h-3 w-3 animate-spin`}),d?`Save`:`Create`]})]}),T&&d&&(0,Q.jsx)(re,{documentId:d.id,workspaceName:n??void 0,onClose:()=>E(!1)})]})}function Mt({fields:e,patch:t}){let n=e.until?`until`:e.count?`count`:`never`,r=e.start.slice(0,10),i=Tt(e),a=i?Se(i):null;return(0,Q.jsxs)(`div`,{className:`text-xs`,children:[(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:`Ends`}),(0,Q.jsxs)(`div`,{className:`mt-1 flex items-center gap-1.5`,children:[(0,Q.jsxs)(`select`,{value:n,onChange:n=>{let i=n.target.value;t(i===`never`?{until:``,count:``}:i===`until`?{until:e.until||r,count:``}:{until:``,count:e.count||`10`})},className:`h-8 w-28 shrink-0 rounded-md border border-input bg-transparent px-2 text-sm`,children:[(0,Q.jsx)(`option`,{value:`never`,children:`Never`}),(0,Q.jsx)(`option`,{value:`until`,children:`On date`}),(0,Q.jsx)(`option`,{value:`count`,children:`After`})]}),n===`until`&&(0,Q.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,Q.jsx)(I,{value:e.until,min:r,onChange:e=>t({until:e})})}),n===`count`&&(0,Q.jsxs)(`label`,{className:`flex items-center gap-1.5`,children:[(0,Q.jsx)(`input`,{type:`number`,min:1,step:1,value:e.count,onChange:e=>t({count:e.target.value}),className:`h-8 w-20 rounded-md border border-input bg-transparent px-2 text-sm tabular-nums`}),(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:`occurrences`})]})]}),a&&(0,Q.jsx)(`span`,{className:`mt-0.5 block text-[11px] text-muted-foreground`,children:De(a)})]})}function Nt({value:e,calendars:t,onChange:n}){let r=t.some(t=>t.toLowerCase()===e.toLowerCase()),[i,a]=(0,R.useState)(!r&&!e&&t.length===0),o=r||!e?t:[e,...t];return(0,Q.jsxs)(`label`,{className:`block text-xs`,children:[(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:`Calendar`}),i?(0,Q.jsxs)(`span`,{className:`mt-1 flex gap-1`,children:[(0,Q.jsx)(`input`,{autoFocus:!0,value:e,onChange:e=>n(e.target.value),placeholder:`New calendar name`,spellCheck:!1,className:`h-8 min-w-0 flex-1 rounded-md border border-input bg-transparent px-2 text-sm outline-none focus-visible:ring-1 focus-visible:ring-ring`}),t.length>0&&(0,Q.jsx)(`button`,{type:`button`,onClick:()=>{a(!1),n(t[0])},className:`rounded-md border border-border px-2 text-xs text-muted-foreground hover:bg-muted`,"aria-label":`Pick an existing calendar`,children:(0,Q.jsx)(c,{className:`h-3 w-3`})})]}):(0,Q.jsxs)(`select`,{value:e,onChange:e=>{e.target.value===`\0new`?(a(!0),n(``)):n(e.target.value)},className:`mt-1 h-8 w-full rounded-md border border-input bg-transparent px-2 text-sm`,children:[!e&&(0,Q.jsx)(`option`,{value:``,children:`No calendar`}),o.map(e=>(0,Q.jsx)(`option`,{value:e,children:e},e)),(0,Q.jsx)(`option`,{value:`\0new`,children:`New calendar…`})]})]})}function Pt({doc:e}){let t=O(e??{id:-1,locations:[]});return!e||!t.replicating?null:(0,Q.jsx)(`span`,{className:`mr-auto text-[10px] text-muted-foreground`,children:t.label})}function Ft({doc:e,occurrence:t,workspaceName:n,onSaved:r}){let[i,o]=(0,R.useState)(!1),s=t.done;return(0,Q.jsxs)(`div`,{className:`space-y-3 p-3 text-sm`,children:[(0,Q.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Q.jsx)(`button`,{type:`button`,onClick:async()=>{if(n){o(!0);try{let t=s?`pending`:`completed`;await w(n,{id:e.id,schema:e.schema,schemaVersion:e.schemaVersion,data:{...e.data??{},status:t,completed:t===`completed`},metadata:e.metadata}),r()}finally{o(!1)}}},disabled:i,className:`mt-0.5 text-muted-foreground hover:text-foreground`,"aria-label":s?`Mark as pending`:`Mark as completed`,children:s?(0,Q.jsx)(a,{className:`h-4 w-4 text-success`}):(0,Q.jsx)(g,{className:`h-4 w-4`})}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`p`,{className:b(`font-semibold`,s&&`line-through text-muted-foreground`),children:t.title}),(0,Q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Due `,t.start.toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})]})]})]}),typeof e.data?.description==`string`&&e.data.description&&(0,Q.jsx)(`p`,{className:`whitespace-pre-wrap text-xs text-muted-foreground`,children:e.data.description}),(0,Q.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Edit the task in the Todos app or on its document page.`})]})}function It({menu:e,onClose:t,onOpen:n,onOpenDocument:r,onToggleDone:i,onDelete:o,onCreate:s,onPickDay:c}){let l=e=>()=>{t(),e()};return(0,Q.jsx)(x,{x:e.x,y:e.y,onClose:t,className:`min-w-44 rounded-md border bg-popover p-1 text-xs shadow-elevation-3`,children:e.kind===`entry`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`p`,{className:`truncate px-3 py-1.5 text-[11px] text-muted-foreground`,title:e.occurrence.title,children:e.occurrence.title}),(0,Q.jsx)(Lt,{icon:(0,Q.jsx)(h,{className:`h-3.5 w-3.5`}),onClick:l(()=>n(e.occurrence)),children:`Open`}),r&&(0,Q.jsx)(Lt,{icon:(0,Q.jsx)(_,{className:`h-3.5 w-3.5`}),onClick:l(()=>r(e.occurrence)),children:`Open document`}),e.occurrence.kind===`task`&&(0,Q.jsx)(Lt,{icon:e.occurrence.done?(0,Q.jsx)(g,{className:`h-3.5 w-3.5`}):(0,Q.jsx)(a,{className:`h-3.5 w-3.5`}),onClick:l(()=>i(e.occurrence)),children:e.occurrence.done?`Mark as pending`:`Mark as completed`}),e.occurrence.kind===`event`&&(0,Q.jsx)(Lt,{icon:(0,Q.jsx)(f,{className:`h-3.5 w-3.5`}),className:`text-destructive`,onClick:l(()=>o(e.occurrence)),children:`Delete…`})]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`p`,{className:`px-3 py-1.5 text-[11px] text-muted-foreground`,children:[ge(e.start),e.allDay?``:`, ${Z(e.start)}`]}),(0,Q.jsx)(Lt,{icon:(0,Q.jsx)(y,{className:`h-3.5 w-3.5`}),onClick:l(()=>s(e.start,e.allDay)),children:e.allDay?`New event`:`New event at ${Z(e.start)}`}),!e.allDay&&(0,Q.jsx)(Lt,{icon:(0,Q.jsx)(m,{className:`h-3.5 w-3.5`}),onClick:l(()=>s(e.start,!0)),children:`New all-day event`}),(0,Q.jsx)(Lt,{icon:(0,Q.jsx)(h,{className:`h-3.5 w-3.5`}),onClick:l(()=>c(e.start)),children:`Open day`})]})})}function Lt({icon:e,onClick:t,className:n,children:r}){return(0,Q.jsxs)(`button`,{type:`button`,onClick:t,className:b(`flex w-full items-center gap-2 rounded px-3 py-1.5 text-left hover:bg-accent`,n),children:[(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:e}),r]})}var Rt=640,zt=420,Bt=30,Vt=14;function Ht(e,t,n,r){switch(e){case`day`:{let e=H(t);return{start:e,end:U(e,n)}}case`week`:{let e=le(t);return{start:e,end:U(e,7)}}case`month`:{let e=de(t);return{start:e[0],end:U(e[41],1)}}case`year`:return{start:new Date(t.getFullYear(),0,1),end:new Date(t.getFullYear()+1,0,1)};case`schedule`:{let e=H(t);return{start:U(e,-r.before),end:U(e,r.after)}}}}function Ut(e,t,n,r){switch(e){case`day`:return U(t,n*r);case`week`:return U(t,7*r);case`month`:return ce(t,r);case`year`:return new Date(t.getFullYear()+r,t.getMonth(),1);case`schedule`:return U(t,Bt*r)}}function Wt(e,t,n,r){switch(e){case`day`:return n>1?_e(t,U(t,n-1)):r?ge(t):X(t);case`week`:return ve(le(t));case`month`:return me(t);case`year`:return String(t.getFullYear());case`schedule`:return r?ge(t):`From ${X(t)}`}}function Gt({autoAdd:e=!1}){let t=ne(),n=t?.mode===`workspace`?t.workspaceName:t?.mode===`context`?`ctx:${t.contextId}`:null,[i,a]=(0,R.useState)(()=>Je(n)),c=(0,R.useCallback)(e=>{a(t=>{let r={...t,...e};return Ye(n,r),r})},[n]),l=i.view,[f,m]=(0,R.useState)(()=>H(new Date)),[h,g]=(0,R.useState)(1),[_,y]=(0,R.useState)(null),ee=r(),[x,S]=(0,R.useState)({before:0,after:Bt}),[C,T]=(0,R.useState)(()=>e?{kind:`draft`,draft:{start:Kt(),allDay:!1}}:null),[E,D]=(0,R.useState)(!1),O=(0,R.useRef)(null),[k,te]=(0,R.useState)(1024);(0,R.useEffect)(()=>{let e=O.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e)te(t.contentRect.width)});return t.observe(e),()=>t.disconnect()},[]);let j=k<Rt,M=k<zt,N=(0,R.useMemo)(()=>Ht(l,f,h,x),[l,f,h,x]),{docs:P,loading:F,error:I,scope:L,knownCalendars:re,reload:ie,removeDoc:oe,patchDoc:z}=et(t,N.start,N.end,i.showTasks),B=(0,R.useMemo)(()=>{let e=new Map;for(let t of re)e.set(t,t);for(let t of P){let n=t.data?.calendar;typeof n==`string`&&n.trim()&&e.set(n.trim().toLowerCase(),n.trim())}return i.defaultCalendar&&e.set(i.defaultCalendar.toLowerCase(),e.get(i.defaultCalendar.toLowerCase())??i.defaultCalendar),[...e.values()].sort((e,t)=>e.localeCompare(t))},[re,P,i.defaultCalendar]),V=(0,R.useMemo)(()=>new Set(i.hidden),[i.hidden]),se=(0,R.useMemo)(()=>P.some(e=>e.schema.startsWith(`data/schema/event`)&&!(typeof e.data?.calendar==`string`&&e.data.calendar.trim())),[P]),W=(0,R.useMemo)(()=>ze(P.filter(e=>{let t=typeof e.data?.calendar==`string`?e.data.calendar.trim().toLowerCase():``;return!V.has(t||``)}),N.start,N.end),[P,V,N]),de=C?.kind===`occurrence`?C.occurrence.key:null,G=(0,R.useCallback)((e,t)=>{m(H(e)),g(1),S({before:0,after:Bt}),t&&c({view:t})},[c]),K=(0,R.useCallback)((e,t)=>{let n=Math.round((H(t).getTime()-H(e).getTime())/ae);if(n>Vt){G(e,`month`);return}G(e,`day`),g(Math.max(1,n))},[G]),fe=(0,R.useCallback)(e=>{g(1),c({view:e})},[c]),q=(0,R.useMemo)(()=>l===`day`||l===`week`?{start:N.start,end:N.end}:{start:f,end:U(f,1)},[l,N,f]),pe=(0,R.useMemo)(()=>{if(C?.kind!==`draft`)return null;let{start:e,allDay:t,end:n}=C.draft;return{start:e,allDay:t,end:n??(t?U(H(e),1):new Date(e.getTime()+36e5))}},[C]),J=(0,R.useCallback)((e,t,n)=>T({kind:`draft`,draft:{start:e,allDay:t,end:n}}),[]),Y=(0,R.useCallback)(e=>T({kind:`occurrence`,occurrence:e}),[]),me=(0,R.useCallback)(async(e,t,n)=>{if(!L)return;let r=e.doc,i=Ue(r.data??{},e,t,n);z({...r,data:i});try{await w(L.workspaceName,{id:r.id,schema:r.schema,schemaVersion:r.schemaVersion||`3.0`,data:i,metadata:r.metadata})}catch{z(r)}},[L,z]),he=(0,R.useCallback)(async e=>{if(!L)return;let t=e.doc,n=e.done?`pending`:`completed`,r={...t.data??{},status:n,completed:n===`completed`};z({...t,data:r});try{await w(L.workspaceName,{id:t.id,schema:t.schema,schemaVersion:t.schemaVersion,data:r,metadata:t.metadata})}catch{z(t)}},[L,z]),X=(0,R.useCallback)((e,t)=>y({x:e.clientX,y:e.clientY,kind:`entry`,occurrence:t}),[]),ge=(0,R.useCallback)((e,t,n)=>y({x:e.clientX,y:e.clientY,kind:`slot`,start:t,allDay:n}),[]),Z=(0,R.useCallback)(async e=>{let t=e.data?.title?`"${e.data.title}"`:`#${e.id}`;if(window.confirm(`Delete event ${t}?\n\nIt is removed from this path and moves to the workspace trash if nothing else links it.`))try{await oe(e.id),T(null)}catch{}},[oe]),_e=e=>{let t=e.target;if(!([`INPUT`,`TEXTAREA`,`SELECT`].includes(t.tagName)||t.isContentEditable)){if(e.key===`ArrowLeft`)ve(-1),e.preventDefault();else if(e.key===`ArrowRight`)ve(1),e.preventDefault();else if(e.key===`t`)G(new Date);else if(e.key===`n`)J(Kt(f),!1);else if(e.key===`Escape`)T(null),D(!1);else{let t=We.find(t=>t.key===e.key);t&&fe(t.id)}}},ve=e=>{let t=h;G(Ut(l,f,h,e)),g(t)};if(!t)return(0,Q.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-center text-sm text-muted-foreground`,children:A(t)});let ye=e=>{let t=e.toLowerCase();c({hidden:V.has(t)?i.hidden.filter(e=>e!==t):[...i.hidden,t]})},be=(0,Q.jsxs)(`div`,{className:`space-y-1 text-xs`,children:[(0,Q.jsx)(`p`,{className:`px-1 text-[10px] uppercase tracking-wide text-muted-foreground`,children:`Calendars`}),B.map(e=>(0,Q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 rounded px-1 py-0.5 hover:bg-muted`,children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:!V.has(e.toLowerCase()),onChange:()=>ye(e),className:`h-3.5 w-3.5 accent-primary`,style:{accentColor:tt(e)}}),(0,Q.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 rounded-sm`,style:{background:tt(e)}}),(0,Q.jsx)(`span`,{className:`truncate`,children:e})]},e)),se&&(0,Q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 rounded px-1 py-0.5 hover:bg-muted`,children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:!V.has(``),onChange:()=>ye(``),className:`h-3.5 w-3.5 accent-primary`}),(0,Q.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 rounded-sm`,style:{background:tt(``)}}),(0,Q.jsx)(`span`,{className:`truncate text-muted-foreground`,children:`Other events`})]}),(0,Q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 rounded px-1 py-0.5 hover:bg-muted`,children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:i.showTasks,onChange:e=>c({showTasks:e.target.checked}),className:`h-3.5 w-3.5 accent-primary`}),(0,Q.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 rounded-sm`,style:{background:tt(je)}}),(0,Q.jsx)(`span`,{className:`truncate`,children:`Tasks (due dates)`})]})]}),xe=(()=>{switch(l){case`day`:return(0,Q.jsx)(gt,{days:Array.from({length:h},(e,t)=>U(H(f),t)),occurrences:W,selectedKey:de,pending:pe,onSelect:Y,onCreate:J,onMove:me,onPickDay:e=>G(e,`day`),onEntryMenu:X,onSlotMenu:ge,compact:M||h>3});case`week`:return(0,Q.jsx)(gt,{days:Array.from({length:7},(e,t)=>U(le(f),t)),occurrences:W,selectedKey:de,pending:pe,onSelect:Y,onCreate:J,onMove:me,onPickDay:e=>G(e,`day`),onEntryMenu:X,onSlotMenu:ge,compact:j});case`month`:return(0,Q.jsx)(vt,{month:ue(f),occurrences:W,selectedKey:de,pending:pe,onSelect:Y,onCreate:J,onMove:me,onPickDay:e=>G(e,`day`),onEntryMenu:X,onSlotMenu:ge,narrow:j});case`year`:return(0,Q.jsx)(yt,{year:f.getFullYear(),occurrences:W,onPickDay:e=>G(e,`day`),onPickRange:K,onPickMonth:e=>G(e,`month`),onSlotMenu:ge});case`schedule`:return(0,Q.jsx)(bt,{occurrences:W,selectedKey:de,onSelect:Y,onEntryMenu:X,loading:F,onEarlier:()=>S(e=>({...e,before:e.before+Bt})),onLater:()=>S(e=>({...e,after:e.after+Bt})),onPickDay:e=>G(e,`day`)})}})();return(0,Q.jsxs)(`div`,{ref:O,tabIndex:0,onKeyDown:_e,className:`relative flex h-full min-h-0 flex-col outline-none`,children:[(0,Q.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-1.5 border-b border-border px-2 py-1.5`,children:[(0,Q.jsx)(`button`,{type:`button`,onClick:()=>G(new Date),className:`rounded-md border border-border px-2 py-1 text-xs hover:bg-muted`,title:`Today (t)`,children:`Today`}),(0,Q.jsx)(`button`,{type:`button`,onClick:()=>ve(-1),className:`rounded-md p-1 text-muted-foreground hover:bg-muted hover:text-foreground`,"aria-label":`Previous`,title:`Previous (←)`,children:(0,Q.jsx)(o,{className:`h-4 w-4`})}),(0,Q.jsx)(`button`,{type:`button`,onClick:()=>ve(1),className:`rounded-md p-1 text-muted-foreground hover:bg-muted hover:text-foreground`,"aria-label":`Next`,title:`Next (→)`,children:(0,Q.jsx)(d,{className:`h-4 w-4`})}),(0,Q.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold`,children:Wt(l,f,h,M)}),F&&(0,Q.jsx)(v,{className:`h-3.5 w-3.5 animate-spin text-muted-foreground`}),(0,Q.jsx)(`span`,{className:`flex-1`}),M?(0,Q.jsx)(`select`,{value:l,onChange:e=>fe(e.target.value),"aria-label":`View`,className:`h-7 rounded-md border border-input bg-transparent px-1.5 text-xs`,children:We.map(e=>(0,Q.jsx)(`option`,{value:e.id,children:e.label},e.id))}):(0,Q.jsx)(`div`,{className:`flex overflow-hidden rounded-md border border-border`,role:`tablist`,"aria-label":`View`,children:We.map(e=>(0,Q.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":l===e.id,onClick:()=>fe(e.id),title:`${e.label} (${e.key})`,className:b(`px-2 py-1 text-xs transition-colors`,l===e.id?`bg-foreground text-background`:`text-muted-foreground hover:bg-muted hover:text-foreground`),children:e.label},e.id))}),j&&(0,Q.jsx)(`button`,{type:`button`,onClick:()=>D(e=>!e),className:b(`rounded-md border p-1.5`,E?`border-foreground text-foreground`:`border-border text-muted-foreground hover:bg-muted hover:text-foreground`),"aria-label":`Calendars`,title:`Calendars`,children:(0,Q.jsx)(p,{className:`h-3.5 w-3.5`})}),(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>J(Kt(f),!1),className:`flex items-center gap-1 rounded-md bg-primary px-2 py-1.5 text-xs text-primary-foreground`,title:`New event (n)`,children:[(0,Q.jsx)(u,{className:`h-3.5 w-3.5`}),!M&&`Event`]})]}),I&&(0,Q.jsx)(`p`,{className:`border-b border-border px-3 py-2 text-xs text-destructive`,children:I}),(0,Q.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[!j&&(0,Q.jsxs)(`aside`,{className:`flex w-52 shrink-0 flex-col gap-4 overflow-y-auto border-r border-border p-3`,children:[(0,Q.jsx)(lt,{month:ue(f),selection:q,onPick:e=>G(e,l===`year`||l===`month`?`day`:l),onPickRange:K,onPrev:()=>m(e=>ce(e,-1)),onNext:()=>m(e=>ce(e,1))}),be]}),(0,Q.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[xe,j&&E&&(0,Q.jsx)(`div`,{className:`absolute right-2 top-2 z-20 w-56 rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-elevation-2`,children:be})]}),C&&!j&&(0,Q.jsx)(`aside`,{className:`w-80 shrink-0 border-l border-border bg-card`,children:(0,Q.jsx)(jt,{subject:C,target:t,workspaceName:L?.workspaceName??null,calendars:B,defaultCalendar:i.defaultCalendar,onClose:()=>T(null),onSaved:e=>{e&&c({defaultCalendar:e}),T(null),ie()},onDelete:Z})})]}),C&&j&&(0,Q.jsx)(`div`,{className:`absolute inset-0 z-30 flex flex-col bg-card`,children:(0,Q.jsx)(jt,{subject:C,target:t,workspaceName:L?.workspaceName??null,calendars:B,defaultCalendar:i.defaultCalendar,onClose:()=>T(null),onSaved:e=>{e&&c({defaultCalendar:e}),T(null),ie()},onDelete:Z})}),_&&(0,Q.jsx)(It,{menu:_,onClose:()=>y(null),onOpen:Y,onOpenDocument:L?e=>ee(`/workspaces/${encodeURIComponent(L.workspaceName)}/documents/${e.doc.id}`):null,onToggleDone:e=>{he(e)},onDelete:e=>{Z(e.doc)},onCreate:(e,t)=>J(e,t),onPickDay:e=>G(e,`day`)}),!F&&!I&&!P.length&&l!==`schedule`&&(0,Q.jsxs)(`p`,{className:`pointer-events-none absolute bottom-2 left-1/2 -translate-x-1/2 rounded-full bg-muted/80 px-3 py-1 text-[11px] text-muted-foreground`,children:[(0,Q.jsx)(s,{className:`mr-1 inline h-3 w-3`}),`Nothing here yet — click or drag a slot to add an event.`]})]})}function Kt(e){let t=new Date,n=e&&!qt(e,t)?new Date(e.getFullYear(),e.getMonth(),e.getDate(),9,0):new Date(t);return(!e||qt(e,t))&&n.setMinutes(t.getMinutes()<30?30:60,0,0),n}function qt(e,t){return e.toDateString()===t.toDateString()}export{Gt as CalendarApplet};
@@ -0,0 +1 @@
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{L as r,Pt as i,Tt as a,W as o,di as s,pi as c}from"./ui-CDoK3F3U.js";import{t as l}from"./utils-2pl1SbIp.js";import{t as u}from"./button-SeUZ_Pvi.js";import{t as d}from"./label-BSTdjCWU.js";import{g as f,t as p}from"./LinkToCard-CKVi4Nrg.js";import{Dn as m,et as h,g}from"./workspace-C5V-ZCOE.js";import{a as _,s as v,t as y}from"./useAddTarget-DeRZWtGg.js";import{n as b}from"./use-toolbox-Ck_cLGgf.js";import{n as x}from"./relation-events-CKio19hE.js";import{t as S}from"./useToastHelpers-CRrpIIdY.js";import{t as C}from"./DocumentIcon-9i1uCMQa.js";import{n as w}from"./LinkToSidePanel-eCy3nW4R.js";import{a as T,i as E,o as D,r as O,t as k}from"./UploadProgressList-D2wEpa7t.js";var A=e(n(),1),j=`references`;function M(e){return e?e.documents.map(e=>({predicate:j,direction:`out`,targetId:e.id,document:e})):[]}function N(e,t){let[n,r]=(0,A.useState)(()=>M(t)),i=e?.mode===`context`?e.contextId:null,[a,o]=(0,A.useState)(null);(0,A.useEffect)(()=>{if(!i)return;let e=!1;return _({mode:`context`,contextId:i}).then(t=>{e||o({contextId:i,workspaceName:t.workspaceName})}).catch(()=>{}),()=>{e=!0}},[i]);let s=e?.mode===`workspace`?e.workspaceName:i&&a?.contextId===i?a.workspaceName:t?.workspaceName??null,{predicates:c}=f(s);return{rows:n,predicates:c,workspaceName:s,add:(0,A.useCallback)(async(e,t,i)=>{let a=i.filter(r=>!n.some(n=>n.targetId===r&&n.predicate===e&&n.direction===t));if(a.length===0)return;let o=await Promise.all(a.map(e=>s?h(s,e).catch(()=>null):Promise.resolve(null)));r(n=>[...n,...a.map((n,r)=>({predicate:e,direction:t,targetId:n,document:o[r]??null}))])},[n,s]),update:(0,A.useCallback)((e,t)=>{r(n=>n.map((n,r)=>r===e?{...n,...t}:n))},[]),remove:(0,A.useCallback)(e=>{r(t=>t.filter((t,n)=>n!==e))},[]),write:(0,A.useCallback)(async e=>{if(n.length===0||e.length===0||!s)return 0;let t=new Map;for(let e of n){let n=`${e.direction}:${e.predicate}`,r=t.get(n)??{predicate:e.predicate,direction:e.direction,targets:[]};r.targets.push(e.targetId),t.set(n,r)}let r=0;for(let n of e)for(let e of t.values())try{await g(s,n,e.predicate,e.targets,e.direction)}catch(t){r+=1,console.error(`Failed to relate document`,n,e.predicate,t)}return r<e.length*t.size&&x(),r},[n,s]),hasRows:n.length>0}}var P=t();function F({f:e,idPrefix:t}){let[n,a]=(0,A.useState)(!1),[o,f]=(0,A.useState)(!1),h=!e.workspaceName;return(0,P.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,P.jsx)(d,{children:`Related documents`}),(0,P.jsxs)(u,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs`,disabled:h,onClick:()=>a(!0),title:h?`No workspace to relate within`:`Pick documents the new one relates to`,children:[(0,P.jsx)(i,{className:`mr-1 h-3 w-3`}),` Add`]})]}),e.rows.length===0?(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`None. Relations are written right after the document is created.`}):(0,P.jsx)(`ul`,{className:`space-y-1`,children:e.rows.map((n,i)=>{let a=n.document?m(n.document).title:`Document ${n.targetId}`,o=`${t}-relation-${i}`;return(0,P.jsxs)(`li`,{className:`flex items-center gap-1.5 rounded-md border border-input px-2 py-1.5 text-sm`,children:[(0,P.jsx)(`button`,{type:`button`,onClick:()=>e.update(i,{direction:n.direction===`out`?`in`:`out`}),className:`shrink-0 rounded p-0.5 text-muted-foreground hover:bg-accent hover:text-foreground`,title:n.direction===`out`?`The new document ${n.predicate} this one (click to flip)`:`This document ${n.predicate} the new one (click to flip)`,"aria-label":`Flip relation direction`,children:n.direction===`out`?(0,P.jsx)(s,{className:`h-3.5 w-3.5`}):(0,P.jsx)(c,{className:`h-3.5 w-3.5`})}),(0,P.jsx)(`label`,{htmlFor:o,className:`sr-only`,children:`Predicate`}),(0,P.jsx)(`select`,{id:o,value:n.predicate,onChange:t=>e.update(i,{predicate:t.target.value}),className:`w-[9.5rem] shrink-0 rounded-md border border-input bg-background px-1.5 py-1 font-mono text-[11px] focus:outline-none focus:ring-2 focus:ring-ring`,children:(e.predicates.includes(n.predicate)?e.predicates:[n.predicate,...e.predicates]).map(e=>(0,P.jsx)(`option`,{value:e,children:e},e))}),n.document?(0,P.jsx)(C,{document:n.document,size:3.5}):null,(0,P.jsx)(`span`,{className:l(`min-w-0 flex-1 truncate`,!n.document&&`italic text-muted-foreground`),title:a,children:a}),(0,P.jsx)(`button`,{type:`button`,onClick:()=>e.remove(i),className:`shrink-0 rounded p-0.5 text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,title:`Remove`,"aria-label":`Remove relation`,children:(0,P.jsx)(r,{className:`h-3.5 w-3.5`})})]},`${n.direction}:${n.predicate}:${n.targetId}`)})}),n&&e.workspaceName&&(0,P.jsx)(w,{onClose:()=>{o||a(!1)},children:(0,P.jsx)(p,{sizeClassName:`h-full w-[380px] max-w-[90vw] max-md:w-full`,title:`Relate to…`,confirmLabel:`Add`,tabs:[`relations`],fixedWorkspaceName:e.workspaceName,documentCount:1,saving:o,relationPredicates:e.predicates,relationExcludeIds:new Set(e.rows.map(e=>e.targetId)),onClose:()=>a(!1),onConfirm:()=>{},onConfirmRelation:async({predicate:t,direction:n,targetIds:r})=>{f(!0);try{await e.add(t,n,r),a(!1)}finally{f(!1)}}})})]})}function I({capture:e=!1,target:t,initialFiles:n=[],onClose:r,onBusyChange:i}={}){let{closeAdd:s,state:c}=b(),d=v(),f=t===void 0?d:t,p=r??s,m=f?.mode===`workspace`&&f.treeName===`backends`,h=N(f,t===void 0?c.addRelateTo:null),{showSuccessToast:g,showErrorToast:x}=S(),C=(0,A.useRef)(null),[w,j]=(0,A.useState)(!1),M=O(n),{items:I,running:L}=M,R=(0,A.useRef)(!1),z=(0,A.useRef)(!1),[B,V]=(0,A.useState)(!1),[H,U]=(0,A.useState)(null);(0,A.useEffect)(()=>{if(f?.mode!==`context`)return;let e=!1;return _(f).then(t=>{e||U({contextId:f.contextId,workspaceName:t.workspaceName})}).catch(()=>{}),()=>{e=!0}},[f]);let W=f?.mode===`workspace`?f.workspaceName:f&&H?.contextId===f.contextId?H.workspaceName:null,G=D(W),K=e=>{e&&M.addFiles(Array.from(e))},q=e=>{e.preventDefault(),j(!1),K(e.dataTransfer.files)},J=I.filter(e=>e.status===`error`).length,Y=I.filter(e=>e.status===`done`).length,X=I.length-Y,Z=!!f&&!B&&X>0;return(0,P.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,P.jsxs)(`div`,{onDragOver:e=>{e.preventDefault(),j(!0)},onDragLeave:()=>j(!1),onDrop:q,onClick:()=>C.current?.click(),className:l(`flex cursor-pointer flex-col items-center justify-center gap-2 rounded-md border border-dashed px-4 py-8 text-center transition-colors`,w?`border-primary bg-primary/5`:`border-input hover:bg-muted/40`),children:[(0,P.jsx)(o,{className:`h-6 w-6 text-muted-foreground touch-target`}),(0,P.jsx)(`p`,{className:`text-sm`,children:e?`Take a photo or video`:`Drag & drop files here`}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e?`click to open the camera`:`or click to browse`}),(0,P.jsx)(`input`,{ref:C,type:`file`,multiple:!0,accept:e?`image/*,video/*`:void 0,capture:e?`environment`:void 0,className:`hidden`,onChange:e=>{K(e.target.files),e.target.value=``}})]}),(0,P.jsx)(k,{items:I,running:L,onRemove:M.removeItem}),!m&&(0,P.jsx)(E,{fields:G,idPrefix:`file`,multiple:I.length>1}),(0,P.jsx)(F,{f:h,idPrefix:`file`}),(0,P.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[y(f),m?`. Existing files are never overwritten.`:``]}),(0,P.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,P.jsx)(u,{variant:`outline`,size:`sm`,onClick:()=>{B?(z.current=!0,M.cancel()):p()},children:`Cancel`}),(0,P.jsx)(u,{size:`sm`,onClick:async()=>{if(!(!Z||!f||R.current)){R.current=!0,z.current=!1,V(!0),i?.(!0);try{let e=m?null:await G.geotag.capture();if(z.current)return;let t=await M.start(f,(t,n)=>T(t,n,{tags:G.tags,comment:G.comment,geo:e})),n=await h.write(t.docIds);if(t.failed===0){let e=t.resumed?` (${t.resumed} already uploaded)`:``,r=n?`; some relations failed`:``;g(`${t.done} file(s) uploaded${e}${r}`),p()}else x(`${t.failed} of ${t.total} file(s) failed — retry keeps what already made it`)}catch(e){x(e instanceof Error?e.message:`Failed to upload files`)}finally{R.current=!1,V(!1),i?.(!1)}}},disabled:!Z,children:B?`Uploading…`:J>0?(0,P.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,P.jsx)(a,{className:`h-3.5 w-3.5`}),`Retry failed (`,J,`)`]}):`Add files`})]})]})}export{F as n,N as r,I as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{t as r}from"./socket-CtH3EU9m.js";import{r as i}from"./use-toolbox-Ck_cLGgf.js";import{n as a}from"./use-applet-target-1DU4mgJH.js";import{C as o,N as s,v as c}from"./index-CXPA9Fj8.js";var l=e(n(),1),u=t();function d(){let e=a(),t=i()?.state,n=!!t&&(e?.mode===`context`?t.activeContextType===`context`&&t.activeContextId===e.contextId:e?.mode===`workspace`?t.activeContextType!==`context`&&t.activeWorkspaceName===e.workspaceName&&t.activeTreeName===e.treeName&&t.activeContextPath===e.path:!t.activeWorkspaceName&&!t.activeContextId),d=!n&&e?.mode===`context`?e.contextId:null;return(0,l.useEffect)(()=>{if(!d)return;let e=`context:${d}`,t=()=>r.emit(`subscribe`,{channel:e}),n=r.on(`connect`,t);return t(),()=>{n(),r.emit(`unsubscribe`,{channel:e})}},[d]),n?(0,u.jsx)(c,{}):(0,u.jsx)(s,{target:e,children:(0,u.jsx)(o,{children:(0,u.jsx)(c,{})})})}export{d as FiltersApplet};
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{t as r}from"./socket-CtH3EU9m.js";import{r as i}from"./use-toolbox-Ck_cLGgf.js";import{n as a}from"./use-applet-target-BygCSj5n.js";import{C as o,N as s,v as c}from"./index-I9cslsRe.js";var l=e(n(),1),u=t();function d(){let e=a(),t=i()?.state,n=!!t&&(e?.mode===`context`?t.activeContextType===`context`&&t.activeContextId===e.contextId:e?.mode===`workspace`?t.activeContextType!==`context`&&t.activeWorkspaceName===e.workspaceName&&t.activeTreeName===e.treeName&&t.activeContextPath===e.path:!t.activeWorkspaceName&&!t.activeContextId),d=!n&&e?.mode===`context`?e.contextId:null;return(0,l.useEffect)(()=>{if(!d)return;let e=`context:${d}`,t=()=>r.emit(`subscribe`,{channel:e}),n=r.on(`connect`,t);return t(),()=>{n(),r.emit(`unsubscribe`,{channel:e})}},[d]),n?(0,u.jsx)(c,{}):(0,u.jsx)(s,{target:e,children:(0,u.jsx)(o,{children:(0,u.jsx)(c,{})})})}export{d as FiltersApplet};
@@ -1,3 +1,3 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{yt as r}from"./react-BHzhHVTZ.js";import{g as i}from"./chunk-62JRHF6Z-vspAGgtK.js";import{Gr as a,L as o,Pt as s,U as c,W as l,_n as u,ar as d,hn as f,tt as p}from"./ui-CDoK3F3U.js";import{t as m}from"./utils-2pl1SbIp.js";import{t as h}from"./input-BOtCd4HP.js";import{t as g}from"./label-BSTdjCWU.js";import{t as _}from"./LinkToCard-DGpvNE_V.js";import{zt as v}from"./workspace-cv6Hrfhh.js";import{t as ee}from"./use-mobile-Db-vWu9Y.js";import{a as y,i as b,s as x,t as te}from"./IdentityFields-C7sv9pMk.js";import{n as S,r as ne}from"./use-toolbox-Ck_cLGgf.js";import{l as re}from"./date-time-picker-C40sYmga.js";import{n as C,t as ie}from"./PickDocumentsCard-BhJbPlxk.js";import{t as w}from"./useToastHelpers-CRrpIIdY.js";import{r as T,t as E}from"./note-save-status-DPz4VzL6.js";import{t as D}from"./DocumentBodyEditor-CVO5KPCs.js";import{a as O,i as k,n as A,o as j,r as M,s as N,t as P}from"./UploadProgressList-C9teR7r-.js";import{A as F,M as I,O as L,j as R,k as z}from"./index-CXPA9Fj8.js";var B=e(r(),1),V=e(n(),1),H=t();function U({onClose:e,initialData:t,draftId:n}){let r=F(void 0,void 0,`home-card:${n}`);return(0,V.useEffect)(()=>{t?.title&&r.setTitle(t.title),t?.content&&r.setContent(t.content)},[]),(0,H.jsx)(C,{title:`New Note`,icon:p,onClose:e,onSave:async e=>{let t=await r.save({mode:`workspace`,...e});return r.finish(),t},canSave:r.canSave,saving:r.saving,successMessage:`Note created`,children:(0,H.jsxs)(`div`,{className:`flex h-full flex-col gap-4 p-4`,children:[(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{htmlFor:`qa-note-title`,children:`Title`}),(0,H.jsx)(h,{id:`qa-note-title`,value:r.title,onChange:e=>r.setTitle(e.target.value),placeholder:`Optional; defaults to today's date`})]}),(0,H.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1.5`,children:[(0,H.jsx)(g,{children:`Body`}),(0,H.jsx)(`div`,{className:`flex-1`,children:(0,H.jsx)(D,{kind:`markdown`,value:r.content,onChange:r.setContent,placeholder:`Write your note…`})})]}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{children:`Tags`}),(0,H.jsx)(x,{tags:r.tags,onChange:r.setTags})]}),(0,H.jsx)(E,{...r,onRetry:r.retry}),(0,H.jsx)(N,{geotag:r.geotag,idPrefix:`qa-note-geotag`})]})})}function W({onClose:e,initialData:t}){let n=L();return(0,V.useEffect)(()=>{t?.url&&n.setUrl(t.url),t?.title&&n.setTitle(t.title)},[]),(0,H.jsx)(C,{title:`New Link`,icon:u,onClose:e,onSave:e=>n.save({mode:`workspace`,...e}),canSave:n.canSave,saving:n.saving,successMessage:`Link created`,children:(0,H.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{htmlFor:`qa-link-url`,children:`URL`}),(0,H.jsx)(h,{id:`qa-link-url`,value:n.url,onChange:e=>n.setUrl(e.target.value),placeholder:`https://example.com`,autoFocus:!0}),n.showUrlError&&(0,H.jsx)(`p`,{className:`text-xs text-destructive`,children:`Enter a valid URL, e.g. https://example.com`})]}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{htmlFor:`qa-link-title`,children:`Title`}),(0,H.jsx)(h,{id:`qa-link-title`,value:n.title,onChange:e=>n.setTitle(e.target.value),placeholder:`Optional display title`})]}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{children:`Tags`}),(0,H.jsx)(x,{tags:n.tags,onChange:n.setTags})]}),(0,H.jsx)(z,{webapp:n.webapp,setWebapp:n.setWebapp,category:n.category,setCategory:n.setCategory,idPrefix:`qa-link`}),(0,H.jsx)(N,{geotag:n.geotag,idPrefix:`qa-link-geotag`})]})})}function G({onClose:e,initialData:t}){let n=re();return(0,V.useEffect)(()=>{t?.title&&n.setTitle(t.title),t?.content&&n.setDescription(t.content)},[]),(0,H.jsx)(C,{title:`New Todo`,icon:f,onClose:e,onSave:e=>n.save({mode:`workspace`,...e}),canSave:n.canSave,saving:n.saving,successMessage:`Todo created`,children:(0,H.jsxs)(`div`,{className:`flex h-full flex-col gap-4 p-4`,children:[(0,H.jsx)(y,{...n,idPrefix:`qa-todo`}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{children:`Tags`}),(0,H.jsx)(x,{tags:n.tags,onChange:n.setTags})]}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{htmlFor:`qa-todo-comment`,children:`Comment`}),(0,H.jsx)(`textarea`,{id:`qa-todo-comment`,value:n.comment,onChange:e=>n.setComment(e.target.value),rows:3,placeholder:`Optional context`,className:`flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-elevation-1 transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`})]}),(0,H.jsx)(N,{geotag:n.geotag,idPrefix:`qa-todo-geotag`})]})})}function K({onClose:e,initialData:t}){let n=b();return(0,V.useEffect)(()=>{t?.title&&n.setDisplayName(t.title)},[]),(0,H.jsx)(C,{title:`New Identity`,icon:c,onClose:e,onSave:e=>n.save({mode:`workspace`,...e}),canSave:n.canSave,saving:n.saving,successMessage:`Identity created`,children:(0,H.jsxs)(`div`,{className:`flex h-full flex-col gap-4 p-4`,children:[(0,H.jsx)(te,{idPrefix:`qa-identity`,...n,emailValid:n.emailValid}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{children:`Tags`}),(0,H.jsx)(x,{tags:n.tags,onChange:n.setTags})]}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{htmlFor:`qa-identity-comment`,children:`Comment`}),(0,H.jsx)(`textarea`,{id:`qa-identity-comment`,value:n.comment,onChange:e=>n.setComment(e.target.value),rows:3,placeholder:`How you know them, where they came from…`,className:`flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-elevation-1 transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`})]})]})})}var q={jpg:`image/jpeg`,jpeg:`image/jpeg`,png:`image/png`,gif:`image/gif`,webp:`image/webp`,avif:`image/avif`,heic:`image/heic`,heif:`image/heif`,bmp:`image/bmp`,tif:`image/tiff`,tiff:`image/tiff`,svg:`image/svg+xml`,mp4:`video/mp4`,mov:`video/quicktime`,webm:`video/webm`,"3gp":`video/3gpp`};function J(e){return/^(image|video)\//.test(e.type)}async function ae(e){let t=await Promise.all(e.map(async e=>{let t=new Uint8Array(await e.slice(0,64).arrayBuffer()),n=(e,n)=>String.fromCharCode(...t.slice(e,e+n)),r=``;if(t[0]===255&&t[1]===216&&t[2]===255)r=`image/jpeg`;else if(n(0,8)===`‰PNG\r
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{yt as r}from"./react-BHzhHVTZ.js";import{g as i}from"./chunk-62JRHF6Z-vspAGgtK.js";import{Gr as a,L as o,Pt as s,U as c,W as l,_n as u,ar as d,hn as f,tt as p}from"./ui-CDoK3F3U.js";import{t as m}from"./utils-2pl1SbIp.js";import{t as h}from"./input-BOtCd4HP.js";import{t as g}from"./label-BSTdjCWU.js";import{t as _}from"./LinkToCard-CKVi4Nrg.js";import{Lt as v}from"./workspace-C5V-ZCOE.js";import{t as ee}from"./use-mobile-Db-vWu9Y.js";import{a as y,i as b,s as x,t as te}from"./IdentityFields-D-NCTUaE.js";import{n as S,r as ne}from"./use-toolbox-Ck_cLGgf.js";import{l as re}from"./date-time-picker-DCikruos.js";import{n as C,t as ie}from"./PickDocumentsCard-BWgc-A02.js";import{t as w}from"./useToastHelpers-CRrpIIdY.js";import{r as T,t as E}from"./note-save-status-DPz4VzL6.js";import{t as D}from"./DocumentBodyEditor-CVO5KPCs.js";import{a as O,i as k,n as A,o as j,r as M,s as N,t as P}from"./UploadProgressList-D2wEpa7t.js";import{A as F,M as I,O as L,j as R,k as z}from"./index-I9cslsRe.js";var B=e(r(),1),V=e(n(),1),H=t();function U({onClose:e,initialData:t,draftId:n}){let r=F(void 0,void 0,`home-card:${n}`);return(0,V.useEffect)(()=>{t?.title&&r.setTitle(t.title),t?.content&&r.setContent(t.content)},[]),(0,H.jsx)(C,{title:`New Note`,icon:p,onClose:e,onSave:async e=>{let t=await r.save({mode:`workspace`,...e});return r.finish(),t},canSave:r.canSave,saving:r.saving,successMessage:`Note created`,children:(0,H.jsxs)(`div`,{className:`flex h-full flex-col gap-4 p-4`,children:[(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{htmlFor:`qa-note-title`,children:`Title`}),(0,H.jsx)(h,{id:`qa-note-title`,value:r.title,onChange:e=>r.setTitle(e.target.value),placeholder:`Optional; defaults to today's date`})]}),(0,H.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1.5`,children:[(0,H.jsx)(g,{children:`Body`}),(0,H.jsx)(`div`,{className:`flex-1`,children:(0,H.jsx)(D,{kind:`markdown`,value:r.content,onChange:r.setContent,placeholder:`Write your note…`})})]}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{children:`Tags`}),(0,H.jsx)(x,{tags:r.tags,onChange:r.setTags})]}),(0,H.jsx)(E,{...r,onRetry:r.retry}),(0,H.jsx)(N,{geotag:r.geotag,idPrefix:`qa-note-geotag`})]})})}function W({onClose:e,initialData:t}){let n=L();return(0,V.useEffect)(()=>{t?.url&&n.setUrl(t.url),t?.title&&n.setTitle(t.title)},[]),(0,H.jsx)(C,{title:`New Link`,icon:u,onClose:e,onSave:e=>n.save({mode:`workspace`,...e}),canSave:n.canSave,saving:n.saving,successMessage:`Link created`,children:(0,H.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{htmlFor:`qa-link-url`,children:`URL`}),(0,H.jsx)(h,{id:`qa-link-url`,value:n.url,onChange:e=>n.setUrl(e.target.value),placeholder:`https://example.com`,autoFocus:!0}),n.showUrlError&&(0,H.jsx)(`p`,{className:`text-xs text-destructive`,children:`Enter a valid URL, e.g. https://example.com`})]}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{htmlFor:`qa-link-title`,children:`Title`}),(0,H.jsx)(h,{id:`qa-link-title`,value:n.title,onChange:e=>n.setTitle(e.target.value),placeholder:`Optional display title`})]}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{children:`Tags`}),(0,H.jsx)(x,{tags:n.tags,onChange:n.setTags})]}),(0,H.jsx)(z,{webapp:n.webapp,setWebapp:n.setWebapp,category:n.category,setCategory:n.setCategory,idPrefix:`qa-link`}),(0,H.jsx)(N,{geotag:n.geotag,idPrefix:`qa-link-geotag`})]})})}function G({onClose:e,initialData:t}){let n=re();return(0,V.useEffect)(()=>{t?.title&&n.setTitle(t.title),t?.content&&n.setDescription(t.content)},[]),(0,H.jsx)(C,{title:`New Todo`,icon:f,onClose:e,onSave:e=>n.save({mode:`workspace`,...e}),canSave:n.canSave,saving:n.saving,successMessage:`Todo created`,children:(0,H.jsxs)(`div`,{className:`flex h-full flex-col gap-4 p-4`,children:[(0,H.jsx)(y,{...n,idPrefix:`qa-todo`}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{children:`Tags`}),(0,H.jsx)(x,{tags:n.tags,onChange:n.setTags})]}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{htmlFor:`qa-todo-comment`,children:`Comment`}),(0,H.jsx)(`textarea`,{id:`qa-todo-comment`,value:n.comment,onChange:e=>n.setComment(e.target.value),rows:3,placeholder:`Optional context`,className:`flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-elevation-1 transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`})]}),(0,H.jsx)(N,{geotag:n.geotag,idPrefix:`qa-todo-geotag`})]})})}function K({onClose:e,initialData:t}){let n=b();return(0,V.useEffect)(()=>{t?.title&&n.setDisplayName(t.title)},[]),(0,H.jsx)(C,{title:`New Identity`,icon:c,onClose:e,onSave:e=>n.save({mode:`workspace`,...e}),canSave:n.canSave,saving:n.saving,successMessage:`Identity created`,children:(0,H.jsxs)(`div`,{className:`flex h-full flex-col gap-4 p-4`,children:[(0,H.jsx)(te,{idPrefix:`qa-identity`,...n,emailValid:n.emailValid}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{children:`Tags`}),(0,H.jsx)(x,{tags:n.tags,onChange:n.setTags})]}),(0,H.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,H.jsx)(g,{htmlFor:`qa-identity-comment`,children:`Comment`}),(0,H.jsx)(`textarea`,{id:`qa-identity-comment`,value:n.comment,onChange:e=>n.setComment(e.target.value),rows:3,placeholder:`How you know them, where they came from…`,className:`flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-elevation-1 transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`})]})]})})}var q={jpg:`image/jpeg`,jpeg:`image/jpeg`,png:`image/png`,gif:`image/gif`,webp:`image/webp`,avif:`image/avif`,heic:`image/heic`,heif:`image/heif`,bmp:`image/bmp`,tif:`image/tiff`,tiff:`image/tiff`,svg:`image/svg+xml`,mp4:`video/mp4`,mov:`video/quicktime`,webm:`video/webm`,"3gp":`video/3gpp`};function J(e){return/^(image|video)\//.test(e.type)}async function ae(e){let t=await Promise.all(e.map(async e=>{let t=new Uint8Array(await e.slice(0,64).arrayBuffer()),n=(e,n)=>String.fromCharCode(...t.slice(e,e+n)),r=``;if(t[0]===255&&t[1]===216&&t[2]===255)r=`image/jpeg`;else if(n(0,8)===`‰PNG\r
2
2
  
3
3
  `)r=`image/png`;else if([`GIF87a`,`GIF89a`].includes(n(0,6)))r=`image/gif`;else if(n(0,4)===`RIFF`&&n(8,4)===`WEBP`)r=`image/webp`;else if(n(0,5)===`%PDF-`)r=`application/pdf`;else if(n(0,4)===`PK`)r=`application/zip`;else if(n(4,4)===`ftyp`){let e=[n(8,4)],i=new DataView(t.buffer).getUint32(0);for(let r=16;r+4<=Math.min(t.length,i);r+=4)e.push(n(r,4));e.some(e=>[`avif`,`avis`].includes(e))?r=`image/avif`:e.some(e=>[`heic`,`heix`,`hevc`,`hevx`].includes(e))?r=`image/heic`:e.some(e=>[`mif1`,`msf1`].includes(e))?r=`image/heif`:e.includes(`qt `)?r=`video/quicktime`:e.some(e=>[`isom`,`iso2`,`mp41`,`mp42`,`avc1`,`M4V `].includes(e))&&(r=`video/mp4`)}let i=e.type.toLowerCase().split(`;`)[0].trim(),a=!i||[`application/octet-stream`,`binary/octet-stream`,`*/*`].includes(i),o=e.name.split(`.`).pop()?.toLowerCase()??``,s=r||a&&q[o]||i;return s===e.type?e:new File([e],e.name,{type:s,lastModified:e.lastModified})}));return{kind:t.length>0&&t.every(J)?`photo`:`file`,files:t}}function Y({file:e}){let t=(0,V.useRef)(null),[n,r]=(0,V.useState)(!1);return(0,V.useEffect)(()=>{let n=t.current;if(!n)return;let r=URL.createObjectURL(e);return n.src=r,()=>{n.removeAttribute(`src`),URL.revokeObjectURL(r)}},[e]),(0,H.jsx)(`div`,{className:`flex min-h-24 items-center justify-center overflow-hidden rounded-md border border-input bg-muted/30`,children:n?(0,H.jsxs)(`p`,{className:`p-4 text-center text-sm text-muted-foreground`,children:[`Preview unavailable for `,e.name,`. You can still save the original.`]}):e.type.startsWith(`video/`)?(0,H.jsx)(`video`,{ref:t,controls:!0,preload:`metadata`,"aria-label":e.name,onError:()=>r(!0),className:`max-h-64 max-w-full`}):(0,H.jsx)(`img`,{ref:t,alt:e.name,onError:()=>r(!0),className:`max-h-64 max-w-full object-contain`})})}function oe({onClose:e,initialData:t}){let n=(0,V.useRef)(null),r=M(t?.files),i=r.items.map(e=>e.file),[a,o]=(0,V.useState)(!1),[s,c]=(0,V.useState)(!1),{state:u}=S(),d=j(u.activeWorkspaceName),f=e=>{e&&(s||r.addFiles(Array.from(e)))},p=e=>{e.preventDefault(),o(!1),f(e.dataTransfer.files)},h=i.length>0;return(0,H.jsx)(C,{title:`Upload File`,icon:l,onClose:e,onSave:async e=>{c(!0);try{let t={mode:`workspace`,...e},n=await d.geotag.capture(),i=await r.start(t,(e,t)=>O(e,t,{tags:d.tags,comment:d.comment,geo:n}));if(i.failed)throw Error(`${i.failed} file(s) failed or cancelled. Retry keeps completed uploads.`);return i.docIds}finally{c(!1)}},navigateAfterSave:!0,canSave:h,saving:s,saveProgress:(0,H.jsx)(A,{items:r.items,running:r.running,onCancel:r.cancel}),successMessage:`File(s) uploaded`,children:(0,H.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,H.jsxs)(`div`,{onDragOver:e=>{e.preventDefault(),o(!0)},onDragLeave:()=>o(!1),onDrop:p,onClick:()=>n.current?.click(),className:m(`flex cursor-pointer flex-col items-center justify-center gap-2 rounded-md border border-dashed px-4 py-8 text-center transition-colors`,a?`border-primary bg-primary/5`:`border-input hover:bg-muted/40`),children:[(0,H.jsx)(l,{className:`h-6 w-6 text-muted-foreground touch-target`}),(0,H.jsx)(`p`,{className:`text-sm`,children:`Drag & drop files here`}),(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`or click to browse`}),(0,H.jsx)(`input`,{ref:n,type:`file`,multiple:!0,disabled:s,className:`hidden`,onChange:e=>{f(e.target.files),e.target.value=``}})]}),r.items.filter(e=>J(e.file)).map(e=>(0,H.jsx)(Y,{file:e.file},e.id)),(0,H.jsx)(P,{items:r.items,running:s,onRemove:r.removeItem}),(0,H.jsx)(k,{fields:d,idPrefix:`qa-file`,multiple:i.length>1})]})})}function se({onClose:e,initialData:t}){let n=M(t?.files),r=(0,V.useRef)(null),i=n.items.length>0,[s,c]=(0,V.useState)(!1),{state:l}=S(),u=j(l.activeWorkspaceName),f=e=>{!s&&e&&n.addFiles([e])};return(0,H.jsx)(C,{title:`Photo/Video`,icon:a,onClose:e,onSave:async e=>{if(!i)return[];c(!0);try{let t=await u.geotag.capture(),r={mode:`workspace`,...e},i=await n.start(r,(e,n)=>O(e,n,{tags:u.tags,comment:u.comment,geo:t}));if(i.failed)throw Error(`Upload failed or cancelled. You can retry.`);return i.docIds}finally{c(!1)}},navigateAfterSave:!0,canSave:i,saving:s,saveProgress:(0,H.jsx)(A,{items:n.items,running:n.running,onCancel:n.cancel}),successMessage:`Upload saved`,children:(0,H.jsxs)(`div`,{className:m(`flex h-full flex-col gap-4 p-4`,!i&&`items-center justify-center`),children:[i?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`div`,{className:`flex min-h-0 w-full flex-1 flex-col gap-3 overflow-y-auto`,children:n.items.map(({id:e,file:t,status:r})=>(0,H.jsxs)(`div`,{className:`space-y-2`,children:[(0,H.jsx)(Y,{file:t}),(0,H.jsxs)(`div`,{className:`flex w-full items-center gap-2 rounded border border-input px-3 py-2 text-sm`,children:[(0,H.jsx)(d,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`flex-1 truncate`,children:t.name}),(0,H.jsxs)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:[(t.size/1024/1024).toFixed(1),` MB`]}),(0,H.jsx)(`button`,{type:`button`,disabled:s||r===`done`,onClick:()=>n.removeItem(e),"aria-label":`Remove ${t.name}`,className:`text-muted-foreground hover:text-foreground disabled:opacity-40`,children:(0,H.jsx)(o,{className:`h-3.5 w-3.5`})})]})]},e))}),(0,H.jsx)(`div`,{className:`w-full shrink-0 space-y-4`,children:(0,H.jsx)(k,{fields:u,idPrefix:`qa-photo`,multiple:n.items.length>1})})]}):(0,H.jsxs)(`button`,{type:`button`,onClick:()=>r.current?.click(),className:`flex flex-col items-center gap-2 rounded-md border border-dashed border-input px-6 py-10 text-center transition-colors hover:bg-muted/40`,children:[(0,H.jsx)(a,{className:`h-8 w-8 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`text-sm`,children:`Open camera`})]}),(0,H.jsx)(`input`,{ref:r,type:`file`,accept:`image/*,video/*`,capture:`environment`,className:`hidden`,disabled:s,onChange:e=>{f(e.target.files?.[0]??null),e.target.value=``}})]})})}var X=`shrink-0 h-viewport-card w-[min(380px,90vw)] max-md:fixed max-md:inset-2 max-md:z-40 max-md:h-auto max-md:w-auto max-md:shadow-elevation-5`;function ce({onClose:e}){let{showSuccessToast:t,showErrorToast:n}=w(),[r,i]=(0,V.useState)(null),[a,o]=(0,V.useState)(!1);return r?(0,H.jsx)(_,{sizeClassName:X,documentCount:r.length,saving:a,onClose:e,onConfirm:async(i,a)=>{o(!0);try{await Promise.all(i.map(e=>v(a.workspaceName,e,r,a.treeName,a.treeType))),t(`${r.length} document${r.length===1?``:`s`} linked`),e()}catch(e){n(e instanceof Error?e.message:`Failed to link documents`)}finally{o(!1)}}}):(0,H.jsx)(ie,{sizeClassName:X,onConfirm:e=>{e.length&&i(e)},onClose:e})}function Z(){let e=T(`new:home-card:`);try{return Object.keys(localStorage).filter(t=>t.startsWith(e)&&t.endsWith(`:home`)).filter(e=>{let t=JSON.parse(localStorage.getItem(e)||`null`)?.value;return t&&(t.title||t.content||t.comment||t.tags?.length)}).map(t=>t.slice(e.length,-5))}catch{return[]}}var Q=0;function le(){return Q+=1,`card-${Q}`}function $({initialKind:e,initialData:t,onInitialCardClose:n,onCardsOpenChange:r}){let[a,c]=(0,V.useState)(!1),l=ee(),u=ne(),d=!!(u?.state.t1Open||u?.state.addOpen),[f,p]=(0,V.useState)(()=>e?[{id:`initial`,kind:e,initialData:t,noteDraftId:crypto.randomUUID()}]:Z().map(e=>({id:e,kind:`note`,noteDraftId:e}))),h=f.length>0,g=(0,V.useRef)(r);(0,V.useEffect)(()=>{g.current=r},[r]),(0,V.useEffect)(()=>{g.current?.(h)},[h]),d&&a&&c(!1);let _=i(),v=e=>{if(e===`sketch`){c(!1),_(I.createUrl(null));return}let t=e===`note`?Z().find(e=>!f.some(t=>t.noteDraftId===e))||crypto.randomUUID():void 0;p(n=>[...n,{id:le(),kind:e,noteDraftId:t}]),c(!1)},y=e=>{p(t=>t.filter(t=>t.id!==e)),e===`initial`&&n?.()},b=(0,H.jsxs)(`div`,{className:m(`pointer-events-none fixed right-6 z-40 flex flex-col items-end gap-2`,`bottom-fab-inset md:bottom-[calc(var(--spacing-fab-inset)+5rem)]`,f.length>0&&`max-md:hidden`,d&&`hidden`),children:[(0,H.jsx)(`div`,{className:m(`flex flex-col items-end gap-2 transition-all duration-fast`,a?`pointer-events-auto opacity-100`:`pointer-events-none translate-y-2 opacity-0`),children:(0,H.jsx)(R,{variant:`stack`,omit:[`plaintext`,`folder`,`message`],onSelect:v})}),(0,H.jsx)(`div`,{className:`pointer-events-none flex w-16 justify-center`,children:(0,H.jsx)(`button`,{type:`button`,onClick:()=>c(e=>!e),"aria-label":a?`Close quick add`:`Quick add`,className:`pointer-events-auto flex h-11 w-11 items-center justify-center rounded-full bg-primary text-primary-foreground shadow-elevation-3 transition-transform hover:scale-105`,children:a?(0,H.jsx)(o,{className:`h-5 w-5`}):(0,H.jsx)(s,{className:`h-5 w-5`})})})]});return(0,H.jsxs)(`div`,{className:`relative flex h-full w-full flex-col`,children:[f.length>0&&(0,H.jsx)(`div`,{className:`pointer-events-auto flex flex-1 items-center gap-4 overflow-x-auto p-6 md:pr-28`,children:f.map(e=>{let t=()=>y(e.id);switch(e.kind){case`note`:return(0,H.jsx)(U,{draftId:e.noteDraftId,onClose:t,initialData:e.initialData},e.id);case`link`:return(0,H.jsx)(W,{onClose:t,initialData:e.initialData},e.id);case`todo`:return(0,H.jsx)(G,{onClose:t,initialData:e.initialData},e.id);case`identity`:return(0,H.jsx)(K,{onClose:t,initialData:e.initialData},e.id);case`file`:return(0,H.jsx)(oe,{onClose:t,initialData:e.initialData},e.id);case`photo`:return(0,H.jsx)(se,{onClose:t,initialData:e.initialData},e.id);case`existing`:return(0,H.jsx)(ce,{onClose:t},e.id);case`sketch`:return null;case`folder`:case`message`:return null}})}),l?(0,B.createPortal)(b,document.body):b]})}export{ae as n,$ as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{yt as r}from"./react-BHzhHVTZ.js";import{L as i,Pt as a,Wr as o,X as s,fn as c,nt as l,pn as u,sn as d,vn as f,xr as p,yt as m}from"./ui-CDoK3F3U.js";import{t as h}from"./utils-2pl1SbIp.js";import{t as g}from"./input-BOtCd4HP.js";import{t as _}from"./label-BSTdjCWU.js";import{An as v,Rn as y,Wn as b,g as x,wt as S}from"./workspace-cv6Hrfhh.js";import{n as C}from"./tags-YamdPoBK.js";import{o as w}from"./useAddTarget-BEgKjqGj.js";import{i as T,n as E,r as D}from"./date-time-picker-C40sYmga.js";import{t as O}from"./useEscapeClose-DR_xKT_k.js";import{n as k}from"./map-BxCwdK0d.js";var A=e(n(),1),j=(0,A.createContext)(null),M=t();function N({tags:e,onChange:t,placeholder:n=`Add tag, press Enter`,suggestions:r=[]}){let[a,o]=(0,A.useState)(``),[s,c]=(0,A.useState)(!1),l=a.trim().toLowerCase(),u=(l?r.filter(t=>t.toLowerCase().includes(l)&&!e.includes(t)):s?r.filter(t=>!e.includes(t)):[]).slice(0,8),d=()=>{let n=a.trim();n&&!e.includes(n)&&t([...e,n]),o(``)};return(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent px-2 py-1.5 focus-within:ring-1 focus-within:ring-ring`,children:[e.map(n=>(0,M.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-muted px-1.5 py-0.5 text-xs`,children:[n,(0,M.jsx)(`button`,{type:`button`,onClick:()=>t(e.filter(e=>e!==n)),className:`text-muted-foreground hover:text-foreground`,"aria-label":`Remove ${n}`,children:(0,M.jsx)(i,{className:`h-3 w-3`})})]},n)),(0,M.jsxs)(`div`,{className:`relative flex-1 min-w-[8ch]`,children:[(0,M.jsx)(`input`,{value:a,onChange:e=>o(e.target.value),onKeyDown:n=>{n.key===`Enter`||n.key===`,`?(n.preventDefault(),d()):n.key===`Backspace`&&!a&&e.length&&t(e.slice(0,-1))},onFocus:()=>c(!0),onBlur:()=>{setTimeout(d,150),c(!1)},placeholder:e.length?``:n,className:`w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground`}),u.length>0&&(0,M.jsx)(`div`,{className:`absolute left-0 top-full z-50 mt-1 max-h-48 w-56 overflow-auto rounded-md border bg-popover p-1 text-sm shadow-elevation-2`,children:u.map(n=>(0,M.jsx)(`button`,{type:`button`,onMouseDown:r=>{r.preventDefault(),e.includes(n)||t([...e,n]),o(``)},className:`block w-full rounded px-2 py-1 text-left hover:bg-accent`,children:n},n))})]})]})}var ee=e(r(),1),P=e(k(),1),F=`#8b5cf6`,I=`https://nominatim.openstreetmap.org`,te=700,L=e=>Math.round(e*1e6)/1e6;function R(){let e=`<div style="display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:9999px 9999px 9999px 2px;transform:rotate(-45deg);background:${F};border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.45)"><div style="width:8px;height:8px;border-radius:9999px;background:#fff"></div></div>`;return P.default.divIcon({html:e,className:`canvas-map-pick`,iconSize:[28,28],iconAnchor:[14,28]})}function z({initial:e,onPick:t,onClose:n}){let r=(0,A.useRef)(null),a=(0,A.useRef)(null),s=(0,A.useRef)(null),l=(0,A.useRef)(null);(0,A.useEffect)(()=>()=>l.current?.abort(),[]);let[f,g]=(0,A.useState)(e?{lat:e.lat,lon:e.lon}:null),[_,v]=(0,A.useState)(``),[y,b]=(0,A.useState)([]),[x,S]=(0,A.useState)(!1),[C,w]=(0,A.useState)(null),[T,E]=(0,A.useState)(!1),[D,k]=(0,A.useState)(!1),[j,N]=(0,A.useState)(!1);(0,A.useEffect)(()=>{let e=requestAnimationFrame(()=>N(!0));return()=>cancelAnimationFrame(e)},[]),O(n);let F=(0,A.useCallback)((e,t,n)=>{let r=a.current;if(!r)return;let i=P.default.latLng(e,t);s.current?s.current.setLatLng(i):(s.current=P.default.marker(i,{icon:R(),draggable:!0,autoPan:!0}).addTo(r),s.current.on(`dragend`,()=>{let e=s.current.getLatLng();g({lat:L(e.lat),lon:L(e.lng)})})),g({lat:L(e),lon:L(t),...n?{label:n}:{}})},[]);(0,A.useEffect)(()=>{let t=r.current;if(!t||a.current)return;let n=P.default.map(t,{center:e?[e.lat,e.lon]:[20,0],zoom:e?13:2,worldCopyJump:!0,zoomControl:!0});P.default.tileLayer(`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,{attribution:`&copy; OpenStreetMap contributors`,maxZoom:19}).addTo(n),a.current=n,e&&F(e.lat,e.lon),n.on(`click`,e=>F(e.latlng.lat,e.latlng.lng));let i=new ResizeObserver(()=>n.invalidateSize());i.observe(t);let o=setTimeout(()=>n.invalidateSize(),260);return()=>{clearTimeout(o),i.disconnect(),n.remove(),a.current=null,s.current=null}},[]),(0,A.useEffect)(()=>{if(!f||f.label)return;let{lat:e,lon:t}=f,n=new AbortController,r=setTimeout(()=>{E(!0),fetch(`${I}/reverse?format=jsonv2&zoom=16&lat=${e}&lon=${t}`,{signal:n.signal,headers:{Accept:`application/json`}}).then(e=>e.ok?e.json():null).then(n=>{let r=n?.display_name;typeof r==`string`&&r&&g(n=>n&&n.lat===e&&n.lon===t?{...n,label:r}:n)}).catch(()=>{}).finally(()=>E(!1))},te);return()=>{clearTimeout(r),n.abort()}},[f]);let z=(0,A.useCallback)(async()=>{let e=_.trim();if(e.length<2)return;l.current?.abort();let t=new AbortController;l.current=t;let n=!1,r=window.setTimeout(()=>{n=!0,t.abort()},12e3);S(!0),b([]),w(null);try{let n=await fetch(`${I}/search?format=jsonv2&limit=6&q=${encodeURIComponent(e)}`,{signal:t.signal,headers:{Accept:`application/json`}});if(n.status===429)throw Error(`Place search is busy. Wait a moment and try again, or click the map`);if(!n.ok)throw Error(`Place search is unavailable (${n.status}). Try again, or click the map`);let r=await n.json();if(!Array.isArray(r))throw Error(`Place search returned an invalid response. Try again, or click the map`);if(t.signal.aborted||l.current!==t)return;b(r),r.length||w(`No match. Try a different spelling, or just click the map`)}catch(e){if(l.current!==t||t.signal.aborted&&!n)return;w(n?`Place search timed out. Try again, or click the map`:e instanceof TypeError?`Could not reach place search. Check your connection, or click the map`:e instanceof Error?e.message:`Search is unavailable right now. Click the map to place a pin`)}finally{window.clearTimeout(r),l.current===t&&(!t.signal.aborted||n)&&S(!1)}},[_]),B=(0,A.useCallback)(()=>{if(!navigator.geolocation){w(`This browser has no geolocation`);return}k(!0),w(null),navigator.geolocation.getCurrentPosition(e=>{k(!1),a.current?.setView([e.coords.latitude,e.coords.longitude],16),F(e.coords.latitude,e.coords.longitude)},()=>{k(!1),w(`Could not read your location. Search or click the map instead`)},{enableHighAccuracy:!0,timeout:1e4,maximumAge:6e4})},[F]),V=(0,A.useCallback)(e=>{let t=a.current,n=Number(e.lat),r=Number(e.lon);if(!t||!Number.isFinite(n)||!Number.isFinite(r))return;let i=e.boundingbox?.map(Number);i&&i.length===4&&i.every(Number.isFinite)?t.fitBounds(P.default.latLngBounds([i[0],i[2]],[i[1],i[3]]),{maxZoom:16}):t.setView([n,r],15),F(n,r,e.display_name),b([])},[F]);return(0,ee.createPortal)((0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:h(`fixed inset-0 z-[60] bg-scrim transition-opacity duration-normal`,j?`opacity-100`:`opacity-0`),onClick:n}),(0,M.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":`Pick a location on the map`,className:h(`fixed inset-y-0 right-0 z-[61] flex w-[min(560px,100vw)] flex-col overflow-hidden rounded-(--panel-radius) bg-background shadow-elevation-4 transition-transform duration-normal ease-out`,j?`translate-x-0`:`translate-x-full`),children:[(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b px-3 py-2`,children:[(0,M.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,M.jsx)(d,{className:`h-4 w-4 text-info`}),`Custom geotag`]}),(0,M.jsx)(`button`,{type:`button`,onClick:n,"aria-label":`Close map`,className:`rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground`,children:(0,M.jsx)(i,{className:`h-4 w-4`})})]}),(0,M.jsxs)(`div`,{className:`relative z-10 shrink-0 border-b px-3 py-2`,children:[(0,M.jsxs)(`div`,{className:`flex gap-2`,children:[(0,M.jsxs)(`div`,{className:`relative flex-1`,children:[(0,M.jsx)(m,{className:`pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,M.jsx)(`input`,{value:_,autoFocus:!0,onChange:e=>{l.current?.abort(),l.current=null,S(!1),b([]),v(e.target.value),w(null)},"aria-label":`Search for a place or address`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),z())},placeholder:`Search a place, e.g. Slavkovský štít`,spellCheck:!1,className:`h-8 w-full rounded-md border border-input bg-transparent pl-7 pr-2 text-sm outline-none placeholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring`})]}),(0,M.jsx)(`button`,{type:`button`,onClick:B,disabled:D,title:`Use my current location`,"aria-label":`Use my current location`,className:`inline-flex h-8 w-8 items-center justify-center rounded-md border border-border text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50`,children:D?(0,M.jsx)(u,{className:`h-3.5 w-3.5 animate-spin`}):(0,M.jsx)(c,{className:`h-3.5 w-3.5`})}),(0,M.jsxs)(`button`,{type:`button`,onClick:z,disabled:x||_.trim().length<2,className:`inline-flex h-8 items-center gap-1.5 rounded-md bg-primary px-3 text-xs text-primary-foreground disabled:opacity-50`,children:[x?(0,M.jsx)(u,{className:`h-3.5 w-3.5 animate-spin`}):(0,M.jsx)(m,{className:`h-3.5 w-3.5`}),`Search`]})]}),C&&(0,M.jsx)(`p`,{role:`status`,className:`mt-1 text-xs text-warning`,children:C}),y.length>0&&(0,M.jsx)(`div`,{className:`absolute inset-x-3 top-full z-10 mt-1 max-h-64 overflow-y-auto rounded-md border bg-popover shadow-elevation-4`,children:y.map(e=>(0,M.jsx)(`button`,{type:`button`,onClick:()=>V(e),className:`block w-full border-b border-border/60 px-3 py-2 text-left text-xs last:border-0 hover:bg-muted`,children:e.display_name},`${e.lat},${e.lon},${e.display_name}`))})]}),(0,M.jsxs)(`div`,{className:`relative isolate z-0 min-h-0 flex-1`,children:[(0,M.jsx)(`div`,{ref:r,className:`h-full w-full`}),!f&&(0,M.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-3 z-[1000] flex justify-center`,children:(0,M.jsx)(`span`,{className:`rounded-full bg-background/90 px-3 py-1 text-xs text-muted-foreground shadow-elevation-2`,children:`Click the map to drop a pin, or drag it to fine-tune`})})]}),(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-3 border-t px-3 py-2`,children:[(0,M.jsx)(`div`,{className:`min-w-0 text-xs`,children:f?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-1.5 tabular-nums text-foreground`,children:[(0,M.jsx)(p,{className:`h-3 w-3 shrink-0 text-muted-foreground`}),f.lat.toFixed(5),`, `,f.lon.toFixed(5),T&&(0,M.jsx)(u,{className:`h-3 w-3 animate-spin text-muted-foreground`})]}),f.label&&(0,M.jsx)(`div`,{className:`truncate text-muted-foreground`,children:f.label})]}):(0,M.jsx)(`span`,{className:`text-muted-foreground`,children:`No point selected`})}),(0,M.jsxs)(`div`,{className:`flex shrink-0 gap-2`,children:[(0,M.jsx)(`button`,{type:`button`,onClick:n,className:`rounded-md border border-border px-3 py-1.5 text-xs text-muted-foreground hover:bg-muted hover:text-foreground`,children:`Cancel`}),(0,M.jsxs)(`button`,{type:`button`,disabled:!f,onClick:()=>{f&&(t(f),n())},className:`inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground disabled:opacity-50`,children:[(0,M.jsx)(o,{className:`h-3.5 w-3.5`}),`Use this point`]})]})]})]})]}),document.body)}var B={1:`1: Highest`,2:`2`,3:`3: High`,4:`4`,5:`5: Medium`,6:`6`,7:`7: Low`,8:`8`,9:`9: Lowest`},V=`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-elevation-1 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,H=`flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-elevation-1 transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`;function U({title:e,setTitle:t,description:n,setDescription:r,status:i,setStatus:a,priority:o,setPriority:s,due:c,setDue:l,idPrefix:u=`todo`}){return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${u}-title`,children:`Title`}),(0,M.jsx)(g,{id:`${u}-title`,value:e,onChange:e=>t(e.target.value),placeholder:`What needs doing?`})]}),(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${u}-desc`,children:`Description`}),(0,M.jsx)(`textarea`,{id:`${u}-desc`,value:n,onChange:e=>r(e.target.value),rows:3,placeholder:`Optional details…`,className:H})]}),(0,M.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${u}-due`,children:`Due`}),(0,M.jsx)(E,{id:`${u}-due`,value:c,onChange:l,placeholder:`No due date`})]}),(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${u}-priority`,children:`Priority`}),(0,M.jsxs)(`select`,{id:`${u}-priority`,value:o===``?``:String(o),onChange:e=>s(e.target.value===``?``:Number(e.target.value)),className:V,children:[(0,M.jsx)(`option`,{value:``,children:`None`}),[1,2,3,4,5,6,7,8,9].map(e=>(0,M.jsx)(`option`,{value:e,children:B[e]},e))]})]})]}),(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${u}-status`,children:`Status`}),(0,M.jsx)(`select`,{id:`${u}-status`,value:i,onChange:e=>a(e.target.value),className:V,children:D.map(e=>(0,M.jsx)(`option`,{value:e,children:T[e]},e))})]})]})}var W=`3.0`,G=[`person`,`organization`,`service`,`bot`],K={person:`Person`,organization:`Organization`,service:`Service`,bot:`Bot`},q=[`email`,`phone`,`sms`,`chat`,`web`],J=[`email`,`github`,`slack`,`matrix`,`gpg`,`url`];function Y(e){let t=e.primaryEmail.trim().toLowerCase(),n=e.channels.map(e=>({...e,kind:e.kind.trim(),value:e.value.trim(),label:e.label?.trim()||void 0})).filter(e=>e.kind&&e.value);if(t&&!n.some(e=>e.kind===`email`&&e.value===t)){for(let e of n)e.kind===`email`&&(e.primary=!1);n.push({kind:`email`,value:t,label:void 0,primary:!0})}let r=e.given.trim(),i=e.family.trim();return{displayName:e.displayName.trim(),...t?{primaryEmail:t}:{},...r||i?{name:{...r?{given:r}:{},...i?{family:i}:{}}}:{},channels:n,identifiers:e.identifiers.map(e=>({...e,type:e.type.trim(),identifier:e.identifier.trim(),provider:e.provider?.trim()||void 0})).filter(e=>e.type&&e.identifier),organizations:e.organizations.map(({identityId:e,...t})=>({...t,name:t.name.trim(),role:t.role?.trim()||void 0,...e?{metadata:{identityId:e}}:{}})).filter(e=>e.name)}}function X(e){let t=e?.data??{},n=t.name&&typeof t.name==`object`?t.name:{},r=e=>Array.isArray(e)?e:[],i=b(String(e?.schema||``),y);return{displayName:String(t.displayName||``),type:G.includes(i)?i:`person`,primaryEmail:String(t.primaryEmail||``),given:String(n.given||``),family:String(n.family||``),channels:r(t.channels),identifiers:r(t.identifiers),organizations:r(t.organizations).map(e=>({name:String(e.name||``),role:e.role?String(e.role):void 0,identityId:Number(e.metadata?.identityId)||void 0}))}}async function Z(e,t,n){if(!t||!e||e.mode!==`workspace`)return;let r=n.filter(e=>e.identityId);for(let n of r)try{await x(e.workspaceName,t,`member-of`,[n.identityId])}catch(e){console.error(`Failed to link organization`,n.name,e)}}function ne(e){let[t,n]=(0,A.useState)(e?.displayName??``),[r,i]=(0,A.useState)(e?.type??`person`),[a,o]=(0,A.useState)(e?.primaryEmail??``),[s,c]=(0,A.useState)(e?.given??``),[l,u]=(0,A.useState)(e?.family??``),[d,f]=(0,A.useState)(e?.channels??[]),[p,m]=(0,A.useState)(e?.identifiers??[]),[h,g]=(0,A.useState)(e?.organizations??[]),[_,v]=(0,A.useState)([]),[b,x]=(0,A.useState)(``),[S,T]=(0,A.useState)(!1),E={displayName:t,type:r,primaryEmail:a,given:s,family:l,channels:d,identifiers:p,organizations:h},D=!a.trim()||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(a.trim()),O=t.trim().length>0&&D&&!S;async function k(e){T(!0);try{let t=b.trim(),n={schema:`${y}/${E.type}`,schemaVersion:W,data:Y(E),...t?{comment:t}:{},metadata:{features:C(_)}},r=await w(e,[n]);return await Z(e,r[0],h),r}finally{T(!1)}}return{displayName:t,setDisplayName:n,type:r,setType:i,primaryEmail:a,setPrimaryEmail:o,given:s,setGiven:c,family:l,setFamily:u,channels:d,setChannels:f,identifiers:p,setIdentifiers:m,organizations:h,setOrganizations:g,tags:_,setTags:v,comment:b,setComment:x,values:E,saving:S,canSave:O,emailValid:D,save:k}}var Q=`h-9 shrink-0 rounded-md border border-input bg-transparent px-2 text-sm shadow-elevation-1 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`;function $({label:e,rows:t,onChange:n,blank:r,addLabel:i,children:o}){return(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,M.jsx)(_,{children:e}),(0,M.jsxs)(`button`,{type:`button`,onClick:()=>n([...t,r()]),className:`inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,children:[(0,M.jsx)(a,{className:`h-3 w-3`}),` `,i]})]}),t.length===0?(0,M.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`None yet.`}):(0,M.jsx)(`div`,{className:`space-y-1.5`,children:t.map((r,i)=>(0,M.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[o(r,e=>n(t.map((t,n)=>n===i?{...t,...e}:t))),(0,M.jsx)(`button`,{type:`button`,onClick:()=>n(t.filter((e,t)=>t!==i)),className:`shrink-0 rounded p-1.5 text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive`,"aria-label":`Remove ${e.toLowerCase()} row`,children:(0,M.jsx)(s,{className:`h-3.5 w-3.5`})})]},i))})]})}function re(e,t){let n=e[t].kind,r=e[t].primary;return e.map((e,i)=>e.kind===n?{...e,primary:!r&&i===t}:e)}function ie(e){let[t,n]=(0,A.useState)([]);return(0,A.useEffect)(()=>{if(!e)return;let t=!1;async function r(){try{let r=await S(e,`organization`);t||n(r.map(e=>({id:e.id,name:v(e).title})))}catch{t||n([])}}return r(),()=>{t=!0}},[e]),t}function ae({idPrefix:e,workspaceName:t,displayName:n,setDisplayName:r,type:i,setType:a,primaryEmail:o,setPrimaryEmail:s,given:c,setGiven:u,family:d,setFamily:p,channels:m,setChannels:v,identifiers:y,setIdentifiers:b,organizations:x,setOrganizations:S,emailValid:C=!0}){let w=ie(t);return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${e}-display-name`,children:`Display name`}),(0,M.jsx)(g,{id:`${e}-display-name`,value:n,onChange:e=>r(e.target.value),placeholder:`Jane Doe, Acme Ltd, build-bot…`,autoFocus:!0})]}),(0,M.jsxs)(`div`,{className:`flex gap-2`,children:[(0,M.jsxs)(`div`,{className:`w-40 space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${e}-type`,children:`Type`}),(0,M.jsx)(`select`,{id:`${e}-type`,value:i,onChange:e=>a(e.target.value),className:h(Q,`w-full`),children:G.map(e=>(0,M.jsx)(`option`,{value:e,children:K[e]},e))})]}),(0,M.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${e}-email`,children:`Primary email`}),(0,M.jsx)(g,{id:`${e}-email`,type:`email`,value:o,onChange:e=>s(e.target.value),placeholder:`jane@example.com`}),!C&&(0,M.jsx)(`p`,{className:`text-xs text-destructive`,children:`Enter a valid email address.`})]})]}),i===`person`&&(0,M.jsxs)(`div`,{className:`flex gap-2`,children:[(0,M.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${e}-given`,children:`Given name`}),(0,M.jsx)(g,{id:`${e}-given`,value:c,onChange:e=>u(e.target.value),placeholder:`Jane`})]}),(0,M.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${e}-family`,children:`Family name`}),(0,M.jsx)(g,{id:`${e}-family`,value:d,onChange:e=>p(e.target.value),placeholder:`Doe`})]})]}),(0,M.jsx)($,{label:`Channels`,rows:m,onChange:v,blank:()=>({kind:`email`,value:``}),addLabel:`Add channel`,children:(e,t)=>(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`select`,{value:e.kind,onChange:e=>t({kind:e.target.value}),className:h(Q,`w-24`),children:[q.map(e=>(0,M.jsx)(`option`,{value:e,children:e},e)),!q.includes(e.kind)&&(0,M.jsx)(`option`,{value:e.kind,children:e.kind})]}),(0,M.jsx)(g,{value:e.value,onChange:e=>t({value:e.target.value}),placeholder:e.kind===`phone`?`+421…`:`address or handle`,className:`min-w-0 flex-1`}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>v(re(m,m.indexOf(e))),className:h(`shrink-0 rounded p-1.5 transition-colors hover:bg-muted`,e.primary?`text-data-5`:`text-muted-foreground`),title:e.primary?`Primary for this kind`:`Make primary for this kind`,"aria-pressed":!!e.primary,children:(0,M.jsx)(l,{className:h(`h-3.5 w-3.5`,e.primary&&`fill-current`)})})]})}),(0,M.jsx)($,{label:`Identifiers`,rows:y,onChange:b,blank:()=>({type:`github`,identifier:``}),addLabel:`Add identifier`,children:(e,t)=>(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`select`,{value:e.type,onChange:e=>t({type:e.target.value}),className:h(Q,`w-24`),children:[J.map(e=>(0,M.jsx)(`option`,{value:e,children:e},e)),!J.includes(e.type)&&(0,M.jsx)(`option`,{value:e.type,children:e.type})]}),(0,M.jsx)(g,{value:e.identifier,onChange:e=>t({identifier:e.target.value}),placeholder:`octocat, U024BE7LH, 0xABCD…`,className:`min-w-0 flex-1 font-mono text-xs`})]})}),(0,M.jsx)($,{label:`Organizations`,rows:x,onChange:S,blank:()=>({name:``}),addLabel:`Add organization`,children:(e,t)=>(0,M.jsxs)(M.Fragment,{children:[w.length>0?(0,M.jsxs)(`select`,{value:e.identityId?String(e.identityId):``,onChange:e=>{let n=w.find(t=>String(t.id)===e.target.value);t(n?{identityId:n.id,name:n.name}:{identityId:void 0})},className:h(Q,`min-w-0 flex-1`),children:[(0,M.jsx)(`option`,{value:``,children:`Other… (type a name)`}),w.map(e=>(0,M.jsx)(`option`,{value:e.id,children:e.name},e.id))]}):null,!e.identityId&&(0,M.jsx)(g,{value:e.name,onChange:e=>t({name:e.target.value}),placeholder:`Acme Ltd`,className:`min-w-0 flex-1`}),e.identityId&&(0,M.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,title:`Linked — saving relates this identity to that organization`,children:(0,M.jsx)(f,{className:`h-3.5 w-3.5`})}),(0,M.jsx)(g,{value:e.role??``,onChange:e=>t({role:e.target.value}),placeholder:`Role`,className:`w-28 shrink-0`})]})})]})}export{U as a,j as c,ne as i,Y as n,z as o,X as r,N as s,ae as t};
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{yt as r}from"./react-BHzhHVTZ.js";import{L as i,Pt as a,Wr as o,X as s,fn as c,nt as l,pn as u,sn as d,vn as f,xr as p,yt as m}from"./ui-CDoK3F3U.js";import{t as h}from"./utils-2pl1SbIp.js";import{t as g}from"./input-BOtCd4HP.js";import{t as _}from"./label-BSTdjCWU.js";import{Dn as v,Fn as y,St as b,Vn as x,g as S}from"./workspace-C5V-ZCOE.js";import{n as C}from"./tags-YamdPoBK.js";import{o as w}from"./useAddTarget-DeRZWtGg.js";import{i as T,n as E,r as D}from"./date-time-picker-DCikruos.js";import{t as O}from"./useEscapeClose-DR_xKT_k.js";import{n as k}from"./map-BxCwdK0d.js";var A=e(n(),1),j=(0,A.createContext)(null),M=t();function N({tags:e,onChange:t,placeholder:n=`Add tag, press Enter`,suggestions:r=[]}){let[a,o]=(0,A.useState)(``),[s,c]=(0,A.useState)(!1),l=a.trim().toLowerCase(),u=(l?r.filter(t=>t.toLowerCase().includes(l)&&!e.includes(t)):s?r.filter(t=>!e.includes(t)):[]).slice(0,8),d=()=>{let n=a.trim();n&&!e.includes(n)&&t([...e,n]),o(``)};return(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent px-2 py-1.5 focus-within:ring-1 focus-within:ring-ring`,children:[e.map(n=>(0,M.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-muted px-1.5 py-0.5 text-xs`,children:[n,(0,M.jsx)(`button`,{type:`button`,onClick:()=>t(e.filter(e=>e!==n)),className:`text-muted-foreground hover:text-foreground`,"aria-label":`Remove ${n}`,children:(0,M.jsx)(i,{className:`h-3 w-3`})})]},n)),(0,M.jsxs)(`div`,{className:`relative flex-1 min-w-[8ch]`,children:[(0,M.jsx)(`input`,{value:a,onChange:e=>o(e.target.value),onKeyDown:n=>{n.key===`Enter`||n.key===`,`?(n.preventDefault(),d()):n.key===`Backspace`&&!a&&e.length&&t(e.slice(0,-1))},onFocus:()=>c(!0),onBlur:()=>{setTimeout(d,150),c(!1)},placeholder:e.length?``:n,className:`w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground`}),u.length>0&&(0,M.jsx)(`div`,{className:`absolute left-0 top-full z-50 mt-1 max-h-48 w-56 overflow-auto rounded-md border bg-popover p-1 text-sm shadow-elevation-2`,children:u.map(n=>(0,M.jsx)(`button`,{type:`button`,onMouseDown:r=>{r.preventDefault(),e.includes(n)||t([...e,n]),o(``)},className:`block w-full rounded px-2 py-1 text-left hover:bg-accent`,children:n},n))})]})]})}var ee=e(r(),1),P=e(k(),1),F=`#8b5cf6`,I=`https://nominatim.openstreetmap.org`,te=700,L=e=>Math.round(e*1e6)/1e6;function R(){let e=`<div style="display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:9999px 9999px 9999px 2px;transform:rotate(-45deg);background:${F};border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.45)"><div style="width:8px;height:8px;border-radius:9999px;background:#fff"></div></div>`;return P.default.divIcon({html:e,className:`canvas-map-pick`,iconSize:[28,28],iconAnchor:[14,28]})}function z({initial:e,onPick:t,onClose:n}){let r=(0,A.useRef)(null),a=(0,A.useRef)(null),s=(0,A.useRef)(null),l=(0,A.useRef)(null);(0,A.useEffect)(()=>()=>l.current?.abort(),[]);let[f,g]=(0,A.useState)(e?{lat:e.lat,lon:e.lon}:null),[_,v]=(0,A.useState)(``),[y,b]=(0,A.useState)([]),[x,S]=(0,A.useState)(!1),[C,w]=(0,A.useState)(null),[T,E]=(0,A.useState)(!1),[D,k]=(0,A.useState)(!1),[j,N]=(0,A.useState)(!1);(0,A.useEffect)(()=>{let e=requestAnimationFrame(()=>N(!0));return()=>cancelAnimationFrame(e)},[]),O(n);let F=(0,A.useCallback)((e,t,n)=>{let r=a.current;if(!r)return;let i=P.default.latLng(e,t);s.current?s.current.setLatLng(i):(s.current=P.default.marker(i,{icon:R(),draggable:!0,autoPan:!0}).addTo(r),s.current.on(`dragend`,()=>{let e=s.current.getLatLng();g({lat:L(e.lat),lon:L(e.lng)})})),g({lat:L(e),lon:L(t),...n?{label:n}:{}})},[]);(0,A.useEffect)(()=>{let t=r.current;if(!t||a.current)return;let n=P.default.map(t,{center:e?[e.lat,e.lon]:[20,0],zoom:e?13:2,worldCopyJump:!0,zoomControl:!0});P.default.tileLayer(`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,{attribution:`&copy; OpenStreetMap contributors`,maxZoom:19}).addTo(n),a.current=n,e&&F(e.lat,e.lon),n.on(`click`,e=>F(e.latlng.lat,e.latlng.lng));let i=new ResizeObserver(()=>n.invalidateSize());i.observe(t);let o=setTimeout(()=>n.invalidateSize(),260);return()=>{clearTimeout(o),i.disconnect(),n.remove(),a.current=null,s.current=null}},[]),(0,A.useEffect)(()=>{if(!f||f.label)return;let{lat:e,lon:t}=f,n=new AbortController,r=setTimeout(()=>{E(!0),fetch(`${I}/reverse?format=jsonv2&zoom=16&lat=${e}&lon=${t}`,{signal:n.signal,headers:{Accept:`application/json`}}).then(e=>e.ok?e.json():null).then(n=>{let r=n?.display_name;typeof r==`string`&&r&&g(n=>n&&n.lat===e&&n.lon===t?{...n,label:r}:n)}).catch(()=>{}).finally(()=>E(!1))},te);return()=>{clearTimeout(r),n.abort()}},[f]);let z=(0,A.useCallback)(async()=>{let e=_.trim();if(e.length<2)return;l.current?.abort();let t=new AbortController;l.current=t;let n=!1,r=window.setTimeout(()=>{n=!0,t.abort()},12e3);S(!0),b([]),w(null);try{let n=await fetch(`${I}/search?format=jsonv2&limit=6&q=${encodeURIComponent(e)}`,{signal:t.signal,headers:{Accept:`application/json`}});if(n.status===429)throw Error(`Place search is busy. Wait a moment and try again, or click the map`);if(!n.ok)throw Error(`Place search is unavailable (${n.status}). Try again, or click the map`);let r=await n.json();if(!Array.isArray(r))throw Error(`Place search returned an invalid response. Try again, or click the map`);if(t.signal.aborted||l.current!==t)return;b(r),r.length||w(`No match. Try a different spelling, or just click the map`)}catch(e){if(l.current!==t||t.signal.aborted&&!n)return;w(n?`Place search timed out. Try again, or click the map`:e instanceof TypeError?`Could not reach place search. Check your connection, or click the map`:e instanceof Error?e.message:`Search is unavailable right now. Click the map to place a pin`)}finally{window.clearTimeout(r),l.current===t&&(!t.signal.aborted||n)&&S(!1)}},[_]),B=(0,A.useCallback)(()=>{if(!navigator.geolocation){w(`This browser has no geolocation`);return}k(!0),w(null),navigator.geolocation.getCurrentPosition(e=>{k(!1),a.current?.setView([e.coords.latitude,e.coords.longitude],16),F(e.coords.latitude,e.coords.longitude)},()=>{k(!1),w(`Could not read your location. Search or click the map instead`)},{enableHighAccuracy:!0,timeout:1e4,maximumAge:6e4})},[F]),V=(0,A.useCallback)(e=>{let t=a.current,n=Number(e.lat),r=Number(e.lon);if(!t||!Number.isFinite(n)||!Number.isFinite(r))return;let i=e.boundingbox?.map(Number);i&&i.length===4&&i.every(Number.isFinite)?t.fitBounds(P.default.latLngBounds([i[0],i[2]],[i[1],i[3]]),{maxZoom:16}):t.setView([n,r],15),F(n,r,e.display_name),b([])},[F]);return(0,ee.createPortal)((0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:h(`fixed inset-0 z-[60] bg-scrim transition-opacity duration-normal`,j?`opacity-100`:`opacity-0`),onClick:n}),(0,M.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":`Pick a location on the map`,className:h(`fixed inset-y-0 right-0 z-[61] flex w-[min(560px,100vw)] flex-col overflow-hidden rounded-(--panel-radius) bg-background shadow-elevation-4 transition-transform duration-normal ease-out`,j?`translate-x-0`:`translate-x-full`),children:[(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b px-3 py-2`,children:[(0,M.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,M.jsx)(d,{className:`h-4 w-4 text-info`}),`Custom geotag`]}),(0,M.jsx)(`button`,{type:`button`,onClick:n,"aria-label":`Close map`,className:`rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground`,children:(0,M.jsx)(i,{className:`h-4 w-4`})})]}),(0,M.jsxs)(`div`,{className:`relative z-10 shrink-0 border-b px-3 py-2`,children:[(0,M.jsxs)(`div`,{className:`flex gap-2`,children:[(0,M.jsxs)(`div`,{className:`relative flex-1`,children:[(0,M.jsx)(m,{className:`pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,M.jsx)(`input`,{value:_,autoFocus:!0,onChange:e=>{l.current?.abort(),l.current=null,S(!1),b([]),v(e.target.value),w(null)},"aria-label":`Search for a place or address`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),z())},placeholder:`Search a place, e.g. Slavkovský štít`,spellCheck:!1,className:`h-8 w-full rounded-md border border-input bg-transparent pl-7 pr-2 text-sm outline-none placeholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring`})]}),(0,M.jsx)(`button`,{type:`button`,onClick:B,disabled:D,title:`Use my current location`,"aria-label":`Use my current location`,className:`inline-flex h-8 w-8 items-center justify-center rounded-md border border-border text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50`,children:D?(0,M.jsx)(u,{className:`h-3.5 w-3.5 animate-spin`}):(0,M.jsx)(c,{className:`h-3.5 w-3.5`})}),(0,M.jsxs)(`button`,{type:`button`,onClick:z,disabled:x||_.trim().length<2,className:`inline-flex h-8 items-center gap-1.5 rounded-md bg-primary px-3 text-xs text-primary-foreground disabled:opacity-50`,children:[x?(0,M.jsx)(u,{className:`h-3.5 w-3.5 animate-spin`}):(0,M.jsx)(m,{className:`h-3.5 w-3.5`}),`Search`]})]}),C&&(0,M.jsx)(`p`,{role:`status`,className:`mt-1 text-xs text-warning`,children:C}),y.length>0&&(0,M.jsx)(`div`,{className:`absolute inset-x-3 top-full z-10 mt-1 max-h-64 overflow-y-auto rounded-md border bg-popover shadow-elevation-4`,children:y.map(e=>(0,M.jsx)(`button`,{type:`button`,onClick:()=>V(e),className:`block w-full border-b border-border/60 px-3 py-2 text-left text-xs last:border-0 hover:bg-muted`,children:e.display_name},`${e.lat},${e.lon},${e.display_name}`))})]}),(0,M.jsxs)(`div`,{className:`relative isolate z-0 min-h-0 flex-1`,children:[(0,M.jsx)(`div`,{ref:r,className:`h-full w-full`}),!f&&(0,M.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-3 z-[1000] flex justify-center`,children:(0,M.jsx)(`span`,{className:`rounded-full bg-background/90 px-3 py-1 text-xs text-muted-foreground shadow-elevation-2`,children:`Click the map to drop a pin, or drag it to fine-tune`})})]}),(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-3 border-t px-3 py-2`,children:[(0,M.jsx)(`div`,{className:`min-w-0 text-xs`,children:f?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-1.5 tabular-nums text-foreground`,children:[(0,M.jsx)(p,{className:`h-3 w-3 shrink-0 text-muted-foreground`}),f.lat.toFixed(5),`, `,f.lon.toFixed(5),T&&(0,M.jsx)(u,{className:`h-3 w-3 animate-spin text-muted-foreground`})]}),f.label&&(0,M.jsx)(`div`,{className:`truncate text-muted-foreground`,children:f.label})]}):(0,M.jsx)(`span`,{className:`text-muted-foreground`,children:`No point selected`})}),(0,M.jsxs)(`div`,{className:`flex shrink-0 gap-2`,children:[(0,M.jsx)(`button`,{type:`button`,onClick:n,className:`rounded-md border border-border px-3 py-1.5 text-xs text-muted-foreground hover:bg-muted hover:text-foreground`,children:`Cancel`}),(0,M.jsxs)(`button`,{type:`button`,disabled:!f,onClick:()=>{f&&(t(f),n())},className:`inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground disabled:opacity-50`,children:[(0,M.jsx)(o,{className:`h-3.5 w-3.5`}),`Use this point`]})]})]})]})]}),document.body)}var B={1:`1: Highest`,2:`2`,3:`3: High`,4:`4`,5:`5: Medium`,6:`6`,7:`7: Low`,8:`8`,9:`9: Lowest`},V=`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-elevation-1 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,H=`flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-elevation-1 transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`;function U({title:e,setTitle:t,description:n,setDescription:r,status:i,setStatus:a,priority:o,setPriority:s,due:c,setDue:l,idPrefix:u=`todo`}){return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${u}-title`,children:`Title`}),(0,M.jsx)(g,{id:`${u}-title`,value:e,onChange:e=>t(e.target.value),placeholder:`What needs doing?`})]}),(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${u}-desc`,children:`Description`}),(0,M.jsx)(`textarea`,{id:`${u}-desc`,value:n,onChange:e=>r(e.target.value),rows:3,placeholder:`Optional details…`,className:H})]}),(0,M.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${u}-due`,children:`Due`}),(0,M.jsx)(E,{id:`${u}-due`,value:c,onChange:l,placeholder:`No due date`})]}),(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${u}-priority`,children:`Priority`}),(0,M.jsxs)(`select`,{id:`${u}-priority`,value:o===``?``:String(o),onChange:e=>s(e.target.value===``?``:Number(e.target.value)),className:V,children:[(0,M.jsx)(`option`,{value:``,children:`None`}),[1,2,3,4,5,6,7,8,9].map(e=>(0,M.jsx)(`option`,{value:e,children:B[e]},e))]})]})]}),(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${u}-status`,children:`Status`}),(0,M.jsx)(`select`,{id:`${u}-status`,value:i,onChange:e=>a(e.target.value),className:V,children:D.map(e=>(0,M.jsx)(`option`,{value:e,children:T[e]},e))})]})]})}var W=`3.0`,G=[`person`,`organization`,`service`,`bot`],K={person:`Person`,organization:`Organization`,service:`Service`,bot:`Bot`},q=[`email`,`phone`,`sms`,`chat`,`web`],J=[`email`,`github`,`slack`,`matrix`,`gpg`,`url`];function Y(e){let t=e.primaryEmail.trim().toLowerCase(),n=e.channels.map(e=>({...e,kind:e.kind.trim(),value:e.value.trim(),label:e.label?.trim()||void 0})).filter(e=>e.kind&&e.value);if(t&&!n.some(e=>e.kind===`email`&&e.value===t)){for(let e of n)e.kind===`email`&&(e.primary=!1);n.push({kind:`email`,value:t,label:void 0,primary:!0})}let r=e.given.trim(),i=e.family.trim();return{displayName:e.displayName.trim(),...t?{primaryEmail:t}:{},...r||i?{name:{...r?{given:r}:{},...i?{family:i}:{}}}:{},channels:n,identifiers:e.identifiers.map(e=>({...e,type:e.type.trim(),identifier:e.identifier.trim(),provider:e.provider?.trim()||void 0})).filter(e=>e.type&&e.identifier),organizations:e.organizations.map(({identityId:e,...t})=>({...t,name:t.name.trim(),role:t.role?.trim()||void 0,...e?{metadata:{identityId:e}}:{}})).filter(e=>e.name)}}function X(e){let t=e?.data??{},n=t.name&&typeof t.name==`object`?t.name:{},r=e=>Array.isArray(e)?e:[],i=x(String(e?.schema||``),y);return{displayName:String(t.displayName||``),type:G.includes(i)?i:`person`,primaryEmail:String(t.primaryEmail||``),given:String(n.given||``),family:String(n.family||``),channels:r(t.channels),identifiers:r(t.identifiers),organizations:r(t.organizations).map(e=>({name:String(e.name||``),role:e.role?String(e.role):void 0,identityId:Number(e.metadata?.identityId)||void 0}))}}async function Z(e,t,n){if(!t||!e||e.mode!==`workspace`)return;let r=n.filter(e=>e.identityId);for(let n of r)try{await S(e.workspaceName,t,`member-of`,[n.identityId])}catch(e){console.error(`Failed to link organization`,n.name,e)}}function ne(e){let[t,n]=(0,A.useState)(e?.displayName??``),[r,i]=(0,A.useState)(e?.type??`person`),[a,o]=(0,A.useState)(e?.primaryEmail??``),[s,c]=(0,A.useState)(e?.given??``),[l,u]=(0,A.useState)(e?.family??``),[d,f]=(0,A.useState)(e?.channels??[]),[p,m]=(0,A.useState)(e?.identifiers??[]),[h,g]=(0,A.useState)(e?.organizations??[]),[_,v]=(0,A.useState)([]),[b,x]=(0,A.useState)(``),[S,T]=(0,A.useState)(!1),E={displayName:t,type:r,primaryEmail:a,given:s,family:l,channels:d,identifiers:p,organizations:h},D=!a.trim()||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(a.trim()),O=t.trim().length>0&&D&&!S;async function k(e){T(!0);try{let t=b.trim(),n={schema:`${y}/${E.type}`,schemaVersion:W,data:Y(E),...t?{comment:t}:{},metadata:{features:C(_)}},r=await w(e,[n]);return await Z(e,r[0],h),r}finally{T(!1)}}return{displayName:t,setDisplayName:n,type:r,setType:i,primaryEmail:a,setPrimaryEmail:o,given:s,setGiven:c,family:l,setFamily:u,channels:d,setChannels:f,identifiers:p,setIdentifiers:m,organizations:h,setOrganizations:g,tags:_,setTags:v,comment:b,setComment:x,values:E,saving:S,canSave:O,emailValid:D,save:k}}var Q=`h-9 shrink-0 rounded-md border border-input bg-transparent px-2 text-sm shadow-elevation-1 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`;function $({label:e,rows:t,onChange:n,blank:r,addLabel:i,children:o}){return(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,M.jsx)(_,{children:e}),(0,M.jsxs)(`button`,{type:`button`,onClick:()=>n([...t,r()]),className:`inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,children:[(0,M.jsx)(a,{className:`h-3 w-3`}),` `,i]})]}),t.length===0?(0,M.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`None yet.`}):(0,M.jsx)(`div`,{className:`space-y-1.5`,children:t.map((r,i)=>(0,M.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[o(r,e=>n(t.map((t,n)=>n===i?{...t,...e}:t))),(0,M.jsx)(`button`,{type:`button`,onClick:()=>n(t.filter((e,t)=>t!==i)),className:`shrink-0 rounded p-1.5 text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive`,"aria-label":`Remove ${e.toLowerCase()} row`,children:(0,M.jsx)(s,{className:`h-3.5 w-3.5`})})]},i))})]})}function re(e,t){let n=e[t].kind,r=e[t].primary;return e.map((e,i)=>e.kind===n?{...e,primary:!r&&i===t}:e)}function ie(e){let[t,n]=(0,A.useState)([]);return(0,A.useEffect)(()=>{if(!e)return;let t=!1;async function r(){try{let r=await b(e,`organization`);t||n(r.map(e=>({id:e.id,name:v(e).title})))}catch{t||n([])}}return r(),()=>{t=!0}},[e]),t}function ae({idPrefix:e,workspaceName:t,displayName:n,setDisplayName:r,type:i,setType:a,primaryEmail:o,setPrimaryEmail:s,given:c,setGiven:u,family:d,setFamily:p,channels:m,setChannels:v,identifiers:y,setIdentifiers:b,organizations:x,setOrganizations:S,emailValid:C=!0}){let w=ie(t);return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${e}-display-name`,children:`Display name`}),(0,M.jsx)(g,{id:`${e}-display-name`,value:n,onChange:e=>r(e.target.value),placeholder:`Jane Doe, Acme Ltd, build-bot…`,autoFocus:!0})]}),(0,M.jsxs)(`div`,{className:`flex gap-2`,children:[(0,M.jsxs)(`div`,{className:`w-40 space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${e}-type`,children:`Type`}),(0,M.jsx)(`select`,{id:`${e}-type`,value:i,onChange:e=>a(e.target.value),className:h(Q,`w-full`),children:G.map(e=>(0,M.jsx)(`option`,{value:e,children:K[e]},e))})]}),(0,M.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${e}-email`,children:`Primary email`}),(0,M.jsx)(g,{id:`${e}-email`,type:`email`,value:o,onChange:e=>s(e.target.value),placeholder:`jane@example.com`}),!C&&(0,M.jsx)(`p`,{className:`text-xs text-destructive`,children:`Enter a valid email address.`})]})]}),i===`person`&&(0,M.jsxs)(`div`,{className:`flex gap-2`,children:[(0,M.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${e}-given`,children:`Given name`}),(0,M.jsx)(g,{id:`${e}-given`,value:c,onChange:e=>u(e.target.value),placeholder:`Jane`})]}),(0,M.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1.5`,children:[(0,M.jsx)(_,{htmlFor:`${e}-family`,children:`Family name`}),(0,M.jsx)(g,{id:`${e}-family`,value:d,onChange:e=>p(e.target.value),placeholder:`Doe`})]})]}),(0,M.jsx)($,{label:`Channels`,rows:m,onChange:v,blank:()=>({kind:`email`,value:``}),addLabel:`Add channel`,children:(e,t)=>(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`select`,{value:e.kind,onChange:e=>t({kind:e.target.value}),className:h(Q,`w-24`),children:[q.map(e=>(0,M.jsx)(`option`,{value:e,children:e},e)),!q.includes(e.kind)&&(0,M.jsx)(`option`,{value:e.kind,children:e.kind})]}),(0,M.jsx)(g,{value:e.value,onChange:e=>t({value:e.target.value}),placeholder:e.kind===`phone`?`+421…`:`address or handle`,className:`min-w-0 flex-1`}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>v(re(m,m.indexOf(e))),className:h(`shrink-0 rounded p-1.5 transition-colors hover:bg-muted`,e.primary?`text-data-5`:`text-muted-foreground`),title:e.primary?`Primary for this kind`:`Make primary for this kind`,"aria-pressed":!!e.primary,children:(0,M.jsx)(l,{className:h(`h-3.5 w-3.5`,e.primary&&`fill-current`)})})]})}),(0,M.jsx)($,{label:`Identifiers`,rows:y,onChange:b,blank:()=>({type:`github`,identifier:``}),addLabel:`Add identifier`,children:(e,t)=>(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`select`,{value:e.type,onChange:e=>t({type:e.target.value}),className:h(Q,`w-24`),children:[J.map(e=>(0,M.jsx)(`option`,{value:e,children:e},e)),!J.includes(e.type)&&(0,M.jsx)(`option`,{value:e.type,children:e.type})]}),(0,M.jsx)(g,{value:e.identifier,onChange:e=>t({identifier:e.target.value}),placeholder:`octocat, U024BE7LH, 0xABCD…`,className:`min-w-0 flex-1 font-mono text-xs`})]})}),(0,M.jsx)($,{label:`Organizations`,rows:x,onChange:S,blank:()=>({name:``}),addLabel:`Add organization`,children:(e,t)=>(0,M.jsxs)(M.Fragment,{children:[w.length>0?(0,M.jsxs)(`select`,{value:e.identityId?String(e.identityId):``,onChange:e=>{let n=w.find(t=>String(t.id)===e.target.value);t(n?{identityId:n.id,name:n.name}:{identityId:void 0})},className:h(Q,`min-w-0 flex-1`),children:[(0,M.jsx)(`option`,{value:``,children:`Other… (type a name)`}),w.map(e=>(0,M.jsx)(`option`,{value:e.id,children:e.name},e.id))]}):null,!e.identityId&&(0,M.jsx)(g,{value:e.name,onChange:e=>t({name:e.target.value}),placeholder:`Acme Ltd`,className:`min-w-0 flex-1`}),e.identityId&&(0,M.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,title:`Linked — saving relates this identity to that organization`,children:(0,M.jsx)(f,{className:`h-3.5 w-3.5`})}),(0,M.jsx)(g,{value:e.role??``,onChange:e=>t({role:e.target.value}),placeholder:`Role`,className:`w-28 shrink-0`})]})})]})}export{U as a,j as c,ne as i,Y as n,z as o,X as r,N as s,ae as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{$n as r,Gr as i,Nr as a,Xt as o}from"./ui-CDoK3F3U.js";import{t as s}from"./utils-2pl1SbIp.js";import{An as c,Nn as l}from"./workspace-cv6Hrfhh.js";import{t as u}from"./useDocumentThumbnail-DutrNFK3.js";import{t as d}from"./DocumentIcon-9i1uCMQa.js";import{n as f}from"./use-document-modal-PG8bQyIB.js";import{n as p}from"./use-applet-target-1DU4mgJH.js";import{D as m,E as h,S as g,T as _,b as v,w as y,x as b}from"./index-CXPA9Fj8.js";var x=e(n(),1),S=t(),C=`h-8 rounded-md border border-input bg-transparent px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring`,w=`h-8 rounded-md border border-input bg-transparent px-2 text-xs outline-none focus-visible:ring-1 focus-visible:ring-ring`;function T({workspaceRef:e,doc:t,distance:n,onOpen:r}){let i=l(t),{blobUrl:a}=u(e,t.id,256,{enabled:i}),o=c(t);return(0,S.jsxs)(`button`,{type:`button`,onClick:()=>r(t),title:`Open ${o.title}`,className:`rounded-(--card-radius) border border-border bg-card overflow-hidden flex flex-col text-left cursor-pointer transition-colors hover:border-foreground/30 hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:[(0,S.jsx)(`div`,{className:`aspect-square bg-muted/40 flex items-center justify-center overflow-hidden`,children:i&&a?(0,S.jsx)(`img`,{src:a,alt:o.title,className:`h-full w-full object-cover`}):(0,S.jsx)(d,{document:t,size:10})}),(0,S.jsxs)(`div`,{className:`p-2 min-w-0`,children:[(0,S.jsx)(`div`,{className:`text-xs font-medium truncate`,title:o.title,children:o.title}),(0,S.jsxs)(`div`,{className:`text-[10px] text-muted-foreground truncate`,children:[o.schemaLabel,n==null?``:` · d=${n.toFixed(3)}`]})]})]})}function E(){let e=p(),t=f(),n=h(),{rateMs:c,setRateMs:l,text:u,setText:d,maxDistance:E,setMaxDistance:D,latencyMs:O,error:k}=n,A=e?.mode===`workspace`?e.workspaceName:``,j=e?.mode===`workspace`&&e.path!==`/`?e.path:null,M=n.running&&n.consumer===`applet`,N=n.running&&n.consumer!==`applet`,P=M?n.hits:[];m(M);let F=M?n.snapshotSize??n.camera?.size:null,I=!!F&&F.height>F.width,L=e=>{A&&n.start(e,`applet`,{workspaceRef:A,contextPath:j})},{setContextPath:R}=n;return(0,x.useEffect)(()=>{M&&R(j)},[M,j,R]),e?.mode===`workspace`?(0,S.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-3 overflow-y-auto p-3`,children:[(0,S.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:[(0,S.jsx)(`select`,{className:C,value:c,onChange:e=>l(Number(e.target.value)),title:`Frame rate. High rates (10–30 fps) are experimental; the loop never overlaps requests, so the effective rate is capped by search latency.`,children:_.map(e=>(0,S.jsx)(`option`,{value:e.ms,children:e.label},e.ms))}),(0,S.jsx)(`input`,{className:s(w,`w-44`),placeholder:`Optional text (fused mode)`,value:u,onChange:e=>d(e.target.value)}),(0,S.jsx)(`input`,{className:s(w,`w-28`),placeholder:`max distance`,inputMode:`decimal`,value:E,onChange:e=>D(e.target.value),title:`Cosine-distance floor (0 = identical). Empty = top-K.`}),M?(0,S.jsxs)(`button`,{type:`button`,onClick:n.stop,className:`flex h-8 items-center gap-1 rounded-md bg-destructive px-3 text-xs font-medium text-destructive-foreground transition-colors hover:bg-destructive/90`,children:[(0,S.jsx)(a,{className:`h-3.5 w-3.5`}),` `,n.source===`photo`?`Close photo`:`Stop`]}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`button`,{type:`button`,onClick:()=>L(`camera`),disabled:N,className:`flex h-8 items-center gap-1 rounded-md bg-foreground px-3 text-xs font-medium text-background transition-colors hover:bg-foreground/90 disabled:opacity-50`,children:[(0,S.jsx)(i,{className:`h-3.5 w-3.5`}),` Camera`]}),(0,S.jsxs)(`button`,{type:`button`,onClick:()=>L(`screen`),disabled:N,className:`flex h-8 items-center gap-1 rounded-md bg-foreground px-3 text-xs font-medium text-background transition-colors hover:bg-foreground/90 disabled:opacity-50`,children:[(0,S.jsx)(o,{className:`h-3.5 w-3.5`}),` Desktop`]})]}),(0,S.jsx)(b,{consumer:`applet`,workspaceRef:A,contextPath:j,disabled:N,className:`flex h-8 items-center gap-1 rounded-md bg-foreground px-3 text-xs font-medium text-background transition-colors hover:bg-foreground/90 disabled:opacity-50`})]}),(0,S.jsxs)(`div`,{className:s(`relative shrink-0 overflow-hidden rounded-xl border border-border bg-black/80`,I?`aspect-[3/4] max-h-[60vh]`:`aspect-video max-h-80`),children:[M&&(0,S.jsx)(y,{className:`h-full w-full`,interactive:!0}),M&&(0,S.jsx)(g,{}),!M&&(0,S.jsxs)(`div`,{className:`absolute inset-0 flex items-center justify-center text-sm text-muted-foreground`,children:[(0,S.jsx)(r,{className:`mr-2 h-4 w-4`}),` camera off · or pick a photo`]})]}),M&&(0,S.jsx)(v,{className:`shrink-0`}),(0,S.jsx)(`div`,{className:`shrink-0 text-xs text-muted-foreground`,children:k?(0,S.jsx)(`span`,{className:`text-destructive`,children:k}):M?(0,S.jsxs)(S.Fragment,{children:[n.snapshot?`snapshot`:`live`,` · `,O==null?`searching…`:`${O} ms/frame`,` · `,P.length,` match`,P.length===1?``:`es`,j?` · scoped to ${j}`:``]}):N?`The Lens filter is using the camera. Stop it there first.`:`Frames are ephemeral: embedded for the query, never stored or indexed.`}),P.length===0?(0,S.jsx)(`div`,{className:`flex min-h-24 flex-1 items-center justify-center rounded-xl border border-dashed border-border text-sm text-muted-foreground`,children:M?n.snapshot?`Nothing similar in the snapshot`:`Nothing matching in view`:`Matches appear here`}):(0,S.jsx)(`div`,{className:`grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4`,children:P.map(e=>(0,S.jsx)(T,{workspaceRef:A,doc:e.doc,distance:e.distance,onOpen:e=>t.open(e,A)},e.doc.id))})]}):(0,S.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-center text-sm text-muted-foreground`,children:`Lens searches a workspace. Bind it to a workspace path to start.`})}export{E as LensApplet};
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{$n as r,Gr as i,Nr as a,Xt as o}from"./ui-CDoK3F3U.js";import{t as s}from"./utils-2pl1SbIp.js";import{An as c,Dn as l}from"./workspace-C5V-ZCOE.js";import{t as u}from"./useDocumentThumbnail-Cj4UYyhC.js";import{t as d}from"./DocumentIcon-9i1uCMQa.js";import{n as f}from"./use-document-modal-PG8bQyIB.js";import{n as p}from"./use-applet-target-BygCSj5n.js";import{D as m,E as h,S as g,T as _,b as v,w as y,x as b}from"./index-I9cslsRe.js";var x=e(n(),1),S=t(),C=`h-8 rounded-md border border-input bg-transparent px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring`,w=`h-8 rounded-md border border-input bg-transparent px-2 text-xs outline-none focus-visible:ring-1 focus-visible:ring-ring`;function T({workspaceRef:e,doc:t,distance:n,onOpen:r}){let i=c(t),{blobUrl:a}=u(e,t.id,256,{enabled:i}),o=l(t);return(0,S.jsxs)(`button`,{type:`button`,onClick:()=>r(t),title:`Open ${o.title}`,className:`rounded-(--card-radius) border border-border bg-card overflow-hidden flex flex-col text-left cursor-pointer transition-colors hover:border-foreground/30 hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:[(0,S.jsx)(`div`,{className:`aspect-square bg-muted/40 flex items-center justify-center overflow-hidden`,children:i&&a?(0,S.jsx)(`img`,{src:a,alt:o.title,className:`h-full w-full object-cover`}):(0,S.jsx)(d,{document:t,size:10})}),(0,S.jsxs)(`div`,{className:`p-2 min-w-0`,children:[(0,S.jsx)(`div`,{className:`text-xs font-medium truncate`,title:o.title,children:o.title}),(0,S.jsxs)(`div`,{className:`text-[10px] text-muted-foreground truncate`,children:[o.schemaLabel,n==null?``:` · d=${n.toFixed(3)}`]})]})]})}function E(){let e=p(),t=f(),n=h(),{rateMs:c,setRateMs:l,text:u,setText:d,maxDistance:E,setMaxDistance:D,latencyMs:O,error:k}=n,A=e?.mode===`workspace`?e.workspaceName:``,j=e?.mode===`workspace`&&e.path!==`/`?e.path:null,M=n.running&&n.consumer===`applet`,N=n.running&&n.consumer!==`applet`,P=M?n.hits:[];m(M);let F=M?n.snapshotSize??n.camera?.size:null,I=!!F&&F.height>F.width,L=e=>{A&&n.start(e,`applet`,{workspaceRef:A,contextPath:j})},{setContextPath:R}=n;return(0,x.useEffect)(()=>{M&&R(j)},[M,j,R]),e?.mode===`workspace`?(0,S.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-3 overflow-y-auto p-3`,children:[(0,S.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:[(0,S.jsx)(`select`,{className:C,value:c,onChange:e=>l(Number(e.target.value)),title:`Frame rate. High rates (10–30 fps) are experimental; the loop never overlaps requests, so the effective rate is capped by search latency.`,children:_.map(e=>(0,S.jsx)(`option`,{value:e.ms,children:e.label},e.ms))}),(0,S.jsx)(`input`,{className:s(w,`w-44`),placeholder:`Optional text (fused mode)`,value:u,onChange:e=>d(e.target.value)}),(0,S.jsx)(`input`,{className:s(w,`w-28`),placeholder:`max distance`,inputMode:`decimal`,value:E,onChange:e=>D(e.target.value),title:`Cosine-distance floor (0 = identical). Empty = top-K.`}),M?(0,S.jsxs)(`button`,{type:`button`,onClick:n.stop,className:`flex h-8 items-center gap-1 rounded-md bg-destructive px-3 text-xs font-medium text-destructive-foreground transition-colors hover:bg-destructive/90`,children:[(0,S.jsx)(a,{className:`h-3.5 w-3.5`}),` `,n.source===`photo`?`Close photo`:`Stop`]}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`button`,{type:`button`,onClick:()=>L(`camera`),disabled:N,className:`flex h-8 items-center gap-1 rounded-md bg-foreground px-3 text-xs font-medium text-background transition-colors hover:bg-foreground/90 disabled:opacity-50`,children:[(0,S.jsx)(i,{className:`h-3.5 w-3.5`}),` Camera`]}),(0,S.jsxs)(`button`,{type:`button`,onClick:()=>L(`screen`),disabled:N,className:`flex h-8 items-center gap-1 rounded-md bg-foreground px-3 text-xs font-medium text-background transition-colors hover:bg-foreground/90 disabled:opacity-50`,children:[(0,S.jsx)(o,{className:`h-3.5 w-3.5`}),` Desktop`]})]}),(0,S.jsx)(b,{consumer:`applet`,workspaceRef:A,contextPath:j,disabled:N,className:`flex h-8 items-center gap-1 rounded-md bg-foreground px-3 text-xs font-medium text-background transition-colors hover:bg-foreground/90 disabled:opacity-50`})]}),(0,S.jsxs)(`div`,{className:s(`relative shrink-0 overflow-hidden rounded-xl border border-border bg-black/80`,I?`aspect-[3/4] max-h-[60vh]`:`aspect-video max-h-80`),children:[M&&(0,S.jsx)(y,{className:`h-full w-full`,interactive:!0}),M&&(0,S.jsx)(g,{}),!M&&(0,S.jsxs)(`div`,{className:`absolute inset-0 flex items-center justify-center text-sm text-muted-foreground`,children:[(0,S.jsx)(r,{className:`mr-2 h-4 w-4`}),` camera off · or pick a photo`]})]}),M&&(0,S.jsx)(v,{className:`shrink-0`}),(0,S.jsx)(`div`,{className:`shrink-0 text-xs text-muted-foreground`,children:k?(0,S.jsx)(`span`,{className:`text-destructive`,children:k}):M?(0,S.jsxs)(S.Fragment,{children:[n.snapshot?`snapshot`:`live`,` · `,O==null?`searching…`:`${O} ms/frame`,` · `,P.length,` match`,P.length===1?``:`es`,j?` · scoped to ${j}`:``]}):N?`The Lens filter is using the camera. Stop it there first.`:`Frames are ephemeral: embedded for the query, never stored or indexed.`}),P.length===0?(0,S.jsx)(`div`,{className:`flex min-h-24 flex-1 items-center justify-center rounded-xl border border-dashed border-border text-sm text-muted-foreground`,children:M?n.snapshot?`Nothing similar in the snapshot`:`Nothing matching in view`:`Matches appear here`}):(0,S.jsx)(`div`,{className:`grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4`,children:P.map(e=>(0,S.jsx)(T,{workspaceRef:A,doc:e.doc,distance:e.distance,onOpen:e=>t.open(e,A)},e.doc.id))})]}):(0,S.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-center text-sm text-muted-foreground`,children:`Lens searches a workspace. Bind it to a workspace path to start.`})}export{E as LensApplet};
@@ -0,0 +1 @@
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{_t as r,yt as i}from"./react-BHzhHVTZ.js";import{Bn as a,L as o,Lt as s,Ur as ee,Vr as c,Wn as l,Zn as u,mt as d,qn as f,vn as p,wr as m,yt as h}from"./ui-CDoK3F3U.js";import{t as g}from"./utils-2pl1SbIp.js";import{t as _}from"./button-SeUZ_Pvi.js";import{Dn as v,G as te,Tt as y,W as b,X as x,jt as S,mt as C,nt as ne,pt as re,yn as ie}from"./workspace-C5V-ZCOE.js";import{t as w}from"./useEscapeClose-DR_xKT_k.js";import{t as ae}from"./useToastHelpers-CRrpIIdY.js";import{s as T}from"./layer-style-Byl5LNFR.js";import{i as E}from"./color-DFEH4BfK.js";import{t as oe}from"./DocumentIcon-9i1uCMQa.js";var D=e(n(),1),O=t();function k({className:e=`h-5 w-5`,...t}){return(0,O.jsxs)(`svg`,{className:`animate-spin ${e}`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,...t,children:[(0,O.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,O.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z`})]})}var A=e(i(),1);function j(e){let[t,n]=(0,D.useState)(null);(0,D.useEffect)(()=>{if(!e)return;let t=!1;return x(e).then(r=>{t||n({workspaceId:e,predicates:r,error:!1})},()=>{t||n({workspaceId:e,predicates:[],error:!0})}),()=>{t=!0}},[e]);let r=t?.workspaceId===e?t:null;return{predicates:r?.predicates??[],error:r?.error??!1,loading:!!e&&!r}}function M({x:e,y:t,onClose:n,className:r,children:i}){let a=(0,D.useRef)(null),[o,s]=(0,D.useState)({x:e,y:t});return w(n),(0,D.useLayoutEffect)(()=>{let n=a.current;if(!n)return;let{width:r,height:i}=n.getBoundingClientRect();s({x:Math.max(8,Math.min(e,window.innerWidth-r-8)),y:Math.max(8,Math.min(t,window.innerHeight-i-8))})},[e,t]),(0,A.createPortal)((0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`div`,{className:`fixed inset-0 z-menu-scrim`,onClick:n,onContextMenu:e=>{e.preventDefault(),n()}}),(0,O.jsx)(`div`,{ref:a,style:{left:o.x,top:o.y},className:g(`fixed z-menu max-h-viewport-modal overflow-y-auto`,r,`bg-popover text-popover-foreground`),children:i})]}),document.body)}var N=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.platform||navigator.userAgent),P={Delete:`Del`,Backspace:`⌫`,Enter:`↵`,ArrowUp:`↑`,ArrowDown:`↓`};function F(e){let t=e.split(`+`),n=t.pop()||``,r=P[n]||(n.length===1?n.toUpperCase():n);if(N){let e={Mod:`⌘`,Shift:`⇧`,Alt:`⌥`,Ctrl:`⌃`};return[...[`Ctrl`,`Alt`,`Shift`,`Mod`].filter(e=>t.includes(e)).map(t=>e[t]),r].join(``)}return[...t.map(e=>e===`Mod`?`Ctrl`:e),r].join(`+`)}function se(e,t){let n=t.split(`+`),r=n.pop()||``;return(N?e.metaKey:e.ctrlKey)!==n.includes(`Mod`)||e.shiftKey!==n.includes(`Shift`)||e.altKey!==n.includes(`Alt`)||N&&e.ctrlKey!==n.includes(`Ctrl`)?!1:r.length===1?e.key.toLowerCase()===r.toLowerCase():e.key===r}function I(e){if(e?.closest?.(`input, textarea, select, [contenteditable="true"], [role="dialog"], [role="menu"]`))return!0;let t=typeof window<`u`?window.getSelection():null;return!!t&&!t.isCollapsed&&t.toString().length>0}function L(e,t){if(e.defaultPrevented||e.nativeEvent.isComposing||I(e.target))return!1;let n=t.find(t=>t.shortcut&&!t.disabled&&se(e,t.shortcut));return n?(e.preventDefault(),e.stopPropagation(),n.run({shiftKey:e.shiftKey}),!0):!1}function R(e){return e.key===`ContextMenu`||e.key===`F10`&&e.shiftKey}function ce(){return typeof window<`u`&&window.matchMedia(`(max-width: 767px)`).matches}function z(e,t=`below`){let n=e.getBoundingClientRect();return t===`below`?{x:n.left,y:n.bottom+4}:{x:n.left+Math.min(24,n.width/2),y:n.top+Math.min(24,n.height/2)}}function B(e){let t=[];for(let n of e){let e=t[t.length-1];e&&(e[0].group??``)===(n.group??``)?e.push(n):t.push([n])}return t}function le(e,t,n){t(),setTimeout(()=>{e.run({shiftKey:n})},0)}function ue({anchor:e,items:t,onClose:n,label:r}){let i=(0,D.useRef)(null);return(0,D.useEffect)(()=>{let e=document.activeElement;return i.current?.querySelector(`[role="menuitem"]:not([aria-disabled="true"])`)?.focus(),()=>{e?.isConnected&&e.focus({preventScroll:!0})}},[]),(0,O.jsx)(M,{x:e.x,y:e.y,onClose:n,className:`min-w-[200px] rounded-lg border bg-popover text-popover-foreground py-1 shadow-elevation-3`,children:(0,O.jsx)(`div`,{ref:i,role:`menu`,"aria-label":r,onKeyDown:e=>{let t=Array.from(i.current?.querySelectorAll(`[role="menuitem"]:not([aria-disabled="true"])`)??[]);if(t.length===0)return;let r=t.indexOf(document.activeElement),a=e=>t[(e+t.length)%t.length]?.focus();switch(e.key){case`ArrowDown`:e.preventDefault(),a(r+1);return;case`ArrowUp`:e.preventDefault(),a(r<0?-1:r-1);return;case`Home`:e.preventDefault(),a(0);return;case`End`:e.preventDefault(),a(-1);return;case`Tab`:e.preventDefault(),n();return}if(e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let n=e.key.toLowerCase(),i=[...t.slice(r+1),...t.slice(0,r+1)].find(e=>e.textContent?.trim().toLowerCase().startsWith(n));i&&(e.preventDefault(),i.focus())}},onContextMenu:e=>e.preventDefault(),children:B(t).map((e,t)=>(0,O.jsxs)(D.Fragment,{children:[t>0&&(0,O.jsx)(`div`,{role:`separator`,className:`my-1 h-px bg-border`}),e[0].groupLabel&&(0,O.jsx)(`div`,{className:`px-3 py-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:e[0].groupLabel}),e.map(e=>{let t=e.icon;return(0,O.jsxs)(`button`,{type:`button`,role:`menuitem`,tabIndex:-1,"aria-disabled":e.disabled||void 0,title:e.hint,onClick:t=>{e.disabled||le(e,n,t.shiftKey)},className:g(`flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm outline-none`,e.disabled?`cursor-default opacity-50`:e.destructive?`text-destructive hover:bg-destructive hover:text-destructive-foreground focus:bg-destructive focus:text-destructive-foreground`:`hover:bg-muted focus:bg-muted`),children:[t?(0,O.jsx)(t,{className:`h-3.5 w-3.5 shrink-0`}):(0,O.jsx)(`span`,{className:`w-3.5 shrink-0`}),(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),e.shortcut&&(0,O.jsx)(`kbd`,{className:`ml-4 shrink-0 font-sans text-[11px] text-muted-foreground`,children:F(e.shortcut)})]},e.id)})]},`${e[0].group??``}:${t}`))})})}function V({items:e,onClose:t,header:n}){w(t);let r=`flex w-full items-center gap-3 rounded-xl border bg-card px-4 py-3.5 text-base font-medium transition-transform active:scale-[.98]`;return(0,A.createPortal)((0,O.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,className:`fixed inset-0 z-fullscreen flex flex-col bg-popover text-popover-foreground animate-in slide-in-from-bottom-10 fade-in duration-normal`,onClick:t,onContextMenu:e=>e.preventDefault(),children:[(0,O.jsxs)(`div`,{className:`flex shrink-0 items-start gap-3 border-b p-4`,onClick:e=>e.stopPropagation(),children:[(0,O.jsx)(`div`,{className:`min-w-0 flex-1`,children:n}),(0,O.jsx)(`button`,{type:`button`,onClick:t,className:`rounded-sm p-2 hover:bg-muted`,title:`Close`,"aria-label":`Close`,children:(0,O.jsx)(o,{className:`h-5 w-5`})})]}),(0,O.jsx)(`div`,{className:`min-h-4 flex-1`}),(0,O.jsxs)(`div`,{className:`max-h-[75vh] shrink-0 space-y-2 overflow-y-auto px-4 pt-2`,style:{paddingBottom:`calc(var(--safe-bottom) + 1.25rem)`},onClick:e=>e.stopPropagation(),children:[B(e).map((e,n)=>(0,O.jsxs)(`div`,{className:g(`space-y-2`,n>0&&`pt-2`),children:[e[0].groupLabel&&(0,O.jsx)(`div`,{className:`px-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground`,children:e[0].groupLabel}),e.map(e=>{let n=e.icon;return(0,O.jsxs)(`button`,{type:`button`,disabled:e.disabled,onClick:n=>le(e,t,n.shiftKey),className:g(r,e.destructive&&`border-destructive/30 text-destructive`,e.disabled&&`opacity-50`),children:[n&&(0,O.jsx)(n,{className:g(`h-5 w-5 shrink-0`,!e.destructive&&`text-muted-foreground`)}),e.label]},e.id)})]},`${e[0].group??``}:${n}`)),(0,O.jsx)(`button`,{type:`button`,onClick:t,className:`${r} justify-center bg-muted`,children:`Cancel`})]})]}),window.document.body)}function de({anchor:e,items:t,onClose:n,label:r,header:i}){return t.length===0?null:ce()?(0,O.jsx)(V,{items:t,onClose:n,header:i??(r&&(0,O.jsx)(`div`,{className:`truncate text-base font-semibold`,children:r}))}):(0,O.jsx)(ue,{anchor:e,items:t,onClose:n,label:r})}function H({items:e,onNavigate:t,disabled:n,className:r,label:i=`Tree path`}){let a=(0,D.useRef)(null),o=e[e.length-1]?.path;return(0,D.useEffect)(()=>{let e=a.current;e&&(e.scrollLeft=e.scrollWidth)},[o]),(0,O.jsx)(`nav`,{"aria-label":i,className:g(`min-w-0 flex-1`,r),children:(0,O.jsx)(`ol`,{ref:a,className:`flex min-w-0 items-center gap-1 overflow-x-auto py-0.5 text-sm`,children:e.map((r,i)=>{let a=i===e.length-1,o=g(`block max-w-56 truncate rounded px-1.5 py-1`,a?`font-medium text-foreground`:`text-muted-foreground`);return(0,O.jsxs)(`li`,{className:`flex shrink-0 items-center gap-1`,children:[i>0&&(0,O.jsx)(`span`,{"aria-hidden":`true`,className:`text-muted-foreground/60`,children:`/`}),t&&!a?(0,O.jsx)(`button`,{type:`button`,title:r.path===`/`?`${r.label} (root)`:r.path,disabled:n,onClick:()=>t(r.path),className:g(o,`hover:bg-accent hover:text-foreground hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50`),children:r.label}):(0,O.jsx)(`span`,{title:r.path===`/`?r.label:r.path,"aria-current":a?`location`:void 0,className:o,children:r.label})]},r.path)})})})}function U(e,t){let n=e.split(`/`).filter(Boolean);return[{label:t,path:`/`},...n.map((e,t)=>({label:e,path:`/${n.slice(0,t+1).join(`/`)}`}))]}var fe={context:(0,O.jsx)(l,{className:`h-3.5 w-3.5`}),directory:(0,O.jsx)(f,{className:`h-3.5 w-3.5`}),backends:(0,O.jsx)(a,{className:`h-3.5 w-3.5`}),relations:(0,O.jsx)(d,{className:`h-3.5 w-3.5`})},pe={context:`Context tree`,directory:`Directory tree`,backends:`Backends tree`,relations:`Relations`};function W(e,t){return e===`/`?`/${t}`:`${e}/${t}`}function me(e,t){let n=(0,D.useRef)(null),r=(0,D.useRef)(!1),i=()=>{n.current&&=(clearTimeout(n.current),null)},a=e=>t=>{if(r.current){r.current=!1;return}t.detail>1||e()};return t?{guardClick:a,handlers:{onContextMenu:n=>{n.preventDefault(),n.stopPropagation(),t({clientX:n.clientX,clientY:n.clientY,path:e})},onPointerDown:a=>{if(a.pointerType!==`touch`)return;let{clientX:o,clientY:s}=a;i(),n.current=setTimeout(()=>{r.current=!0,t({clientX:o,clientY:s,path:e})},500)},onPointerUp:i,onPointerLeave:i,onPointerMove:i}}:{handlers:{},guardClick:a}}function he(e,t,n){let r=W(t,e.name);return r.toLowerCase().includes(n)||(e.label||``).toLowerCase().includes(n)?!0:e.children?.some(e=>he(e,r,n))??!1}var G=200;function ge({onConfirm:e,onCancel:t,busy:n}){let[r,i]=(0,D.useState)(``);return(0,O.jsxs)(`div`,{className:`flex min-h-11 items-center gap-2 rounded-(--card-radius) bg-card px-3 py-2.5 text-sm shadow-elevation-1`,children:[(0,O.jsx)(m,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,O.jsx)(`input`,{type:`text`,value:r,onChange:e=>i(e.target.value),onKeyDown:n=>{n.key===`Enter`&&r.trim()&&e(r.trim()),n.key===`Escape`&&t()},onBlur:()=>{n||t()},placeholder:`New folder name…`,autoFocus:!0,disabled:n,className:`w-full flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground`}),n&&(0,O.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:`Creating…`})]})}function _e({node:e,parentPath:t,query:n,selected:i,onToggle:a,onActivate:o,onRowMenu:s,createParent:l,onCreateConfirm:u,onCreateCancel:d,creating:f}){let p=W(t,e.name),m=!!e.children?.length,[h,_]=(0,D.useState)(!1),{handlers:v,guardClick:te}=me(p,s);if(n&&!he(e,t,n))return null;let y=l===p,b=h||n.length>0||y,x=i.has(p),S=e.type===`canvas`,C=T(e);return(0,O.jsxs)(`div`,{children:[(0,O.jsxs)(`div`,{className:g(`group relative flex min-h-11 items-center gap-2 rounded-md px-3 py-2.5 cursor-pointer transition-all select-none text-sm shadow-elevation-1 hover:shadow`,`before:absolute before:left-0 before:top-0 before:bottom-0 before:w-1.5 before:transition-colors`,x?`bg-primary/[0.08] hover:bg-primary/[0.12] before:bg-primary`:`bg-card hover:bg-primary/[0.04] before:bg-transparent`),onClick:te(()=>a(p)),onDoubleClick:e=>{e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||e.target.closest(`button,input,textarea,select,a,[contenteditable="true"]`)||(e.preventDefault(),e.stopPropagation(),m?_(e=>!e):o?.(p))},title:p,...v,children:[(0,O.jsx)(`button`,{type:`button`,"aria-label":`${b?`Collapse`:`Expand`} ${e.label||e.name}`,"aria-expanded":m?b:void 0,disabled:!m,className:g(`shrink-0 text-muted-foreground hover:text-foreground`,!m&&`invisible`),onClick:e=>{e.stopPropagation(),e.detail<=1&&_(e=>!e)},children:b?(0,O.jsx)(ee,{className:`w-4 h-4`}):(0,O.jsx)(c,{className:`w-4 h-4`})}),(0,O.jsx)(r,{icon:C.icon||(S?`ph:squares-four-fill`:`ph:folder-fill`),width:16,height:16,color:E(C.color),className:g(`shrink-0`,!E(C.color)&&(S?`text-primary`:`text-muted-foreground`))}),(0,O.jsx)(`span`,{className:`flex-1 truncate font-medium`,title:e.description||void 0,children:e.label||e.name})]}),b&&m||y?(0,O.jsxs)(`div`,{className:`ml-[22px] mt-1.5 space-y-1.5`,children:[y&&u&&d&&(0,O.jsx)(ge,{busy:f,onConfirm:e=>{_(!0),u(p,e)},onCancel:d}),b&&e.children?.map(e=>(0,O.jsx)(_e,{node:e,parentPath:p,query:n,selected:i,onToggle:a,onActivate:o,onRowMenu:s,createParent:l,onCreateConfirm:u,onCreateCancel:d,creating:f},e.id||e.name))]}):null]})}function ve({workspaces:e,loading:t,onPick:n}){return t&&e.length===0?(0,O.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`Loading…`}):e.length===0?(0,O.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`No workspaces found`}):(0,O.jsx)(`div`,{className:`space-y-1.5`,children:e.map(e=>{let t=E(e.color);return(0,O.jsxs)(`div`,{onClick:()=>n(e.name),className:`group relative flex cursor-pointer items-center gap-2 rounded-(--card-radius) bg-card px-3 py-2.5 shadow-elevation-1 transition-all hover:bg-accent/50 hover:shadow`,style:{borderRight:`6px solid ${t||`transparent`}`},children:[(0,O.jsx)(r,{icon:e.icon||`ph:stack-fill`,width:18,height:18,color:t,className:g(`shrink-0`,!t&&`text-muted-foreground`)}),(0,O.jsx)(`span`,{className:`flex-1 truncate text-sm font-medium`,children:e.label||e.name}),(0,O.jsx)(c,{className:`h-4 w-4 shrink-0 text-muted-foreground`})]},e.id||e.name)})})}function ye({workspaceName:e,treeTab:t,onTreeTabChange:n,selectedDocIds:r,onToggleDoc:i,onNavigate:a,excludeDocumentIds:s}){let[l,u]=(0,D.useState)(`folder`),[d,f]=(0,D.useState)(``),p=d.trim().toLowerCase(),[m,_]=(0,D.useState)(`/`),[y,x]=(0,D.useState)(null),[S,C]=(0,D.useState)(!1),[re,w]=(0,D.useState)([]),[ae,T]=(0,D.useState)(!1),[E,k]=(0,D.useState)(``),[A,j]=(0,D.useState)(``),[M,N]=(0,D.useState)(t),P=n?t:M,F=e=>{_(`/`),u(`folder`),k(``),j(``),a?.(`/`),n?n(e):N(e)},[se,I]=(0,D.useState)(P);P!==se&&(I(P),_(`/`),u(`folder`)),(0,D.useEffect)(()=>{let e=setTimeout(()=>j(E.trim()),300);return()=>clearTimeout(e)},[E]),(0,D.useEffect)(()=>{let t=!1;async function n(){C(!0);try{let n=await b(e,P);t||x(n)}catch{t||x(null)}finally{t||C(!1)}}return n(),()=>{t=!0}},[e,P]),(0,D.useEffect)(()=>{if(l!==`documents`)return;let t=!1,n=P===`directory`?`directory`:ie,r=P===`context`?`context`:`directory`;async function i(){T(!0);try{let i=A?await ne(e,m,[],{treeName:n,treeType:r,q:A,limit:G}):await te(e,m,n,{limit:G});t||w(i.payload||[])}catch{t||w([])}finally{t||T(!1)}}return i(),()=>{t=!0}},[e,P,m,l,A]);let L=e=>{_(e),a?.(e)},R=s?.size?re.filter(e=>!s.has(e.id)):re;return l===`folder`?(0,O.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,O.jsxs)(`div`,{className:`shrink-0 space-y-2 border-b bg-muted/30 px-3 py-2`,children:[!n&&(0,O.jsx)(`div`,{className:`flex items-center gap-1 rounded-md border border-input p-0.5`,children:[`context`,`directory`].map(e=>(0,O.jsxs)(`button`,{type:`button`,onClick:()=>F(e),className:g(`flex flex-1 items-center justify-center gap-1.5 rounded px-2 py-1 text-xs transition-colors`,P===e?`bg-primary text-primary-foreground`:`text-muted-foreground hover:bg-muted hover:text-foreground`),title:`Browse the ${pe[e].toLowerCase()}`,children:[fe[e],(0,O.jsx)(`span`,{className:`font-mono`,children:e===`directory`?`dir://`:`ctx://`})]},e))}),(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,O.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Step 1 of 2 · Pick a folder`}),(0,O.jsxs)(`button`,{type:`button`,onClick:()=>u(`documents`),className:`inline-flex items-center gap-1 rounded-md bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground transition-opacity hover:opacity-90`,children:[`Next `,(0,O.jsx)(c,{className:`h-3.5 w-3.5`})]})]}),(0,O.jsx)(H,{items:U(m,e),onNavigate:L,label:`Folder path`}),(0,O.jsxs)(`div`,{className:`relative`,children:[(0,O.jsx)(h,{className:`pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,O.jsx)(`input`,{type:`text`,placeholder:`Filter folders…`,value:d,onChange:e=>f(e.target.value),className:`w-full rounded-md border border-input bg-background py-1.5 pl-8 pr-3 text-xs placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring`})]})]}),(0,O.jsx)(`div`,{className:`min-h-0 flex-1 space-y-1.5 overflow-y-auto p-3`,children:S?(0,O.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`Loading…`}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`div`,{className:g(`group relative flex min-h-11 items-center gap-2 rounded-md px-3 py-2.5 cursor-pointer transition-all select-none text-sm shadow-elevation-1 hover:shadow`,`before:absolute before:left-0 before:top-0 before:bottom-0 before:w-1.5 before:transition-colors`,m===`/`?`bg-primary/[0.08] hover:bg-primary/[0.12] before:bg-primary`:`bg-card hover:bg-primary/[0.04] before:bg-transparent`),onClick:()=>L(`/`),onDoubleClick:()=>{L(`/`),u(`documents`)},title:`/`,children:[(0,O.jsx)(ee,{className:`w-4 h-4 shrink-0 text-muted-foreground`}),(0,O.jsx)(`span`,{className:`flex-1 truncate font-medium`,children:`/`})]}),(0,O.jsx)(`div`,{className:`ml-[22px] space-y-1.5`,children:y?.children?.length?y.children.map(e=>(0,O.jsx)(_e,{node:e,parentPath:`/`,query:p,selected:new Set([m]),onToggle:L,onActivate:e=>{L(e),u(`documents`)}},e.id||e.name)):(0,O.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`Empty tree`})})]})})]}):(0,O.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,O.jsxs)(`div`,{className:`shrink-0 space-y-2 border-b bg-muted/30 px-3 py-2`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,O.jsxs)(`button`,{type:`button`,onClick:()=>u(`folder`),className:`inline-flex min-w-0 items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,title:`Back to folders`,children:[(0,O.jsx)(c,{className:`h-3.5 w-3.5 shrink-0 rotate-180`}),(0,O.jsx)(`span`,{children:`Folders`})]}),(0,O.jsx)(`span`,{className:`ml-auto shrink-0 text-xs text-muted-foreground`,children:`Step 2 of 2 · Pick a document`})]}),(0,O.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,O.jsxs)(`span`,{className:`shrink-0 font-mono text-xs text-muted-foreground`,children:[`[`,P,`]`]}),(0,O.jsx)(H,{items:U(m,e),onNavigate:L,label:`Document folder path`})]}),(0,O.jsxs)(`div`,{className:`relative`,children:[(0,O.jsx)(h,{className:`pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,O.jsx)(`input`,{type:`text`,placeholder:`Search documents in this folder…`,value:E,onChange:e=>k(e.target.value),className:`w-full rounded-md border border-input bg-background py-1.5 pl-8 pr-7 text-xs placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring`}),E&&(0,O.jsx)(`button`,{type:`button`,onClick:()=>k(``),className:`absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground`,"aria-label":`Clear document search`,children:(0,O.jsx)(o,{className:`h-3.5 w-3.5`})})]})]}),(0,O.jsx)(`div`,{className:`min-h-0 flex-1 space-y-1 overflow-y-auto p-3`,children:ae?(0,O.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`Loading documents…`}):R.length===0?(0,O.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:A?`No documents match “${A}” here.`:`No documents in this folder.`}):R.map(e=>{let t=v(e),n=r.has(e.id);return(0,O.jsxs)(`div`,{onClick:()=>i(e.id),className:g(`flex min-h-9 items-center gap-2 rounded-md px-3 py-1.5 cursor-pointer transition-all select-none text-sm`,n?`bg-primary/[0.08] hover:bg-primary/[0.12]`:`hover:bg-primary/[0.04]`),children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:n,onChange:()=>i(e.id),className:`shrink-0`,onClick:e=>e.stopPropagation()}),(0,O.jsx)(oe,{document:e,size:3.5}),(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:t.title})]},e.id)})})]})}function be({onClose:e,onConfirm:t,documentCount:n,fixedWorkspaceName:r,excludeWorkspace:i,multiple:a=!0,saving:l=!1,savingContent:d,sizeClassName:f,tabs:m=[`context`,`directory`],initialTab:v,title:te,confirmLabel:x,backendFolderCreation:ne,onConfirmRelation:T,relationWorkspaceName:E,relationPredicates:oe,relationExcludeIds:A}){let[M,N]=(0,D.useState)(r?`tree`:`workspace`),[P,F]=(0,D.useState)([]),[se,I]=(0,D.useState)(!r),[L,R]=(0,D.useState)(r??null),ce=v&&m.includes(v)?v:m.includes(`context`)||m.includes(`directory`)?`pins`:m[0]??`context`,[z,B]=(0,D.useState)(ce),le=j(m.includes(`relations`)&&!oe?E??L:null),V=oe??le.predicates,[de,H]=(0,D.useState)(``),U=V.includes(de)?de:V[0]??``,[W,he]=(0,D.useState)(`out`),[G,be]=(0,D.useState)(new Set),[xe,Se]=(0,D.useState)(null),[K,Ce]=(0,D.useState)(`context`),[we,Te]=(0,D.useState)(!1),Ee=z===`pins`?K:z;(0,D.useEffect)(()=>{if(!L)return;let e=!1;return y(L).then(t=>{e||Se(t)}).catch(()=>{e||Te(!0)}),()=>{e=!0}},[L]);let q=z===`relations`,[De,Oe]=(0,D.useState)(null),[ke,Ae]=(0,D.useState)(!1),[J,Y]=(0,D.useState)(new Set),[je,Me]=(0,D.useState)(``),Ne=je.trim().toLowerCase(),{showErrorToast:Pe}=ae(),[X,Fe]=(0,D.useState)(null),[Ie,Z]=(0,D.useState)(null),[Q,Le]=(0,D.useState)(!1);w(e,!l&&!Q);let Re=me(`/`,e=>Fe(e)),ze=e=>!l&&(z===`backends`?ne?.canCreate(e)===!0:z!==`pins`&&z!==`relations`),Be=async(e,t)=>{let n=t.trim().replace(/^\/+|\/+$/g,``);if(!(!n||!L||Q||!ze(e))){Le(!0);try{let t=`${e===`/`?``:e}/${n}`,r=z===`context`?ie:z;z===`backends`?await ne.create(e,n):await re(L,t,!0,r),C(L,r),window.dispatchEvent(new CustomEvent(`workspace:tree:refresh`,{detail:{workspaceName:L,treeName:r,cacheInvalidated:!0}}));let i=await b(L,z);Oe(i),Y(e=>a?new Set([...e,t]):new Set([t])),Me(``),Z(null)}catch(e){Pe(e instanceof Error?e.message:`Failed to create folder`)}finally{Le(!1)}}},[Ve,He]=(0,D.useState)(r);r!==Ve&&(He(r),r||I(!0)),(0,D.useEffect)(()=>{r||S().then(e=>F(e.filter(e=>e.id!==i&&e.name!==i))).catch(()=>F([])).finally(()=>I(!1))},[r,i]),(0,D.useEffect)(()=>{if(!L||z===`relations`||z===`pins`)return;let e=!1,t=0;async function n(n=!1){let r=++t;n||Ae(!0);try{let n=await b(L,z);!e&&r===t&&Oe(n)}catch{!e&&r===t&&!n&&Oe(null)}finally{!e&&r===t&&Ae(!1)}}let r=e=>{let t=e.detail;t?.workspaceName&&t.workspaceName!==L||t?.treeName&&t.treeName!==z||(t?.cacheInvalidated||C(L,z),n(!0))};return window.addEventListener(`workspace:tree:refresh`,r),n(),()=>{e=!0,window.removeEventListener(`workspace:tree:refresh`,r)}},[L,z]);let Ue=e=>{e!==L&&(Se(null),Te(!1)),B(ce),R(e),Y(new Set),be(new Set),N(`tree`)},We=e=>{be(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},Ge=e=>{if(!a){Y(new Set([e]));return}Y(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},Ke=q?!!U&&G.size>0&&!!T:J.size>0,qe=async()=>{if(!(!L||l||!Ke)){if(q){await T?.({predicate:U,direction:W,targetIds:Array.from(G)},{workspaceName:E??L});return}await t(Array.from(J),{workspaceName:L,treeName:Ee===`context`?ie:Ee,treeType:Ee===`context`?`context`:`directory`})}},$=n??1;return l&&d?(0,O.jsx)(`div`,{className:g(`flex flex-col overflow-hidden rounded-(--panel-radius) border bg-card shadow-elevation-4`,f||`h-viewport-card max-h-full w-[min(380px,90vw)] max-md:h-full max-md:w-full max-md:shadow-elevation-5`),children:d}):(0,O.jsxs)(`div`,{className:g(`flex flex-col overflow-hidden rounded-(--panel-radius) border bg-card shadow-elevation-4`,f||`h-viewport-card max-h-full w-[min(380px,90vw)] max-md:h-full max-md:w-full max-md:shadow-elevation-5`),children:[(0,O.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center justify-between border-b px-4`,children:[(0,O.jsxs)(`span`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,O.jsx)(p,{className:`h-4 w-4`}),te??(M===`workspace`?`Link to…`:q?`Relate ${$} document${$===1?``:`s`} to…`:`Link ${$} document${$===1?``:`s`} to…`)]}),(0,O.jsx)(`button`,{type:`button`,onClick:e,disabled:l||Q,className:`text-muted-foreground transition-colors hover:text-foreground disabled:opacity-40`,"aria-label":`Close`,children:(0,O.jsx)(o,{className:`h-4 w-4`})})]}),(0,O.jsx)(`div`,{className:`flex-1 overflow-hidden`,children:(0,O.jsxs)(`div`,{className:`grid h-full w-[200%] grid-cols-2 transition-transform duration-normal`,style:{transform:M===`workspace`?`translateX(0)`:`translateX(-50%)`},children:[(0,O.jsx)(`div`,{className:`flex min-w-0 flex-col overflow-y-auto p-2`,children:(0,O.jsx)(ve,{workspaces:P,loading:se,onPick:Ue})}),(0,O.jsxs)(`div`,{className:`flex min-w-0 flex-col overflow-hidden`,children:[(0,O.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 overflow-x-auto border-b px-2 pt-2`,children:[!r&&(0,O.jsx)(`button`,{type:`button`,disabled:Q,onClick:()=>N(`workspace`),className:`mr-1 rounded p-1.5 text-muted-foreground hover:bg-muted hover:text-foreground touch-target`,"aria-label":`Back to workspaces`,children:(0,O.jsx)(c,{className:`h-4 w-4 rotate-180`})}),(m.includes(`context`)||m.includes(`directory`))&&(0,O.jsxs)(`button`,{type:`button`,disabled:Q,onClick:()=>{B(`pins`),Y(new Set),Z(null)},className:g(`flex shrink-0 items-center gap-1.5 border-b-2 px-3 py-2 text-xs`,z===`pins`?`border-primary`:`border-transparent text-muted-foreground`),children:[(0,O.jsx)(s,{className:`h-3.5 w-3.5`}),`Pins`]}),m.map(e=>(0,O.jsxs)(`button`,{type:`button`,disabled:Q,onClick:()=>{B(e),Y(new Set),Z(null)},className:g(`flex shrink-0 items-center gap-1.5 rounded-t-md border-b-2 px-3 py-2 text-xs font-medium transition-colors`,z===e?`border-primary text-foreground`:`border-transparent text-muted-foreground hover:text-foreground`),children:[fe[e],pe[e]]},e))]}),!q&&(0,O.jsx)(`div`,{className:`shrink-0 border-b p-2`,children:(0,O.jsxs)(`div`,{className:`relative`,children:[(0,O.jsx)(h,{className:`pointer-events-none absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,O.jsx)(`input`,{type:`text`,placeholder:`Search paths…`,value:je,onChange:e=>Me(e.target.value),className:`w-full rounded-md border border-input bg-background py-2 pl-9 pr-3 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring`})]})}),q&&(0,O.jsxs)(`div`,{className:`shrink-0 space-y-2 border-b bg-primary/[0.04] px-3 py-2`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,O.jsx)(`label`,{htmlFor:`relation-predicate`,className:`shrink-0 text-xs text-muted-foreground`,children:`Predicate`}),(0,O.jsx)(`select`,{id:`relation-predicate`,value:U,onChange:e=>H(e.target.value),className:`min-w-0 flex-1 rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring`,children:V.map(e=>(0,O.jsx)(`option`,{value:e,children:e},e))})]}),(0,O.jsx)(`div`,{className:`flex items-center gap-1`,children:[{dir:`out`,label:`This → picked`,hint:`the ${$===1?`document`:`documents`} you started from ${U} the picked one(s)`},{dir:`in`,label:`Picked → this`,hint:`the picked document(s) ${U} the ${$===1?`one`:`ones`} you started from`}].map(({dir:e,label:t,hint:n})=>(0,O.jsx)(`button`,{type:`button`,title:n,onClick:()=>he(e),className:g(`flex-1 rounded-md border px-2 py-1.5 text-xs transition-colors`,W===e?`border-primary bg-primary text-primary-foreground`:`border-input hover:bg-accent`),children:t},e))})]}),!q&&a&&(0,O.jsxs)(`div`,{className:`flex h-10 shrink-0 items-center gap-1.5 overflow-x-auto border-b bg-primary/[0.04] px-3`,children:[!J.size&&(0,O.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Selected folders appear here`}),Array.from(J).map(e=>(0,O.jsxs)(`span`,{className:`inline-flex max-w-full shrink-0 items-center gap-1 rounded-full bg-primary px-2 py-0.5 text-xs text-primary-foreground`,children:[(0,O.jsx)(`span`,{className:`truncate`,title:e,children:e}),(0,O.jsx)(`button`,{type:`button`,onClick:()=>Ge(e),className:`shrink-0 rounded-full hover:bg-primary-foreground/20`,"aria-label":`Remove ${e}`,children:(0,O.jsx)(o,{className:`h-3 w-3`})})]},e))]}),q&&(E??L)&&(0,O.jsx)(ye,{workspaceName:E??L,treeTab:`context`,selectedDocIds:G,onToggleDoc:We,excludeDocumentIds:A}),z===`pins`&&(0,O.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-3 space-y-2`,children:[!xe&&!we&&(0,O.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading pins…`}),we&&(0,O.jsx)(`p`,{className:`text-xs text-destructive`,children:`Could not load pins. You can still browse the trees.`}),!we&&xe?.length===0&&(0,O.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No pinned paths yet. Choose a path from a tree.`}),xe?.filter(e=>e.resolvable!==!1&&m.includes(e.tree===`context`?`context`:e.tree)&&`${e.label??e.name??``} ${e.path}`.toLowerCase().includes(Ne)).map(e=>{let t=e.tree===`context`?`context`:e.tree;return(0,O.jsxs)(`button`,{type:`button`,"aria-pressed":K===t&&J.has(e.path),className:g(`w-full rounded-md border p-3 text-left text-sm hover:bg-muted`,K===t&&J.has(e.path)&&`border-primary bg-primary/10`),onClick:()=>{K===t?Ge(e.path):(Ce(t),Y(new Set([e.path])))},children:[(0,O.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,O.jsx)(s,{className:`h-3.5 w-3.5`}),e.label||e.name||e.path]}),(0,O.jsxs)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:[t,` · `,e.path]})]},e.id)})]}),(0,O.jsx)(`div`,{className:g(`min-h-0 flex-1 space-y-1.5 overflow-y-auto p-3`,(q||z===`pins`)&&`hidden`),children:ke?(0,O.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`Loading…`}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`div`,{className:g(`group relative flex min-h-11 items-center gap-2 rounded-md px-3 py-2.5 cursor-pointer transition-all select-none text-sm shadow-elevation-1 hover:shadow`,`before:absolute before:left-0 before:top-0 before:bottom-0 before:w-1.5 before:transition-colors`,J.has(`/`)?`bg-primary/[0.08] hover:bg-primary/[0.12] before:bg-primary`:`bg-card hover:bg-primary/[0.04] before:bg-transparent`),onClick:Re.guardClick(()=>Ge(`/`)),title:`/`,...ze(`/`)?Re.handlers:{},children:[(0,O.jsx)(ee,{className:`w-4 h-4 shrink-0 text-muted-foreground`}),(0,O.jsx)(`span`,{className:`flex-1 truncate font-medium`,children:`/`})]}),(0,O.jsxs)(`div`,{className:`ml-[22px] space-y-1.5`,children:[Ie===`/`&&(0,O.jsx)(ge,{busy:Q,onConfirm:e=>Be(`/`,e),onCancel:()=>Z(null)}),De?.children?.length?De.children.map(e=>(0,O.jsx)(_e,{node:e,parentPath:`/`,query:Ne,selected:J,onToggle:Ge,onRowMenu:e=>{ze(e.path)&&Fe(e)},createParent:Ie,onCreateConfirm:Be,onCreateCancel:()=>Z(null),creating:Q},e.id||e.name)):Ie===`/`?null:(0,O.jsx)(`p`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`Empty tree`})]})]})})]})]})}),M===`tree`&&(0,O.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between border-t px-4 py-3`,children:[(0,O.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:q?`${G.size} document${G.size===1?``:`s`} selected`:`${J.size} path${J.size===1?``:`s`} selected`}),(0,O.jsx)(_,{size:`sm`,onClick:qe,disabled:!Ke||l||Q,children:l?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(k,{className:`mr-1.5 h-3.5 w-3.5`}),q?`Relating…`:`Linking…`]}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(p,{className:`mr-1 h-3.5 w-3.5`}),q?`Relate`:x??`Link`]})})]}),X&&(0,O.jsx)(ue,{anchor:{x:X.clientX,y:X.clientY},onClose:()=>Fe(null),items:[{id:`new-folder`,label:`New folder in ${X.path}`,icon:u,run:()=>Z(X.path)}]})]})}export{k as _,pe as a,de as c,F as d,R as f,j as g,M as h,fe as i,z as l,se as m,ye as n,U as o,I as p,ve as r,H as s,be as t,L as u};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{Nt as r}from"./workspace-cv6Hrfhh.js";var i=e(n(),1),a=t(),o=[`Inbox sweep`,`Canvas edge notes`,`Release 2.7`];function s(){let[e,t]=(0,i.useState)(`none`),[n,s]=(0,i.useState)(null);(0,i.useEffect)(()=>{e===`workspaces`&&n===null&&r().then(s).catch(()=>s([]))},[e,n]);let c=e=>t(t=>t===e?`none`:e);return(0,a.jsxs)(`div`,{className:`next-shell`,children:[(0,a.jsx)(`div`,{className:`next-wallpaper`,"aria-hidden":!0,children:(0,a.jsx)(`i`,{})}),(0,a.jsxs)(`div`,{className:`relative flex h-full flex-col items-center justify-center gap-3 select-none`,children:[(0,a.jsx)(`p`,{className:`text-2xl font-light tracking-wide text-white/80`,children:`Canvas`}),(0,a.jsx)(`p`,{className:`text-sm text-white/40`,children:`say something, or tap the orb. Swipe up for canvases (soon)`})]}),e===`tasks`&&(0,a.jsxs)(`div`,{className:`next-glass absolute bottom-24 left-6 w-64 rounded-2xl p-3`,children:[(0,a.jsx)(`p`,{className:`px-2 pb-2 text-[11px] uppercase tracking-widest text-white/40`,children:`Pinned`}),(0,a.jsx)(`div`,{className:`flex flex-col gap-1`,children:o.map(e=>(0,a.jsx)(`button`,{type:`button`,className:`rounded-xl px-3 py-2 text-left text-sm text-white/85 transition-colors hover:bg-white/10`,children:e},e))})]}),e===`workspaces`&&(0,a.jsxs)(`div`,{className:`next-glass absolute bottom-24 right-6 w-72 rounded-2xl p-3`,children:[(0,a.jsx)(`p`,{className:`px-2 pb-2 text-[11px] uppercase tracking-widest text-white/40`,children:`Workspaces`}),(0,a.jsxs)(`div`,{className:`flex max-h-80 flex-col gap-1 overflow-y-auto`,children:[n===null&&(0,a.jsx)(`p`,{className:`px-3 py-2 text-sm text-white/50`,children:`Loading…`}),n?.map(e=>(0,a.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2.5 rounded-xl px-3 py-2 text-left text-sm text-white/85 transition-colors hover:bg-white/10`,children:[(0,a.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 rounded-full`,style:{backgroundColor:e.color||`rgb(255 255 255 / 0.35)`}}),(0,a.jsx)(`span`,{className:`truncate`,children:e.label||e.name})]},e.id)),n?.length===0&&(0,a.jsx)(`p`,{className:`px-3 py-2 text-sm text-white/50`,children:`No workspaces`})]})]}),(0,a.jsxs)(`div`,{className:`absolute bottom-6 right-6 flex items-center gap-3`,children:[e!==`none`&&(0,a.jsx)(`button`,{type:`button`,onClick:()=>c(e===`tasks`?`workspaces`:`tasks`),className:`next-glass rounded-full px-4 py-2 text-xs text-white/70`,children:e===`tasks`?`workspaces`:`pinned`}),(0,a.jsx)(`button`,{type:`button`,onClick:()=>c(`tasks`),"aria-label":`Toolbox`,className:`next-orb flex h-14 w-14 items-center justify-center rounded-full`,children:(0,a.jsx)(`span`,{className:`h-3 w-3 rounded-full bg-white/85`})})]})]})}export{s as default};
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{jt as r}from"./workspace-C5V-ZCOE.js";var i=e(n(),1),a=t(),o=[`Inbox sweep`,`Canvas edge notes`,`Release 2.7`];function s(){let[e,t]=(0,i.useState)(`none`),[n,s]=(0,i.useState)(null);(0,i.useEffect)(()=>{e===`workspaces`&&n===null&&r().then(s).catch(()=>s([]))},[e,n]);let c=e=>t(t=>t===e?`none`:e);return(0,a.jsxs)(`div`,{className:`next-shell`,children:[(0,a.jsx)(`div`,{className:`next-wallpaper`,"aria-hidden":!0,children:(0,a.jsx)(`i`,{})}),(0,a.jsxs)(`div`,{className:`relative flex h-full flex-col items-center justify-center gap-3 select-none`,children:[(0,a.jsx)(`p`,{className:`text-2xl font-light tracking-wide text-white/80`,children:`Canvas`}),(0,a.jsx)(`p`,{className:`text-sm text-white/40`,children:`say something, or tap the orb. Swipe up for canvases (soon)`})]}),e===`tasks`&&(0,a.jsxs)(`div`,{className:`next-glass absolute bottom-24 left-6 w-64 rounded-2xl p-3`,children:[(0,a.jsx)(`p`,{className:`px-2 pb-2 text-[11px] uppercase tracking-widest text-white/40`,children:`Pinned`}),(0,a.jsx)(`div`,{className:`flex flex-col gap-1`,children:o.map(e=>(0,a.jsx)(`button`,{type:`button`,className:`rounded-xl px-3 py-2 text-left text-sm text-white/85 transition-colors hover:bg-white/10`,children:e},e))})]}),e===`workspaces`&&(0,a.jsxs)(`div`,{className:`next-glass absolute bottom-24 right-6 w-72 rounded-2xl p-3`,children:[(0,a.jsx)(`p`,{className:`px-2 pb-2 text-[11px] uppercase tracking-widest text-white/40`,children:`Workspaces`}),(0,a.jsxs)(`div`,{className:`flex max-h-80 flex-col gap-1 overflow-y-auto`,children:[n===null&&(0,a.jsx)(`p`,{className:`px-3 py-2 text-sm text-white/50`,children:`Loading…`}),n?.map(e=>(0,a.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2.5 rounded-xl px-3 py-2 text-left text-sm text-white/85 transition-colors hover:bg-white/10`,children:[(0,a.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 rounded-full`,style:{backgroundColor:e.color||`rgb(255 255 255 / 0.35)`}}),(0,a.jsx)(`span`,{className:`truncate`,children:e.label||e.name})]},e.id)),n?.length===0&&(0,a.jsx)(`p`,{className:`px-3 py-2 text-sm text-white/50`,children:`No workspaces`})]})]}),(0,a.jsxs)(`div`,{className:`absolute bottom-6 right-6 flex items-center gap-3`,children:[e!==`none`&&(0,a.jsx)(`button`,{type:`button`,onClick:()=>c(e===`tasks`?`workspaces`:`tasks`),className:`next-glass rounded-full px-4 py-2 text-xs text-white/70`,children:e===`tasks`?`workspaces`:`pinned`}),(0,a.jsx)(`button`,{type:`button`,onClick:()=>c(`tasks`),"aria-label":`Toolbox`,className:`next-orb flex h-14 w-14 items-center justify-center rounded-full`,children:(0,a.jsx)(`span`,{className:`h-3 w-3 rounded-full bg-white/85`})})]})]})}export{s as default};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{L as r,Pt as i,hi as a,li as o,pn as s,yt as c}from"./ui-CDoK3F3U.js";import{t as l}from"./utils-2pl1SbIp.js";import{Bn as u}from"./workspace-cv6Hrfhh.js";import{t as d}from"./useAddTarget-BEgKjqGj.js";import{t as f}from"./note-save-status-DPz4VzL6.js";import{t as p}from"./useEditNoteFields-HAsbBak7.js";import{n as m}from"./use-applet-target-1DU4mgJH.js";import{A as h}from"./index-CXPA9Fj8.js";import{n as g,r as _,t as v}from"./shared-XYVtCrC8.js";import{n as y,r as b}from"./use-applet-docs-FqhvvOWx.js";var x=e(n(),1),S=t();function C({doc:e,updateWorkspace:t,registerEl:n,registerBody:r,highlighted:i,onLinkTo:a,onDelete:o}){let s=p(e,t||``,!!t),{title:c,content:u,setTitle:d,setContent:m}=s,h=()=>{s.save().catch(()=>{})};return(0,S.jsxs)(`div`,{ref:t=>n(e.id,t),className:l(`group border-t border-border/60 px-4 py-3 transition-colors`,i&&`bg-primary/5`),children:[(0,S.jsxs)(`div`,{className:`mb-1 flex items-baseline justify-between gap-2`,children:[(0,S.jsxs)(`span`,{className:`text-[10px] uppercase tracking-wide text-muted-foreground/70`,children:[y(e.createdAt),` · #`,e.id]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-1 text-[10px] text-muted-foreground/70`,children:[(0,S.jsx)(f,{...s,onRetry:s.save}),(0,S.jsx)(g,{onLinkTo:a,onDelete:o})]})]}),(0,S.jsx)(`input`,{value:c,onChange:e=>d(e.target.value),onBlur:h,placeholder:`Untitled`,spellCheck:!1,className:`mb-1 w-full border-0 bg-transparent p-0 text-sm font-semibold text-foreground outline-none placeholder:text-muted-foreground/50`}),(0,S.jsx)(v,{value:u,onChange:m,onBlur:h,innerRef:t=>r(e.id,t)})]})}function w({target:e,onCreated:t,onCancel:n}){let i=h(e,void 0,`applet`),{title:a,content:o,setTitle:s,setContent:c,saving:l}=i,[u,d]=(0,x.useState)(null),p=async()=>{try{await i.save(e),i.finish(),t()}catch(e){d(e instanceof Error?e.message:`Failed to save note`)}};return(0,S.jsxs)(`div`,{className:`border-t border-border/60 bg-muted/30 px-4 py-3`,children:[(0,S.jsxs)(`div`,{className:`mb-1 flex items-baseline justify-between`,children:[(0,S.jsx)(`span`,{className:`text-[10px] uppercase tracking-wide text-muted-foreground/70`,children:`New note`}),(0,S.jsx)(`button`,{type:`button`,onClick:n,className:`text-muted-foreground hover:text-foreground`,"aria-label":`Close note`,children:(0,S.jsx)(r,{className:`h-3 w-3`})})]}),(0,S.jsx)(`input`,{value:a,onChange:e=>s(e.target.value),placeholder:`Untitled`,autoFocus:!0,spellCheck:!1,className:`mb-1 w-full border-0 bg-transparent p-0 text-sm font-semibold text-foreground outline-none placeholder:text-muted-foreground/50`}),(0,S.jsx)(v,{value:o,onChange:c,placeholder:`Write your note…`}),(0,S.jsx)(f,{...i,onRetry:i.retry}),u&&(0,S.jsx)(`p`,{className:`mt-1 text-xs text-destructive`,children:u}),(0,S.jsx)(`div`,{className:`mt-2 flex justify-end`,children:(0,S.jsx)(`button`,{type:`button`,onClick:p,disabled:!o.trim()||l,className:`rounded-md bg-primary px-2.5 py-1 text-xs text-primary-foreground disabled:opacity-50`,children:l?`Saving…`:`Done`})})]})}function T({autoAdd:e=!1}){let t=m(),{docs:n,loading:r,error:l,scope:f,reload:p,removeDoc:h}=b(t,u),[g,v]=(0,x.useState)(``),[y,T]=(0,x.useState)(0),[E,D]=(0,x.useState)(`desc`),[O,k]=(0,x.useState)(e),[A,j]=(0,x.useState)(null),M=(0,x.useRef)(new Map),N=(0,x.useRef)(new Map),P=(0,x.useCallback)((e,t)=>{t?M.current.set(e,t):M.current.delete(e)},[]),F=(0,x.useCallback)((e,t)=>{t?N.current.set(e,t):N.current.delete(e)},[]),I=(0,x.useCallback)(async e=>{let t=e.data?.title?`"${e.data.title}"`:`#${e.id}`;if(window.confirm(`Delete note ${t}?\n\nIt is removed from this path and moves to the workspace trash if nothing else links it.`))try{await h(e.id)}catch{}},[h]),L=(0,x.useMemo)(()=>{let e=[...n];return e.sort((e,t)=>{let n=new Date(e.createdAt).getTime()-new Date(t.createdAt).getTime();return E===`asc`?n:-n}),e},[n,E]),R=(0,x.useMemo)(()=>{let e=g.trim().toLowerCase();if(!e)return[];let t=[];for(let n of L){let r=String(n.data?.content??``),i=String(n.data?.title??``),a=r.toLowerCase().indexOf(e);a>=0?t.push({docId:n.id,offset:a}):i.toLowerCase().includes(e)&&t.push({docId:n.id,offset:-1})}return t},[g,L]),z=R.length?R[Math.min(y,R.length-1)]:null;(0,x.useEffect)(()=>{z&&M.current.get(z.docId)?.scrollIntoView({block:`center`,behavior:`smooth`})},[z]);let B=(0,x.useCallback)(e=>{if(!R.length)return;let t=e?(y+1)%R.length:y;e&&T(t);let n=R[t],r=N.current.get(n.docId);r&&n.offset>=0&&(r.focus(),r.setSelectionRange(n.offset,n.offset+g.trim().length)),M.current.get(n.docId)?.scrollIntoView({block:`center`,behavior:`smooth`})},[R,y,g]);return t?(0,S.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,S.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-border px-3 py-2`,children:[(0,S.jsxs)(`div`,{className:`relative flex-1`,children:[(0,S.jsx)(c,{className:`pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,S.jsx)(`input`,{value:g,onChange:e=>{v(e.target.value),T(0)},onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),B(!0))},placeholder:`Search notes…`,spellCheck:!1,className:`w-full rounded-md border border-input bg-transparent py-1 pl-7 pr-14 text-xs outline-none placeholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring`}),g.trim()&&(0,S.jsx)(`span`,{className:`absolute right-2 top-1/2 -translate-y-1/2 text-[10px] tabular-nums text-muted-foreground`,children:R.length?`${Math.min(y+1,R.length)}/${R.length}`:`0/0`})]}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>D(e=>e===`desc`?`asc`:`desc`),className:`rounded-md border border-border p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,title:E===`desc`?`Newest first (click for oldest first)`:`Oldest first (click for newest first)`,"aria-label":`Toggle sort order`,children:E===`desc`?(0,S.jsx)(a,{className:`h-3.5 w-3.5`}):(0,S.jsx)(o,{className:`h-3.5 w-3.5`})}),(0,S.jsxs)(`button`,{type:`button`,onClick:()=>k(!0),className:`flex items-center gap-1 rounded-md bg-primary px-2 py-1.5 text-xs text-primary-foreground`,title:`Add a note`,children:[(0,S.jsx)(i,{className:`h-3.5 w-3.5`}),`Note`]})]}),(0,S.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[O&&(0,S.jsx)(w,{target:t,onCreated:()=>{k(!1),p()},onCancel:()=>k(!1)},JSON.stringify(t)),r&&!n.length&&(0,S.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,S.jsx)(s,{className:`h-5 w-5 animate-spin text-muted-foreground`})}),l&&(0,S.jsx)(`p`,{className:`px-4 py-6 text-center text-sm text-destructive`,children:l}),!r&&!l&&!L.length&&!O&&(0,S.jsx)(`p`,{className:`px-4 py-10 text-center text-sm text-muted-foreground`,children:`No notes here yet - add the first one.`}),L.map(e=>(0,S.jsx)(C,{doc:e,updateWorkspace:f?.workspaceName??null,registerEl:P,registerBody:F,highlighted:z?.docId===e.id,onLinkTo:()=>j(e.id),onDelete:()=>I(e)},e.id))]}),A!==null&&(0,S.jsx)(_,{documentId:A,workspaceName:f?.workspaceName,onClose:()=>j(null)})]}):(0,S.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-center text-sm text-muted-foreground`,children:d(t)})}export{T as NotesApplet};
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{l as t,u as n}from"./code-editor-BOIngd5F.js";import{L as r,Pt as i,hi as a,li as o,pn as s,yt as c}from"./ui-CDoK3F3U.js";import{t as l}from"./utils-2pl1SbIp.js";import{Ln as u}from"./workspace-C5V-ZCOE.js";import{t as d}from"./useAddTarget-DeRZWtGg.js";import{t as f}from"./note-save-status-DPz4VzL6.js";import{t as p}from"./useEditNoteFields-BT1ASu_q.js";import{n as m}from"./use-applet-target-BygCSj5n.js";import{A as h}from"./index-I9cslsRe.js";import{n as g,r as _,t as v}from"./shared-BLOuO2Is.js";import{n as y,r as b}from"./use-applet-docs-rimRHjID.js";var x=e(n(),1),S=t();function C({doc:e,updateWorkspace:t,registerEl:n,registerBody:r,highlighted:i,onLinkTo:a,onDelete:o}){let s=p(e,t||``,!!t),{title:c,content:u,setTitle:d,setContent:m}=s,h=()=>{s.save().catch(()=>{})};return(0,S.jsxs)(`div`,{ref:t=>n(e.id,t),className:l(`group border-t border-border/60 px-4 py-3 transition-colors`,i&&`bg-primary/5`),children:[(0,S.jsxs)(`div`,{className:`mb-1 flex items-baseline justify-between gap-2`,children:[(0,S.jsxs)(`span`,{className:`text-[10px] uppercase tracking-wide text-muted-foreground/70`,children:[y(e.createdAt),` · #`,e.id]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-1 text-[10px] text-muted-foreground/70`,children:[(0,S.jsx)(f,{...s,onRetry:s.save}),(0,S.jsx)(g,{onLinkTo:a,onDelete:o})]})]}),(0,S.jsx)(`input`,{value:c,onChange:e=>d(e.target.value),onBlur:h,placeholder:`Untitled`,spellCheck:!1,className:`mb-1 w-full border-0 bg-transparent p-0 text-sm font-semibold text-foreground outline-none placeholder:text-muted-foreground/50`}),(0,S.jsx)(v,{value:u,onChange:m,onBlur:h,innerRef:t=>r(e.id,t)})]})}function w({target:e,onCreated:t,onCancel:n}){let i=h(e,void 0,`applet`),{title:a,content:o,setTitle:s,setContent:c,saving:l}=i,[u,d]=(0,x.useState)(null),p=async()=>{try{await i.save(e),i.finish(),t()}catch(e){d(e instanceof Error?e.message:`Failed to save note`)}};return(0,S.jsxs)(`div`,{className:`border-t border-border/60 bg-muted/30 px-4 py-3`,children:[(0,S.jsxs)(`div`,{className:`mb-1 flex items-baseline justify-between`,children:[(0,S.jsx)(`span`,{className:`text-[10px] uppercase tracking-wide text-muted-foreground/70`,children:`New note`}),(0,S.jsx)(`button`,{type:`button`,onClick:n,className:`text-muted-foreground hover:text-foreground`,"aria-label":`Close note`,children:(0,S.jsx)(r,{className:`h-3 w-3`})})]}),(0,S.jsx)(`input`,{value:a,onChange:e=>s(e.target.value),placeholder:`Untitled`,autoFocus:!0,spellCheck:!1,className:`mb-1 w-full border-0 bg-transparent p-0 text-sm font-semibold text-foreground outline-none placeholder:text-muted-foreground/50`}),(0,S.jsx)(v,{value:o,onChange:c,placeholder:`Write your note…`}),(0,S.jsx)(f,{...i,onRetry:i.retry}),u&&(0,S.jsx)(`p`,{className:`mt-1 text-xs text-destructive`,children:u}),(0,S.jsx)(`div`,{className:`mt-2 flex justify-end`,children:(0,S.jsx)(`button`,{type:`button`,onClick:p,disabled:!o.trim()||l,className:`rounded-md bg-primary px-2.5 py-1 text-xs text-primary-foreground disabled:opacity-50`,children:l?`Saving…`:`Done`})})]})}function T({autoAdd:e=!1}){let t=m(),{docs:n,loading:r,error:l,scope:f,reload:p,removeDoc:h}=b(t,u),[g,v]=(0,x.useState)(``),[y,T]=(0,x.useState)(0),[E,D]=(0,x.useState)(`desc`),[O,k]=(0,x.useState)(e),[A,j]=(0,x.useState)(null),M=(0,x.useRef)(new Map),N=(0,x.useRef)(new Map),P=(0,x.useCallback)((e,t)=>{t?M.current.set(e,t):M.current.delete(e)},[]),F=(0,x.useCallback)((e,t)=>{t?N.current.set(e,t):N.current.delete(e)},[]),I=(0,x.useCallback)(async e=>{let t=e.data?.title?`"${e.data.title}"`:`#${e.id}`;if(window.confirm(`Delete note ${t}?\n\nIt is removed from this path and moves to the workspace trash if nothing else links it.`))try{await h(e.id)}catch{}},[h]),L=(0,x.useMemo)(()=>{let e=[...n];return e.sort((e,t)=>{let n=new Date(e.createdAt).getTime()-new Date(t.createdAt).getTime();return E===`asc`?n:-n}),e},[n,E]),R=(0,x.useMemo)(()=>{let e=g.trim().toLowerCase();if(!e)return[];let t=[];for(let n of L){let r=String(n.data?.content??``),i=String(n.data?.title??``),a=r.toLowerCase().indexOf(e);a>=0?t.push({docId:n.id,offset:a}):i.toLowerCase().includes(e)&&t.push({docId:n.id,offset:-1})}return t},[g,L]),z=R.length?R[Math.min(y,R.length-1)]:null;(0,x.useEffect)(()=>{z&&M.current.get(z.docId)?.scrollIntoView({block:`center`,behavior:`smooth`})},[z]);let B=(0,x.useCallback)(e=>{if(!R.length)return;let t=e?(y+1)%R.length:y;e&&T(t);let n=R[t],r=N.current.get(n.docId);r&&n.offset>=0&&(r.focus(),r.setSelectionRange(n.offset,n.offset+g.trim().length)),M.current.get(n.docId)?.scrollIntoView({block:`center`,behavior:`smooth`})},[R,y,g]);return t?(0,S.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,S.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-border px-3 py-2`,children:[(0,S.jsxs)(`div`,{className:`relative flex-1`,children:[(0,S.jsx)(c,{className:`pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,S.jsx)(`input`,{value:g,onChange:e=>{v(e.target.value),T(0)},onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),B(!0))},placeholder:`Search notes…`,spellCheck:!1,className:`w-full rounded-md border border-input bg-transparent py-1 pl-7 pr-14 text-xs outline-none placeholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring`}),g.trim()&&(0,S.jsx)(`span`,{className:`absolute right-2 top-1/2 -translate-y-1/2 text-[10px] tabular-nums text-muted-foreground`,children:R.length?`${Math.min(y+1,R.length)}/${R.length}`:`0/0`})]}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>D(e=>e===`desc`?`asc`:`desc`),className:`rounded-md border border-border p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,title:E===`desc`?`Newest first (click for oldest first)`:`Oldest first (click for newest first)`,"aria-label":`Toggle sort order`,children:E===`desc`?(0,S.jsx)(a,{className:`h-3.5 w-3.5`}):(0,S.jsx)(o,{className:`h-3.5 w-3.5`})}),(0,S.jsxs)(`button`,{type:`button`,onClick:()=>k(!0),className:`flex items-center gap-1 rounded-md bg-primary px-2 py-1.5 text-xs text-primary-foreground`,title:`Add a note`,children:[(0,S.jsx)(i,{className:`h-3.5 w-3.5`}),`Note`]})]}),(0,S.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[O&&(0,S.jsx)(w,{target:t,onCreated:()=>{k(!1),p()},onCancel:()=>k(!1)},JSON.stringify(t)),r&&!n.length&&(0,S.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,S.jsx)(s,{className:`h-5 w-5 animate-spin text-muted-foreground`})}),l&&(0,S.jsx)(`p`,{className:`px-4 py-6 text-center text-sm text-destructive`,children:l}),!r&&!l&&!L.length&&!O&&(0,S.jsx)(`p`,{className:`px-4 py-10 text-center text-sm text-muted-foreground`,children:`No notes here yet - add the first one.`}),L.map(e=>(0,S.jsx)(C,{doc:e,updateWorkspace:f?.workspaceName??null,registerEl:P,registerBody:F,highlighted:z?.docId===e.id,onLinkTo:()=>j(e.id),onDelete:()=>I(e)},e.id))]}),A!==null&&(0,S.jsx)(_,{documentId:A,workspaceName:f?.workspaceName,onClose:()=>j(null)})]}):(0,S.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-center text-sm text-muted-foreground`,children:d(t)})}export{T as NotesApplet};