(()=>{const y=window.KIND_REGISTRY,r=window.React&&window.React.useState,O=window.React&&window.React.useEffect,f=[{id:"content",label:"Content work items"},{id:"product",label:"Product work items"},{id:"growth",label:"Growth queue"},{id:"review",label:"Review queue"},{id:"pull_requests",label:"Pull requests"},{id:"questions",label:"Questions"}],w=f.map(a=>a.id);function q(){return window.COMPANYX_OPS_API_BASE||"/api"}function G(){const a={Accept:"application/json"};return window.__AUTH_TOKEN&&(a.Authorization=`Bearer ${window.__AUTH_TOKEN}`),a}function x(a){const e={};return w.forEach(t=>{e[t]=[]}),(Array.isArray(a)?a:[]).forEach(t=>{const o=t&&w.indexOf(t.swimlane)!==-1?t.swimlane:"review";e[o].push(t)}),e}function k(a){try{return new URLSearchParams(window.location.search).get(a)}catch{return null}}function N(a){try{const e=new URL(window.location.href);Object.keys(a).forEach(t=>{const o=a[t];o?e.searchParams.set(t,o):e.searchParams.delete(t)}),window.history.replaceState(null,"",e.toString())}catch{}}function j(a,e){if(window.SHOWCASE||!a)return Promise.resolve(null);const t=`?repo=${encodeURIComponent(a)}&view=${encodeURIComponent(e)}`;return fetch(`${q()}/kanban/board${t}`,{headers:G()}).then(o=>{if(!o.ok)throw new Error(`kanban board fetch failed: HTTP ${o.status}`);return o.json()})}function V(a){const e=`${a.repo||""}#${a.number!=null?a.number:""}`,t=a&&a.ai;return React.createElement("div",{key:e,className:"kanban-card"},React.createElement("a",{className:"kanban-card-title",href:a.url,target:"_blank",rel:"noopener noreferrer"},a.title||`#${a.number}`),React.createElement("div",{className:"kanban-card-meta mono muted"},a.repo,"#",a.number," \xB7 ",a.state,a.is_pr?" \xB7 PR":""),Array.isArray(a.labels)&&a.labels.length?React.createElement("div",{className:"kanban-card-labels"},a.labels.map(o=>React.createElement("span",{key:o,className:"kanban-chip mono"},o))):null,a.assignee?React.createElement("div",{className:"kanban-card-assignee muted"},"@",a.assignee):null,t?React.createElement("div",{className:"kanban-card-ai mono"},t.has_plan?`AI: ${t.status||"plan active"}`:"AI: no plan"):null)}function F(a,e){return React.createElement("div",{key:a.id,className:"kanban-lane"},React.createElement("div",{className:"kanban-lane-header"},React.createElement("span",null,a.label),React.createElement("span",{className:"mono muted"},e.length)),React.createElement("div",{className:"kanban-lane-body"},e.length===0?React.createElement("div",{className:"kanban-lane-empty muted"},"No items."):e.map(V)))}const _="kanban-board-style";function S(){if(document.getElementById(_))return;const a=`
    .kanban-board{display:flex;flex-direction:column;gap:14px;height:100%;min-height:0;font-size:14px;line-height:1.45;color:var(--app-ink,#e6e3da);font-family:var(--app-font-body,"Inter",system-ui,sans-serif);overflow:auto;padding:1.5rem;}
    .kanban-board *,.kanban-board *::before,.kanban-board *::after{box-sizing:border-box;}
    .kanban-board button{font:inherit;color:inherit;cursor:pointer;}
    .kanban-board .mono{font-family:var(--app-font-mono,"JetBrains Mono",SFMono-Regular,monospace);}
    .kanban-board .muted{color:var(--app-ink-faint,rgba(230,227,218,.5));}

    .kanban-repo-form{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
    .kanban-repo-input{background:var(--app-surface,#1a1a1c);border:1px solid var(--app-rule,rgba(255,255,255,.12));border-radius:8px;padding:6px 10px;color:inherit;}
    .kanban-view-toggle{display:flex;gap:4px;border:1px solid var(--app-rule,rgba(255,255,255,.12));border-radius:8px;padding:2px;}
    .kanban-view-btn{background:none;border:0;border-radius:6px;padding:4px 10px;}
    .kanban-view-btn.active{background:var(--app-accent-dim,rgba(0,243,255,.16));}

    .kanban-lanes{display:grid;grid-template-columns:repeat(6,minmax(200px,1fr));gap:12px;overflow-x:auto;}
    .kanban-lane{background:var(--app-surface,#1a1a1c);border:1px solid var(--app-rule,rgba(255,255,255,.1));border-radius:12px;padding:12px;display:flex;flex-direction:column;gap:8px;min-height:0;}
    .kanban-lane-header{display:flex;justify-content:space-between;font-weight:600;}
    .kanban-lane-body{display:flex;flex-direction:column;gap:8px;overflow-y:auto;}
    .kanban-card{background:var(--app-elevated,#2a2a2e);border:1px solid var(--app-rule,rgba(255,255,255,.08));border-radius:8px;padding:8px;display:flex;flex-direction:column;gap:4px;}
    .kanban-card-title{color:var(--app-ink,#e6e3da);text-decoration:none;font-weight:600;}
    .kanban-chip{display:inline-block;font-size:10px;padding:2px 6px;border-radius:999px;background:var(--app-accent-dim,rgba(0,243,255,.16));margin-right:4px;}

    .kanban-new-task-form{display:flex;flex-direction:column;gap:8px;background:var(--app-surface,#1a1a1c);border:1px solid var(--app-rule,rgba(255,255,255,.12));border-radius:10px;padding:12px;max-width:520px;}
    .kanban-new-task-form input,.kanban-new-task-form textarea{background:var(--app-elevated,#2a2a2e);border:1px solid var(--app-rule,rgba(255,255,255,.12));border-radius:8px;padding:6px 10px;color:inherit;font:inherit;}
    .kanban-error{color:var(--app-fail,#f43f6c);}
    `,e=document.createElement("style");e.id=_,e.textContent=a,document.head.appendChild(e)}function A(a){typeof S=="function"&&typeof document<"u"&&S();const[e,t]=r(()=>a&&a.repo||k("repo")||""),[o,W]=r(()=>a&&a.repo||k("repo")||""),[i,z]=r(()=>(a&&a.view||k("view"))==="ai"?"ai":"human"),[u,M]=r(a&&a.initialBoard||null),[I,v]=r(!1),[C,E]=r(null),[g,Q]=r(!1),[R,T]=r(""),[B,L]=r(""),[D,P]=r(""),[$,h]=r(!1),[l,K]=r(null),[H,p]=r(null);function b(n,d){v(!0),E(null),j(n,d).then(c=>{v(!1),c&&M(c)}).catch(c=>{v(!1),E(String(c&&c.message||c))})}O(()=>{b(e,i)},[]);function Y(n){n&&n.preventDefault&&n.preventDefault();const d=(o||"").trim();t(d),N({repo:d,view:i}),b(d,i)}function U(n){n!==i&&(z(n),N({repo:e,view:n}),e&&b(e,n))}function J(n){if(n&&n.preventDefault&&n.preventDefault(),!e){p("Load a repo before creating a task.");return}const d=(R||"").trim();if(!d){p("Title is required.");return}const c=(D||"").split(",").map(s=>s.trim()).filter(Boolean),Z=window.crypto&&window.crypto.randomUUID?window.crypto.randomUUID():`kanban-${Date.now()}-${Math.random().toString(36).slice(2)}`;h(!0),p(null),K(null),window.CANVAS_ACTIONS.dispatch("kanban.create_task",{repo:e,title:d,body:B||"",labels:c,idempotency_key:Z},{confirm:!0}).then(s=>{h(!1),K(s),s&&s.created!==!1&&(T(""),L(""),P(""),b(e,i))}).catch(s=>{h(!1),p(String(s&&s.message||s))})}const m=u?x(u.items):null,X=m?w.some(n=>m[n]&&m[n].length>0):!1;return React.createElement("div",{className:"view view-kanbanBoard kanban-board"},React.createElement("form",{className:"kanban-repo-form",onSubmit:Y},React.createElement("input",{className:"kanban-repo-input mono",type:"text",value:o,placeholder:"owner/name",onChange:n=>W(n.target.value)}),React.createElement("button",{type:"submit",className:"kanban-load-btn"},"Load"),React.createElement("div",{className:"kanban-view-toggle"},React.createElement("button",{type:"button","aria-pressed":i==="human",className:i==="human"?"kanban-view-btn active":"kanban-view-btn",onClick:()=>U("human")},"Human"),React.createElement("button",{type:"button","aria-pressed":i==="ai",className:i==="ai"?"kanban-view-btn active":"kanban-view-btn",onClick:()=>U("ai")},"AI")),React.createElement("button",{type:"button",className:"kanban-new-task-btn",onClick:()=>Q(!g)},g?"Cancel":"New task")),C?React.createElement("div",{className:"kanban-error mono"},C):null,I?React.createElement("div",{className:"muted"},"Loading\u2026"):null,i==="ai"&&u&&u.ai_join_available===!1?React.createElement("div",{className:"kanban-ai-unavailable muted"},"AI view unavailable for this tenant \u2014 showing human view."):null,g?React.createElement("form",{className:"kanban-new-task-form",onSubmit:J},React.createElement("input",{type:"text",maxLength:256,placeholder:"Title",value:R,onChange:n=>T(n.target.value)}),React.createElement("textarea",{placeholder:"Description",value:B,onChange:n=>L(n.target.value)}),React.createElement("input",{className:"mono",type:"text",placeholder:"labels, comma, separated",value:D,onChange:n=>P(n.target.value)}),React.createElement("button",{type:"submit",disabled:$},$?"Creating\u2026":"Create task"),H?React.createElement("div",{className:"kanban-error mono"},H):null,l?l.created===!1?React.createElement("div",{className:"muted"},"Dry-run only (",l.reason||"live-write-disabled",") \u2014 no issue was created."):React.createElement("div",null,"Created"," ",React.createElement("a",{href:l.issue_url,target:"_blank",rel:"noopener noreferrer"},l.repo,"#",l.issue_number),l.claimed?` \u2014 claimed by ${l.owner||"an agent"}`:` \u2014 not claimed (${l.reason||"unknown"})`):null):null,e?!u||!X?React.createElement("div",{className:"kanban-empty muted"},I?"Loading\u2026":`No issues or PRs found for ${e}.`):React.createElement("div",{className:"kanban-lanes"},f.map(n=>F(n,m[n.id]))):React.createElement("div",{className:"kanban-empty muted"},"Enter a GitHub repo (owner/name) above to load its board."))}window.KANBAN_BOARD_VIEW_FN=A,window.VIEWS=window.VIEWS||{},window.VIEWS.kanbanBoard=A,window.__kanbanGroupBySwimlane=x,window.__kanbanLanes=f,y&&(y.kanban={id:"kanban",label:"Kanban board",workspaceLabel:"Kanban",workspaceIcon:"view_kanban",description:"Swimlane Kanban board over live GitHub issues/PRs for one repo (AaaS.Love GitHub proxy), with a human/AI view toggle (AI view joins aaa plan/audit state) and a new-task entry form that creates a real GitHub issue and silently auto-picks an agent via the aaa claim bridge. Real data only, no seed rows.",defaultView:"kanbanBoard",defaultDetail:"none",agentTreatment:"implicit",scopeTag:"generic",primaryAction:{label:"Load board",kind:"primary",icon:"sync"},mockItems:[],liveData:null,heroKpis:[]})})();
