@codeuxai/codeux 0.8.1 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +128 -45
- package/dashboard/dist/assets/{AgentAvatarScene-DAjdNR8q.js → AgentAvatarScene-CdYNjBsU.js} +1 -1
- package/dashboard/dist/assets/{AgentsPage-dG7HaQww.js → AgentsPage-BKJ1Zdbv.js} +2 -2
- package/dashboard/dist/assets/{BackgroundManager-CxjNC7ME.js → BackgroundManager-B4A4jACF.js} +1 -1
- package/dashboard/dist/assets/{BranchNameSchemeEditor-wfv629Ml.js → BranchNameSchemeEditor-DfnH2VYW.js} +1 -1
- package/dashboard/dist/assets/{BrowserPage-5eFh6pZt.js → BrowserPage-BxfAsG3M.js} +1 -1
- package/dashboard/dist/assets/{ChatPage-CfunB4-0.js → ChatPage-MXugCDvS.js} +1 -1
- package/dashboard/dist/assets/{ErrorPage-CEHtK2Hk.js → ErrorPage-Y-fEDzly.js} +1 -1
- package/dashboard/dist/assets/{FileBrowserPage-BOVIkrrv.js → FileBrowserPage-B4JEdW9B.js} +1 -1
- package/dashboard/dist/assets/{KnowledgePage-CeKSiAys.js → KnowledgePage-DVbW7o61.js} +1 -1
- package/dashboard/dist/assets/{ListWindowSelector-cshzGFot.js → ListWindowSelector-CPMgebqM.js} +1 -1
- package/dashboard/dist/assets/{MemoryPage-Cctk6NFp.js → MemoryPage-C3RWZJL5.js} +1 -1
- package/dashboard/dist/assets/{OverviewTelemetry-D_V7-M2H.js → OverviewTelemetry-Cy9vzhdY.js} +1 -1
- package/dashboard/dist/assets/{ProjectsPage-D8ICYJVv.js → ProjectsPage-RmR2LMuR.js} +1 -1
- package/dashboard/dist/assets/{SchedulerPage-BM0sGrEZ.js → SchedulerPage-Bg08X7Tm.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-BlDplYC7.js → SettingsPage-DzE_F7Kw.js} +1 -1
- package/dashboard/dist/assets/{SprintBoatRace-DaP10JYZ.js → SprintBoatRace-BeZOItMO.js} +1 -1
- package/dashboard/dist/assets/{SprintDag-DbxJdjBK.js → SprintDag-vF8f33gn.js} +1 -1
- package/dashboard/dist/assets/{SprintsPage-XGhd04Sn.js → SprintsPage-bRHQPfWP.js} +1 -1
- package/dashboard/dist/assets/{StatsPage-CrSwtTGq.js → StatsPage-BZl_tzUr.js} +1 -1
- package/dashboard/dist/assets/{TasksPage-DNpVBxt6.js → TasksPage-rLMlkgxX.js} +1 -1
- package/dashboard/dist/assets/{index-BViPTeJx.js → index-DdNzHP9F.js} +5 -5
- package/dashboard/dist/assets/{monaco.contribution-KtWzfVt5.js → monaco.contribution-2KFAi0p0.js} +2 -2
- package/dashboard/dist/assets/{tsMode-CalcmZZa.js → tsMode-dZI5bz0O.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dist/infrastructure/providers/cli/provider-logs/opencode-log-parser.js +174 -20
- package/dist/infrastructure/providers/cli/provider-runner.js +51 -0
- package/dist/infrastructure/providers/cli/provider-usage.js +39 -6
- package/dist/infrastructure/providers/cli/workspace-artifact-service.js +17 -7
- package/dist/repositories/execution-repository.js +77 -0
- package/dist/services/provider-execution-service.js +10 -1
- package/dist/services/runtime-startup-recovery-service.js +170 -0
- package/dist/services/sprint-task-dispatch-service.js +7 -0
- package/docs/getting-started/quickstart.md +14 -3
- package/docs/operations/runbook.md +2 -0
- package/docs/settings/configuration-and-storage.md +2 -0
- package/package.json +1 -1
- package/.code-ux/debug.log +0 -97190
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S as e,_ as t,a as n,w as r,x as i,y as a}from"./vendor-Dl0fhdV0.js";import{t as o}from"./createLucideIcon-BshUfn15.js";import{i as ee,o as s}from"./quicksprint-api-BQTtbGzW.js";import{D as te,R as ne,X as c,r as re}from"./project-data-BSCsMQnj.js";import{Ar as ie,Fr as ae,Mr as oe,Nr as se,Oi as ce,Rr as l,St as le,Ti as u,fi as d,kt as f,mr as p,st as m,yr as ue}from"./index-BViPTeJx.js";var de=o(`repeat`,[[`path`,{d:`m17 2 4 4-4 4`,key:`nntrym`}],[`path`,{d:`M3 11v-1a4 4 0 0 1 4-4h14`,key:`84bu3i`}],[`path`,{d:`m7 22-4-4 4-4`,key:`1wqhfi`}],[`path`,{d:`M21 13v1a4 4 0 0 1-4 4H3`,key:`1rx37r`}]]),fe=o(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]);i();var pe=async(e,t,n,r)=>{let i=new URL(`/api/projects/${encodeURIComponent(e)}/scheduler`,window.location.origin);return i.searchParams.set(`from`,t),i.searchParams.set(`to`,n),c(`${i.pathname}${i.search}`,{signal:r})},me=async(e,t)=>c(`/api/projects/${encodeURIComponent(e)}/scheduler`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),he=async(e,t)=>c(`/api/scheduler/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),ge=async e=>{await c(`/api/scheduler/${encodeURIComponent(e)}`,{method:`DELETE`})},h=`scheduler-field rounded-[var(--radius-ui)] border border-[color:var(--color-border-muted)] dark:border-white/[0.06] hover:border-[color:var(--color-border-muted)] dark:hover:border-white/[0.12] bg-white/80 dark:bg-white/[0.05] px-3.5 text-sm font-semibold text-slate-700 dark:text-slate-200 placeholder-slate-400 shadow-[inset_0_1px_0_rgba(255,255,255,0.55)] outline-none transition-all duration-150 ease-[cubic-bezier(0.4,0,0.2,1)] focus:border-signal-500/40 focus:outline-none focus:ring-2 focus:ring-signal-500/20`,g=`${h} min-h-[40px]`,_e=[{value:`sprint`,label:`Sprint`,icon:p,tone:`text-ember-500`,activeClassName:`border-ember-500/35 bg-ember-500/10 shadow-[0_12px_34px_rgba(255,184,0,0.13)]`,chipClassName:`bg-ember-500/12 text-ember-600 dark:text-ember-400`},{value:`quicksprint`,label:`Quicksprint`,icon:ie,tone:`text-sky-500`,activeClassName:`border-sky-500/35 bg-sky-500/10 shadow-[0_12px_34px_rgba(14,165,233,0.13)]`,chipClassName:`bg-sky-500/12 text-sky-600 dark:text-sky-400`},{value:`chat`,label:`Chat message`,icon:l,tone:`text-violet-500`,activeClassName:`border-violet-500/35 bg-violet-500/10 shadow-[0_12px_34px_rgba(139,92,246,0.13)]`,chipClassName:`bg-violet-500/12 text-violet-600 dark:text-violet-400`}],_=new Map(_e.map(e=>[e.value,e])),v=e=>String(e).padStart(2,`0`),y=e=>`${e.getFullYear()}-${v(e.getMonth()+1)}-${v(e.getDate())}T${v(e.getHours())}:${v(e.getMinutes())}`,b=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t},x=(e,t)=>{let n=new Date(e);return n.setDate(n.getDate()+t),n},S=e=>{let t=b(e);return x(t,-((t.getDay()+6)%7))},C=e=>e.toLocaleDateString(void 0,{weekday:`short`,month:`short`,day:`numeric`}),w=e=>new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`}),T=e=>e===`sprint`?`Sprint`:e===`quicksprint`?`Quicksprint`:`Chat`,ve=e=>{if(e.frequency===`none`)return`One time`;let t=e.interval===1?e.frequency:`${e.interval} ${e.frequency}`;return e.endMode===`after_count`&&e.count?`Every ${t}, ${e.count} runs`:e.endMode===`on_date`&&e.until?`Every ${t} until ${new Date(e.until).toLocaleString()}`:`Every ${t}`},ye=()=>n(`div`,{className:`rounded-[1.75rem] border border-black/[0.06] bg-white/70 p-6 md:p-8 shadow-[0_2px_20px_rgba(0,0,0,0.04)] backdrop-blur-2xl dark:border-white/[0.06] dark:bg-void-800/60 dark:shadow-[0_4px_24px_rgba(0,0,0,0.2)]`,children:[n(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-2xl border border-signal-500/20 bg-signal-500/[0.08] text-signal-500 shadow-[0_0_15px_rgba(0,224,160,0.08)]`,children:n(ce,{className:`h-5 w-5`})}),n(`h1`,{className:`mt-5 font-display text-2xl md:text-3xl font-black tracking-tight text-slate-900 dark:text-white`,children:`Select a project to schedule work.`}),n(`p`,{className:`mt-3 max-w-xl text-sm font-medium leading-relaxed text-slate-500 dark:text-slate-400`,children:`Scheduler entries are project-scoped so sprints, quicksprints, and chat messages run against the right workspace.`})]}),E=()=>{let{selectedProject:i}=re(),[o,c]=a(`calendar`),[l,p]=a(()=>b(new Date)),[E,be]=a(null),[D,xe]=a([]),[O,Se]=a([]),[Ce,we]=a(!1),[k,A]=a({tone:`idle`,message:null}),[j,Te]=a(null),[Ee,M]=a(``),[N,P]=a(`sprint`),[De,F]=a(()=>{let e=new Date;return e.setHours(e.getHours()+1,0,0,0),y(e)}),[I,L]=a(``),[R,z]=a(``),[Oe,B]=a(5),[V,H]=a(``),[U,W]=a(!1),[ke,G]=a(`daily`),[Ae,K]=a(1),[q,J]=a(`never`),[je,Y]=a(6),[Me,X]=a(()=>y(x(new Date,30))),Z=t(()=>{let e=S(l),t=x(e,6);return t.setHours(23,59,59,999),{from:e,to:t}},[l]),Q=e(async e=>{if(i){we(!0);try{let[t,n,r]=await Promise.all([pe(i.id,Z.from.toISOString(),Z.to.toISOString(),e),ne(i.id,e),ee(i.id)]);be(t),xe(n.sprints),Se(r),L(e=>e||n.sprints.find(e=>e.status!==`completed`)?.id||``),z(e=>e||r[0]?.id||``)}catch(t){e?.aborted||A({tone:`error`,message:t instanceof Error?t.message:`Failed to load scheduler.`})}finally{e?.aborted||we(!1)}}},[Z.from,Z.to,i]);r(()=>{let e=new AbortController;return Q(e.signal),()=>e.abort()},[Q]),r(()=>{if(i?.id)return te([`project:${i.id}`],e=>{e.type===`event`&&e.event.eventType===`project.live.updated`&&Q()})},[i?.id,Q]);let Ne=t(()=>D.filter(e=>e.status!==`completed`),[D]),Pe=t(()=>Array.from({length:7},(e,t)=>x(S(l),t)),[l]),Fe=t(()=>{let e=b(l).getTime(),t=x(b(l),1).getTime();return(E?.occurrences||[]).filter(n=>{let r=new Date(n.startsAt).getTime();return r>=e&&r<t})},[E?.occurrences,l]),Ie=t(()=>{let e=new Map;for(let t of E?.occurrences||[]){let n=b(new Date(t.startsAt)).toISOString();e.set(n,[...e.get(n)||[],t])}return e},[E?.occurrences]),$=t(()=>{let e=E?.entries||[],t=e.filter(e=>e.status===`scheduled`),n=e.filter(e=>e.recurrence.frequency!==`none`),r=(E?.occurrences||[]).filter(e=>new Date(e.startsAt).getTime()>=Date.now()).sort((e,t)=>new Date(e.startsAt).getTime()-new Date(t.startsAt).getTime())[0]||null;return{activeCount:t.length,repeatingCount:n.length,visibleCount:E?.occurrences.length||0,nextOccurrence:r}},[E?.entries,E?.occurrences]),Le=e=>{Te(e),M(e.title),P(e.targetType),F(y(new Date(e.scheduledFor))),e.targetType===`sprint`&&e.sprintTarget?L(e.sprintTarget.sprintId):e.targetType===`quicksprint`&&e.quicksprintTarget?(z(e.quicksprintTarget.templateId),B(e.quicksprintTarget.taskCount)):e.targetType===`chat`&&e.chatTarget&&H(e.chatTarget.bodyMarkdown),e.recurrence&&e.recurrence.frequency!==`none`?(W(!0),G(e.recurrence.frequency),K(e.recurrence.interval||1),J(e.recurrence.endMode||`never`),Y(e.recurrence.count||6),X(e.recurrence.until?y(new Date(e.recurrence.until)):y(x(new Date,30)))):W(!1)},Re=()=>{Te(null),M(``),P(`sprint`);let e=new Date;e.setHours(e.getHours()+1,0,0,0),F(y(e)),L(D.find(e=>e.status!==`completed`)?.id||``),z(O[0]?.id||``),B(5),H(``),W(!1),G(`daily`),K(1),J(`never`),Y(6),X(y(x(new Date,30))),A({tone:`idle`,message:null})},ze=e=>{let t=(E?.entries||[]).find(t=>t.id===e.entryId);t?Le(t):A({tone:`error`,message:`Parent schedule entry not found.`})},Be=async()=>{if(!i)return;A({tone:`idle`,message:null});let e=U?{frequency:ke,interval:Ae,endMode:q,count:q===`after_count`?je:null,until:q===`on_date`?new Date(Me).toISOString():null}:{frequency:`none`,interval:1,endMode:`never`},t=Ee.trim(),n=(()=>{if(N===`sprint`){let e=D.find(e=>e.id===I);return e?`Run ${e.name}`:`Scheduled sprint`}else if(N===`quicksprint`){let e=O.find(e=>e.id===R);return e?`Run ${e.name}`:`Scheduled quicksprint`}else return`Scheduled chat message`})(),r=t||n;if(N===`sprint`){if(!I){A({tone:`error`,message:`Choose a sprint that is not completed.`});return}let e=D.find(e=>e.id===I);if(!e||e.status===`completed`&&(!j||j.sprintTarget?.sprintId!==I)){A({tone:`error`,message:`Choose a sprint that is not completed.`});return}}else if(N===`quicksprint`){if(!R){A({tone:`error`,message:`Choose a quicksprint template.`});return}}else if(!V.trim()){A({tone:`error`,message:`Write the chat message to schedule.`});return}let a={title:r,targetType:N,scheduledFor:new Date(De).toISOString(),timezone:j?j.timezone:Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`,recurrence:e};N===`sprint`?a.sprintTarget={sprintId:I}:N===`quicksprint`?a.quicksprintTarget={templateId:R,taskCount:Oe,submitMode:`plan_and_start`}:a.chatTarget={bodyMarkdown:V.trim(),title:`Scheduled message`};try{j?(await he(j.id,a),A({tone:`success`,message:`Schedule entry updated.`}),Re()):(await me(i.id,a),A({tone:`success`,message:`Schedule entry created.`}),H(``),M(``)),await Q()}catch(e){A({tone:`error`,message:e instanceof Error?e.message:`Failed to save schedule entry.`})}},Ve=async(e,t)=>{try{await he(e,{status:t?`scheduled`:`paused`}),await Q()}catch(e){A({tone:`error`,message:e instanceof Error?e.message:`Failed to update schedule entry.`})}},He=async e=>{try{await ge(e),await Q()}catch(e){A({tone:`error`,message:e instanceof Error?e.message:`Failed to delete schedule entry.`})}};return i?n(le,{padding:`standard`,className:`gap-8`,"data-testid":`scheduler-page-root`,children:[n(`header`,{className:`flex flex-col lg:flex-row lg:items-end justify-between gap-8`,"data-testid":`scheduler-primary-header`,children:[n(`div`,{className:`flex flex-col gap-5`,children:[n(`div`,{className:`flex items-center gap-2.5 font-mono text-[10px] font-bold uppercase tracking-[0.2em] text-signal-500`,children:[n(ce,{className:`w-3.5 h-3.5`,strokeWidth:2.5}),`Runtime Scheduler`]}),n(`div`,{className:`relative overflow-hidden`,children:[n(`h2`,{"aria-hidden":!0,className:`absolute -top-10 -left-3 text-[7rem] font-black tracking-tighter text-black/[0.04] dark:text-white/[0.03] pointer-events-none select-none font-display leading-none`,children:`TIME`}),n(`h1`,{className:`text-5xl md:text-7xl font-black tracking-tighter text-slate-900 dark:text-white leading-[0.92] font-display relative z-10`,children:[`Schedule `,n(`br`,{}),n(`span`,{className:`text-signal-500`,children:`Events.`})]})]}),n(`p`,{className:`text-lg text-slate-500 dark:text-slate-500 font-medium max-w-xl mt-1 leading-relaxed`,children:`Calendar control for future sprint starts, quicksprint launches, and timed messages into the project chat agent.`})]}),n(`div`,{className:`flex max-w-full flex-wrap items-center gap-2 shrink-0`,children:[n(f,{variant:`secondary`,size:`md`,onClick:()=>p(x(l,-7)),children:`Previous`}),n(f,{variant:`primary`,size:`md`,onClick:()=>p(b(new Date)),children:`Today`}),n(f,{variant:`secondary`,size:`md`,onClick:()=>p(x(l,7)),children:`Next`}),n(`div`,{className:`ml-0 flex rounded-full border border-[color:var(--color-border-muted)] bg-white/72 p-1 dark:border-white/[0.06] dark:bg-white/[0.03] backdrop-blur-md lg:ml-2`,children:[`calendar`,`day`].map(e=>n(`button`,{type:`button`,onClick:()=>c(e),className:`min-h-[34px] rounded-full px-4 text-[10px] font-bold uppercase tracking-[0.14em] transition-all duration-150 ${o===e?`bg-signal-500 text-void-900 shadow-[0_2px_8px_rgba(0,224,160,0.2)]`:`text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white`}`,children:e===`calendar`?`Calendar`:`24 Hours`},e))})]})]}),n(`section`,{className:`grid gap-3 md:grid-cols-3`,children:[{label:`Active entries`,value:$.activeCount,detail:`ready to fire`,icon:se,tone:`text-signal-500`},{label:`Repeating`,value:$.repeatingCount,detail:`recurrence rules`,icon:de,tone:`text-signal-500`},{label:`Next run`,value:$.nextOccurrence?w($.nextOccurrence.startsAt):`None`,detail:$.nextOccurrence?$.nextOccurrence.title:`no upcoming work`,icon:d,tone:`text-ember-500`}].map(e=>n(`div`,{className:`relative overflow-hidden rounded-2xl border border-black/[0.06] bg-white/70 p-4 shadow-[0_2px_12px_rgba(0,0,0,0.02)] backdrop-blur-2xl dark:border-white/[0.06] dark:bg-void-800/60 dark:shadow-[0_4px_16px_rgba(0,0,0,0.1)]`,children:[n(`div`,{className:`pointer-events-none absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-white/80 to-transparent dark:via-white/10`}),n(`div`,{className:`flex items-center justify-between gap-4`,children:[n(`div`,{className:`min-w-0`,children:[n(`div`,{className:`text-[10px] font-mono font-bold uppercase tracking-[0.16em] text-slate-400 dark:text-slate-500`,children:e.label}),n(`div`,{className:`mt-1 truncate font-display text-2xl font-black tracking-tight text-slate-900 dark:text-white`,children:e.value}),n(`div`,{className:`mt-0.5 truncate text-[11px] font-medium text-slate-500 dark:text-slate-400`,children:e.detail})]}),n(`div`,{className:`flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-black/[0.03] dark:bg-white/[0.03] ${e.tone}`,children:n(e.icon,{className:`h-4.5 w-4.5`,strokeWidth:2})})]})]},e.label))}),n(`section`,{className:`grid gap-6 xl:grid-cols-[24rem_minmax(0,1fr)]`,children:[n(`aside`,{"data-testid":`scheduler-form-panel`,className:`rounded-[1.75rem] border border-black/[0.06] bg-white/70 p-5 shadow-[0_2px_20px_rgba(0,0,0,0.04)] backdrop-blur-2xl dark:border-white/[0.06] dark:bg-void-800/60 dark:shadow-[0_4px_24px_rgba(0,0,0,0.2)]`,children:[n(`div`,{className:`mb-5 flex items-center justify-between gap-3`,children:[n(`div`,{children:[n(`h3`,{className:`font-display text-2xl font-black tracking-tight text-slate-900 dark:text-white`,children:j?`Edit entry`:`Add entry`}),n(`p`,{className:`mt-1 text-xs font-medium text-slate-500 dark:text-slate-400`,children:j?`Modify the title, work, time, and recurrence.`:`Choose the work, time, and recurrence.`})]}),n(`div`,{className:`flex h-10 w-10 items-center justify-center rounded-xl ${j?`bg-signal-500/12 text-signal-500`:`bg-ember-500/12 text-ember-500`}`,children:n(j?s:oe,{className:`h-5 w-5`})})]}),n(`div`,{className:`grid grid-cols-3 gap-2`,children:_e.map(e=>n(`button`,{type:`button`,onClick:()=>P(e.value),className:`min-h-[70px] rounded-2xl border p-3 text-left transition-all duration-150 ${N===e.value?e.activeClassName:`border-black/[0.06] bg-black/[0.025] hover:bg-black/[0.04] dark:border-white/[0.06] dark:bg-white/[0.035] dark:hover:bg-white/[0.06]`}`,children:[n(e.icon,{className:`mb-2 h-4 w-4 ${e.tone}`}),n(`span`,{className:`block text-[10px] font-bold uppercase tracking-[0.1em] text-slate-600 dark:text-slate-300`,children:e.label})]},e.value))}),n(`div`,{className:`mt-5 space-y-4`,children:[n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Title`}),n(`input`,{type:`text`,value:Ee,onInput:e=>M(e.currentTarget.value),className:`mt-2 min-h-[44px] w-full ${h}`,placeholder:`Optional description/title`})]}),N===`sprint`&&n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Sprint`}),n(m,{value:I,onChange:L,searchable:!0,options:[{value:``,label:`Choose sprint`},...Ne.map(e=>({value:e.id,label:e.name})),...j&&j.sprintTarget&&!Ne.some(e=>e.id===j.sprintTarget?.sprintId)?[{value:j.sprintTarget.sprintId,label:D.find(e=>e.id===j.sprintTarget?.sprintId)?.name||j.sprintTarget.sprintId}]:[]],className:`mt-2`})]}),N===`quicksprint`&&n(`div`,{className:`grid gap-3`,children:[n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Quicksprint`}),n(m,{value:R,onChange:z,searchable:!0,options:[{value:``,label:`Choose template`},...O.map(e=>({value:e.id,label:e.name}))],className:`mt-2`})]}),n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Task count`}),n(`input`,{type:`number`,min:1,max:50,value:Oe,onInput:e=>B(Number(e.currentTarget.value)),className:`mt-2 min-h-[44px] w-full ${h}`})]})]}),N===`chat`&&n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Message to /chat`}),n(`textarea`,{value:V,onInput:e=>H(e.currentTarget.value),rows:5,className:`mt-2 w-full resize-none py-3 font-medium ${h}`,placeholder:`Ask the chat agent to check status, prepare a summary, or start a timed coordination step.`})]}),n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Date and time`}),n(`input`,{type:`datetime-local`,value:De,onInput:e=>F(e.currentTarget.value),className:`mt-2 min-h-[44px] w-full ${h}`}),n(`div`,{className:`mt-2 grid grid-cols-3 gap-2`,children:[{label:`In 1h`,date:()=>{let e=new Date;return e.setHours(e.getHours()+1,0,0,0),e}},{label:`Tomorrow 9`,date:()=>{let e=x(new Date,1);return e.setHours(9,0,0,0),e}},{label:`Monday 9`,date:()=>{let e=S(x(new Date,7));return e.setHours(9,0,0,0),e}}].map(e=>n(`button`,{type:`button`,onClick:()=>F(y(e.date())),className:`min-h-[32px] rounded-full border border-black/[0.06] bg-black/[0.025] px-2 text-[10px] font-black uppercase tracking-[0.11em] text-slate-500 transition hover:border-signal-500/20 hover:text-slate-900 dark:border-white/[0.06] dark:bg-white/[0.035] dark:text-slate-400 dark:hover:text-white`,children:e.label},e.label))})]}),n(`div`,{className:`rounded-2xl border border-black/[0.06] bg-black/[0.015] p-4 dark:border-white/[0.06] dark:bg-white/[0.02]`,children:[n(`label`,{className:`flex items-center justify-between gap-3`,children:[n(`span`,{className:`flex items-center gap-2 text-xs font-bold uppercase tracking-[0.12em] text-slate-600 dark:text-slate-300`,children:[n(de,{className:`h-4 w-4 text-signal-500`}),`Repeat`]}),n(`input`,{type:`checkbox`,checked:U,onChange:e=>W(e.currentTarget.checked),className:`h-5 w-5 accent-signal-500 rounded border-black/[0.08] dark:border-white/[0.08]`})]}),U&&n(`div`,{className:`mt-4 grid gap-3`,children:[n(`div`,{className:`grid grid-cols-[5rem_minmax(0,1fr)] gap-2`,children:[n(`input`,{type:`number`,min:1,value:Ae,onInput:e=>K(Number(e.currentTarget.value)),className:g}),n(m,{value:ke,onChange:e=>G(e),options:[{value:`hourly`,label:`Hours`},{value:`daily`,label:`Days`},{value:`weekly`,label:`Weeks`},{value:`monthly`,label:`Months`}]})]}),n(m,{value:q,onChange:e=>J(e),options:[{value:`never`,label:`Endless`},{value:`after_count`,label:`Specific iterations`},{value:`on_date`,label:`End date/time`}]}),q===`after_count`&&n(`input`,{type:`number`,min:1,value:je,onInput:e=>Y(Number(e.currentTarget.value)),className:g}),q===`on_date`&&n(`input`,{type:`datetime-local`,value:Me,onInput:e=>X(e.currentTarget.value),className:g})]})]}),n(`div`,{className:`flex gap-2`,children:[j&&n(f,{variant:`secondary`,size:`lg`,onClick:Re,className:`flex-1 text-[10px] uppercase tracking-[0.16em]`,children:`Cancel`}),n(f,{variant:`signal`,size:`lg`,onClick:()=>void Be(),className:j?`flex-1 text-[10px] uppercase tracking-[0.16em]`:`w-full text-[10px] uppercase tracking-[0.16em]`,icon:j?u:fe,children:j?`Save`:`Schedule`})]}),k.message&&n(`div`,{className:`rounded-[var(--radius-ui)] border px-4 py-3 text-xs font-semibold backdrop-blur-md transition-all duration-150 ${k.tone===`error`?`border-status-red/20 bg-status-red/[0.06] text-status-red`:`border-signal-500/20 bg-signal-500/[0.06] text-signal-600 dark:text-signal-400`}`,children:k.message})]})]}),n(`div`,{className:`min-w-0 space-y-6`,children:[n(`section`,{"data-testid":`scheduler-calendar-panel`,className:`rounded-[1.75rem] border border-black/[0.06] bg-white/70 p-4 shadow-[0_2px_20px_rgba(0,0,0,0.04)] backdrop-blur-2xl dark:border-white/[0.06] dark:bg-void-800/60 dark:shadow-[0_4px_24px_rgba(0,0,0,0.2)] md:p-5`,children:[n(`div`,{className:`mb-4 flex flex-col gap-2 md:flex-row md:items-center md:justify-between`,children:[n(`div`,{children:[n(`h3`,{className:`font-display text-2xl font-black tracking-tight text-slate-900 dark:text-white`,children:o===`calendar`?`Calendar view`:`24 hour view`}),n(`p`,{className:`text-xs font-medium text-slate-500 dark:text-slate-400`,children:Ce?`Refreshing schedule...`:`${$.visibleCount} visible occurrences · ${C(Z.from)} to ${C(Z.to)}`})]}),n(f,{variant:`secondary`,size:`sm`,onClick:()=>void Q(),icon:ie,className:`uppercase tracking-[0.14em]`,children:`Refresh`})]}),o===`calendar`?n(`div`,{className:`grid grid-flow-col auto-cols-[minmax(8.75rem,1fr)] gap-3 overflow-x-auto pb-2 dashboard-scrollbar`,children:Pe.map(e=>{let t=b(e).toISOString(),r=Ie.get(t)||[],i=t===b(l).toISOString(),a=t===b(new Date).toISOString();return n(`button`,{type:`button`,onClick:()=>p(e),className:`min-h-[13rem] rounded-2xl border p-3.5 text-left transition-all duration-150 ${i?`border-signal-500/35 bg-signal-500/[0.08] shadow-[0_4px_16px_rgba(0,224,160,0.08)]`:`border-black/[0.06] bg-black/[0.015] hover:-translate-y-0.5 hover:bg-black/[0.03] dark:border-white/[0.06] dark:bg-white/[0.02] dark:hover:bg-white/[0.04]`}`,children:[n(`div`,{className:`flex items-center justify-between gap-2`,children:[n(`span`,{className:`whitespace-nowrap text-xs font-black uppercase tracking-[0.12em] text-slate-600 dark:text-slate-300`,children:C(e)}),n(`span`,{className:`rounded-full px-2 py-0.5 text-[10px] font-bold ${a?`bg-signal-500 text-void-900 shadow-[0_2px_8px_rgba(0,224,160,0.2)]`:`bg-white/80 text-slate-500 dark:bg-white/[0.06] dark:text-slate-400`}`,children:r.length})]}),n(`div`,{className:`mt-3 space-y-2`,children:[r.slice(0,5).map(e=>{let t=_.get(e.targetType);return n(`div`,{className:`rounded-xl border border-black/[0.04] bg-white/80 p-2 text-xs shadow-sm dark:border-white/[0.05] dark:bg-white/[0.04]`,children:[n(`div`,{className:`flex items-center justify-between gap-2`,children:[n(`span`,{className:`font-bold text-slate-800 dark:text-white`,children:w(e.startsAt)}),n(`div`,{className:`flex items-center gap-1`,children:[n(`span`,{className:`rounded-full px-1.5 py-0.5 text-[8px] font-black uppercase tracking-[0.12em] ${t?.chipClassName||`bg-slate-500/10 text-slate-500`}`,children:T(e.targetType)}),n(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),ze(e)},className:`inline-flex h-5 w-5 items-center justify-center rounded-full border border-black/[0.06] bg-white/70 text-slate-600 transition-all duration-150 hover:bg-white hover:text-slate-950 dark:border-white/[0.06] dark:bg-white/[0.03] dark:text-slate-300 dark:hover:bg-white/[0.05] dark:hover:text-white`,"aria-label":`Edit schedule entry from occurrence`,children:n(s,{className:`h-2.5 w-2.5`})})]})]}),n(`div`,{className:`mt-1 line-clamp-2 font-semibold text-slate-500 dark:text-slate-400`,children:e.title})]},e.id)}),r.length>5&&n(`div`,{className:`text-[10px] font-bold text-slate-400`,children:[`+`,r.length-5,` more`]})]})]},t)})}):n(`div`,{className:`max-h-[46rem] space-y-2 overflow-y-auto pr-1 dashboard-scrollbar`,children:Array.from({length:24},(e,t)=>{let r=Fe.filter(e=>new Date(e.startsAt).getHours()===t);return n(`div`,{className:`grid min-h-[64px] grid-cols-[4.5rem_minmax(0,1fr)] gap-3 rounded-xl border border-black/[0.04] bg-black/[0.01] p-2 dark:border-white/[0.04] dark:bg-white/[0.01]`,children:[n(`div`,{className:`pt-2 text-right text-[11px] font-mono font-bold uppercase tracking-[0.14em] text-slate-400 dark:text-slate-500`,children:[v(t),`:00`]}),n(`div`,{className:`space-y-2 border-l border-black/[0.05] pl-3 dark:border-white/[0.05]`,children:[r.length===0&&n(`div`,{className:`h-full min-h-[42px] rounded-xl border border-dashed border-black/[0.04] bg-white/[0.1] dark:border-white/[0.04] dark:bg-white/[0.01]`}),r.map(e=>{let t=_.get(e.targetType);return n(`div`,{className:`rounded-xl border border-black/[0.04] bg-white/80 p-3 shadow-sm dark:border-white/[0.05] dark:bg-white/[0.04]`,children:[n(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[n(`span`,{className:`inline-flex items-center gap-2 text-xs font-black text-slate-900 dark:text-white`,children:[n(d,{className:`h-3.5 w-3.5 ${t?.tone||`text-signal-500`}`}),w(e.startsAt)]}),n(`div`,{className:`flex items-center gap-2`,children:[n(`span`,{className:`rounded-full px-2 py-0.5 text-[9px] font-black uppercase tracking-[0.12em] ${t?.chipClassName||`bg-slate-500/10 text-slate-500`}`,children:T(e.targetType)}),n(`button`,{type:`button`,onClick:()=>ze(e),className:`inline-flex h-6 w-6 items-center justify-center rounded-full border border-black/[0.06] bg-white/70 text-slate-600 transition-all duration-150 hover:bg-white hover:text-slate-950 dark:border-white/[0.06] dark:bg-white/[0.03] dark:text-slate-300 dark:hover:bg-white/[0.05] dark:hover:text-white`,"aria-label":`Edit schedule entry from occurrence`,children:n(s,{className:`h-3 w-3`})})]})]}),n(`div`,{className:`mt-2 text-sm font-bold text-slate-700 dark:text-slate-200`,children:e.title})]},e.id)})]})]},t)})})]}),n(`section`,{className:`rounded-[1.75rem] border border-black/[0.06] bg-white/70 p-4 shadow-[0_2px_20px_rgba(0,0,0,0.04)] backdrop-blur-2xl dark:border-white/[0.06] dark:bg-void-800/60 dark:shadow-[0_4px_24px_rgba(0,0,0,0.2)] md:p-5`,children:[n(`div`,{className:`mb-4 flex items-center justify-between gap-3`,children:[n(`div`,{children:[n(`h3`,{className:`font-display text-2xl font-black tracking-tight text-slate-900 dark:text-white`,children:`Scheduled entries`}),n(`p`,{className:`text-xs font-medium text-slate-500 dark:text-slate-400`,children:`Pause, resume, or remove future automation.`})]}),n(u,{className:`h-5 w-5 text-signal-500`})]}),n(`div`,{className:`space-y-3`,children:[(E?.entries||[]).length===0&&n(`div`,{className:`rounded-2xl border border-dashed border-black/[0.10] p-6 text-sm font-semibold text-slate-500 dark:border-white/[0.10] dark:text-slate-400`,children:`No scheduled entries yet.`}),(E?.entries||[]).map(e=>n(`div`,{className:`grid gap-3 rounded-2xl border border-black/[0.05] bg-white/60 p-4 shadow-sm transition-all duration-150 hover:-translate-y-0.5 hover:shadow-[0_4px_16px_rgba(0,0,0,0.04)] dark:border-white/[0.05] dark:bg-white/[0.03] md:grid-cols-[minmax(0,1fr)_auto] md:items-center`,children:[n(`div`,{className:`min-w-0`,children:[n(`div`,{className:`flex flex-wrap items-center gap-2`,children:[n(`span`,{className:`rounded-full px-2 py-0.5 text-[9px] font-black uppercase tracking-[0.12em] ${_.get(e.targetType)?.chipClassName||`bg-slate-500/10 text-slate-500`}`,children:T(e.targetType)}),n(`span`,{className:`rounded-full bg-black/[0.04] px-2 py-0.5 text-[9px] font-black uppercase tracking-[0.12em] text-slate-500 dark:bg-white/[0.06] dark:text-slate-400`,children:e.status}),e.runCount>0&&n(`span`,{className:`rounded-full border border-signal-500/20 bg-signal-500/10 px-2 py-0.5 text-[9px] font-black uppercase tracking-[0.12em] text-signal-600 dark:text-signal-400`,children:[`Fired (`,e.runCount,`)`]}),n(`span`,{className:`text-[11px] font-bold text-slate-400`,children:ve(e.recurrence)})]}),n(`h4`,{className:`mt-2 truncate text-sm font-black text-slate-900 dark:text-white`,children:e.title}),n(`p`,{className:`mt-1 text-xs font-medium text-slate-500 dark:text-slate-400`,children:[`Next run: `,e.nextRunAt?new Date(e.nextRunAt).toLocaleString():`none`,e.lastRunAt&&` · Last fired: ${new Date(e.lastRunAt).toLocaleString()}`]}),e.lastError&&n(`p`,{className:`mt-2 text-xs font-bold text-status-red`,children:e.lastError})]}),n(`div`,{className:`flex items-center gap-2`,children:[n(`button`,{type:`button`,onClick:()=>Le(e),className:`inline-flex h-9 w-9 items-center justify-center rounded-full border border-black/[0.06] bg-white/70 text-slate-600 transition-all duration-150 hover:bg-white hover:text-slate-950 dark:border-white/[0.06] dark:bg-white/[0.03] dark:text-slate-300 dark:hover:bg-white/[0.05] dark:hover:text-white`,"aria-label":`Edit schedule entry`,children:n(s,{className:`h-3.5 w-3.5`})}),n(`button`,{type:`button`,onClick:()=>void Ve(e.id,e.status===`paused`),disabled:e.status===`completed`||e.status===`cancelled`,className:`inline-flex h-9 w-9 items-center justify-center rounded-full border border-black/[0.06] bg-white/70 text-slate-600 transition-all duration-150 hover:bg-white hover:text-slate-950 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/[0.06] dark:bg-white/[0.03] dark:text-slate-300 dark:hover:bg-white/[0.05] dark:hover:text-white`,"aria-label":e.status===`paused`?`Resume schedule entry`:`Pause schedule entry`,children:e.status===`paused`?n(se,{className:`h-3.5 w-3.5`}):n(ae,{className:`h-3.5 w-3.5`})}),n(`button`,{type:`button`,onClick:()=>void He(e.id),className:`inline-flex h-9 w-9 items-center justify-center rounded-full border border-status-red/20 bg-status-red/[0.06] text-status-red transition-all duration-150 hover:bg-status-red/[0.12]`,"aria-label":`Delete schedule entry`,children:n(ue,{className:`h-3.5 w-3.5`})})]})]},e.id))]})]})]})]})]}):n(le,{padding:`standard`,className:`gap-8`,children:n(ye,{})})};export{E as SchedulerPage};
|
|
1
|
+
import{S as e,_ as t,a as n,w as r,x as i,y as a}from"./vendor-Dl0fhdV0.js";import{t as o}from"./createLucideIcon-BshUfn15.js";import{i as ee,o as s}from"./quicksprint-api-BQTtbGzW.js";import{D as te,R as ne,X as c,r as re}from"./project-data-BSCsMQnj.js";import{Ar as ie,Fr as ae,Mr as oe,Nr as se,Oi as ce,Rr as l,St as le,Ti as u,fi as d,kt as f,mr as p,st as m,yr as ue}from"./index-DdNzHP9F.js";var de=o(`repeat`,[[`path`,{d:`m17 2 4 4-4 4`,key:`nntrym`}],[`path`,{d:`M3 11v-1a4 4 0 0 1 4-4h14`,key:`84bu3i`}],[`path`,{d:`m7 22-4-4 4-4`,key:`1wqhfi`}],[`path`,{d:`M21 13v1a4 4 0 0 1-4 4H3`,key:`1rx37r`}]]),fe=o(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]);i();var pe=async(e,t,n,r)=>{let i=new URL(`/api/projects/${encodeURIComponent(e)}/scheduler`,window.location.origin);return i.searchParams.set(`from`,t),i.searchParams.set(`to`,n),c(`${i.pathname}${i.search}`,{signal:r})},me=async(e,t)=>c(`/api/projects/${encodeURIComponent(e)}/scheduler`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),he=async(e,t)=>c(`/api/scheduler/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),ge=async e=>{await c(`/api/scheduler/${encodeURIComponent(e)}`,{method:`DELETE`})},h=`scheduler-field rounded-[var(--radius-ui)] border border-[color:var(--color-border-muted)] dark:border-white/[0.06] hover:border-[color:var(--color-border-muted)] dark:hover:border-white/[0.12] bg-white/80 dark:bg-white/[0.05] px-3.5 text-sm font-semibold text-slate-700 dark:text-slate-200 placeholder-slate-400 shadow-[inset_0_1px_0_rgba(255,255,255,0.55)] outline-none transition-all duration-150 ease-[cubic-bezier(0.4,0,0.2,1)] focus:border-signal-500/40 focus:outline-none focus:ring-2 focus:ring-signal-500/20`,g=`${h} min-h-[40px]`,_e=[{value:`sprint`,label:`Sprint`,icon:p,tone:`text-ember-500`,activeClassName:`border-ember-500/35 bg-ember-500/10 shadow-[0_12px_34px_rgba(255,184,0,0.13)]`,chipClassName:`bg-ember-500/12 text-ember-600 dark:text-ember-400`},{value:`quicksprint`,label:`Quicksprint`,icon:ie,tone:`text-sky-500`,activeClassName:`border-sky-500/35 bg-sky-500/10 shadow-[0_12px_34px_rgba(14,165,233,0.13)]`,chipClassName:`bg-sky-500/12 text-sky-600 dark:text-sky-400`},{value:`chat`,label:`Chat message`,icon:l,tone:`text-violet-500`,activeClassName:`border-violet-500/35 bg-violet-500/10 shadow-[0_12px_34px_rgba(139,92,246,0.13)]`,chipClassName:`bg-violet-500/12 text-violet-600 dark:text-violet-400`}],_=new Map(_e.map(e=>[e.value,e])),v=e=>String(e).padStart(2,`0`),y=e=>`${e.getFullYear()}-${v(e.getMonth()+1)}-${v(e.getDate())}T${v(e.getHours())}:${v(e.getMinutes())}`,b=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t},x=(e,t)=>{let n=new Date(e);return n.setDate(n.getDate()+t),n},S=e=>{let t=b(e);return x(t,-((t.getDay()+6)%7))},C=e=>e.toLocaleDateString(void 0,{weekday:`short`,month:`short`,day:`numeric`}),w=e=>new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`}),T=e=>e===`sprint`?`Sprint`:e===`quicksprint`?`Quicksprint`:`Chat`,ve=e=>{if(e.frequency===`none`)return`One time`;let t=e.interval===1?e.frequency:`${e.interval} ${e.frequency}`;return e.endMode===`after_count`&&e.count?`Every ${t}, ${e.count} runs`:e.endMode===`on_date`&&e.until?`Every ${t} until ${new Date(e.until).toLocaleString()}`:`Every ${t}`},ye=()=>n(`div`,{className:`rounded-[1.75rem] border border-black/[0.06] bg-white/70 p-6 md:p-8 shadow-[0_2px_20px_rgba(0,0,0,0.04)] backdrop-blur-2xl dark:border-white/[0.06] dark:bg-void-800/60 dark:shadow-[0_4px_24px_rgba(0,0,0,0.2)]`,children:[n(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-2xl border border-signal-500/20 bg-signal-500/[0.08] text-signal-500 shadow-[0_0_15px_rgba(0,224,160,0.08)]`,children:n(ce,{className:`h-5 w-5`})}),n(`h1`,{className:`mt-5 font-display text-2xl md:text-3xl font-black tracking-tight text-slate-900 dark:text-white`,children:`Select a project to schedule work.`}),n(`p`,{className:`mt-3 max-w-xl text-sm font-medium leading-relaxed text-slate-500 dark:text-slate-400`,children:`Scheduler entries are project-scoped so sprints, quicksprints, and chat messages run against the right workspace.`})]}),E=()=>{let{selectedProject:i}=re(),[o,c]=a(`calendar`),[l,p]=a(()=>b(new Date)),[E,be]=a(null),[D,xe]=a([]),[O,Se]=a([]),[Ce,we]=a(!1),[k,A]=a({tone:`idle`,message:null}),[j,Te]=a(null),[Ee,M]=a(``),[N,P]=a(`sprint`),[De,F]=a(()=>{let e=new Date;return e.setHours(e.getHours()+1,0,0,0),y(e)}),[I,L]=a(``),[R,z]=a(``),[Oe,B]=a(5),[V,H]=a(``),[U,W]=a(!1),[ke,G]=a(`daily`),[Ae,K]=a(1),[q,J]=a(`never`),[je,Y]=a(6),[Me,X]=a(()=>y(x(new Date,30))),Z=t(()=>{let e=S(l),t=x(e,6);return t.setHours(23,59,59,999),{from:e,to:t}},[l]),Q=e(async e=>{if(i){we(!0);try{let[t,n,r]=await Promise.all([pe(i.id,Z.from.toISOString(),Z.to.toISOString(),e),ne(i.id,e),ee(i.id)]);be(t),xe(n.sprints),Se(r),L(e=>e||n.sprints.find(e=>e.status!==`completed`)?.id||``),z(e=>e||r[0]?.id||``)}catch(t){e?.aborted||A({tone:`error`,message:t instanceof Error?t.message:`Failed to load scheduler.`})}finally{e?.aborted||we(!1)}}},[Z.from,Z.to,i]);r(()=>{let e=new AbortController;return Q(e.signal),()=>e.abort()},[Q]),r(()=>{if(i?.id)return te([`project:${i.id}`],e=>{e.type===`event`&&e.event.eventType===`project.live.updated`&&Q()})},[i?.id,Q]);let Ne=t(()=>D.filter(e=>e.status!==`completed`),[D]),Pe=t(()=>Array.from({length:7},(e,t)=>x(S(l),t)),[l]),Fe=t(()=>{let e=b(l).getTime(),t=x(b(l),1).getTime();return(E?.occurrences||[]).filter(n=>{let r=new Date(n.startsAt).getTime();return r>=e&&r<t})},[E?.occurrences,l]),Ie=t(()=>{let e=new Map;for(let t of E?.occurrences||[]){let n=b(new Date(t.startsAt)).toISOString();e.set(n,[...e.get(n)||[],t])}return e},[E?.occurrences]),$=t(()=>{let e=E?.entries||[],t=e.filter(e=>e.status===`scheduled`),n=e.filter(e=>e.recurrence.frequency!==`none`),r=(E?.occurrences||[]).filter(e=>new Date(e.startsAt).getTime()>=Date.now()).sort((e,t)=>new Date(e.startsAt).getTime()-new Date(t.startsAt).getTime())[0]||null;return{activeCount:t.length,repeatingCount:n.length,visibleCount:E?.occurrences.length||0,nextOccurrence:r}},[E?.entries,E?.occurrences]),Le=e=>{Te(e),M(e.title),P(e.targetType),F(y(new Date(e.scheduledFor))),e.targetType===`sprint`&&e.sprintTarget?L(e.sprintTarget.sprintId):e.targetType===`quicksprint`&&e.quicksprintTarget?(z(e.quicksprintTarget.templateId),B(e.quicksprintTarget.taskCount)):e.targetType===`chat`&&e.chatTarget&&H(e.chatTarget.bodyMarkdown),e.recurrence&&e.recurrence.frequency!==`none`?(W(!0),G(e.recurrence.frequency),K(e.recurrence.interval||1),J(e.recurrence.endMode||`never`),Y(e.recurrence.count||6),X(e.recurrence.until?y(new Date(e.recurrence.until)):y(x(new Date,30)))):W(!1)},Re=()=>{Te(null),M(``),P(`sprint`);let e=new Date;e.setHours(e.getHours()+1,0,0,0),F(y(e)),L(D.find(e=>e.status!==`completed`)?.id||``),z(O[0]?.id||``),B(5),H(``),W(!1),G(`daily`),K(1),J(`never`),Y(6),X(y(x(new Date,30))),A({tone:`idle`,message:null})},ze=e=>{let t=(E?.entries||[]).find(t=>t.id===e.entryId);t?Le(t):A({tone:`error`,message:`Parent schedule entry not found.`})},Be=async()=>{if(!i)return;A({tone:`idle`,message:null});let e=U?{frequency:ke,interval:Ae,endMode:q,count:q===`after_count`?je:null,until:q===`on_date`?new Date(Me).toISOString():null}:{frequency:`none`,interval:1,endMode:`never`},t=Ee.trim(),n=(()=>{if(N===`sprint`){let e=D.find(e=>e.id===I);return e?`Run ${e.name}`:`Scheduled sprint`}else if(N===`quicksprint`){let e=O.find(e=>e.id===R);return e?`Run ${e.name}`:`Scheduled quicksprint`}else return`Scheduled chat message`})(),r=t||n;if(N===`sprint`){if(!I){A({tone:`error`,message:`Choose a sprint that is not completed.`});return}let e=D.find(e=>e.id===I);if(!e||e.status===`completed`&&(!j||j.sprintTarget?.sprintId!==I)){A({tone:`error`,message:`Choose a sprint that is not completed.`});return}}else if(N===`quicksprint`){if(!R){A({tone:`error`,message:`Choose a quicksprint template.`});return}}else if(!V.trim()){A({tone:`error`,message:`Write the chat message to schedule.`});return}let a={title:r,targetType:N,scheduledFor:new Date(De).toISOString(),timezone:j?j.timezone:Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`,recurrence:e};N===`sprint`?a.sprintTarget={sprintId:I}:N===`quicksprint`?a.quicksprintTarget={templateId:R,taskCount:Oe,submitMode:`plan_and_start`}:a.chatTarget={bodyMarkdown:V.trim(),title:`Scheduled message`};try{j?(await he(j.id,a),A({tone:`success`,message:`Schedule entry updated.`}),Re()):(await me(i.id,a),A({tone:`success`,message:`Schedule entry created.`}),H(``),M(``)),await Q()}catch(e){A({tone:`error`,message:e instanceof Error?e.message:`Failed to save schedule entry.`})}},Ve=async(e,t)=>{try{await he(e,{status:t?`scheduled`:`paused`}),await Q()}catch(e){A({tone:`error`,message:e instanceof Error?e.message:`Failed to update schedule entry.`})}},He=async e=>{try{await ge(e),await Q()}catch(e){A({tone:`error`,message:e instanceof Error?e.message:`Failed to delete schedule entry.`})}};return i?n(le,{padding:`standard`,className:`gap-8`,"data-testid":`scheduler-page-root`,children:[n(`header`,{className:`flex flex-col lg:flex-row lg:items-end justify-between gap-8`,"data-testid":`scheduler-primary-header`,children:[n(`div`,{className:`flex flex-col gap-5`,children:[n(`div`,{className:`flex items-center gap-2.5 font-mono text-[10px] font-bold uppercase tracking-[0.2em] text-signal-500`,children:[n(ce,{className:`w-3.5 h-3.5`,strokeWidth:2.5}),`Runtime Scheduler`]}),n(`div`,{className:`relative overflow-hidden`,children:[n(`h2`,{"aria-hidden":!0,className:`absolute -top-10 -left-3 text-[7rem] font-black tracking-tighter text-black/[0.04] dark:text-white/[0.03] pointer-events-none select-none font-display leading-none`,children:`TIME`}),n(`h1`,{className:`text-5xl md:text-7xl font-black tracking-tighter text-slate-900 dark:text-white leading-[0.92] font-display relative z-10`,children:[`Schedule `,n(`br`,{}),n(`span`,{className:`text-signal-500`,children:`Events.`})]})]}),n(`p`,{className:`text-lg text-slate-500 dark:text-slate-500 font-medium max-w-xl mt-1 leading-relaxed`,children:`Calendar control for future sprint starts, quicksprint launches, and timed messages into the project chat agent.`})]}),n(`div`,{className:`flex max-w-full flex-wrap items-center gap-2 shrink-0`,children:[n(f,{variant:`secondary`,size:`md`,onClick:()=>p(x(l,-7)),children:`Previous`}),n(f,{variant:`primary`,size:`md`,onClick:()=>p(b(new Date)),children:`Today`}),n(f,{variant:`secondary`,size:`md`,onClick:()=>p(x(l,7)),children:`Next`}),n(`div`,{className:`ml-0 flex rounded-full border border-[color:var(--color-border-muted)] bg-white/72 p-1 dark:border-white/[0.06] dark:bg-white/[0.03] backdrop-blur-md lg:ml-2`,children:[`calendar`,`day`].map(e=>n(`button`,{type:`button`,onClick:()=>c(e),className:`min-h-[34px] rounded-full px-4 text-[10px] font-bold uppercase tracking-[0.14em] transition-all duration-150 ${o===e?`bg-signal-500 text-void-900 shadow-[0_2px_8px_rgba(0,224,160,0.2)]`:`text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white`}`,children:e===`calendar`?`Calendar`:`24 Hours`},e))})]})]}),n(`section`,{className:`grid gap-3 md:grid-cols-3`,children:[{label:`Active entries`,value:$.activeCount,detail:`ready to fire`,icon:se,tone:`text-signal-500`},{label:`Repeating`,value:$.repeatingCount,detail:`recurrence rules`,icon:de,tone:`text-signal-500`},{label:`Next run`,value:$.nextOccurrence?w($.nextOccurrence.startsAt):`None`,detail:$.nextOccurrence?$.nextOccurrence.title:`no upcoming work`,icon:d,tone:`text-ember-500`}].map(e=>n(`div`,{className:`relative overflow-hidden rounded-2xl border border-black/[0.06] bg-white/70 p-4 shadow-[0_2px_12px_rgba(0,0,0,0.02)] backdrop-blur-2xl dark:border-white/[0.06] dark:bg-void-800/60 dark:shadow-[0_4px_16px_rgba(0,0,0,0.1)]`,children:[n(`div`,{className:`pointer-events-none absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-white/80 to-transparent dark:via-white/10`}),n(`div`,{className:`flex items-center justify-between gap-4`,children:[n(`div`,{className:`min-w-0`,children:[n(`div`,{className:`text-[10px] font-mono font-bold uppercase tracking-[0.16em] text-slate-400 dark:text-slate-500`,children:e.label}),n(`div`,{className:`mt-1 truncate font-display text-2xl font-black tracking-tight text-slate-900 dark:text-white`,children:e.value}),n(`div`,{className:`mt-0.5 truncate text-[11px] font-medium text-slate-500 dark:text-slate-400`,children:e.detail})]}),n(`div`,{className:`flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-black/[0.03] dark:bg-white/[0.03] ${e.tone}`,children:n(e.icon,{className:`h-4.5 w-4.5`,strokeWidth:2})})]})]},e.label))}),n(`section`,{className:`grid gap-6 xl:grid-cols-[24rem_minmax(0,1fr)]`,children:[n(`aside`,{"data-testid":`scheduler-form-panel`,className:`rounded-[1.75rem] border border-black/[0.06] bg-white/70 p-5 shadow-[0_2px_20px_rgba(0,0,0,0.04)] backdrop-blur-2xl dark:border-white/[0.06] dark:bg-void-800/60 dark:shadow-[0_4px_24px_rgba(0,0,0,0.2)]`,children:[n(`div`,{className:`mb-5 flex items-center justify-between gap-3`,children:[n(`div`,{children:[n(`h3`,{className:`font-display text-2xl font-black tracking-tight text-slate-900 dark:text-white`,children:j?`Edit entry`:`Add entry`}),n(`p`,{className:`mt-1 text-xs font-medium text-slate-500 dark:text-slate-400`,children:j?`Modify the title, work, time, and recurrence.`:`Choose the work, time, and recurrence.`})]}),n(`div`,{className:`flex h-10 w-10 items-center justify-center rounded-xl ${j?`bg-signal-500/12 text-signal-500`:`bg-ember-500/12 text-ember-500`}`,children:n(j?s:oe,{className:`h-5 w-5`})})]}),n(`div`,{className:`grid grid-cols-3 gap-2`,children:_e.map(e=>n(`button`,{type:`button`,onClick:()=>P(e.value),className:`min-h-[70px] rounded-2xl border p-3 text-left transition-all duration-150 ${N===e.value?e.activeClassName:`border-black/[0.06] bg-black/[0.025] hover:bg-black/[0.04] dark:border-white/[0.06] dark:bg-white/[0.035] dark:hover:bg-white/[0.06]`}`,children:[n(e.icon,{className:`mb-2 h-4 w-4 ${e.tone}`}),n(`span`,{className:`block text-[10px] font-bold uppercase tracking-[0.1em] text-slate-600 dark:text-slate-300`,children:e.label})]},e.value))}),n(`div`,{className:`mt-5 space-y-4`,children:[n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Title`}),n(`input`,{type:`text`,value:Ee,onInput:e=>M(e.currentTarget.value),className:`mt-2 min-h-[44px] w-full ${h}`,placeholder:`Optional description/title`})]}),N===`sprint`&&n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Sprint`}),n(m,{value:I,onChange:L,searchable:!0,options:[{value:``,label:`Choose sprint`},...Ne.map(e=>({value:e.id,label:e.name})),...j&&j.sprintTarget&&!Ne.some(e=>e.id===j.sprintTarget?.sprintId)?[{value:j.sprintTarget.sprintId,label:D.find(e=>e.id===j.sprintTarget?.sprintId)?.name||j.sprintTarget.sprintId}]:[]],className:`mt-2`})]}),N===`quicksprint`&&n(`div`,{className:`grid gap-3`,children:[n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Quicksprint`}),n(m,{value:R,onChange:z,searchable:!0,options:[{value:``,label:`Choose template`},...O.map(e=>({value:e.id,label:e.name}))],className:`mt-2`})]}),n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Task count`}),n(`input`,{type:`number`,min:1,max:50,value:Oe,onInput:e=>B(Number(e.currentTarget.value)),className:`mt-2 min-h-[44px] w-full ${h}`})]})]}),N===`chat`&&n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Message to /chat`}),n(`textarea`,{value:V,onInput:e=>H(e.currentTarget.value),rows:5,className:`mt-2 w-full resize-none py-3 font-medium ${h}`,placeholder:`Ask the chat agent to check status, prepare a summary, or start a timed coordination step.`})]}),n(`label`,{className:`block`,children:[n(`span`,{className:`text-[10px] font-bold uppercase tracking-[0.14em] text-slate-400`,children:`Date and time`}),n(`input`,{type:`datetime-local`,value:De,onInput:e=>F(e.currentTarget.value),className:`mt-2 min-h-[44px] w-full ${h}`}),n(`div`,{className:`mt-2 grid grid-cols-3 gap-2`,children:[{label:`In 1h`,date:()=>{let e=new Date;return e.setHours(e.getHours()+1,0,0,0),e}},{label:`Tomorrow 9`,date:()=>{let e=x(new Date,1);return e.setHours(9,0,0,0),e}},{label:`Monday 9`,date:()=>{let e=S(x(new Date,7));return e.setHours(9,0,0,0),e}}].map(e=>n(`button`,{type:`button`,onClick:()=>F(y(e.date())),className:`min-h-[32px] rounded-full border border-black/[0.06] bg-black/[0.025] px-2 text-[10px] font-black uppercase tracking-[0.11em] text-slate-500 transition hover:border-signal-500/20 hover:text-slate-900 dark:border-white/[0.06] dark:bg-white/[0.035] dark:text-slate-400 dark:hover:text-white`,children:e.label},e.label))})]}),n(`div`,{className:`rounded-2xl border border-black/[0.06] bg-black/[0.015] p-4 dark:border-white/[0.06] dark:bg-white/[0.02]`,children:[n(`label`,{className:`flex items-center justify-between gap-3`,children:[n(`span`,{className:`flex items-center gap-2 text-xs font-bold uppercase tracking-[0.12em] text-slate-600 dark:text-slate-300`,children:[n(de,{className:`h-4 w-4 text-signal-500`}),`Repeat`]}),n(`input`,{type:`checkbox`,checked:U,onChange:e=>W(e.currentTarget.checked),className:`h-5 w-5 accent-signal-500 rounded border-black/[0.08] dark:border-white/[0.08]`})]}),U&&n(`div`,{className:`mt-4 grid gap-3`,children:[n(`div`,{className:`grid grid-cols-[5rem_minmax(0,1fr)] gap-2`,children:[n(`input`,{type:`number`,min:1,value:Ae,onInput:e=>K(Number(e.currentTarget.value)),className:g}),n(m,{value:ke,onChange:e=>G(e),options:[{value:`hourly`,label:`Hours`},{value:`daily`,label:`Days`},{value:`weekly`,label:`Weeks`},{value:`monthly`,label:`Months`}]})]}),n(m,{value:q,onChange:e=>J(e),options:[{value:`never`,label:`Endless`},{value:`after_count`,label:`Specific iterations`},{value:`on_date`,label:`End date/time`}]}),q===`after_count`&&n(`input`,{type:`number`,min:1,value:je,onInput:e=>Y(Number(e.currentTarget.value)),className:g}),q===`on_date`&&n(`input`,{type:`datetime-local`,value:Me,onInput:e=>X(e.currentTarget.value),className:g})]})]}),n(`div`,{className:`flex gap-2`,children:[j&&n(f,{variant:`secondary`,size:`lg`,onClick:Re,className:`flex-1 text-[10px] uppercase tracking-[0.16em]`,children:`Cancel`}),n(f,{variant:`signal`,size:`lg`,onClick:()=>void Be(),className:j?`flex-1 text-[10px] uppercase tracking-[0.16em]`:`w-full text-[10px] uppercase tracking-[0.16em]`,icon:j?u:fe,children:j?`Save`:`Schedule`})]}),k.message&&n(`div`,{className:`rounded-[var(--radius-ui)] border px-4 py-3 text-xs font-semibold backdrop-blur-md transition-all duration-150 ${k.tone===`error`?`border-status-red/20 bg-status-red/[0.06] text-status-red`:`border-signal-500/20 bg-signal-500/[0.06] text-signal-600 dark:text-signal-400`}`,children:k.message})]})]}),n(`div`,{className:`min-w-0 space-y-6`,children:[n(`section`,{"data-testid":`scheduler-calendar-panel`,className:`rounded-[1.75rem] border border-black/[0.06] bg-white/70 p-4 shadow-[0_2px_20px_rgba(0,0,0,0.04)] backdrop-blur-2xl dark:border-white/[0.06] dark:bg-void-800/60 dark:shadow-[0_4px_24px_rgba(0,0,0,0.2)] md:p-5`,children:[n(`div`,{className:`mb-4 flex flex-col gap-2 md:flex-row md:items-center md:justify-between`,children:[n(`div`,{children:[n(`h3`,{className:`font-display text-2xl font-black tracking-tight text-slate-900 dark:text-white`,children:o===`calendar`?`Calendar view`:`24 hour view`}),n(`p`,{className:`text-xs font-medium text-slate-500 dark:text-slate-400`,children:Ce?`Refreshing schedule...`:`${$.visibleCount} visible occurrences · ${C(Z.from)} to ${C(Z.to)}`})]}),n(f,{variant:`secondary`,size:`sm`,onClick:()=>void Q(),icon:ie,className:`uppercase tracking-[0.14em]`,children:`Refresh`})]}),o===`calendar`?n(`div`,{className:`grid grid-flow-col auto-cols-[minmax(8.75rem,1fr)] gap-3 overflow-x-auto pb-2 dashboard-scrollbar`,children:Pe.map(e=>{let t=b(e).toISOString(),r=Ie.get(t)||[],i=t===b(l).toISOString(),a=t===b(new Date).toISOString();return n(`button`,{type:`button`,onClick:()=>p(e),className:`min-h-[13rem] rounded-2xl border p-3.5 text-left transition-all duration-150 ${i?`border-signal-500/35 bg-signal-500/[0.08] shadow-[0_4px_16px_rgba(0,224,160,0.08)]`:`border-black/[0.06] bg-black/[0.015] hover:-translate-y-0.5 hover:bg-black/[0.03] dark:border-white/[0.06] dark:bg-white/[0.02] dark:hover:bg-white/[0.04]`}`,children:[n(`div`,{className:`flex items-center justify-between gap-2`,children:[n(`span`,{className:`whitespace-nowrap text-xs font-black uppercase tracking-[0.12em] text-slate-600 dark:text-slate-300`,children:C(e)}),n(`span`,{className:`rounded-full px-2 py-0.5 text-[10px] font-bold ${a?`bg-signal-500 text-void-900 shadow-[0_2px_8px_rgba(0,224,160,0.2)]`:`bg-white/80 text-slate-500 dark:bg-white/[0.06] dark:text-slate-400`}`,children:r.length})]}),n(`div`,{className:`mt-3 space-y-2`,children:[r.slice(0,5).map(e=>{let t=_.get(e.targetType);return n(`div`,{className:`rounded-xl border border-black/[0.04] bg-white/80 p-2 text-xs shadow-sm dark:border-white/[0.05] dark:bg-white/[0.04]`,children:[n(`div`,{className:`flex items-center justify-between gap-2`,children:[n(`span`,{className:`font-bold text-slate-800 dark:text-white`,children:w(e.startsAt)}),n(`div`,{className:`flex items-center gap-1`,children:[n(`span`,{className:`rounded-full px-1.5 py-0.5 text-[8px] font-black uppercase tracking-[0.12em] ${t?.chipClassName||`bg-slate-500/10 text-slate-500`}`,children:T(e.targetType)}),n(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),ze(e)},className:`inline-flex h-5 w-5 items-center justify-center rounded-full border border-black/[0.06] bg-white/70 text-slate-600 transition-all duration-150 hover:bg-white hover:text-slate-950 dark:border-white/[0.06] dark:bg-white/[0.03] dark:text-slate-300 dark:hover:bg-white/[0.05] dark:hover:text-white`,"aria-label":`Edit schedule entry from occurrence`,children:n(s,{className:`h-2.5 w-2.5`})})]})]}),n(`div`,{className:`mt-1 line-clamp-2 font-semibold text-slate-500 dark:text-slate-400`,children:e.title})]},e.id)}),r.length>5&&n(`div`,{className:`text-[10px] font-bold text-slate-400`,children:[`+`,r.length-5,` more`]})]})]},t)})}):n(`div`,{className:`max-h-[46rem] space-y-2 overflow-y-auto pr-1 dashboard-scrollbar`,children:Array.from({length:24},(e,t)=>{let r=Fe.filter(e=>new Date(e.startsAt).getHours()===t);return n(`div`,{className:`grid min-h-[64px] grid-cols-[4.5rem_minmax(0,1fr)] gap-3 rounded-xl border border-black/[0.04] bg-black/[0.01] p-2 dark:border-white/[0.04] dark:bg-white/[0.01]`,children:[n(`div`,{className:`pt-2 text-right text-[11px] font-mono font-bold uppercase tracking-[0.14em] text-slate-400 dark:text-slate-500`,children:[v(t),`:00`]}),n(`div`,{className:`space-y-2 border-l border-black/[0.05] pl-3 dark:border-white/[0.05]`,children:[r.length===0&&n(`div`,{className:`h-full min-h-[42px] rounded-xl border border-dashed border-black/[0.04] bg-white/[0.1] dark:border-white/[0.04] dark:bg-white/[0.01]`}),r.map(e=>{let t=_.get(e.targetType);return n(`div`,{className:`rounded-xl border border-black/[0.04] bg-white/80 p-3 shadow-sm dark:border-white/[0.05] dark:bg-white/[0.04]`,children:[n(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[n(`span`,{className:`inline-flex items-center gap-2 text-xs font-black text-slate-900 dark:text-white`,children:[n(d,{className:`h-3.5 w-3.5 ${t?.tone||`text-signal-500`}`}),w(e.startsAt)]}),n(`div`,{className:`flex items-center gap-2`,children:[n(`span`,{className:`rounded-full px-2 py-0.5 text-[9px] font-black uppercase tracking-[0.12em] ${t?.chipClassName||`bg-slate-500/10 text-slate-500`}`,children:T(e.targetType)}),n(`button`,{type:`button`,onClick:()=>ze(e),className:`inline-flex h-6 w-6 items-center justify-center rounded-full border border-black/[0.06] bg-white/70 text-slate-600 transition-all duration-150 hover:bg-white hover:text-slate-950 dark:border-white/[0.06] dark:bg-white/[0.03] dark:text-slate-300 dark:hover:bg-white/[0.05] dark:hover:text-white`,"aria-label":`Edit schedule entry from occurrence`,children:n(s,{className:`h-3 w-3`})})]})]}),n(`div`,{className:`mt-2 text-sm font-bold text-slate-700 dark:text-slate-200`,children:e.title})]},e.id)})]})]},t)})})]}),n(`section`,{className:`rounded-[1.75rem] border border-black/[0.06] bg-white/70 p-4 shadow-[0_2px_20px_rgba(0,0,0,0.04)] backdrop-blur-2xl dark:border-white/[0.06] dark:bg-void-800/60 dark:shadow-[0_4px_24px_rgba(0,0,0,0.2)] md:p-5`,children:[n(`div`,{className:`mb-4 flex items-center justify-between gap-3`,children:[n(`div`,{children:[n(`h3`,{className:`font-display text-2xl font-black tracking-tight text-slate-900 dark:text-white`,children:`Scheduled entries`}),n(`p`,{className:`text-xs font-medium text-slate-500 dark:text-slate-400`,children:`Pause, resume, or remove future automation.`})]}),n(u,{className:`h-5 w-5 text-signal-500`})]}),n(`div`,{className:`space-y-3`,children:[(E?.entries||[]).length===0&&n(`div`,{className:`rounded-2xl border border-dashed border-black/[0.10] p-6 text-sm font-semibold text-slate-500 dark:border-white/[0.10] dark:text-slate-400`,children:`No scheduled entries yet.`}),(E?.entries||[]).map(e=>n(`div`,{className:`grid gap-3 rounded-2xl border border-black/[0.05] bg-white/60 p-4 shadow-sm transition-all duration-150 hover:-translate-y-0.5 hover:shadow-[0_4px_16px_rgba(0,0,0,0.04)] dark:border-white/[0.05] dark:bg-white/[0.03] md:grid-cols-[minmax(0,1fr)_auto] md:items-center`,children:[n(`div`,{className:`min-w-0`,children:[n(`div`,{className:`flex flex-wrap items-center gap-2`,children:[n(`span`,{className:`rounded-full px-2 py-0.5 text-[9px] font-black uppercase tracking-[0.12em] ${_.get(e.targetType)?.chipClassName||`bg-slate-500/10 text-slate-500`}`,children:T(e.targetType)}),n(`span`,{className:`rounded-full bg-black/[0.04] px-2 py-0.5 text-[9px] font-black uppercase tracking-[0.12em] text-slate-500 dark:bg-white/[0.06] dark:text-slate-400`,children:e.status}),e.runCount>0&&n(`span`,{className:`rounded-full border border-signal-500/20 bg-signal-500/10 px-2 py-0.5 text-[9px] font-black uppercase tracking-[0.12em] text-signal-600 dark:text-signal-400`,children:[`Fired (`,e.runCount,`)`]}),n(`span`,{className:`text-[11px] font-bold text-slate-400`,children:ve(e.recurrence)})]}),n(`h4`,{className:`mt-2 truncate text-sm font-black text-slate-900 dark:text-white`,children:e.title}),n(`p`,{className:`mt-1 text-xs font-medium text-slate-500 dark:text-slate-400`,children:[`Next run: `,e.nextRunAt?new Date(e.nextRunAt).toLocaleString():`none`,e.lastRunAt&&` · Last fired: ${new Date(e.lastRunAt).toLocaleString()}`]}),e.lastError&&n(`p`,{className:`mt-2 text-xs font-bold text-status-red`,children:e.lastError})]}),n(`div`,{className:`flex items-center gap-2`,children:[n(`button`,{type:`button`,onClick:()=>Le(e),className:`inline-flex h-9 w-9 items-center justify-center rounded-full border border-black/[0.06] bg-white/70 text-slate-600 transition-all duration-150 hover:bg-white hover:text-slate-950 dark:border-white/[0.06] dark:bg-white/[0.03] dark:text-slate-300 dark:hover:bg-white/[0.05] dark:hover:text-white`,"aria-label":`Edit schedule entry`,children:n(s,{className:`h-3.5 w-3.5`})}),n(`button`,{type:`button`,onClick:()=>void Ve(e.id,e.status===`paused`),disabled:e.status===`completed`||e.status===`cancelled`,className:`inline-flex h-9 w-9 items-center justify-center rounded-full border border-black/[0.06] bg-white/70 text-slate-600 transition-all duration-150 hover:bg-white hover:text-slate-950 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/[0.06] dark:bg-white/[0.03] dark:text-slate-300 dark:hover:bg-white/[0.05] dark:hover:text-white`,"aria-label":e.status===`paused`?`Resume schedule entry`:`Pause schedule entry`,children:e.status===`paused`?n(se,{className:`h-3.5 w-3.5`}):n(ae,{className:`h-3.5 w-3.5`})}),n(`button`,{type:`button`,onClick:()=>void He(e.id),className:`inline-flex h-9 w-9 items-center justify-center rounded-full border border-status-red/20 bg-status-red/[0.06] text-status-red transition-all duration-150 hover:bg-status-red/[0.12]`,"aria-label":`Delete schedule entry`,children:n(ue,{className:`h-3.5 w-3.5`})})]})]},e.id))]})]})]})]})]}):n(le,{padding:`standard`,className:`gap-8`,children:n(ye,{})})};export{E as SchedulerPage};
|