react-semaphor 0.1.259 → 0.1.261

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 (46) hide show
  1. package/dist/chunks/dashboard-controls-0hbftZxY.js +42 -0
  2. package/dist/chunks/dashboard-controls-BYi_r2lH.js +1971 -0
  3. package/dist/chunks/dashboard-filter-controls-button-BPCw1GMh.js +1066 -0
  4. package/dist/chunks/dashboard-filter-controls-button-f4pDkDUL.js +11 -0
  5. package/dist/chunks/{dashboard-json-B43n1l6C.js → dashboard-json-2NJCXsDD.js} +1 -1
  6. package/dist/chunks/{dashboard-json-D0oSxmLa.js → dashboard-json-Dpy-zKf2.js} +1 -1
  7. package/dist/chunks/{dashboard-summary-settings-dialog-CxZAMb8B.js → dashboard-summary-settings-dialog-B9zRCvc-.js} +1 -1
  8. package/dist/chunks/{dashboard-summary-settings-dialog-DMWYgbwB.js → dashboard-summary-settings-dialog-Be3JilRI.js} +1 -1
  9. package/dist/chunks/edit-dashboard-visual-Bon08erH.js +188 -0
  10. package/dist/chunks/{edit-dashboard-visual-CCoz1oGX.js → edit-dashboard-visual-CqTlmuYL.js} +5970 -5492
  11. package/dist/chunks/index-BoJEr_9F.js +1114 -0
  12. package/dist/chunks/{index-DpSxZvI0.js → index-C2c-_lPE.js} +48682 -45193
  13. package/dist/chunks/{normalize-dashboard-for-dirty-check-Bn27S0PN.js → normalize-dashboard-for-dirty-check-5KpZN8xr.js} +20 -19
  14. package/dist/chunks/normalize-dashboard-for-dirty-check-BXRUMVb2.js +1 -0
  15. package/dist/chunks/{resource-management-panel-L51m1i4h.js → resource-management-panel-BtLPW2b4.js} +1 -1
  16. package/dist/chunks/{resource-management-panel-B_bDGuq_.js → resource-management-panel-Bva2_0OU.js} +70 -70
  17. package/dist/chunks/use-create-flow-overlay-state-9X7GyUzl.js +21 -0
  18. package/dist/chunks/use-create-flow-overlay-state-Vyd5mSnf.js +1445 -0
  19. package/dist/chunks/{use-visual-utils-V6paZich.js → use-visual-utils-Jv4hWSLm.js} +1 -1
  20. package/dist/chunks/{use-visual-utils-Cp5KVbr6.js → use-visual-utils-OPk_1t4I.js} +1 -1
  21. package/dist/dashboard/index.cjs +1 -1
  22. package/dist/dashboard/index.js +5 -4
  23. package/dist/index.cjs +1 -1
  24. package/dist/index.js +102 -99
  25. package/dist/shared/index.cjs +1 -1
  26. package/dist/shared/index.js +1 -1
  27. package/dist/style.css +1 -1
  28. package/dist/surfboard/index.cjs +1 -1
  29. package/dist/surfboard/index.js +5 -4
  30. package/dist/types/dashboard.d.ts +105 -0
  31. package/dist/types/index.cjs +1 -1
  32. package/dist/types/index.js +4 -3
  33. package/dist/types/main.d.ts +175 -1
  34. package/dist/types/shared.d.ts +89 -0
  35. package/dist/types/surfboard.d.ts +105 -0
  36. package/dist/types/types.d.ts +113 -0
  37. package/package.json +1 -1
  38. package/dist/chunks/dashboard-controls-51P6aUVB.js +0 -1847
  39. package/dist/chunks/dashboard-controls-BC3hDGwD.js +0 -47
  40. package/dist/chunks/edit-dashboard-visual-D1mwhPGF.js +0 -193
  41. package/dist/chunks/editor-action-buttons-B6ElCCo2.js +0 -412
  42. package/dist/chunks/editor-action-buttons-Dbs6eczj.js +0 -21
  43. package/dist/chunks/index-DAhkssOV.js +0 -1109
  44. package/dist/chunks/normalize-dashboard-for-dirty-check-B7NQDI1H.js +0 -1
  45. package/dist/chunks/notification-bell-DoIAAZqX.js +0 -6
  46. package/dist/chunks/notification-bell-cYCkxEbp.js +0 -839
@@ -1 +0,0 @@
1
- "use strict";const s=["i","x","y","w","h","minW","minH","maxW","maxH","static","isResizable","isDraggable"];function y(t,e,r){t[e]=r}function a(t){const e={};for(const r of s){const i=t[r];i!==void 0&&((r==="isResizable"||r==="isDraggable")&&i===!0||y(e,r,i))}return e}function o(t){return t?t.map(a).sort((e,r)=>{const i=String(e.i??""),n=String(r.i??"");return i!==n?i.localeCompare(n):Number(e.y??0)-Number(r.y??0)||Number(e.x??0)-Number(r.x??0)||Number(e.h??0)-Number(r.h??0)||Number(e.w??0)-Number(r.w??0)}):[]}function u(t){if(!t)return;const e={};for(const r of Object.keys(t).sort()){const i=t[r];i&&(e[r]=o(i))}return e}function c(t){return JSON.stringify(t,(e,r)=>!r||typeof r!="object"||Array.isArray(r)?r:Object.keys(r).sort().reduce((i,n)=>(i[n]=r[n],i),{}))}function f(t){var e;return t?{...t,sheets:(e=t.sheets)==null?void 0:e.map(r=>{if(!r)return r;const i={...r};return r.layout&&(i.layout=o(r.layout)),r.layouts&&(i.layouts=u(r.layouts)),i})}:null}function m(t){return JSON.stringify(t??null,function(e,r){return e==="layout"&&Array.isArray(r)?o(r):e==="layouts"&&r&&typeof r=="object"&&!Array.isArray(r)?u(r):!r||typeof r!="object"||Array.isArray(r)?r:Object.keys(r).sort().reduce((i,n)=>(i[n]=r[n],i),{})})}function b(t){return c(u(t)??null)}exports.normalizeDashboardForDirtyCheck=f;exports.serializeDashboardForDirtyCheck=m;exports.serializeLayoutsForDirtyCheck=b;
@@ -1,6 +0,0 @@
1
- "use strict";const f=require("react"),t=require("./index-DAhkssOV.js"),e=require("react/jsx-runtime"),A=require("./editor-action-buttons-Dbs6eczj.js"),U=require("./use-visual-utils-V6paZich.js"),I=require("./date-formatter-CqXdM6JO.js");/**
2
- * @license lucide-react v0.453.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const L=t.createLucideIcon("FileDown",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M12 18v-6",key:"17g6i2"}],["path",{d:"m9 15 3 3 3-3",key:"1npd3o"}]]),V=1e4,M=15e3,P=3e4,R=3e4,B=12e4,T=2*60*60*1e3;function z(s){const r=Date.now()-s.getTime();return r<R?V:r<B?M:P}function O(){const{authToken:s,tokenProps:r}=t.useSemaphorContext(),m=t.useExportStore(p=>p.activeExports),[c,d]=f.useState(typeof document<"u"?!document.hidden:!0),u=f.useRef(null),n=f.useRef(!1),i=f.useRef(void 0),x=r==null?void 0:r.apiServiceUrl,l=s==null?void 0:s.accessToken,g=f.useCallback(()=>{const p=t.useExportStore.getState().activeExports;return Array.from(p.values()).filter(b=>t.isExportInProgress(b.status))},[]);f.useEffect(()=>{if(typeof document>"u")return;const p=()=>{d(!document.hidden)};return document.addEventListener("visibilitychange",p),()=>{document.removeEventListener("visibilitychange",p)}},[]);const j=f.useCallback(async()=>{if(!x||!l){n.current=!1;return}const p=g();if(p.length===0){n.current=!1;return}const b=Date.now(),E=p.filter(a=>b-a.startedAt.getTime()>T);if(E.length>0){const{updateExport:a}=t.useExportStore.getState().actions;for(const o of E)a(o.id,{status:"failed",error:"Export timed out. Please try again or contact support.",lastUpdatedAt:new Date})}const h=p.filter(a=>b-a.startedAt.getTime()<=T);if(h.length===0){n.current=!1;return}const C=await Promise.allSettled(h.map(async a=>{try{const o=await t.getExportStatus(x,l,a.id);let v;if(o.status==="completed")try{v=await t.getDownloadUrl(x,l,a.id)}catch(N){console.error(`[useExportPolling] Failed to get download URL for ${a.id}:`,N)}return{id:a.id,status:o.status,progress:o.progress,completedChunks:o.completedChunks,completedAt:o.completedAt?new Date(o.completedAt):void 0,lastUpdatedAt:new Date,fileSize:o.fileSize,error:o.error,downloadUrl:v}}catch(o){return console.error(`[useExportPolling] Failed to poll export ${a.id}:`,o),null}})),{updateExport:S}=t.useExportStore.getState().actions;for(const a of C)a.status==="fulfilled"&&a.value&&S(a.value.id,a.value);const w=g();if(w.length>0&&!document.hidden){const a=w.reduce((v,N)=>N.startedAt<v?N.startedAt:v,w[0].startedAt),o=z(a);u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{var v;(v=i.current)==null||v.call(i)},o)}else n.current=!1},[x,l,g]);return f.useEffect(()=>{i.current=j},[j]),f.useEffect(()=>{var b;g().length>0&&c&&!n.current&&(n.current=!0,(b=i.current)==null||b.call(i))},[m,c,g]),f.useEffect(()=>{var b;const p=g();c&&p.length>0&&!n.current&&(n.current=!0,(b=i.current)==null||b.call(i))},[c,g]),f.useEffect(()=>{!c&&u.current&&(clearTimeout(u.current),u.current=null,n.current=!1)},[c]),f.useEffect(()=>()=>{u.current&&(clearTimeout(u.current),u.current=null)},[]),{isPolling:n.current,isTabVisible:c,inProgressCount:g().length}}function $(){const{authToken:s,tokenProps:r}=t.useSemaphorContext(),m=t.useExportStore(i=>i.activeExports),{addExport:c}=t.useExportActions(),d=f.useRef(!1),u=r==null?void 0:r.apiServiceUrl,n=s==null?void 0:s.accessToken;f.useEffect(()=>{if(d.current||!u||!n)return;(async()=>{try{const{exports:x}=await t.getExports(u,n,{status:["pending","processing","chunking","compacting","completed","failed"],limit:20});for(const l of x){if(m.has(l.id))continue;const g=l.totalChunks?Math.round(l.completedChunks/l.totalChunks*100):0;let j;if(l.status==="completed")try{j=await t.getDownloadUrl(u,n,l.id)}catch(b){console.error(`[useExportRecovery] Failed to get download URL for ${l.id}:`,b)}const p={id:l.id,status:l.status,progress:g,title:q(l),totalRows:l.totalRows,totalChunks:l.totalChunks,completedChunks:l.completedChunks,startedAt:new Date(l.createdAt),lastUpdatedAt:new Date,completedAt:l.completedAt?new Date(l.completedAt):void 0,fileSize:l.fileSize,error:l.error,expiresAt:new Date(l.expiresAt),downloadUrl:j};c(p)}d.current=!0}catch(x){console.error("[useExportRecovery] Failed to recover exports:",x),d.current=!0}})()},[u,n,c,m])}function q(s){return s.title?s.title:t.isExportInProgress(s.status)?"Export in progress...":s.status==="completed"?"Export completed":s.status==="failed"?"Export failed":"Export"}function _({open:s,onOpenChange:r,isLibraryVisual:m,currentVisualName:c,isSaving:d=!1,destinationMode:u="both",onConfirm:n}){const[i,x]=f.useState(m&&c?`Copy of ${c}`:c||""),[l,g]=f.useState("");f.useEffect(()=>{s&&(x(m&&c?`Copy of ${c}`:c||""),g(""))},[s,m,c]);const j=!!i.trim(),p=u==="local"?{saveToLibrary:!1,saveToCurrentDashboard:!0,badgeType:"local",description:"Creates a local copy on the current dashboard.",actionLabel:"Add to Dashboard (Local)"}:u==="library"?{saveToLibrary:!0,saveToCurrentDashboard:!1,badgeType:"library",description:"Creates a reusable visual in Visual Library.",actionLabel:"Save as Library Visual"}:{saveToLibrary:!0,saveToCurrentDashboard:!0,badgeType:"linked",description:"Creates a new library visual and adds a linked copy to this dashboard.",actionLabel:"Save Copy as Linked Visual"},b=()=>{!j||d||n({name:i.trim(),description:l.trim()||void 0,saveToLibrary:p.saveToLibrary,saveToCurrentDashboard:p.saveToCurrentDashboard})};return e.jsx(t.Dialog,{open:s,onOpenChange:r,children:e.jsxs(t.DialogContent,{className:"sm:max-w-[500px]",children:[e.jsxs(t.DialogHeader,{children:[e.jsxs(t.DialogTitle,{className:"flex items-center gap-2",children:[e.jsx("span",{children:"Save Visual As"}),p.badgeType!=="local"&&e.jsx(A.VisualBadge,{type:p.badgeType,showLabel:!0,className:"px-2 py-0.5"})]}),e.jsx(t.DialogDescription,{children:p.description})]}),e.jsxs("div",{className:"grid gap-4 py-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t.Label,{htmlFor:"name",children:"Name"}),e.jsx(t.Input$1,{id:"name",value:i,onChange:E=>x(E.target.value),placeholder:"Enter visual name",disabled:d})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t.Label,{htmlFor:"description",children:"Description (optional)"}),e.jsx(t.Textarea,{id:"description",value:l,onChange:E=>g(E.target.value),placeholder:"Enter visual description",rows:3,disabled:d})]})]}),e.jsxs(t.DialogFooter,{children:[e.jsx(t.Button,{variant:"outline",onClick:()=>r(!1),disabled:d,children:"Cancel"}),e.jsxs(t.Button,{onClick:b,disabled:!j||d,children:[d&&e.jsx(t.LoaderCircle,{className:"mr-2 h-4 w-4 animate-spin"}),p.actionLabel]})]})]})})}function H(){const[s,r]=f.useState(!1),[m,c]=f.useState(!1),[d,u]=f.useState(null),n=t.useEditorStore(o=>o.frame),i=t.useEditorStore(o=>o.card),x=t.useSelectedVisual(),l=t.useDashboardStore(o=>o.selectedSheetId),g=t.useDashboardStore(o=>o.actions.setIsDashboardPanelOpen),{getUpdatedFrame:j}=U.useVisualUtils(),{selectVisual:p}=t.useManagementActions(),{addFrame:b,setSelectedFrameId:E,setIsVisualEditing:h}=t.useDashboardActions(),C=!!(n!=null&&n.visualId),S=(()=>{var o,v;return((o=n==null?void 0:n.cards)==null?void 0:o.length)===1&&((v=n.cards[0])!=null&&v.title)?n.cards[0].title:x!=null&&x.title?x.title:(i==null?void 0:i.title)||"Untitled Visual"})(),w=t.useCreateVisualWithFrame(o=>{if(o!=null&&o.id){if(p(o),m&&d&&l){const v={...d,id:t.v4(),visualId:o.id};b(l,v,"end"),E(v.id),c(!1),u(null),h(!1)}g(!0),r(!1)}});return{saveAsDialogOpen:s,setSaveAsDialogOpen:r,handleSaveAs:async o=>{if(!l){t.ue.error("No sheet selected");return}const v=j(),y=v.cards.length===1?{...v,cards:v.cards.map(D=>({...D,title:o.name}))}:v;if(o.saveToLibrary){c(o.saveToCurrentDashboard),u(y);const D={title:o.name,description:o.description,frameObject:y,isPrivate:!1};w.mutate(D)}else if(o.saveToCurrentDashboard){const D={...y,id:t.v4(),visualId:void 0};b(l,D,"end"),E(D.id),t.ue.success("Visual saved to dashboard"),r(!1),h(!1)}},isLibraryVisual:C,currentVisualName:S,isSaving:w.isPending}}function X({className:s}){const r=t.useEditorStore(y=>y.frame),m=t.useManagementStore(y=>y.selectedVisual),c=t.useDashboardStore(y=>y.selectedFrameId),d=t.useDashboardStore(y=>y.selectedSheetId),{setIsVisualEditing:u,updateFrame:n}=t.useDashboardActions(),[i,x]=f.useState(!1),[l,g]=f.useState("both"),j=!!(r!=null&&r.visualId||m!=null&&m.id),p=!!(r!=null&&r.visualId&&c),b=j&&!p,{saveAsDialogOpen:E,setSaveAsDialogOpen:h,handleSaveAs:C,isLibraryVisual:S,currentVisualName:w,isSaving:a}=H(),{getUpdatedFrame:o}=U.useVisualUtils(),v=()=>{if(!d){t.ue.error("No sheet selected");return}if(i)return;x(!0);const D={...o(),visualId:void 0};n(d,D),setTimeout(()=>{x(!1),t.ue.success("Changes applied. Visual is now local to this dashboard"),u(!1)},300)},N=y=>{g(y),h(!0)};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"inline-flex items-center overflow-hidden rounded-md border border-input",children:[!j&&e.jsx(A.EditorAcceptButton,{className:t.cn(s,"rounded-none border-0"),variant:"default"}),j&&b&&e.jsx(A.VisualSaveButton,{className:t.cn(s,"rounded-none border-0"),variant:"default"}),j&&p&&e.jsx(A.VisualSaveAndApplyButton,{className:t.cn(s,"rounded-none border-0")}),e.jsxs(t.DropdownMenu,{modal:!1,children:[e.jsx(t.DropdownMenuTrigger,{className:"h-8",asChild:!0,children:e.jsx(t.Button,{variant:"default",size:"sm",className:t.cn(s,"w-8 rounded-none border-0 border-l border-primary-foreground/30 px-2"),"aria-label":"Open visual save options",disabled:a||i,children:e.jsx(t.ChevronDown,{className:"h-4 w-4"})})}),e.jsxs(t.DropdownMenuContent,{align:"end",children:[p&&e.jsxs(e.Fragment,{children:[e.jsxs(t.DropdownMenuItem,{onClick:v,disabled:i,children:[e.jsx(t.Check,{className:"mr-2 h-4 w-4"}),i?"Applying...":"Apply Locally"]}),e.jsx(t.DropdownMenuSeparator,{})]}),e.jsxs(t.DropdownMenuItem,{onClick:()=>N("local"),disabled:a,children:[e.jsx(t.Plus,{className:"mr-2 h-4 w-4"}),"Add to Dashboard (Local)"]}),e.jsxs(t.DropdownMenuItem,{onClick:()=>N("library"),disabled:a,children:[e.jsx(A.Library,{className:"mr-2 h-4 w-4"}),"Save as Library Visual"]}),e.jsxs(t.DropdownMenuItem,{onClick:()=>N("both"),disabled:a,children:[e.jsx(A.Link2,{className:"mr-2 h-4 w-4"}),"Save Copy as Linked Visual"]})]})]})]}),e.jsx(A.EditorCancelButton,{className:s}),e.jsx(_,{open:E,onOpenChange:y=>{a||h(y)},isLibraryVisual:S,currentVisualName:w,isSaving:a,destinationMode:l,onConfirm:C})]})}function G({className:s,switchClassName:r}){const m=t.useEditorStore(i=>i.isDevMode),c=t.useDashboardStore(i=>i.isVisualEditing),{setIsDevMode:d}=t.useEditorActions(),{config:u}=f.useContext(t.SemaphorContext).tokenProps,n=(u==null?void 0:u.showAdvancedMode)!==!1;return!c||!n?null:e.jsxs("div",{className:t.cn("flex items-center space-x-2",s),children:[e.jsx(t.DevModeSwitch,{className:t.cn("",r),checked:m,onCheckedChange:()=>d(!m),id:"advanced-mode",icon:e.jsx(t.CodeXml,{className:"h-4 w-4"}),tooltip:"Advanced Mode"}),e.jsx("label",{htmlFor:"advanced-mode",className:"sr-only",children:"Advanced Mode"})]})}function W({open:s,onOpenChange:r,onSave:m,onDiscard:c,isSaving:d,title:u="Unsaved Changes",description:n="You have unsaved changes to this dashboard. What would you like to do?",cancelLabel:i="Cancel",discardLabel:x="Discard",saveLabel:l="Save & Close"}){const g=j=>{!j&&d||r(j)};return e.jsx(t.AlertDialog,{open:s,onOpenChange:g,children:e.jsxs(t.AlertDialogContent,{className:"max-w-[520px] border-border/70 p-6",children:[e.jsxs(t.AlertDialogHeader,{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-9 w-9 items-center justify-center rounded-full bg-amber-50 ring-1 ring-amber-200/70",children:e.jsx(t.TriangleAlert,{className:"h-[18px] w-[18px] text-amber-600"})}),e.jsx(t.AlertDialogTitle,{className:"text-lg font-semibold tracking-tight",children:u})]}),e.jsx(t.AlertDialogDescription,{className:"text-sm leading-6 text-muted-foreground",children:n})]}),e.jsxs(t.AlertDialogFooter,{className:"mt-2 flex-col gap-1.5 sm:flex-row sm:justify-end",children:[e.jsx(t.AlertDialogCancel,{disabled:d,className:"order-1 m-0 h-auto min-h-9 whitespace-normal border-border/60 px-4 py-2 text-center leading-5 sm:order-1",children:i}),e.jsx("button",{onClick:c,disabled:d,className:"order-2 h-auto min-h-9 whitespace-normal rounded-md border border-destructive/30 bg-destructive/10 px-4 py-2 text-center text-sm font-medium leading-5 text-destructive transition-colors hover:bg-destructive/20 disabled:pointer-events-none disabled:opacity-50 sm:order-2",children:x}),e.jsx(t.AlertDialogAction,{onClick:m,disabled:d,className:"order-3 m-0 h-auto min-h-9 whitespace-normal px-4 py-2 text-center leading-5 sm:order-3",children:d?e.jsxs(e.Fragment,{children:[e.jsx(t.LoaderCircle,{className:"mr-2 h-4 w-4 animate-spin"}),"Saving..."]}):l})]})]})})}function Q(s,r,m,c){f.useEffect(()=>{s&&!m&&r&&c(t.cloneDeep(r))},[s,m,r,c])}function k({export:s,onRemove:r}){const m=()=>{s.downloadUrl&&window.open(s.downloadUrl,"_blank")},c=i=>{i.stopPropagation(),r==null||r(s.id)},d=()=>{switch(s.status){case"completed":return e.jsx(t.CircleCheck,{className:"mt-0.5 h-5 w-5 shrink-0 text-green-600"});case"failed":return e.jsx(A.CircleX,{className:"mt-0.5 h-5 w-5 shrink-0 text-destructive"});default:return e.jsx(t.LoaderCircle,{className:"text-foreground-muted mt-0.5 h-5 w-5 shrink-0 animate-spin"})}},u=t.isExportInProgress(s.status),n=(()=>{switch(s.status){case"pending":return"Queued...";case"processing":return"Processing...";case"chunking":return"Processing...";case"compacting":return"Finalizing...";default:return"Processing..."}})();return e.jsxs("div",{className:"group p-4 transition-colors hover:bg-muted/50",children:[e.jsxs("div",{className:"mb-2 flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-start gap-3",children:[d(),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h4",{className:"mb-1 truncate text-sm font-medium",children:s.title}),s.status==="completed"&&e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[s.totalRows.toLocaleString()," rows"]}),s.fileSize&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"•"}),e.jsx("span",{children:t.formatFileSize(s.fileSize)})]})]}),u&&e.jsx("div",{className:"text-xs text-muted-foreground",children:n}),s.status==="failed"&&e.jsx("div",{className:"line-clamp-2 text-xs text-destructive",children:s.error||"Export failed"})]})]}),e.jsx(t.Button,{variant:"ghost",size:"icon",className:"h-6 w-6 shrink-0 opacity-0 transition-opacity group-hover:opacity-100",onClick:c,"aria-label":"Remove notification",children:e.jsx(t.X,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"ml-8",children:[s.status==="completed"&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:I.formatDistanceToNow(s.startedAt,{addSuffix:!0})}),s.downloadUrl&&e.jsxs(t.Button,{size:"sm",variant:"outline",className:"h-8 bg-transparent",onClick:m,children:[e.jsx(t.Download,{className:"mr-1.5 h-3.5 w-3.5"}),"Download"]})]}),u&&e.jsxs("div",{children:[e.jsx(t.Progress,{value:s.progress,className:"h-1.5"}),e.jsxs("span",{className:"mt-1 block text-xs text-muted-foreground",children:[s.progress,"% complete"]})]}),s.status==="failed"&&e.jsx("span",{className:"text-xs text-muted-foreground",children:I.formatDistanceToNow(s.startedAt,{addSuffix:!0})})]})]})}function F(){const{authToken:s,tokenProps:r}=t.useSemaphorContext(),m=t.useExportStore(h=>h.activeExports),{clearCompleted:c,removeExport:d,updateExport:u}=t.useExportActions(),[n,i]=f.useState(!1),[x,l]=f.useState(!1),g=Array.from(m.values()).sort((h,C)=>C.startedAt.getTime()-h.startedAt.getTime()),j=g.some(h=>h.status==="completed"||h.status==="failed"),p=f.useCallback(async()=>{const h=r==null?void 0:r.apiServiceUrl,C=s==null?void 0:s.accessToken;if(!(!h||!C)){i(!0);try{const S=Array.from(m.values());await Promise.all(S.map(async w=>{try{const a=await t.getExportStatus(h,C,w.id);let o;if(a.status==="completed")try{o=await t.getDownloadUrl(h,C,w.id)}catch(v){console.error(`Failed to get download URL for ${w.id}:`,v)}u(w.id,{status:a.status,progress:a.progress,completedChunks:a.completedChunks,completedAt:a.completedAt?new Date(a.completedAt):void 0,lastUpdatedAt:new Date,fileSize:a.fileSize,error:a.error,downloadUrl:o})}catch(a){console.error(`Failed to refresh export ${w.id}:`,a)}}))}finally{i(!1)}}},[m,s==null?void 0:s.accessToken,r==null?void 0:r.apiServiceUrl,u]),b=f.useCallback(async()=>{const h=r==null?void 0:r.apiServiceUrl,C=s==null?void 0:s.accessToken;if(!h||!C){c();return}l(!0);try{const S=g.filter(a=>a.status==="completed"||a.status==="failed"),w=await Promise.allSettled(S.map(async a=>(await t.cancelExport(h,C,a.id),a.id)));for(const a of w)a.status==="fulfilled"?d(a.value):console.error("Failed to delete export:",a.reason)}finally{l(!1)}},[g,r==null?void 0:r.apiServiceUrl,s==null?void 0:s.accessToken,c,d]),E=f.useCallback(async h=>{const C=r==null?void 0:r.apiServiceUrl,S=s==null?void 0:s.accessToken;if(C&&S)try{await t.cancelExport(C,S,h),d(h);return}catch(w){console.error(`Failed to cancel export ${h}:`,w)}d(h)},[r==null?void 0:r.apiServiceUrl,s==null?void 0:s.accessToken,d]);return g.length===0?e.jsxs("div",{className:"p-6 text-center",children:[e.jsx(L,{className:"mx-auto mb-2 h-8 w-8 text-muted-foreground"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"No active exports"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Large exports will appear here"})]}):e.jsxs("div",{className:"flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(L,{className:"h-5 w-5 text-muted-foreground"}),e.jsx("h4",{className:"font-semibold",children:"Exports"})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(t.Button,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:p,disabled:n,title:"Refresh status",children:e.jsx(t.RefreshCw,{className:`h-4 w-4 ${n?"animate-spin":""}`})}),j&&e.jsx(t.Button,{variant:"ghost",size:"sm",className:"h-7 px-2 text-sm",onClick:b,disabled:x,children:x?"Clearing...":"Clear all"})]})]}),e.jsx("div",{className:"max-h-[350px] overflow-y-auto",children:e.jsx("div",{className:"divide-y",children:g.map(h=>e.jsx(k,{export:h,onRemove:E},h.id))})})]})}function Y({variant:s}){const r=t.useExportStore(x=>x.activeExports),m=t.useInProgressExportsCount(),c=r.size>0,d=Array.from(r.values()).some(x=>x.status==="completed"||x.status==="failed"),n=m>0?m>9?"9+":String(m):null,i=c;return e.jsxs(t.Popover,{children:[e.jsx(t.PopoverTrigger,{asChild:!0,children:e.jsxs(t.Button,{variant:s??"ghost",size:"icon",className:"relative h-8 w-8","aria-label":"Export notifications",children:[e.jsx(t.Bell,{className:"h-4 w-4"}),i&&e.jsx("span",{className:`absolute flex items-center justify-center rounded-full bg-primary text-primary-foreground ${n?"-right-0.5 -top-0.5 h-4 min-w-4 px-0.5 text-[10px] font-semibold":"right-0.5 top-0.5 h-2 w-2"}`,children:n})]})}),e.jsx(t.PopoverContent,{className:"w-80 p-0",align:"end",sideOffset:8,children:e.jsx(F,{})})]})}exports.AdvancedModeToggle=G;exports.ExportNotificationItem=k;exports.ExportNotificationList=F;exports.NotificationBell=Y;exports.UnsavedChangesAlert=W;exports.VisualEditingControls=X;exports.useExportPolling=O;exports.useExportRecovery=$;exports.usePristineSnapshotInitializer=Q;