@lunora/studio 1.0.0-alpha.90 → 1.0.0-alpha.91

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 (148) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/mount.js +1 -1
  3. package/dist/packem_chunks/AdvisorHealthPanel.js +1 -1
  4. package/dist/packem_chunks/ApiTab.js +1 -1
  5. package/dist/packem_chunks/AuditPanel.js +1 -1
  6. package/dist/packem_chunks/DeploymentHealthPanel.js +1 -1
  7. package/dist/packem_chunks/ExportImportPanel.js +1 -1
  8. package/dist/packem_chunks/FileBrowser.js +1 -1
  9. package/dist/packem_chunks/FunctionRunner.js +1 -1
  10. package/dist/packem_chunks/FunctionStatsPanel.js +1 -1
  11. package/dist/packem_chunks/HealthPanel.js +1 -1
  12. package/dist/packem_chunks/InsightsPanel.js +1 -1
  13. package/dist/packem_chunks/LogsPanel.js +1 -1
  14. package/dist/packem_chunks/MailPanel.js +1 -1
  15. package/dist/packem_chunks/MetricsPanel.js +1 -1
  16. package/dist/packem_chunks/NotificationsPanel.js +1 -1
  17. package/dist/packem_chunks/PitrPanel.js +1 -1
  18. package/dist/packem_chunks/SchemaViewer.js +1 -1
  19. package/dist/packem_chunks/SecurityAdvisorPanel.js +1 -1
  20. package/dist/packem_chunks/SettingsPanel.js +1 -1
  21. package/dist/packem_chunks/SqlEditorPanel.js +1 -1
  22. package/dist/packem_chunks/TableEditor.js +1 -1
  23. package/dist/packem_chunks/agents-panel.js +1 -1
  24. package/dist/packem_chunks/analytics-panel.js +1 -1
  25. package/dist/packem_chunks/auth-audit-panel.js +1 -1
  26. package/dist/packem_chunks/auth-config-panel.js +1 -1
  27. package/dist/packem_chunks/auth-sessions-panel.js +1 -1
  28. package/dist/packem_chunks/containers-panel.js +1 -1
  29. package/dist/packem_chunks/dashboards-panel.js +1 -1
  30. package/dist/packem_chunks/fanout-panel.js +1 -1
  31. package/dist/packem_chunks/flags-panel.js +1 -1
  32. package/dist/packem_chunks/issues-panel.js +1 -1
  33. package/dist/packem_chunks/kv-browser.js +1 -1
  34. package/dist/packem_chunks/log-drains-panel.js +1 -1
  35. package/dist/packem_chunks/migrations-route.js +1 -1
  36. package/dist/packem_chunks/organizations-panel.js +1 -1
  37. package/dist/packem_chunks/payments-panel.js +1 -1
  38. package/dist/packem_chunks/permissions-panel.js +1 -1
  39. package/dist/packem_chunks/queues-panel.js +1 -1
  40. package/dist/packem_chunks/rls-panel.js +1 -1
  41. package/dist/packem_chunks/schedule-panel.js +1 -1
  42. package/dist/packem_chunks/storage-rules-panel.js +1 -1
  43. package/dist/packem_chunks/subscriptions-panel.js +1 -1
  44. package/dist/packem_chunks/sync-client-panel.js +1 -1
  45. package/dist/packem_chunks/traces-panel.js +1 -1
  46. package/dist/packem_chunks/users-panel.js +1 -1
  47. package/dist/packem_chunks/vector-browser.js +1 -1
  48. package/dist/packem_chunks/workflows-panel.js +1 -1
  49. package/dist/packem_shared/{ApiDocsPanel-DLMeLZ5-.js → ApiDocsPanel-Cu_QmzO0.js} +1 -1
  50. package/dist/packem_shared/{ApiReferencePanel-9q8BbJl-.js → ApiReferencePanel-DuIU1P8B.js} +1 -1
  51. package/dist/packem_shared/{CommandPalette--SQwfTW1.js → CommandPalette-mPR8-vIm.js} +1 -1
  52. package/dist/packem_shared/DataBrowser-BPRDaOHx.js +1 -0
  53. package/dist/packem_shared/{GlobalDataBrowser-DpkjHfDg.js → GlobalDataBrowser-CeA8bDjX.js} +1 -1
  54. package/dist/packem_shared/HomePanel-DLP1nQdC.js +1 -0
  55. package/dist/packem_shared/{MigrationsPanel-dygzHUvg.js → MigrationsPanel-dm_M75mR.js} +1 -1
  56. package/dist/packem_shared/{OpenRpcReferencePanel-qOZcWXMs.js → OpenRpcReferencePanel-DXeffPFr.js} +1 -1
  57. package/dist/packem_shared/{ScheduledJobs-D8kBZWBu.js → ScheduledJobs-DDJG9Je7.js} +1 -1
  58. package/dist/packem_shared/{Studio-forQt-PC.js → Studio-BYg65qWq.js} +1 -1
  59. package/dist/packem_shared/{StudioApp-B1AWsBzi.js → StudioApp-D0UOg0a_.js} +1 -1
  60. package/dist/packem_shared/{advisor-view-Pa8HLtBv.js → advisor-view-Coipc04R.js} +1 -1
  61. package/dist/packem_shared/{data-grid-DcxyIXwG.js → data-grid-Ci4-tZkk.js} +1 -1
  62. package/dist/packem_shared/{error-alert-t6cpEi0z.js → error-alert--Ie7ofJ0.js} +1 -1
  63. package/dist/packem_shared/{grid-features-jnrD0SpX.js → grid-features-Db_BNYRo.js} +3 -3
  64. package/dist/packem_shared/{home-panel-CeeqqV0z.js → home-panel-BtxdqXDe.js} +1 -1
  65. package/dist/packem_shared/internal-zkEvTqy8.js +2 -0
  66. package/dist/packem_shared/{recording-client-DRAZEmzE.js → recording-client-DtUxwVNY.js} +1 -1
  67. package/dist/packem_shared/{reference-view-DnYYWr7I.js → reference-view-DncEStdm.js} +1 -1
  68. package/dist/packem_shared/{result-chart-DzJOVsaw.js → result-chart-Gywg9DOk.js} +1 -1
  69. package/dist/packem_shared/{schema-diagram-cg-bz_VL.js → schema-diagram-DTRaCp6Y.js} +1 -1
  70. package/dist/packem_shared/{studio-BtC7WPbz.js → studio-Drf4en3j.js} +1 -1
  71. package/dist/packem_shared/{table-list-sidebar-D9Bd4qgi.js → table-list-sidebar-fz0m_4I4.js} +1 -1
  72. package/dist/packem_shared/{use-admin-query-QJ-ibl5u.js → use-admin-query-CnnyWJXM.js} +1 -1
  73. package/dist/packem_shared/{use-async-submit-q3ymBJkD.js → use-async-submit-BFIMhRqh.js} +1 -1
  74. package/dist/packem_shared/{use-auth-config-BObBpdsi.js → use-auth-config-0EnNCdLu.js} +1 -1
  75. package/dist/packem_shared/{use-sql-assistant-C6dl2_Ty.js → use-sql-assistant-Dtw55kKM.js} +1 -1
  76. package/dist/packem_shared/wire-codec-BUrWLklj.js +1 -0
  77. package/dist/standalone/{chunk-ZPLWCC4I.js → chunk-2NX5QU44.js} +1 -1
  78. package/dist/standalone/{chunk-WB5IUUUU.js → chunk-2QWHVQ6P.js} +1 -1
  79. package/dist/standalone/{chunk-WLZ7YPBH.js → chunk-3FIN5PH4.js} +4 -4
  80. package/dist/standalone/{chunk-XZSGE5ST.js → chunk-3XQMTTW2.js} +1 -1
  81. package/dist/standalone/{chunk-SHMNA6UL.js → chunk-4D7XIQ5Q.js} +1 -1
  82. package/dist/standalone/{chunk-SF4MF2FT.js → chunk-4PLB4ZNI.js} +1 -1
  83. package/dist/standalone/{chunk-PB7FNRDB.js → chunk-4VEAVSAZ.js} +1 -1
  84. package/dist/standalone/{chunk-3AV5CV6K.js → chunk-6QKJ6JPJ.js} +1 -1
  85. package/dist/standalone/{chunk-IC64YIX5.js → chunk-6WWX4FJB.js} +1 -1
  86. package/dist/standalone/{chunk-62EKHKTS.js → chunk-6XKVQES4.js} +1 -1
  87. package/dist/standalone/{chunk-C3HXK3A5.js → chunk-7QMX3D4D.js} +1 -1
  88. package/dist/standalone/{chunk-ULCZDGWQ.js → chunk-7YXDJXNL.js} +1 -1
  89. package/dist/standalone/{chunk-DMCYISRF.js → chunk-A7647FJE.js} +1 -1
  90. package/dist/standalone/{chunk-D3HXVA33.js → chunk-AQT6EPZT.js} +1 -1
  91. package/dist/standalone/{chunk-QXXIJAD5.js → chunk-AREBQI6D.js} +1 -1
  92. package/dist/standalone/{chunk-TBBJPPZ3.js → chunk-BCGEI67L.js} +1 -1
  93. package/dist/standalone/chunk-BENJFRZL.js +1 -0
  94. package/dist/standalone/{chunk-LQAKPCFX.js → chunk-BYIS2KWZ.js} +1 -1
  95. package/dist/standalone/{chunk-QYIOW7CD.js → chunk-C6GLTSPO.js} +1 -1
  96. package/dist/standalone/{chunk-JFW3YNVQ.js → chunk-CMP33R3N.js} +1 -1
  97. package/dist/standalone/{chunk-5ZXDB6LB.js → chunk-CRHCAN4W.js} +1 -1
  98. package/dist/standalone/{chunk-BRQMMGOS.js → chunk-CUAGAM2B.js} +1 -1
  99. package/dist/standalone/chunk-DBWOWJYT.js +11 -0
  100. package/dist/standalone/{chunk-QV6KV4SD.js → chunk-ESEEVSPC.js} +1 -1
  101. package/dist/standalone/chunk-F3TP5L34.js +1 -0
  102. package/dist/standalone/{chunk-6MKDYZ7A.js → chunk-FBNRATNR.js} +1 -1
  103. package/dist/standalone/{chunk-LAHYLAT4.js → chunk-HKG5I64M.js} +1 -1
  104. package/dist/standalone/{chunk-GKSRVABT.js → chunk-HWOD25QD.js} +1 -1
  105. package/dist/standalone/{chunk-XR7RBXKA.js → chunk-IBVBIKUI.js} +1 -1
  106. package/dist/standalone/{chunk-CTNB2KIA.js → chunk-IGCNMZSB.js} +1 -1
  107. package/dist/standalone/{chunk-IAKPXGTQ.js → chunk-IUUSMC2R.js} +1 -1
  108. package/dist/standalone/{chunk-OG4N2XHD.js → chunk-IUYFXK4X.js} +9 -9
  109. package/dist/standalone/{chunk-E7TB4USI.js → chunk-IZ3ISXSM.js} +1 -1
  110. package/dist/standalone/{chunk-BUTBQGUU.js → chunk-J3FR2XBV.js} +1 -1
  111. package/dist/standalone/{chunk-QP7IQOKF.js → chunk-JWXKUXYA.js} +1 -1
  112. package/dist/standalone/{chunk-OG2AMGOC.js → chunk-KUFAOKU3.js} +1 -1
  113. package/dist/standalone/{chunk-PM37X2V3.js → chunk-LDYOCGEG.js} +1 -1
  114. package/dist/standalone/{chunk-CT6ZDXLL.js → chunk-LUU4SDHW.js} +1 -1
  115. package/dist/standalone/chunk-LYQY7L72.js +4 -0
  116. package/dist/standalone/{chunk-GSKOAKQ2.js → chunk-LZH7RDRV.js} +1 -1
  117. package/dist/standalone/{chunk-LJISXTZJ.js → chunk-ML5IJMH6.js} +1 -1
  118. package/dist/standalone/{chunk-DG7YINFM.js → chunk-N233NOIN.js} +1 -1
  119. package/dist/standalone/{chunk-QWBRD6PX.js → chunk-NH3VWHCL.js} +1 -1
  120. package/dist/standalone/{chunk-ARP36PTE.js → chunk-NNRFDPSD.js} +1 -1
  121. package/dist/standalone/{chunk-AQX2QFCN.js → chunk-O2QUUHGF.js} +1 -1
  122. package/dist/standalone/{chunk-U6TNNM5U.js → chunk-Q2Q7FR3R.js} +1 -1
  123. package/dist/standalone/{chunk-Z7G74IH4.js → chunk-Q4AI6JRP.js} +1 -1
  124. package/dist/standalone/{chunk-AZAGCJVI.js → chunk-QGA2HITH.js} +1 -1
  125. package/dist/standalone/{chunk-6VTLIGVX.js → chunk-QWJ4HKPY.js} +1 -1
  126. package/dist/standalone/{chunk-Y7JXGNXD.js → chunk-QZGTDXV5.js} +1 -1
  127. package/dist/standalone/{chunk-24JLZ2Z5.js → chunk-RHPP74O4.js} +1 -1
  128. package/dist/standalone/{chunk-AUQKJYHL.js → chunk-RKGCSNAW.js} +1 -1
  129. package/dist/standalone/{chunk-X665E2HU.js → chunk-RMN2JN4S.js} +1 -1
  130. package/dist/standalone/{chunk-S4ILMYP5.js → chunk-RNOSWEMO.js} +1 -1
  131. package/dist/standalone/{chunk-MHAXZQVO.js → chunk-ULYM26IH.js} +1 -1
  132. package/dist/standalone/{chunk-PGC523I2.js → chunk-WOEGO5M6.js} +1 -1
  133. package/dist/standalone/{chunk-67DKQC23.js → chunk-XDEDCAYN.js} +1 -1
  134. package/dist/standalone/{chunk-YOUKADZH.js → chunk-XGMZESWC.js} +1 -1
  135. package/dist/standalone/{chunk-T6OAYQTX.js → chunk-XKKP2VFZ.js} +1 -1
  136. package/dist/standalone/{chunk-SP5SBO2W.js → chunk-XTEWLG3J.js} +2 -2
  137. package/dist/standalone/{chunk-BL6NO3U3.js → chunk-XXXMUP6L.js} +1 -1
  138. package/dist/standalone/{chunk-LJIFMW67.js → chunk-ZKTWHB7Q.js} +1 -1
  139. package/dist/standalone/{chunk-53KJRSHE.js → chunk-ZNMZQXWN.js} +1 -1
  140. package/dist/standalone/{chunk-YU5CI2FD.js → chunk-ZWSTXAG3.js} +1 -1
  141. package/dist/standalone/studio.js +1 -1
  142. package/package.json +1 -1
  143. package/dist/packem_shared/DataBrowser-CZZ_WkJ-.js +0 -1
  144. package/dist/packem_shared/HomePanel-3baDsDBU.js +0 -1
  145. package/dist/packem_shared/internal-BSIsQVC6.js +0 -2
  146. package/dist/standalone/chunk-4COKHD2C.js +0 -1
  147. package/dist/standalone/chunk-V2U5CL3S.js +0 -11
  148. package/dist/standalone/chunk-VFQDHG7I.js +0 -4
@@ -1 +1 @@
1
- import{c as P}from"react/compiler-runtime";import{useLunora as Ke}from"@lunora/react";import{useState as _}from"react";import{ConfirmButton as Ve}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{E as Xe}from"../packem_shared/error-alert-t6cpEi0z.js";import{A as Ye}from"../packem_shared/alert-CVcOFuDR.js";import{g as Ce}from"../packem_shared/badge-BbuuAio7.js";import{u as Ie}from"../packem_shared/button-BkCrNcAs.js";import{c as Oe,u as ke}from"../packem_shared/card-CIDGUN6K.js";import{E as Qe}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as Ze}from"../packem_shared/input-JHu63lTv.js";import{p as et}from"../packem_shared/scroll-area-DTEq6Jec.js";import{n as Be,d as Je,m as oe,p as $,f as Fe,u as w}from"../packem_shared/table-DdJBrClo.js";import{l as tt}from"../packem_shared/textarea-Bu2-jKAs.js";import{N as Te}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useAutoRefresh as at}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as U}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as j}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{d as Se,b as $e,g as Ae,i as st,f as we}from"../packem_shared/internal-BSIsQVC6.js";import{jsx as a,jsxs as q,Fragment as We}from"react/jsx-runtime";const rt=(n,e)=>{const t=new Set(n.map(s=>s.deadLetterQueue).filter(s=>typeof s=="string"&&s!=="")),l=n.filter(s=>(s.deadLetterQueue===void 0||s.deadLetterQueue==="")&&!t.has(s.name)),d=e.filter(s=>s.deadLettered).length;return{deadLetteredCount:d,queuesWithoutDlq:l,showReliabilityWarning:l.length>0||d>0}},nt=200,ot=Ae(j.sendQueueMessage),dt=Ae(j.replayQueueMessage),lt=Ae(j.clearQueueMessages),Re=96,ut=n=>{if(n===void 0)return"—";try{return JSON.stringify(n)}catch{return"[unserializable]"}},it=n=>n.length>Re?`${n.slice(0,Re)}…`:n,ct=n=>n==="error"?"destructive":n==="retry"?"outline":"secondary",mt=(n,e)=>e(n==="messages"?"Messages":n==="send"?"Send":"Declared"),ht=n=>{const e=P(11),{loaded:t,queues:l}=n,d=U();let s;e[0]!==d?(s=d("Queues are declared in code with defineQueue. Enqueue from a mutation or action with ctx.queues.<name>.send(...); push consumers process batches in the worker."),e[0]=d,e[1]=s):s=e[1];let o;e[2]!==s?(o=a("p",{className:"text-sm text-muted-foreground",children:s}),e[2]=s,e[3]=o):o=e[3];let r;e[4]!==t||e[5]!==l||e[6]!==d?(r=t&&l.length===0?a(Qe,{description:d("No defineQueue is declared in lunora/queues.ts in this deployment. Add one to offload async work to a Cloudflare Queue."),testId:"queues-empty",title:d("No queues defined")}):a(Oe,{className:"overflow-hidden py-0",children:a(ke,{className:"px-0",children:q(Be,{"data-testid":"queues-table",children:[a(Je,{children:q(oe,{children:[a($,{children:d("Export")}),a($,{children:d("Queue")}),a($,{children:d("Mode")}),a($,{children:d("Binding")}),a($,{children:d("Dead-letter")})]})}),a(Fe,{children:l.map(xt)})]})})}),e[4]=t,e[5]=l,e[6]=d,e[7]=r):r=e[7];let h;return e[8]!==o||e[9]!==r?(h=q("div",{className:"flex flex-col gap-4","data-testid":"queues-declared",children:[o,r]}),e[8]=o,e[9]=r,e[10]=h):h=e[10],h},pt=n=>{const e=P(67),{message:t,onReplay:l,replayingId:d}=n,s=U();let o,r,h,c,f,y,x,u,m,g;if(e[0]!==t.attempts||e[1]!==t.body||e[2]!==t.deadLettered||e[3]!==t.exportName||e[4]!==t.id||e[5]!==t.messageId||e[6]!==t.outcome||e[7]!==t.queue||e[8]!==s){const J=ut(t.body);r=oe,y=`queues-message-${t.id}`;const F=t.exportName??t.queue;e[19]!==F?(x=a(w,{className:"font-mono text-xs",children:F}),e[19]=F,e[20]=x):x=e[20],e[21]!==t.messageId?(u=a(w,{className:"max-w-[16ch] truncate font-mono text-xs text-muted-foreground",title:t.messageId,children:t.messageId}),e[21]=t.messageId,e[22]=u):u=e[22],e[23]!==t.attempts?(m=a(w,{className:"font-mono text-xs tabular-nums",children:t.attempts}),e[23]=t.attempts,e[24]=m):m=e[24];const L=`queues-outcome-${t.id}`;let E;e[25]!==t.outcome?(E=ct(t.outcome),e[25]=t.outcome,e[26]=E):E=e[26];let C;e[27]!==t.outcome||e[28]!==L||e[29]!==E?(C=a(Ce,{"data-testid":L,variant:E,children:t.outcome}),e[27]=t.outcome,e[28]=L,e[29]=E,e[30]=C):C=e[30];let M;e[31]!==t.deadLettered||e[32]!==t.id||e[33]!==s?(M=t.deadLettered&&a(Ce,{"data-testid":`queues-dlq-${t.id}`,variant:"destructive",children:s("DLQ")}),e[31]=t.deadLettered,e[32]=t.id,e[33]=s,e[34]=M):M=e[34],e[35]!==C||e[36]!==M?(g=a(w,{children:q("span",{className:"inline-flex items-center gap-1",children:[C,M]})}),e[35]=C,e[36]=M,e[37]=g):g=e[37],o=w,h="max-w-[32ch] truncate font-mono text-xs text-muted-foreground",c=J,f=it(J),e[0]=t.attempts,e[1]=t.body,e[2]=t.deadLettered,e[3]=t.exportName,e[4]=t.id,e[5]=t.messageId,e[6]=t.outcome,e[7]=t.queue,e[8]=s,e[9]=o,e[10]=r,e[11]=h,e[12]=c,e[13]=f,e[14]=y,e[15]=x,e[16]=u,e[17]=m,e[18]=g}else o=e[9],r=e[10],h=e[11],c=e[12],f=e[13],y=e[14],x=e[15],u=e[16],m=e[17],g=e[18];let p;e[38]!==o||e[39]!==h||e[40]!==c||e[41]!==f?(p=a(o,{className:h,title:c,children:f}),e[38]=o,e[39]=h,e[40]=c,e[41]=f,e[42]=p):p=e[42];let b;e[43]!==t.capturedAt?(b=st(t.capturedAt,"—"),e[43]=t.capturedAt,e[44]=b):b=e[44];let N;e[45]!==b?(N=a(w,{className:"text-xs text-muted-foreground tabular-nums",children:b}),e[45]=b,e[46]=N):N=e[46];const S=`queues-replay-${t.id}`,A=d!==null;let I;e[47]!==t.id||e[48]!==d||e[49]!==s?(I=d===t.id?s("Replaying…"):s("Replay"),e[47]=t.id,e[48]=d,e[49]=s,e[50]=I):I=e[50];let Q;e[51]!==t.id||e[52]!==l||e[53]!==S||e[54]!==A||e[55]!==I?(Q=a(w,{children:a(Ie,{"data-id":t.id,"data-testid":S,disabled:A,onClick:l,size:"xs",type:"button",variant:"outline",children:I})}),e[51]=t.id,e[52]=l,e[53]=S,e[54]=A,e[55]=I,e[56]=Q):Q=e[56];let D;return e[57]!==r||e[58]!==N||e[59]!==Q||e[60]!==y||e[61]!==x||e[62]!==u||e[63]!==m||e[64]!==g||e[65]!==p?(D=q(r,{"data-testid":y,children:[x,u,m,g,p,N,Q]}),e[57]=r,e[58]=N,e[59]=Q,e[60]=y,e[61]=x,e[62]=u,e[63]=m,e[64]=g,e[65]=p,e[66]=D):D=e[66],D},gt=n=>{const e=P(30),{hasError:t,messages:l,onClear:d,onReplay:s,replayingId:o}=n,r=U();let h;e[0]!==r?(h=r("Cloudflare Queues have no peek API, so this is what push consumers actually processed — not pending depth."),e[0]=r,e[1]=h):h=e[1];let c;e[2]!==h?(c=a("p",{className:"text-sm text-muted-foreground",children:h}),e[2]=h,e[3]=c):c=e[3];let f;e[4]!==l.length||e[5]!==r?(f=r("Clear {count} messages?",{count:l.length}),e[4]=l.length,e[5]=r,e[6]=f):f=e[6];const y=l.length===0;let x;e[7]!==r?(x=r("Clear log"),e[7]=r,e[8]=x):x=e[8];let u;e[9]!==d||e[10]!==f||e[11]!==y||e[12]!==x?(u=a("div",{className:"ml-auto",children:a(Ve,{confirmLabel:f,disabled:y,onConfirm:d,testId:"queues-clear",children:x})}),e[9]=d,e[10]=f,e[11]=y,e[12]=x,e[13]=u):u=e[13];let m;e[14]!==l.length||e[15]!==r?(m=l.length>0&&a(Ce,{"data-testid":"queues-count",variant:"secondary",children:r("{count} messages",{count:l.length})}),e[14]=l.length,e[15]=r,e[16]=m):m=e[16];let g;e[17]!==c||e[18]!==u||e[19]!==m?(g=q("div",{className:"flex flex-wrap items-center gap-2",children:[c,u,m]}),e[17]=c,e[18]=u,e[19]=m,e[20]=g):g=e[20];let p;e[21]!==t||e[22]!==l||e[23]!==s||e[24]!==o||e[25]!==r?(p=!t&&l.length===0?a(Qe,{description:r("Consumed messages appear here once a push consumer processes a batch in dev. Send one from the Send tab to see it captured."),testId:"queues-messages-empty",title:r("No consumed messages yet.")}):a(Oe,{className:"overflow-hidden py-0",children:a(ke,{className:"px-0",children:a(et,{className:"max-h-[32rem]","data-testid":"queues-messages-scroll",children:q(Be,{"data-testid":"queues-messages-table",children:[a(Je,{children:q(oe,{children:[a($,{children:r("Export")}),a($,{children:r("Message")}),a($,{children:r("Attempts")}),a($,{children:r("Outcome")}),a($,{children:r("Body")}),a($,{children:r("Captured")}),a($,{})]})}),a(Fe,{children:l.map(N=>a(pt,{message:N,onReplay:s,replayingId:o},N.id))})]})})})}),e[21]=t,e[22]=l,e[23]=s,e[24]=o,e[25]=r,e[26]=p):p=e[26];let b;return e[27]!==g||e[28]!==p?(b=q("div",{className:"flex flex-col gap-4","data-testid":"queues-messages",children:[g,p]}),e[27]=g,e[28]=p,e[29]=b):b=e[29],b},ft=n=>{const e=P(20),{batchMode:t,bodyText:l,delayText:d,onBatchModeChange:s,onBodyChange:o,onDelayChange:r,onSelectExport:h,onSend:c,queues:f,selectedExportName:y,sending:x}=n,u=U();let m;e[0]!==u?(m=u("Enqueue a JSON message to a declared producer to exercise its consumer. Nothing is captured until the consumer processes it."),e[0]=u,e[1]=m):m=e[1];let g;e[2]!==m?(g=a("p",{className:"text-sm text-muted-foreground",children:m}),e[2]=m,e[3]=g):g=e[3];let p;e[4]!==t||e[5]!==l||e[6]!==d||e[7]!==s||e[8]!==o||e[9]!==r||e[10]!==h||e[11]!==c||e[12]!==f||e[13]!==y||e[14]!==x||e[15]!==u?(p=f.length===0?a(Qe,{description:u("Declare a queue with defineQueue in lunora/queues.ts to enqueue a test message."),testId:"queues-send-empty",title:u("No queues to send to")}):q(We,{children:[q("div",{className:"flex flex-wrap items-center gap-2",children:[a("select",{"aria-label":u("Queue"),className:"h-8 rounded-md border border-input bg-transparent px-2.5 py-1 text-xs outline-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50","data-testid":"queues-send-select",onChange:h,value:y,children:f.map(yt)}),a(Ze,{"aria-label":u("Delay (seconds)"),className:"max-w-36","data-testid":"queues-send-delay",min:0,onChange:r,placeholder:u("Delay (s)"),type:"number",value:d}),q("label",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",htmlFor:"queues-send-batch",children:[a("input",{checked:t,"data-testid":"queues-send-batch",id:"queues-send-batch",onChange:s,type:"checkbox"}),u("Send as batch (JSON array)")]}),a(Ie,{className:"ml-auto","data-testid":"queues-send-button",disabled:x||y==="",onClick:c,type:"button",children:u(x?"Sending…":"Send message")})]}),a(tt,{"aria-label":u("Message body (JSON)"),className:"font-mono","data-testid":"queues-send-body",onChange:o,placeholder:t?'[ { "hello": "world" } ]':'{ "hello": "world" }',value:l})]}),e[4]=t,e[5]=l,e[6]=d,e[7]=s,e[8]=o,e[9]=r,e[10]=h,e[11]=c,e[12]=f,e[13]=y,e[14]=x,e[15]=u,e[16]=p):p=e[16];let b;return e[17]!==g||e[18]!==p?(b=q("div",{className:"flex flex-col gap-3","data-testid":"queues-send",children:[g,p]}),e[17]=g,e[18]=p,e[19]=b):b=e[19],b},Ft=n=>{const e=P(59),{limit:t}=n,l=t??nt,d=Ke(),s=U(),[o,r]=_("declared"),[h,c]=_(null);let f;e[0]===Symbol.for("react.memo_cache_sentinel")?(f={},e[0]=f):f=e[0];const{data:y,error:x,errorSource:u}=Te(j.listQueues,f);let m;e[1]!==l?(m={limit:l},e[1]=l,e[2]=m):m=e[2];const{data:g,error:p,errorSource:b,refetch:N}=Te(j.getQueueMessages,m),S=Array.isArray(y?.queues)?[...y.queues].toSorted(Nt):[],A=g?.entries??[],{deadLetteredCount:I,queuesWithoutDlq:Q,showReliabilityWarning:D}=rt(S,A),[J,F]=_(""),[L,E]=_(""),[C,M]=_(""),[W,ze]=_(!1),[de,Le]=_(!1),[le,Ee]=_(null),G=S.some(i=>i.exportName===J)?J:S[0]?.exportName??"",Me=o==="messages"?p:x,je=o==="messages"?b:u,ue=Me??h,ie=Me===null?h:je;let H;e[3]!==N?(H=()=>{N()},e[3]=N,e[4]=H):H=e[4],at(H,o==="messages");const ce=async()=>{c(null);const i=G;if(i==="")return;let v=null;const _e=L.trim();if(_e!=="")try{v=JSON.parse(_e)}catch{c(s("Body must be valid JSON."));return}let ve;const De=C.trim();if(De!==""){const z=Number(De);if(!Number.isFinite(z)||z<0){c(s("Delay must be a non-negative number of seconds."));return}ve=z}if(W&&!Array.isArray(v)){c(s("Batch mode needs a JSON array body — each element is enqueued as one message."));return}Le(!0);const He=W?{batch:v,delaySeconds:ve,exportName:i}:{body:v,delaySeconds:ve,exportName:i};try{await d.query(ot,He,Se("")),N()}catch(z){c($e(z))}Le(!1)};let K;e[5]!==d||e[6]!==N?(K=async i=>{c(null),Ee(i);try{await d.query(dt,{id:i},Se("")),N()}catch(v){c($e(v))}Ee(null)},e[5]=d,e[6]=N,e[7]=K):K=e[7];const me=K;let V;e[8]!==d||e[9]!==N?(V=async()=>{c(null);try{await d.query(lt,{},Se("")),N()}catch(i){c($e(i))}},e[8]=d,e[9]=N,e[10]=V):V=e[10];const he=V;let X;e[11]===Symbol.for("react.memo_cache_sentinel")?(X=i=>{const v=i.currentTarget.dataset.tab;(v==="declared"||v==="messages"||v==="send")&&r(v)},e[11]=X):X=e[11];const Pe=X;let Y;e[12]===Symbol.for("react.memo_cache_sentinel")?(Y=i=>{F(i.currentTarget.value)},e[12]=Y):Y=e[12];const pe=Y;let Z;e[13]===Symbol.for("react.memo_cache_sentinel")?(Z=i=>{E(i.currentTarget.value)},e[13]=Z):Z=e[13];const ge=Z;let ee;e[14]===Symbol.for("react.memo_cache_sentinel")?(ee=i=>{M(i.currentTarget.value)},e[14]=ee):ee=e[14];const fe=ee;let te;e[15]===Symbol.for("react.memo_cache_sentinel")?(te=i=>{ze(i.currentTarget.checked)},e[15]=te):te=e[15];const xe=te;let ae;e[16]!==ce?(ae=()=>{we(ce())},e[16]=ce,e[17]=ae):ae=e[17];const ye=ae;let se;e[18]!==me?(se=i=>{const{id:v}=i.currentTarget.dataset;v!==void 0&&we(me(v))},e[18]=me,e[19]=se):se=e[19];const Ne=se;let re;e[20]!==he?(re=()=>{we(he())},e[20]=he,e[21]=re):re=e[21];const be=re,Ue="flex flex-col gap-6",Ge="lunora-queues-panel";let T;e[22]!==s||e[23]!==o?(T=a("div",{className:"flex items-center gap-1","data-testid":"queues-tabs",role:"tablist",children:["declared","messages","send"].map(i=>a(Ie,{"aria-selected":o===i,"data-tab":i,"data-testid":`queues-tab-${i}`,onClick:Pe,role:"tab",size:"sm",type:"button",variant:o===i?"secondary":"ghost",children:mt(i,s)},i))}),e[22]=s,e[23]=o,e[24]=T):T=e[24];let R;e[25]!==ue||e[26]!==ie?(R=ue!==null&&a(Xe,{error:ie,testId:"queues-error"}),e[25]=ue,e[26]=ie,e[27]=R):R=e[27];const qe=D&&a(Ye,{icon:a("span",{"aria-hidden":"true",className:"text-base leading-none",children:"⚠"}),testId:"queues-dlq-warning",variant:"warning",children:q("div",{className:"flex flex-col gap-1",children:[Q.length>0&&q(We,{children:[a("p",{className:"font-medium",children:s("No dead-letter queue on {queues}.",{queues:Q.map(bt).join(", ")})}),a("p",{className:"text-muted-foreground",children:s("Exhausted messages are dropped after retries. Add a deadLetterQueue to capture them.")})]}),I>0&&a("p",{className:Q.length>0?"text-muted-foreground":"font-medium",children:I===1?s("1 message was recently dead-lettered."):s("{count} messages were recently dead-lettered.",{count:I})})]})});let O;e[28]!==S||e[29]!==y||e[30]!==o?(O=o==="declared"&&a(ht,{loaded:y!==void 0,queues:S}),e[28]=S,e[29]=y,e[30]=o,e[31]=O):O=e[31];let k;e[32]!==A||e[33]!==p||e[34]!==be||e[35]!==Ne||e[36]!==le||e[37]!==o?(k=o==="messages"&&a(gt,{hasError:p!==null,messages:A,onClear:be,onReplay:Ne,replayingId:le}),e[32]=A,e[33]=p,e[34]=be,e[35]=Ne,e[36]=le,e[37]=o,e[38]=k):k=e[38];let B;e[39]!==W||e[40]!==L||e[41]!==C||e[42]!==xe||e[43]!==ge||e[44]!==fe||e[45]!==pe||e[46]!==ye||e[47]!==S||e[48]!==G||e[49]!==de||e[50]!==o?(B=o==="send"&&a(ft,{batchMode:W,bodyText:L,delayText:C,onBatchModeChange:xe,onBodyChange:ge,onDelayChange:fe,onSelectExport:pe,onSend:ye,queues:S,selectedExportName:G,sending:de}),e[39]=W,e[40]=L,e[41]=C,e[42]=xe,e[43]=ge,e[44]=fe,e[45]=pe,e[46]=ye,e[47]=S,e[48]=G,e[49]=de,e[50]=o,e[51]=B):B=e[51];let ne;return e[52]!==T||e[53]!==R||e[54]!==qe||e[55]!==O||e[56]!==k||e[57]!==B?(ne=q("div",{className:Ue,"data-testid":Ge,children:[T,R,qe,O,k,B]}),e[52]=T,e[53]=R,e[54]=qe,e[55]=O,e[56]=k,e[57]=B,e[58]=ne):ne=e[58],ne};function xt(n){return q(oe,{"data-testid":`queues-row-${n.exportName}`,children:[a(w,{className:"font-mono text-xs",children:n.exportName}),a(w,{className:"font-mono text-xs text-muted-foreground",children:n.name}),a(w,{className:"font-mono text-xs text-muted-foreground",children:n.mode}),a(w,{className:"font-mono text-xs text-muted-foreground",children:n.binding}),a(w,{className:"font-mono text-xs text-muted-foreground",children:n.deadLetterQueue??"—"})]},n.exportName)}function yt(n){return a("option",{value:n.exportName,children:n.exportName},n.exportName)}function Nt(n,e){return n.exportName.localeCompare(e.exportName)}function bt(n){return n.name}export{Ft as default};
1
+ import{c as P}from"react/compiler-runtime";import{useLunora as Ke}from"@lunora/react";import{useState as _}from"react";import{ConfirmButton as Ve}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{E as Xe}from"../packem_shared/error-alert--Ie7ofJ0.js";import{A as Ye}from"../packem_shared/alert-CVcOFuDR.js";import{g as Ce}from"../packem_shared/badge-BbuuAio7.js";import{u as Ie}from"../packem_shared/button-BkCrNcAs.js";import{c as Oe,u as ke}from"../packem_shared/card-CIDGUN6K.js";import{E as Qe}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as Ze}from"../packem_shared/input-JHu63lTv.js";import{p as et}from"../packem_shared/scroll-area-DTEq6Jec.js";import{n as Be,d as Je,m as oe,p as $,f as Fe,u as w}from"../packem_shared/table-DdJBrClo.js";import{l as tt}from"../packem_shared/textarea-Bu2-jKAs.js";import{N as Te}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{useAutoRefresh as at}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as U}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as j}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{d as Se,b as $e,g as Ae,i as st,f as we}from"../packem_shared/internal-zkEvTqy8.js";import{jsx as a,jsxs as q,Fragment as We}from"react/jsx-runtime";const rt=(n,e)=>{const t=new Set(n.map(s=>s.deadLetterQueue).filter(s=>typeof s=="string"&&s!=="")),l=n.filter(s=>(s.deadLetterQueue===void 0||s.deadLetterQueue==="")&&!t.has(s.name)),d=e.filter(s=>s.deadLettered).length;return{deadLetteredCount:d,queuesWithoutDlq:l,showReliabilityWarning:l.length>0||d>0}},nt=200,ot=Ae(j.sendQueueMessage),dt=Ae(j.replayQueueMessage),lt=Ae(j.clearQueueMessages),Re=96,ut=n=>{if(n===void 0)return"—";try{return JSON.stringify(n)}catch{return"[unserializable]"}},it=n=>n.length>Re?`${n.slice(0,Re)}…`:n,ct=n=>n==="error"?"destructive":n==="retry"?"outline":"secondary",mt=(n,e)=>e(n==="messages"?"Messages":n==="send"?"Send":"Declared"),ht=n=>{const e=P(11),{loaded:t,queues:l}=n,d=U();let s;e[0]!==d?(s=d("Queues are declared in code with defineQueue. Enqueue from a mutation or action with ctx.queues.<name>.send(...); push consumers process batches in the worker."),e[0]=d,e[1]=s):s=e[1];let o;e[2]!==s?(o=a("p",{className:"text-sm text-muted-foreground",children:s}),e[2]=s,e[3]=o):o=e[3];let r;e[4]!==t||e[5]!==l||e[6]!==d?(r=t&&l.length===0?a(Qe,{description:d("No defineQueue is declared in lunora/queues.ts in this deployment. Add one to offload async work to a Cloudflare Queue."),testId:"queues-empty",title:d("No queues defined")}):a(Oe,{className:"overflow-hidden py-0",children:a(ke,{className:"px-0",children:q(Be,{"data-testid":"queues-table",children:[a(Je,{children:q(oe,{children:[a($,{children:d("Export")}),a($,{children:d("Queue")}),a($,{children:d("Mode")}),a($,{children:d("Binding")}),a($,{children:d("Dead-letter")})]})}),a(Fe,{children:l.map(xt)})]})})}),e[4]=t,e[5]=l,e[6]=d,e[7]=r):r=e[7];let h;return e[8]!==o||e[9]!==r?(h=q("div",{className:"flex flex-col gap-4","data-testid":"queues-declared",children:[o,r]}),e[8]=o,e[9]=r,e[10]=h):h=e[10],h},pt=n=>{const e=P(67),{message:t,onReplay:l,replayingId:d}=n,s=U();let o,r,h,c,f,y,x,u,m,g;if(e[0]!==t.attempts||e[1]!==t.body||e[2]!==t.deadLettered||e[3]!==t.exportName||e[4]!==t.id||e[5]!==t.messageId||e[6]!==t.outcome||e[7]!==t.queue||e[8]!==s){const J=ut(t.body);r=oe,y=`queues-message-${t.id}`;const F=t.exportName??t.queue;e[19]!==F?(x=a(w,{className:"font-mono text-xs",children:F}),e[19]=F,e[20]=x):x=e[20],e[21]!==t.messageId?(u=a(w,{className:"max-w-[16ch] truncate font-mono text-xs text-muted-foreground",title:t.messageId,children:t.messageId}),e[21]=t.messageId,e[22]=u):u=e[22],e[23]!==t.attempts?(m=a(w,{className:"font-mono text-xs tabular-nums",children:t.attempts}),e[23]=t.attempts,e[24]=m):m=e[24];const L=`queues-outcome-${t.id}`;let E;e[25]!==t.outcome?(E=ct(t.outcome),e[25]=t.outcome,e[26]=E):E=e[26];let C;e[27]!==t.outcome||e[28]!==L||e[29]!==E?(C=a(Ce,{"data-testid":L,variant:E,children:t.outcome}),e[27]=t.outcome,e[28]=L,e[29]=E,e[30]=C):C=e[30];let M;e[31]!==t.deadLettered||e[32]!==t.id||e[33]!==s?(M=t.deadLettered&&a(Ce,{"data-testid":`queues-dlq-${t.id}`,variant:"destructive",children:s("DLQ")}),e[31]=t.deadLettered,e[32]=t.id,e[33]=s,e[34]=M):M=e[34],e[35]!==C||e[36]!==M?(g=a(w,{children:q("span",{className:"inline-flex items-center gap-1",children:[C,M]})}),e[35]=C,e[36]=M,e[37]=g):g=e[37],o=w,h="max-w-[32ch] truncate font-mono text-xs text-muted-foreground",c=J,f=it(J),e[0]=t.attempts,e[1]=t.body,e[2]=t.deadLettered,e[3]=t.exportName,e[4]=t.id,e[5]=t.messageId,e[6]=t.outcome,e[7]=t.queue,e[8]=s,e[9]=o,e[10]=r,e[11]=h,e[12]=c,e[13]=f,e[14]=y,e[15]=x,e[16]=u,e[17]=m,e[18]=g}else o=e[9],r=e[10],h=e[11],c=e[12],f=e[13],y=e[14],x=e[15],u=e[16],m=e[17],g=e[18];let p;e[38]!==o||e[39]!==h||e[40]!==c||e[41]!==f?(p=a(o,{className:h,title:c,children:f}),e[38]=o,e[39]=h,e[40]=c,e[41]=f,e[42]=p):p=e[42];let b;e[43]!==t.capturedAt?(b=st(t.capturedAt,"—"),e[43]=t.capturedAt,e[44]=b):b=e[44];let N;e[45]!==b?(N=a(w,{className:"text-xs text-muted-foreground tabular-nums",children:b}),e[45]=b,e[46]=N):N=e[46];const S=`queues-replay-${t.id}`,A=d!==null;let I;e[47]!==t.id||e[48]!==d||e[49]!==s?(I=d===t.id?s("Replaying…"):s("Replay"),e[47]=t.id,e[48]=d,e[49]=s,e[50]=I):I=e[50];let Q;e[51]!==t.id||e[52]!==l||e[53]!==S||e[54]!==A||e[55]!==I?(Q=a(w,{children:a(Ie,{"data-id":t.id,"data-testid":S,disabled:A,onClick:l,size:"xs",type:"button",variant:"outline",children:I})}),e[51]=t.id,e[52]=l,e[53]=S,e[54]=A,e[55]=I,e[56]=Q):Q=e[56];let D;return e[57]!==r||e[58]!==N||e[59]!==Q||e[60]!==y||e[61]!==x||e[62]!==u||e[63]!==m||e[64]!==g||e[65]!==p?(D=q(r,{"data-testid":y,children:[x,u,m,g,p,N,Q]}),e[57]=r,e[58]=N,e[59]=Q,e[60]=y,e[61]=x,e[62]=u,e[63]=m,e[64]=g,e[65]=p,e[66]=D):D=e[66],D},gt=n=>{const e=P(30),{hasError:t,messages:l,onClear:d,onReplay:s,replayingId:o}=n,r=U();let h;e[0]!==r?(h=r("Cloudflare Queues have no peek API, so this is what push consumers actually processed — not pending depth."),e[0]=r,e[1]=h):h=e[1];let c;e[2]!==h?(c=a("p",{className:"text-sm text-muted-foreground",children:h}),e[2]=h,e[3]=c):c=e[3];let f;e[4]!==l.length||e[5]!==r?(f=r("Clear {count} messages?",{count:l.length}),e[4]=l.length,e[5]=r,e[6]=f):f=e[6];const y=l.length===0;let x;e[7]!==r?(x=r("Clear log"),e[7]=r,e[8]=x):x=e[8];let u;e[9]!==d||e[10]!==f||e[11]!==y||e[12]!==x?(u=a("div",{className:"ml-auto",children:a(Ve,{confirmLabel:f,disabled:y,onConfirm:d,testId:"queues-clear",children:x})}),e[9]=d,e[10]=f,e[11]=y,e[12]=x,e[13]=u):u=e[13];let m;e[14]!==l.length||e[15]!==r?(m=l.length>0&&a(Ce,{"data-testid":"queues-count",variant:"secondary",children:r("{count} messages",{count:l.length})}),e[14]=l.length,e[15]=r,e[16]=m):m=e[16];let g;e[17]!==c||e[18]!==u||e[19]!==m?(g=q("div",{className:"flex flex-wrap items-center gap-2",children:[c,u,m]}),e[17]=c,e[18]=u,e[19]=m,e[20]=g):g=e[20];let p;e[21]!==t||e[22]!==l||e[23]!==s||e[24]!==o||e[25]!==r?(p=!t&&l.length===0?a(Qe,{description:r("Consumed messages appear here once a push consumer processes a batch in dev. Send one from the Send tab to see it captured."),testId:"queues-messages-empty",title:r("No consumed messages yet.")}):a(Oe,{className:"overflow-hidden py-0",children:a(ke,{className:"px-0",children:a(et,{className:"max-h-[32rem]","data-testid":"queues-messages-scroll",children:q(Be,{"data-testid":"queues-messages-table",children:[a(Je,{children:q(oe,{children:[a($,{children:r("Export")}),a($,{children:r("Message")}),a($,{children:r("Attempts")}),a($,{children:r("Outcome")}),a($,{children:r("Body")}),a($,{children:r("Captured")}),a($,{})]})}),a(Fe,{children:l.map(N=>a(pt,{message:N,onReplay:s,replayingId:o},N.id))})]})})})}),e[21]=t,e[22]=l,e[23]=s,e[24]=o,e[25]=r,e[26]=p):p=e[26];let b;return e[27]!==g||e[28]!==p?(b=q("div",{className:"flex flex-col gap-4","data-testid":"queues-messages",children:[g,p]}),e[27]=g,e[28]=p,e[29]=b):b=e[29],b},ft=n=>{const e=P(20),{batchMode:t,bodyText:l,delayText:d,onBatchModeChange:s,onBodyChange:o,onDelayChange:r,onSelectExport:h,onSend:c,queues:f,selectedExportName:y,sending:x}=n,u=U();let m;e[0]!==u?(m=u("Enqueue a JSON message to a declared producer to exercise its consumer. Nothing is captured until the consumer processes it."),e[0]=u,e[1]=m):m=e[1];let g;e[2]!==m?(g=a("p",{className:"text-sm text-muted-foreground",children:m}),e[2]=m,e[3]=g):g=e[3];let p;e[4]!==t||e[5]!==l||e[6]!==d||e[7]!==s||e[8]!==o||e[9]!==r||e[10]!==h||e[11]!==c||e[12]!==f||e[13]!==y||e[14]!==x||e[15]!==u?(p=f.length===0?a(Qe,{description:u("Declare a queue with defineQueue in lunora/queues.ts to enqueue a test message."),testId:"queues-send-empty",title:u("No queues to send to")}):q(We,{children:[q("div",{className:"flex flex-wrap items-center gap-2",children:[a("select",{"aria-label":u("Queue"),className:"h-8 rounded-md border border-input bg-transparent px-2.5 py-1 text-xs outline-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50","data-testid":"queues-send-select",onChange:h,value:y,children:f.map(yt)}),a(Ze,{"aria-label":u("Delay (seconds)"),className:"max-w-36","data-testid":"queues-send-delay",min:0,onChange:r,placeholder:u("Delay (s)"),type:"number",value:d}),q("label",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",htmlFor:"queues-send-batch",children:[a("input",{checked:t,"data-testid":"queues-send-batch",id:"queues-send-batch",onChange:s,type:"checkbox"}),u("Send as batch (JSON array)")]}),a(Ie,{className:"ml-auto","data-testid":"queues-send-button",disabled:x||y==="",onClick:c,type:"button",children:u(x?"Sending…":"Send message")})]}),a(tt,{"aria-label":u("Message body (JSON)"),className:"font-mono","data-testid":"queues-send-body",onChange:o,placeholder:t?'[ { "hello": "world" } ]':'{ "hello": "world" }',value:l})]}),e[4]=t,e[5]=l,e[6]=d,e[7]=s,e[8]=o,e[9]=r,e[10]=h,e[11]=c,e[12]=f,e[13]=y,e[14]=x,e[15]=u,e[16]=p):p=e[16];let b;return e[17]!==g||e[18]!==p?(b=q("div",{className:"flex flex-col gap-3","data-testid":"queues-send",children:[g,p]}),e[17]=g,e[18]=p,e[19]=b):b=e[19],b},Ft=n=>{const e=P(59),{limit:t}=n,l=t??nt,d=Ke(),s=U(),[o,r]=_("declared"),[h,c]=_(null);let f;e[0]===Symbol.for("react.memo_cache_sentinel")?(f={},e[0]=f):f=e[0];const{data:y,error:x,errorSource:u}=Te(j.listQueues,f);let m;e[1]!==l?(m={limit:l},e[1]=l,e[2]=m):m=e[2];const{data:g,error:p,errorSource:b,refetch:N}=Te(j.getQueueMessages,m),S=Array.isArray(y?.queues)?[...y.queues].toSorted(Nt):[],A=g?.entries??[],{deadLetteredCount:I,queuesWithoutDlq:Q,showReliabilityWarning:D}=rt(S,A),[J,F]=_(""),[L,E]=_(""),[C,M]=_(""),[W,ze]=_(!1),[de,Le]=_(!1),[le,Ee]=_(null),G=S.some(i=>i.exportName===J)?J:S[0]?.exportName??"",Me=o==="messages"?p:x,je=o==="messages"?b:u,ue=Me??h,ie=Me===null?h:je;let H;e[3]!==N?(H=()=>{N()},e[3]=N,e[4]=H):H=e[4],at(H,o==="messages");const ce=async()=>{c(null);const i=G;if(i==="")return;let v=null;const _e=L.trim();if(_e!=="")try{v=JSON.parse(_e)}catch{c(s("Body must be valid JSON."));return}let ve;const De=C.trim();if(De!==""){const z=Number(De);if(!Number.isFinite(z)||z<0){c(s("Delay must be a non-negative number of seconds."));return}ve=z}if(W&&!Array.isArray(v)){c(s("Batch mode needs a JSON array body — each element is enqueued as one message."));return}Le(!0);const He=W?{batch:v,delaySeconds:ve,exportName:i}:{body:v,delaySeconds:ve,exportName:i};try{await d.query(ot,He,Se("")),N()}catch(z){c($e(z))}Le(!1)};let K;e[5]!==d||e[6]!==N?(K=async i=>{c(null),Ee(i);try{await d.query(dt,{id:i},Se("")),N()}catch(v){c($e(v))}Ee(null)},e[5]=d,e[6]=N,e[7]=K):K=e[7];const me=K;let V;e[8]!==d||e[9]!==N?(V=async()=>{c(null);try{await d.query(lt,{},Se("")),N()}catch(i){c($e(i))}},e[8]=d,e[9]=N,e[10]=V):V=e[10];const he=V;let X;e[11]===Symbol.for("react.memo_cache_sentinel")?(X=i=>{const v=i.currentTarget.dataset.tab;(v==="declared"||v==="messages"||v==="send")&&r(v)},e[11]=X):X=e[11];const Pe=X;let Y;e[12]===Symbol.for("react.memo_cache_sentinel")?(Y=i=>{F(i.currentTarget.value)},e[12]=Y):Y=e[12];const pe=Y;let Z;e[13]===Symbol.for("react.memo_cache_sentinel")?(Z=i=>{E(i.currentTarget.value)},e[13]=Z):Z=e[13];const ge=Z;let ee;e[14]===Symbol.for("react.memo_cache_sentinel")?(ee=i=>{M(i.currentTarget.value)},e[14]=ee):ee=e[14];const fe=ee;let te;e[15]===Symbol.for("react.memo_cache_sentinel")?(te=i=>{ze(i.currentTarget.checked)},e[15]=te):te=e[15];const xe=te;let ae;e[16]!==ce?(ae=()=>{we(ce())},e[16]=ce,e[17]=ae):ae=e[17];const ye=ae;let se;e[18]!==me?(se=i=>{const{id:v}=i.currentTarget.dataset;v!==void 0&&we(me(v))},e[18]=me,e[19]=se):se=e[19];const Ne=se;let re;e[20]!==he?(re=()=>{we(he())},e[20]=he,e[21]=re):re=e[21];const be=re,Ue="flex flex-col gap-6",Ge="lunora-queues-panel";let T;e[22]!==s||e[23]!==o?(T=a("div",{className:"flex items-center gap-1","data-testid":"queues-tabs",role:"tablist",children:["declared","messages","send"].map(i=>a(Ie,{"aria-selected":o===i,"data-tab":i,"data-testid":`queues-tab-${i}`,onClick:Pe,role:"tab",size:"sm",type:"button",variant:o===i?"secondary":"ghost",children:mt(i,s)},i))}),e[22]=s,e[23]=o,e[24]=T):T=e[24];let R;e[25]!==ue||e[26]!==ie?(R=ue!==null&&a(Xe,{error:ie,testId:"queues-error"}),e[25]=ue,e[26]=ie,e[27]=R):R=e[27];const qe=D&&a(Ye,{icon:a("span",{"aria-hidden":"true",className:"text-base leading-none",children:"⚠"}),testId:"queues-dlq-warning",variant:"warning",children:q("div",{className:"flex flex-col gap-1",children:[Q.length>0&&q(We,{children:[a("p",{className:"font-medium",children:s("No dead-letter queue on {queues}.",{queues:Q.map(bt).join(", ")})}),a("p",{className:"text-muted-foreground",children:s("Exhausted messages are dropped after retries. Add a deadLetterQueue to capture them.")})]}),I>0&&a("p",{className:Q.length>0?"text-muted-foreground":"font-medium",children:I===1?s("1 message was recently dead-lettered."):s("{count} messages were recently dead-lettered.",{count:I})})]})});let O;e[28]!==S||e[29]!==y||e[30]!==o?(O=o==="declared"&&a(ht,{loaded:y!==void 0,queues:S}),e[28]=S,e[29]=y,e[30]=o,e[31]=O):O=e[31];let k;e[32]!==A||e[33]!==p||e[34]!==be||e[35]!==Ne||e[36]!==le||e[37]!==o?(k=o==="messages"&&a(gt,{hasError:p!==null,messages:A,onClear:be,onReplay:Ne,replayingId:le}),e[32]=A,e[33]=p,e[34]=be,e[35]=Ne,e[36]=le,e[37]=o,e[38]=k):k=e[38];let B;e[39]!==W||e[40]!==L||e[41]!==C||e[42]!==xe||e[43]!==ge||e[44]!==fe||e[45]!==pe||e[46]!==ye||e[47]!==S||e[48]!==G||e[49]!==de||e[50]!==o?(B=o==="send"&&a(ft,{batchMode:W,bodyText:L,delayText:C,onBatchModeChange:xe,onBodyChange:ge,onDelayChange:fe,onSelectExport:pe,onSend:ye,queues:S,selectedExportName:G,sending:de}),e[39]=W,e[40]=L,e[41]=C,e[42]=xe,e[43]=ge,e[44]=fe,e[45]=pe,e[46]=ye,e[47]=S,e[48]=G,e[49]=de,e[50]=o,e[51]=B):B=e[51];let ne;return e[52]!==T||e[53]!==R||e[54]!==qe||e[55]!==O||e[56]!==k||e[57]!==B?(ne=q("div",{className:Ue,"data-testid":Ge,children:[T,R,qe,O,k,B]}),e[52]=T,e[53]=R,e[54]=qe,e[55]=O,e[56]=k,e[57]=B,e[58]=ne):ne=e[58],ne};function xt(n){return q(oe,{"data-testid":`queues-row-${n.exportName}`,children:[a(w,{className:"font-mono text-xs",children:n.exportName}),a(w,{className:"font-mono text-xs text-muted-foreground",children:n.name}),a(w,{className:"font-mono text-xs text-muted-foreground",children:n.mode}),a(w,{className:"font-mono text-xs text-muted-foreground",children:n.binding}),a(w,{className:"font-mono text-xs text-muted-foreground",children:n.deadLetterQueue??"—"})]},n.exportName)}function yt(n){return a("option",{value:n.exportName,children:n.exportName},n.exportName)}function Nt(n,e){return n.exportName.localeCompare(e.exportName)}function bt(n){return n.name}export{Ft as default};
@@ -1 +1 @@
1
- import{c as F}from"react/compiler-runtime";import{E as J}from"../packem_shared/error-alert-t6cpEi0z.js";import{g as z}from"../packem_shared/badge-BbuuAio7.js";import{u as C,c as D}from"../packem_shared/card-CIDGUN6K.js";import{E as j}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as G,d as M,m as E,p as A,f as O,u as S}from"../packem_shared/table-DdJBrClo.js";import{N as K}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useT as V}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as W}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{jsx as r,jsxs as o}from"react/jsx-runtime";const U=["read","insert","update","delete"],q=(e,t)=>({delete:e("Delete"),insert:e("Insert"),read:e("Read"),update:e("Update")})[t],B=e=>{const t=new Map;for(const s of e){const l=t.get(s.table)??{operations:new Set,procedures:new Set,table:s.table};l.operations.add(s.on),l.procedures.add(s.procedure),t.set(s.table,l)}return[...t.values()].toSorted((s,l)=>s.table.localeCompare(l.table))},ae=()=>{const e=F(49),t=V();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={},e[0]=s):s=e[0];const{data:l,error:I,errorSource:R}=K(W.rlsPolicies,s),c=l!==void 0;let p,n,m,a,h,f,u,x,i;if(e[1]!==l||e[2]!==I||e[3]!==R||e[4]!==c||e[5]!==t){const T=B(Array.isArray(l?.policies)?l.policies:[]);let k;e[15]!==l?(k=Array.isArray(l?.roles)?l.roles:[],e[15]=l,e[16]=k):k=e[16],n=k,u="flex flex-col gap-6",x="lunora-rls-panel",e[17]!==I||e[18]!==R?(i=I!==null&&r(J,{error:R,testId:"rls-error"}),e[17]=I,e[18]=R,e[19]=i):i=e[19],f="flex flex-col gap-2",p=D,m="overflow-hidden py-0";let v;e[20]!==t?(v=t("Policies"),e[20]=t,e[21]=v):v=e[21],e[22]!==v?(a=r("header",{className:"border-b border-border px-4 py-3",children:r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:v})}),e[22]=v,e[23]=a):a=e[23],h=c&&T.length===0?r(j,{description:t("No `definePolicy` is wired through `.use(rls(...))` in this deployment. Add one to guard a table's rows."),testId:"rls-policies-empty",title:t("No policies defined")}):r(C,{className:"px-0",children:o(G,{"data-testid":"rls-policies-table",children:[r(M,{children:o(E,{children:[r(A,{children:t("Table")}),U.map(d=>r(A,{children:q(t,d)},d)),r(A,{children:t("Guarded by")})]})}),r(O,{children:T.map(d=>o(E,{"data-testid":`rls-table-${d.table}`,children:[r(S,{className:"font-mono text-xs",children:d.table}),U.map(_=>r(S,{children:d.operations.has(_)?r(z,{variant:"secondary",children:t("Guarded")}):r("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"})},_)),r(S,{className:"font-mono text-xs text-muted-foreground",children:[...d.procedures].join(", ")})]},d.table))})]})}),e[1]=l,e[2]=I,e[3]=R,e[4]=c,e[5]=t,e[6]=p,e[7]=n,e[8]=m,e[9]=a,e[10]=h,e[11]=f,e[12]=u,e[13]=x,e[14]=i}else p=e[6],n=e[7],m=e[8],a=e[9],h=e[10],f=e[11],u=e[12],x=e[13],i=e[14];let N;e[24]!==p||e[25]!==m||e[26]!==a||e[27]!==h?(N=o(p,{className:m,children:[a,h]}),e[24]=p,e[25]=m,e[26]=a,e[27]=h,e[28]=N):N=e[28];let b;e[29]!==f||e[30]!==N?(b=r("section",{className:f,children:N}),e[29]=f,e[30]=N,e[31]=b):b=e[31];let g;e[32]!==t?(g=t("Roles"),e[32]=t,e[33]=g):g=e[33];let y;e[34]!==g?(y=r("header",{className:"border-b border-border px-4 py-3",children:r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:g})}),e[34]=g,e[35]=y):y=e[35];let $;e[36]!==c||e[37]!==n||e[38]!==t?($=c&&n.length===0?r(j,{description:t("No `defineRole` is registered via `rls(policies, { roles })`. Roles back `ctx.auth.can(...)` permission checks."),testId:"rls-roles-empty",title:t("No roles defined")}):r(C,{className:"px-0",children:o(G,{"data-testid":"rls-roles-table",children:[r(M,{children:o(E,{children:[r(A,{children:t("Role")}),r(A,{children:t("Description")}),r(A,{children:t("Permissions")})]})}),r(O,{children:n.map(L)})]})}),e[36]=c,e[37]=n,e[38]=t,e[39]=$):$=e[39];let w;e[40]!==y||e[41]!==$?(w=r("section",{className:"flex flex-col gap-2",children:o(D,{className:"overflow-hidden py-0",children:[y,$]})}),e[40]=y,e[41]=$,e[42]=w):w=e[42];let P;return e[43]!==w||e[44]!==u||e[45]!==x||e[46]!==i||e[47]!==b?(P=o("div",{className:u,"data-testid":x,children:[i,b,w]}),e[43]=w,e[44]=u,e[45]=x,e[46]=i,e[47]=b,e[48]=P):P=e[48],P};function H(e){return r(z,{variant:"outline",children:e},e)}function L(e){return o(E,{"data-testid":`rls-role-${e.name}`,children:[r(S,{className:"font-mono text-xs",children:e.name}),r(S,{className:"text-muted-foreground",children:e.description??""}),r(S,{children:e.permissions.length===0?r("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"}):r("span",{className:"flex flex-wrap gap-1",children:e.permissions.map(H)})})]},e.name)}export{ae as default};
1
+ import{c as F}from"react/compiler-runtime";import{E as J}from"../packem_shared/error-alert--Ie7ofJ0.js";import{g as z}from"../packem_shared/badge-BbuuAio7.js";import{u as C,c as D}from"../packem_shared/card-CIDGUN6K.js";import{E as j}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as G,d as M,m as E,p as A,f as O,u as S}from"../packem_shared/table-DdJBrClo.js";import{N as K}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{useT as V}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as W}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{jsx as r,jsxs as o}from"react/jsx-runtime";const U=["read","insert","update","delete"],q=(e,t)=>({delete:e("Delete"),insert:e("Insert"),read:e("Read"),update:e("Update")})[t],B=e=>{const t=new Map;for(const s of e){const l=t.get(s.table)??{operations:new Set,procedures:new Set,table:s.table};l.operations.add(s.on),l.procedures.add(s.procedure),t.set(s.table,l)}return[...t.values()].toSorted((s,l)=>s.table.localeCompare(l.table))},ae=()=>{const e=F(49),t=V();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={},e[0]=s):s=e[0];const{data:l,error:I,errorSource:R}=K(W.rlsPolicies,s),c=l!==void 0;let p,n,m,a,h,f,u,x,i;if(e[1]!==l||e[2]!==I||e[3]!==R||e[4]!==c||e[5]!==t){const T=B(Array.isArray(l?.policies)?l.policies:[]);let k;e[15]!==l?(k=Array.isArray(l?.roles)?l.roles:[],e[15]=l,e[16]=k):k=e[16],n=k,u="flex flex-col gap-6",x="lunora-rls-panel",e[17]!==I||e[18]!==R?(i=I!==null&&r(J,{error:R,testId:"rls-error"}),e[17]=I,e[18]=R,e[19]=i):i=e[19],f="flex flex-col gap-2",p=D,m="overflow-hidden py-0";let v;e[20]!==t?(v=t("Policies"),e[20]=t,e[21]=v):v=e[21],e[22]!==v?(a=r("header",{className:"border-b border-border px-4 py-3",children:r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:v})}),e[22]=v,e[23]=a):a=e[23],h=c&&T.length===0?r(j,{description:t("No `definePolicy` is wired through `.use(rls(...))` in this deployment. Add one to guard a table's rows."),testId:"rls-policies-empty",title:t("No policies defined")}):r(C,{className:"px-0",children:o(G,{"data-testid":"rls-policies-table",children:[r(M,{children:o(E,{children:[r(A,{children:t("Table")}),U.map(d=>r(A,{children:q(t,d)},d)),r(A,{children:t("Guarded by")})]})}),r(O,{children:T.map(d=>o(E,{"data-testid":`rls-table-${d.table}`,children:[r(S,{className:"font-mono text-xs",children:d.table}),U.map(_=>r(S,{children:d.operations.has(_)?r(z,{variant:"secondary",children:t("Guarded")}):r("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"})},_)),r(S,{className:"font-mono text-xs text-muted-foreground",children:[...d.procedures].join(", ")})]},d.table))})]})}),e[1]=l,e[2]=I,e[3]=R,e[4]=c,e[5]=t,e[6]=p,e[7]=n,e[8]=m,e[9]=a,e[10]=h,e[11]=f,e[12]=u,e[13]=x,e[14]=i}else p=e[6],n=e[7],m=e[8],a=e[9],h=e[10],f=e[11],u=e[12],x=e[13],i=e[14];let N;e[24]!==p||e[25]!==m||e[26]!==a||e[27]!==h?(N=o(p,{className:m,children:[a,h]}),e[24]=p,e[25]=m,e[26]=a,e[27]=h,e[28]=N):N=e[28];let b;e[29]!==f||e[30]!==N?(b=r("section",{className:f,children:N}),e[29]=f,e[30]=N,e[31]=b):b=e[31];let g;e[32]!==t?(g=t("Roles"),e[32]=t,e[33]=g):g=e[33];let y;e[34]!==g?(y=r("header",{className:"border-b border-border px-4 py-3",children:r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:g})}),e[34]=g,e[35]=y):y=e[35];let $;e[36]!==c||e[37]!==n||e[38]!==t?($=c&&n.length===0?r(j,{description:t("No `defineRole` is registered via `rls(policies, { roles })`. Roles back `ctx.auth.can(...)` permission checks."),testId:"rls-roles-empty",title:t("No roles defined")}):r(C,{className:"px-0",children:o(G,{"data-testid":"rls-roles-table",children:[r(M,{children:o(E,{children:[r(A,{children:t("Role")}),r(A,{children:t("Description")}),r(A,{children:t("Permissions")})]})}),r(O,{children:n.map(L)})]})}),e[36]=c,e[37]=n,e[38]=t,e[39]=$):$=e[39];let w;e[40]!==y||e[41]!==$?(w=r("section",{className:"flex flex-col gap-2",children:o(D,{className:"overflow-hidden py-0",children:[y,$]})}),e[40]=y,e[41]=$,e[42]=w):w=e[42];let P;return e[43]!==w||e[44]!==u||e[45]!==x||e[46]!==i||e[47]!==b?(P=o("div",{className:u,"data-testid":x,children:[i,b,w]}),e[43]=w,e[44]=u,e[45]=x,e[46]=i,e[47]=b,e[48]=P):P=e[48],P};function H(e){return r(z,{variant:"outline",children:e},e)}function L(e){return o(E,{"data-testid":`rls-role-${e.name}`,children:[r(S,{className:"font-mono text-xs",children:e.name}),r(S,{className:"text-muted-foreground",children:e.description??""}),r(S,{children:e.permissions.length===0?r("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"}):r("span",{className:"flex flex-wrap gap-1",children:e.permissions.map(H)})})]},e.name)}export{ae as default};
@@ -1 +1 @@
1
- import{c as M}from"react/compiler-runtime";import{useState as _}from"react";import{u as Z}from"../packem_shared/button-BkCrNcAs.js";import{useT as B}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{useLunora as E}from"@lunora/react";import{ConfirmButton as G}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{g as Y}from"../packem_shared/badge-BbuuAio7.js";import{c as T,u as A}from"../packem_shared/card-CIDGUN6K.js";import{E as W}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as z,d as K,m as I,p as x,f as V,u as b}from"../packem_shared/table-DdJBrClo.js";import{O}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{f as R,b as H,i as X}from"../packem_shared/internal-BSIsQVC6.js";import{jsxs as m,jsx as t}from"react/jsx-runtime";import{useAutoRefresh as Q}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{ScheduledJobs as ee}from"../packem_shared/ScheduledJobs-D8kBZWBu.js";const te={kind:"idle"},oe=(n,e,c)=>c!==void 0?c:e===void 0?d=>n.runCronJob(d):void 0,le=({loadCronJobs:n,runCronJob:e}={})=>{const c=E(),d=B(),[f,a]=_({}),r=O(["lunora-cron-jobs",n?"custom":"default"],()=>(n??(()=>c.getCronJobs()))()),{data:o,error:k}=r,h=oe(c,n,e),i=async l=>{if(h!==void 0){a(s=>({...s,[l]:{kind:"running"}}));try{await h(l),a(s=>({...s,[l]:{kind:"ok"}})),r.refetch()}catch(s){a(v=>({...v,[l]:{kind:"error",message:H(s)}}))}}};return m("div",{className:"flex flex-col gap-3","data-testid":"lunora-cron-triggers",children:[k!==null&&t("p",{className:"text-sm text-destructive","data-testid":"cron-error",role:"alert",children:k}),o?.length===0&&t(W,{description:d("Triggers declared with the cronJobs() builder appear here."),icon:m("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[t("circle",{cx:"12",cy:"12",r:"9"}),t("path",{d:"M12 7.5V12l4 2"})]}),testId:"cron-empty",title:d("No cron triggers.")}),o!==void 0&&o.length>0&&t(T,{className:"overflow-hidden py-0",children:t(A,{className:"px-0",children:m(z,{"data-testid":"cron-table",children:[t(K,{children:m(I,{children:[t(x,{children:d("name")}),t(x,{children:d("schedule")}),t(x,{children:d("target")}),t(x,{children:d("shard")}),h!==void 0&&t(x,{"aria-label":d("Actions")})]})}),t(V,{children:o.map(l=>{const s=f[l.name]??te;return m(I,{"data-testid":`cron-row-${l.name}`,children:[t(b,{children:l.name}),t(b,{className:"font-mono text-xs tabular-nums",children:l.cron}),t(b,{children:m("span",{className:"flex items-center gap-2",children:[l.workflow===void 0?t(Y,{variant:"outline",children:d("function")}):t(Y,{variant:"secondary",children:d("workflow")}),t("span",{className:"font-mono text-xs",children:l.workflow??l.functionPath})]})}),t(b,{children:l.shardKey??""}),h!==void 0&&t(b,{className:"text-right",children:m("span",{className:"flex items-center justify-end gap-2",children:[s.kind==="ok"&&t("span",{className:"text-xs text-muted-foreground","data-testid":`cron-ran-${l.name}`,children:d("ran")}),s.kind==="error"&&t("span",{className:"text-xs text-destructive","data-testid":`cron-run-error-${l.name}`,role:"alert",children:s.message}),t(G,{confirmLabel:d("Run now?"),disabled:s.kind==="running",onConfirm:()=>{R(i(l.name))},testId:`cron-run-${l.name}`,children:s.kind==="running"?d("Running…"):d("Run now")})]})})]},`${l.cron}:${l.name}`)})})]})})})]})},re=n=>Number.isFinite(n)?X(n,"—"):"—",ne=n=>{const e=M(34);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadJobs:d,removeJob:f,retryJob:a}=c,r=E(),o=B();let k;e[2]===Symbol.for("react.memo_cache_sentinel")?(k=["lunora-dead-jobs"],e[2]=k):k=e[2];let h;e[3]!==r||e[4]!==d?(h=async()=>(await(d??(()=>r.listDeadJobs()))()).toSorted(ae),e[3]=r,e[4]=d,e[5]=h):h=e[5];const i=O(k,h),l=i.data,[s,v]=_(void 0),N=i.error??s,u=d===void 0;let w;e[6]!==r||e[7]!==u||e[8]!==a?(w=a??(u?p=>r.retryDeadJob(p):void 0),e[6]=r,e[7]=u,e[8]=a,e[9]=w):w=e[9];const g=w;let $;e[10]!==r||e[11]!==u||e[12]!==f?($=f??(u?p=>r.removeDeadJob(p):void 0),e[10]=r,e[11]=u,e[12]=f,e[13]=$):$=e[13];const C=$;let J;e[14]!==i?(J=()=>{i.refetch()},e[14]=i,e[15]=J):J=e[15],Q(J,!0);let j;e[16]!==i?(j=async p=>{v(void 0);try{await p,i.refetch()}catch(U){v(H(U))}},e[16]=i,e[17]=j):j=e[17];const S=j,L=g!==void 0||C!==void 0;let q;e[18]!==N?(q=N!==void 0&&t("p",{className:"text-sm text-destructive","data-testid":"dlq-error",role:"alert",children:N}),e[18]=N,e[19]=q):q=e[19];let y;e[20]!==l?.length||e[21]!==o?(y=l?.length===0&&t(W,{description:o("Jobs that exhaust their retry budget are parked here instead of being dropped."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M3 6h18M8 6V4h8v2M6 6l1 14h10l1-14"})}),testId:"dlq-empty",title:o("No dead-letter jobs.")}),e[20]=l?.length,e[21]=o,e[22]=y):y=e[22];let P;e[23]!==S||e[24]!==L||e[25]!==l||e[26]!==C||e[27]!==g||e[28]!==o?(P=l!==void 0&&l.length>0&&t(T,{className:"overflow-hidden py-0",children:t(A,{className:"px-0",children:m(z,{"data-testid":"dlq-table",children:[t(K,{children:m(I,{children:[t(x,{children:o("function")}),t(x,{children:o("attempts")}),t(x,{children:o("last tried")}),t(x,{children:o("pool")}),t(x,{children:o("shard")}),t(x,{children:o("id")}),L&&t(x,{"aria-label":o("Actions")})]})}),t(V,{children:l.map(p=>m(I,{"data-testid":`dlq-row-${p.id}`,children:[t(b,{className:"font-mono text-xs",children:p.functionPath}),t(b,{className:"tabular-nums",children:p.attempts??0}),t(b,{className:"text-muted-foreground tabular-nums",children:re(p.scheduledFor)}),t(b,{className:"font-mono text-xs",children:p.pool??""}),t(b,{children:p.shardKey??""}),t(b,{className:"font-mono text-xs",children:p.id}),L&&t(b,{className:"text-right",children:m("div",{className:"flex justify-end gap-1.5",children:[g!==void 0&&t(Z,{"data-testid":`dlq-retry-${p.id}`,onClick:()=>{R(S(g(p.id)))},size:"sm",type:"button",variant:"outline",children:o("Retry")}),C!==void 0&&t(G,{confirmLabel:o("Drop job?"),onConfirm:()=>{R(S(C(p.id)))},testId:`dlq-remove-${p.id}`,children:o("Drop")})]})})]},p.id))})]})})}),e[23]=S,e[24]=L,e[25]=l,e[26]=C,e[27]=g,e[28]=o,e[29]=P):P=e[29];let D;return e[30]!==P||e[31]!==q||e[32]!==y?(D=m("div",{className:"flex flex-col gap-3","data-testid":"lunora-dead-letter",children:[q,y,P]}),e[30]=P,e[31]=q,e[32]=y,e[33]=D):D=e[33],D};function ae(n,e){return(e.attempts??0)-(n.attempts??0)}const F=n=>{const e=M(8),{label:c,testId:d,value:f}=n;let a;e[0]!==c?(a=t("span",{className:"text-xs text-muted-foreground",children:c}),e[0]=c,e[1]=a):a=e[1];let r;e[2]!==d||e[3]!==f?(r=t("span",{className:"text-2xl font-semibold tabular-nums","data-testid":d,children:f}),e[2]=d,e[3]=f,e[4]=r):r=e[4];let o;return e[5]!==a||e[6]!==r?(o=t(T,{className:"flex-1 py-0",children:m(A,{className:"flex flex-col gap-1 p-4",children:[a,r]})}),e[5]=a,e[6]=r,e[7]=o):o=e[7],o},de=n=>{const e=M(25);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadStatus:d}=c,f=E(),a=B(),r=d===void 0;let o;e[2]!==r?(o=["lunora-scheduler-status",r],e[2]=r,e[3]=o):o=e[3];let k;e[4]!==f||e[5]!==d?(k=async()=>{const $=await(d??(()=>f.schedulerStatus()))();return{...$,pools:$.pools.toSorted(ie)}},e[4]=f,e[5]=d,e[6]=k):k=e[6];const h=O(o,k),{data:i,error:l}=h;let s;e[7]!==h?(s=()=>{h.refetch()},e[7]=h,e[8]=s):s=e[8],Q(s,!0);let v;e[9]!==l?(v=l!==null&&t("p",{className:"text-sm text-destructive","data-testid":"pools-error",role:"alert",children:l}),e[9]=l,e[10]=v):v=e[10];let N;e[11]!==i||e[12]!==a?(N=i!==void 0&&m("div",{className:"flex gap-3","data-testid":"pools-totals",children:[t(F,{label:a("backlog"),testId:"pools-backlog",value:i.backlog}),t(F,{label:a("in flight"),testId:"pools-inflight",value:i.inFlight}),t(F,{label:a("pools"),testId:"pools-count",value:i.pools.length})]}),e[11]=i,e[12]=a,e[13]=N):N=e[13];let u;e[14]!==i?.pools.length||e[15]!==a?(u=i?.pools.length===0&&t(W,{description:a("Pools created with createWorkpool appear here once they have activity."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M4 7h16M4 12h16M4 17h16"})}),testId:"pools-empty",title:a("No workpools.")}),e[14]=i?.pools.length,e[15]=a,e[16]=u):u=e[16];let w;e[17]!==i||e[18]!==a?(w=i!==void 0&&i.pools.length>0&&t(T,{className:"overflow-hidden py-0",children:t(A,{className:"px-0",children:m(z,{"data-testid":"pools-table",children:[t(K,{children:m(I,{children:[t(x,{children:a("pool")}),t(x,{children:a("queued")}),t(x,{children:a("in flight")}),t(x,{children:a("max concurrency")})]})}),t(V,{children:i.pools.map(se)})]})})}),e[17]=i,e[18]=a,e[19]=w):w=e[19];let g;return e[20]!==v||e[21]!==N||e[22]!==u||e[23]!==w?(g=m("div",{className:"flex flex-col gap-3","data-testid":"lunora-scheduler-pools",children:[v,N,u,w]}),e[20]=v,e[21]=N,e[22]=u,e[23]=w,e[24]=g):g=e[24],g};function ie(n,e){return e.queued-n.queued}function se(n){return m(I,{"data-testid":`pools-row-${n.name}`,children:[t(b,{className:"font-mono text-xs",children:n.name}),t(b,{className:"tabular-nums",children:n.queued}),m(b,{className:"tabular-nums",children:[n.inFlight," / ",n.maxConcurrency]}),t(b,{className:"tabular-nums",children:n.maxConcurrency})]},n.name)}const ce=["jobs","dead","pools","cron"],Je=n=>{const e=M(41);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadCronJobs:d,scheduledCancel:f,scheduledLoad:a}=c,r=B(),[o,k]=_("jobs");let h;e[2]!==r?(h=r("Cron triggers"),e[2]=r,e[3]=h):h=e[3];let i;e[4]!==r?(i=r("Dead letter"),e[4]=r,e[5]=i):i=e[5];let l;e[6]!==r?(l=r("Scheduled jobs"),e[6]=r,e[7]=l):l=e[7];let s;e[8]!==r?(s=r("Pools"),e[8]=r,e[9]=s):s=e[9];let v;e[10]!==h||e[11]!==i||e[12]!==l||e[13]!==s?(v={cron:h,dead:i,jobs:l,pools:s},e[10]=h,e[11]=i,e[12]=l,e[13]=s,e[14]=v):v=e[14];const N=v;let u;e[15]===Symbol.for("react.memo_cache_sentinel")?(u=y=>{k(y.currentTarget.dataset.view)},e[15]=u):u=e[15];const w=u;let g;e[16]!==r?(g=r("Schedule view"),e[16]=r,e[17]=g):g=e[17];let $;e[18]!==o||e[19]!==N?($=ce.map(y=>t(Z,{"aria-selected":o===y,"data-testid":`schedule-view-${y}`,"data-view":y,onClick:w,role:"tab",size:"sm",type:"button",variant:o===y?"default":"outline",children:N[y]},y)),e[18]=o,e[19]=N,e[20]=$):$=e[20];let C;e[21]!==g||e[22]!==$?(C=t("div",{"aria-label":g,className:"flex gap-1.5","data-testid":"schedule-view-toggle",role:"tablist",children:$}),e[21]=g,e[22]=$,e[23]=C):C=e[23];let J;e[24]!==f||e[25]!==a||e[26]!==o?(J=o==="jobs"&&t(ee,{cancelJob:f,loadJobs:a}),e[24]=f,e[25]=a,e[26]=o,e[27]=J):J=e[27];let j;e[28]!==o?(j=o==="dead"&&t(ne,{}),e[28]=o,e[29]=j):j=e[29];let S;e[30]!==o?(S=o==="pools"&&t(de,{}),e[30]=o,e[31]=S):S=e[31];let L;e[32]!==d||e[33]!==o?(L=o==="cron"&&t(le,{loadCronJobs:d}),e[32]=d,e[33]=o,e[34]=L):L=e[34];let q;return e[35]!==C||e[36]!==J||e[37]!==j||e[38]!==S||e[39]!==L?(q=m("div",{className:"flex flex-col gap-4","data-testid":"lunora-schedule",children:[C,J,j,S,L]}),e[35]=C,e[36]=J,e[37]=j,e[38]=S,e[39]=L,e[40]=q):q=e[40],q};export{Je as SchedulePanel};
1
+ import{c as M}from"react/compiler-runtime";import{useState as _}from"react";import{u as Z}from"../packem_shared/button-BkCrNcAs.js";import{useT as B}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{useLunora as E}from"@lunora/react";import{ConfirmButton as G}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{g as Y}from"../packem_shared/badge-BbuuAio7.js";import{c as T,u as A}from"../packem_shared/card-CIDGUN6K.js";import{E as W}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as z,d as K,m as I,p as x,f as V,u as b}from"../packem_shared/table-DdJBrClo.js";import{O}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{f as R,b as H,i as X}from"../packem_shared/internal-zkEvTqy8.js";import{jsxs as m,jsx as t}from"react/jsx-runtime";import{useAutoRefresh as Q}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{ScheduledJobs as ee}from"../packem_shared/ScheduledJobs-DDJG9Je7.js";const te={kind:"idle"},oe=(n,e,c)=>c!==void 0?c:e===void 0?d=>n.runCronJob(d):void 0,le=({loadCronJobs:n,runCronJob:e}={})=>{const c=E(),d=B(),[f,a]=_({}),r=O(["lunora-cron-jobs",n?"custom":"default"],()=>(n??(()=>c.getCronJobs()))()),{data:o,error:k}=r,h=oe(c,n,e),i=async l=>{if(h!==void 0){a(s=>({...s,[l]:{kind:"running"}}));try{await h(l),a(s=>({...s,[l]:{kind:"ok"}})),r.refetch()}catch(s){a(v=>({...v,[l]:{kind:"error",message:H(s)}}))}}};return m("div",{className:"flex flex-col gap-3","data-testid":"lunora-cron-triggers",children:[k!==null&&t("p",{className:"text-sm text-destructive","data-testid":"cron-error",role:"alert",children:k}),o?.length===0&&t(W,{description:d("Triggers declared with the cronJobs() builder appear here."),icon:m("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[t("circle",{cx:"12",cy:"12",r:"9"}),t("path",{d:"M12 7.5V12l4 2"})]}),testId:"cron-empty",title:d("No cron triggers.")}),o!==void 0&&o.length>0&&t(T,{className:"overflow-hidden py-0",children:t(A,{className:"px-0",children:m(z,{"data-testid":"cron-table",children:[t(K,{children:m(I,{children:[t(x,{children:d("name")}),t(x,{children:d("schedule")}),t(x,{children:d("target")}),t(x,{children:d("shard")}),h!==void 0&&t(x,{"aria-label":d("Actions")})]})}),t(V,{children:o.map(l=>{const s=f[l.name]??te;return m(I,{"data-testid":`cron-row-${l.name}`,children:[t(b,{children:l.name}),t(b,{className:"font-mono text-xs tabular-nums",children:l.cron}),t(b,{children:m("span",{className:"flex items-center gap-2",children:[l.workflow===void 0?t(Y,{variant:"outline",children:d("function")}):t(Y,{variant:"secondary",children:d("workflow")}),t("span",{className:"font-mono text-xs",children:l.workflow??l.functionPath})]})}),t(b,{children:l.shardKey??""}),h!==void 0&&t(b,{className:"text-right",children:m("span",{className:"flex items-center justify-end gap-2",children:[s.kind==="ok"&&t("span",{className:"text-xs text-muted-foreground","data-testid":`cron-ran-${l.name}`,children:d("ran")}),s.kind==="error"&&t("span",{className:"text-xs text-destructive","data-testid":`cron-run-error-${l.name}`,role:"alert",children:s.message}),t(G,{confirmLabel:d("Run now?"),disabled:s.kind==="running",onConfirm:()=>{R(i(l.name))},testId:`cron-run-${l.name}`,children:s.kind==="running"?d("Running…"):d("Run now")})]})})]},`${l.cron}:${l.name}`)})})]})})})]})},re=n=>Number.isFinite(n)?X(n,"—"):"—",ne=n=>{const e=M(34);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadJobs:d,removeJob:f,retryJob:a}=c,r=E(),o=B();let k;e[2]===Symbol.for("react.memo_cache_sentinel")?(k=["lunora-dead-jobs"],e[2]=k):k=e[2];let h;e[3]!==r||e[4]!==d?(h=async()=>(await(d??(()=>r.listDeadJobs()))()).toSorted(ae),e[3]=r,e[4]=d,e[5]=h):h=e[5];const i=O(k,h),l=i.data,[s,v]=_(void 0),N=i.error??s,u=d===void 0;let w;e[6]!==r||e[7]!==u||e[8]!==a?(w=a??(u?p=>r.retryDeadJob(p):void 0),e[6]=r,e[7]=u,e[8]=a,e[9]=w):w=e[9];const g=w;let $;e[10]!==r||e[11]!==u||e[12]!==f?($=f??(u?p=>r.removeDeadJob(p):void 0),e[10]=r,e[11]=u,e[12]=f,e[13]=$):$=e[13];const C=$;let J;e[14]!==i?(J=()=>{i.refetch()},e[14]=i,e[15]=J):J=e[15],Q(J,!0);let j;e[16]!==i?(j=async p=>{v(void 0);try{await p,i.refetch()}catch(U){v(H(U))}},e[16]=i,e[17]=j):j=e[17];const S=j,L=g!==void 0||C!==void 0;let q;e[18]!==N?(q=N!==void 0&&t("p",{className:"text-sm text-destructive","data-testid":"dlq-error",role:"alert",children:N}),e[18]=N,e[19]=q):q=e[19];let y;e[20]!==l?.length||e[21]!==o?(y=l?.length===0&&t(W,{description:o("Jobs that exhaust their retry budget are parked here instead of being dropped."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M3 6h18M8 6V4h8v2M6 6l1 14h10l1-14"})}),testId:"dlq-empty",title:o("No dead-letter jobs.")}),e[20]=l?.length,e[21]=o,e[22]=y):y=e[22];let P;e[23]!==S||e[24]!==L||e[25]!==l||e[26]!==C||e[27]!==g||e[28]!==o?(P=l!==void 0&&l.length>0&&t(T,{className:"overflow-hidden py-0",children:t(A,{className:"px-0",children:m(z,{"data-testid":"dlq-table",children:[t(K,{children:m(I,{children:[t(x,{children:o("function")}),t(x,{children:o("attempts")}),t(x,{children:o("last tried")}),t(x,{children:o("pool")}),t(x,{children:o("shard")}),t(x,{children:o("id")}),L&&t(x,{"aria-label":o("Actions")})]})}),t(V,{children:l.map(p=>m(I,{"data-testid":`dlq-row-${p.id}`,children:[t(b,{className:"font-mono text-xs",children:p.functionPath}),t(b,{className:"tabular-nums",children:p.attempts??0}),t(b,{className:"text-muted-foreground tabular-nums",children:re(p.scheduledFor)}),t(b,{className:"font-mono text-xs",children:p.pool??""}),t(b,{children:p.shardKey??""}),t(b,{className:"font-mono text-xs",children:p.id}),L&&t(b,{className:"text-right",children:m("div",{className:"flex justify-end gap-1.5",children:[g!==void 0&&t(Z,{"data-testid":`dlq-retry-${p.id}`,onClick:()=>{R(S(g(p.id)))},size:"sm",type:"button",variant:"outline",children:o("Retry")}),C!==void 0&&t(G,{confirmLabel:o("Drop job?"),onConfirm:()=>{R(S(C(p.id)))},testId:`dlq-remove-${p.id}`,children:o("Drop")})]})})]},p.id))})]})})}),e[23]=S,e[24]=L,e[25]=l,e[26]=C,e[27]=g,e[28]=o,e[29]=P):P=e[29];let D;return e[30]!==P||e[31]!==q||e[32]!==y?(D=m("div",{className:"flex flex-col gap-3","data-testid":"lunora-dead-letter",children:[q,y,P]}),e[30]=P,e[31]=q,e[32]=y,e[33]=D):D=e[33],D};function ae(n,e){return(e.attempts??0)-(n.attempts??0)}const F=n=>{const e=M(8),{label:c,testId:d,value:f}=n;let a;e[0]!==c?(a=t("span",{className:"text-xs text-muted-foreground",children:c}),e[0]=c,e[1]=a):a=e[1];let r;e[2]!==d||e[3]!==f?(r=t("span",{className:"text-2xl font-semibold tabular-nums","data-testid":d,children:f}),e[2]=d,e[3]=f,e[4]=r):r=e[4];let o;return e[5]!==a||e[6]!==r?(o=t(T,{className:"flex-1 py-0",children:m(A,{className:"flex flex-col gap-1 p-4",children:[a,r]})}),e[5]=a,e[6]=r,e[7]=o):o=e[7],o},de=n=>{const e=M(25);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadStatus:d}=c,f=E(),a=B(),r=d===void 0;let o;e[2]!==r?(o=["lunora-scheduler-status",r],e[2]=r,e[3]=o):o=e[3];let k;e[4]!==f||e[5]!==d?(k=async()=>{const $=await(d??(()=>f.schedulerStatus()))();return{...$,pools:$.pools.toSorted(ie)}},e[4]=f,e[5]=d,e[6]=k):k=e[6];const h=O(o,k),{data:i,error:l}=h;let s;e[7]!==h?(s=()=>{h.refetch()},e[7]=h,e[8]=s):s=e[8],Q(s,!0);let v;e[9]!==l?(v=l!==null&&t("p",{className:"text-sm text-destructive","data-testid":"pools-error",role:"alert",children:l}),e[9]=l,e[10]=v):v=e[10];let N;e[11]!==i||e[12]!==a?(N=i!==void 0&&m("div",{className:"flex gap-3","data-testid":"pools-totals",children:[t(F,{label:a("backlog"),testId:"pools-backlog",value:i.backlog}),t(F,{label:a("in flight"),testId:"pools-inflight",value:i.inFlight}),t(F,{label:a("pools"),testId:"pools-count",value:i.pools.length})]}),e[11]=i,e[12]=a,e[13]=N):N=e[13];let u;e[14]!==i?.pools.length||e[15]!==a?(u=i?.pools.length===0&&t(W,{description:a("Pools created with createWorkpool appear here once they have activity."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M4 7h16M4 12h16M4 17h16"})}),testId:"pools-empty",title:a("No workpools.")}),e[14]=i?.pools.length,e[15]=a,e[16]=u):u=e[16];let w;e[17]!==i||e[18]!==a?(w=i!==void 0&&i.pools.length>0&&t(T,{className:"overflow-hidden py-0",children:t(A,{className:"px-0",children:m(z,{"data-testid":"pools-table",children:[t(K,{children:m(I,{children:[t(x,{children:a("pool")}),t(x,{children:a("queued")}),t(x,{children:a("in flight")}),t(x,{children:a("max concurrency")})]})}),t(V,{children:i.pools.map(se)})]})})}),e[17]=i,e[18]=a,e[19]=w):w=e[19];let g;return e[20]!==v||e[21]!==N||e[22]!==u||e[23]!==w?(g=m("div",{className:"flex flex-col gap-3","data-testid":"lunora-scheduler-pools",children:[v,N,u,w]}),e[20]=v,e[21]=N,e[22]=u,e[23]=w,e[24]=g):g=e[24],g};function ie(n,e){return e.queued-n.queued}function se(n){return m(I,{"data-testid":`pools-row-${n.name}`,children:[t(b,{className:"font-mono text-xs",children:n.name}),t(b,{className:"tabular-nums",children:n.queued}),m(b,{className:"tabular-nums",children:[n.inFlight," / ",n.maxConcurrency]}),t(b,{className:"tabular-nums",children:n.maxConcurrency})]},n.name)}const ce=["jobs","dead","pools","cron"],Je=n=>{const e=M(41);let c;e[0]!==n?(c=n===void 0?{}:n,e[0]=n,e[1]=c):c=e[1];const{loadCronJobs:d,scheduledCancel:f,scheduledLoad:a}=c,r=B(),[o,k]=_("jobs");let h;e[2]!==r?(h=r("Cron triggers"),e[2]=r,e[3]=h):h=e[3];let i;e[4]!==r?(i=r("Dead letter"),e[4]=r,e[5]=i):i=e[5];let l;e[6]!==r?(l=r("Scheduled jobs"),e[6]=r,e[7]=l):l=e[7];let s;e[8]!==r?(s=r("Pools"),e[8]=r,e[9]=s):s=e[9];let v;e[10]!==h||e[11]!==i||e[12]!==l||e[13]!==s?(v={cron:h,dead:i,jobs:l,pools:s},e[10]=h,e[11]=i,e[12]=l,e[13]=s,e[14]=v):v=e[14];const N=v;let u;e[15]===Symbol.for("react.memo_cache_sentinel")?(u=y=>{k(y.currentTarget.dataset.view)},e[15]=u):u=e[15];const w=u;let g;e[16]!==r?(g=r("Schedule view"),e[16]=r,e[17]=g):g=e[17];let $;e[18]!==o||e[19]!==N?($=ce.map(y=>t(Z,{"aria-selected":o===y,"data-testid":`schedule-view-${y}`,"data-view":y,onClick:w,role:"tab",size:"sm",type:"button",variant:o===y?"default":"outline",children:N[y]},y)),e[18]=o,e[19]=N,e[20]=$):$=e[20];let C;e[21]!==g||e[22]!==$?(C=t("div",{"aria-label":g,className:"flex gap-1.5","data-testid":"schedule-view-toggle",role:"tablist",children:$}),e[21]=g,e[22]=$,e[23]=C):C=e[23];let J;e[24]!==f||e[25]!==a||e[26]!==o?(J=o==="jobs"&&t(ee,{cancelJob:f,loadJobs:a}),e[24]=f,e[25]=a,e[26]=o,e[27]=J):J=e[27];let j;e[28]!==o?(j=o==="dead"&&t(ne,{}),e[28]=o,e[29]=j):j=e[29];let S;e[30]!==o?(S=o==="pools"&&t(de,{}),e[30]=o,e[31]=S):S=e[31];let L;e[32]!==d||e[33]!==o?(L=o==="cron"&&t(le,{loadCronJobs:d}),e[32]=d,e[33]=o,e[34]=L):L=e[34];let q;return e[35]!==C||e[36]!==J||e[37]!==j||e[38]!==S||e[39]!==L?(q=m("div",{className:"flex flex-col gap-4","data-testid":"lunora-schedule",children:[C,J,j,S,L]}),e[35]=C,e[36]=J,e[37]=j,e[38]=S,e[39]=L,e[40]=q):q=e[40],q};export{Je as SchedulePanel};
@@ -1 +1 @@
1
- import{c as $}from"react/compiler-runtime";import{E as b}from"../packem_shared/error-alert-t6cpEi0z.js";import{g as y}from"../packem_shared/badge-BbuuAio7.js";import{c as k,u as S}from"../packem_shared/card-CIDGUN6K.js";import{E as w}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as R,d as v,m as x,p as u,f as A,u as p}from"../packem_shared/table-DdJBrClo.js";import{N as E}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useT as j}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as I}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{jsx as t,jsxs as f}from"react/jsx-runtime";const C=(e,r)=>({delete:e("Delete"),list:e("List"),read:e("Read"),write:e("Write")})[r],N={delete:2,list:3,read:0,write:1},T=e=>[...e].toSorted((r,s)=>r.bucket.localeCompare(s.bucket)||N[r.on]-N[s.on]||(r.prefix??"").localeCompare(s.prefix??"")),U=()=>{const e=$(14),r=j();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={},e[0]=s):s=e[0];const{data:l,error:i,errorSource:d}=E(I.storageRules,s),h=l!==void 0;let n;if(e[1]!==l||e[2]!==i||e[3]!==d||e[4]!==h||e[5]!==r){const g=T(Array.isArray(l?.rules)?l.rules:[]);let c;e[7]!==i||e[8]!==d?(c=i!==null&&t(b,{error:d,testId:"storage-rules-error"}),e[7]=i,e[8]=d,e[9]=c):c=e[9];let a;e[10]!==r?(a=r("Storage rules are declared in code with defineStorageRule and gate ctx.storage access per bucket. This view is read-only."),e[10]=r,e[11]=a):a=e[11];let m;e[12]!==a?(m=t("p",{className:"text-sm text-muted-foreground","data-testid":"storage-rules-note",children:a}),e[12]=a,e[13]=m):m=e[13],n=f("div",{className:"flex flex-col gap-4","data-testid":"lunora-storage-rules-panel",children:[c,m,h&&g.length===0?t(w,{description:r("No defineStorageRule is wired through .use(storageRules(...)) in this deployment. Add one to gate object access by key prefix."),testId:"storage-rules-empty",title:r("No storage rules defined")}):t(k,{className:"overflow-hidden py-0",children:t(S,{className:"px-0",children:f(R,{"data-testid":"storage-rules-table",children:[t(v,{children:f(x,{children:[t(u,{children:r("Bucket")}),t(u,{children:r("Operation")}),t(u,{children:r("Key prefix")}),t(u,{children:r("Guarded by")})]})}),t(A,{children:g.map(o=>f(x,{"data-testid":`storage-rule-${o.bucket}-${o.on}-${o.prefix??""}`,children:[t(p,{className:"font-mono text-xs",children:o.bucket}),t(p,{children:t(y,{variant:"secondary",children:C(r,o.on)})}),t(p,{className:"font-mono text-xs",children:o.prefix??t("span",{className:"text-muted-foreground",children:r("(whole bucket)")})}),t(p,{className:"font-mono text-xs text-muted-foreground",children:o.procedure})]},`${o.bucket}:${o.on}:${o.prefix??""}:${o.procedure}`))})]})})})]}),e[1]=l,e[2]=i,e[3]=d,e[4]=h,e[5]=r,e[6]=n}else n=e[6];return n};export{U as StorageRulesPanel};
1
+ import{c as $}from"react/compiler-runtime";import{E as b}from"../packem_shared/error-alert--Ie7ofJ0.js";import{g as y}from"../packem_shared/badge-BbuuAio7.js";import{c as k,u as S}from"../packem_shared/card-CIDGUN6K.js";import{E as w}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as R,d as v,m as x,p as u,f as A,u as p}from"../packem_shared/table-DdJBrClo.js";import{N as E}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{useT as j}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as I}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{jsx as t,jsxs as f}from"react/jsx-runtime";const C=(e,r)=>({delete:e("Delete"),list:e("List"),read:e("Read"),write:e("Write")})[r],N={delete:2,list:3,read:0,write:1},T=e=>[...e].toSorted((r,s)=>r.bucket.localeCompare(s.bucket)||N[r.on]-N[s.on]||(r.prefix??"").localeCompare(s.prefix??"")),U=()=>{const e=$(14),r=j();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={},e[0]=s):s=e[0];const{data:l,error:i,errorSource:d}=E(I.storageRules,s),h=l!==void 0;let n;if(e[1]!==l||e[2]!==i||e[3]!==d||e[4]!==h||e[5]!==r){const g=T(Array.isArray(l?.rules)?l.rules:[]);let c;e[7]!==i||e[8]!==d?(c=i!==null&&t(b,{error:d,testId:"storage-rules-error"}),e[7]=i,e[8]=d,e[9]=c):c=e[9];let a;e[10]!==r?(a=r("Storage rules are declared in code with defineStorageRule and gate ctx.storage access per bucket. This view is read-only."),e[10]=r,e[11]=a):a=e[11];let m;e[12]!==a?(m=t("p",{className:"text-sm text-muted-foreground","data-testid":"storage-rules-note",children:a}),e[12]=a,e[13]=m):m=e[13],n=f("div",{className:"flex flex-col gap-4","data-testid":"lunora-storage-rules-panel",children:[c,m,h&&g.length===0?t(w,{description:r("No defineStorageRule is wired through .use(storageRules(...)) in this deployment. Add one to gate object access by key prefix."),testId:"storage-rules-empty",title:r("No storage rules defined")}):t(k,{className:"overflow-hidden py-0",children:t(S,{className:"px-0",children:f(R,{"data-testid":"storage-rules-table",children:[t(v,{children:f(x,{children:[t(u,{children:r("Bucket")}),t(u,{children:r("Operation")}),t(u,{children:r("Key prefix")}),t(u,{children:r("Guarded by")})]})}),t(A,{children:g.map(o=>f(x,{"data-testid":`storage-rule-${o.bucket}-${o.on}-${o.prefix??""}`,children:[t(p,{className:"font-mono text-xs",children:o.bucket}),t(p,{children:t(y,{variant:"secondary",children:C(r,o.on)})}),t(p,{className:"font-mono text-xs",children:o.prefix??t("span",{className:"text-muted-foreground",children:r("(whole bucket)")})}),t(p,{className:"font-mono text-xs text-muted-foreground",children:o.procedure})]},`${o.bucket}:${o.on}:${o.prefix??""}:${o.procedure}`))})]})})})]}),e[1]=l,e[2]=i,e[3]=d,e[4]=h,e[5]=r,e[6]=n}else n=e[6];return n};export{U as StorageRulesPanel};
@@ -1 +1 @@
1
- import{c as K}from"react/compiler-runtime";import{E as M}from"../packem_shared/error-alert-t6cpEi0z.js";import{ShardInput as T}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as $}from"../packem_shared/badge-BbuuAio7.js";import{c as j,u as _}from"../packem_shared/card-CIDGUN6K.js";import{E as q}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as D,d as F,m as C,p as g,f as J,u as N}from"../packem_shared/table-DdJBrClo.js";import{N as L}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useAutoRefresh as O}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{S as P}from"../packem_shared/use-shard-key-B2JtNa5m.js";import{useT as R}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as W}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{jsx as t,jsxs as c}from"react/jsx-runtime";const A=80,B=a=>{if(a===void 0)return"";const e=JSON.stringify(a);return e.length>A?`${e.slice(0,A)}…`:e},G=a=>{const e=[];for(const i of a){const n=i.id.toString();if(i.subscriptions.length===0){e.push({admin:i.admin,connectionId:i.id,key:`c${n}`,subscription:null});continue}i.subscriptions.forEach((u,o)=>{e.push({admin:i.admin,connectionId:i.id,key:`c${n}-s${o.toString()}`,subscription:u})})}return e},k=t("span",{className:"text-muted-foreground",children:"—"}),oe=a=>{const e=K(22),{initialShardKey:i}=a,n=R(),{queryShardKey:u,setShardKey:o,shardKey:m}=P(i);let p;e[0]===Symbol.for("react.memo_cache_sentinel")?(p={},e[0]=p):p=e[0];let f;e[1]!==u?(f={keepPreviousData:!0,shardKey:u},e[1]=u,e[2]=f):f=e[2];const{data:r,error:s,errorSource:h,refetch:E}=L(W.listSubscriptions,p,f);O(E,!0);let b;if(e[3]!==s||e[4]!==h||e[5]!==r||e[6]!==o||e[7]!==m||e[8]!==n){const S=r===void 0?[]:G(r.connections);let l;e[10]!==o||e[11]!==m?(l=t(T,{onChange:o,testId:"subs-shard-input",value:m}),e[10]=o,e[11]=m,e[12]=l):l=e[12];let d;e[13]!==r||e[14]!==n?(d=r!==void 0&&c("div",{className:"ml-auto flex items-center gap-2 text-sm text-muted-foreground","data-testid":"subs-count",children:[t($,{variant:"secondary",children:n("{count} connections",{count:r.totalConnections})}),t($,{variant:"secondary",children:n("{count} subscriptions",{count:r.totalSubscriptions})})]}),e[13]=r,e[14]=n,e[15]=d):d=e[15];let v;e[16]!==l||e[17]!==d?(v=c("div",{className:"flex flex-wrap items-center gap-2",children:[l,d]}),e[16]=l,e[17]=d,e[18]=v):v=e[18];let x;e[19]!==s||e[20]!==h?(x=s!==null&&t(M,{error:h,testId:"subs-error"}),e[19]=s,e[20]=h,e[21]=x):x=e[21],b=c("div",{className:"flex flex-col gap-4","data-testid":"subs-panel",children:[v,x,s===null&&r!==void 0&&S.length===0&&t(q,{description:n("Active WebSocket subscriptions on this shard."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M5 12a7 7 0 0 1 14 0M8 12a4 4 0 0 1 8 0M12 12v8m0-8a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"})}),testId:"subs-empty",title:n("No active subscriptions.")}),s===null&&S.length>0&&t(j,{className:"overflow-hidden py-0",children:t(_,{className:"px-0",children:c(D,{"data-testid":"subs-table",children:[t(F,{children:c(C,{children:[t(g,{children:n("Connection")}),t(g,{children:n("Function path")}),t(g,{children:n("Table")}),t(g,{children:n("Arguments")})]})}),t(J,{children:S.map(y=>{const{subscription:I}=y,w=B(I?.args);return c(C,{"data-testid":"subs-row",children:[t(N,{className:"font-medium tabular-nums",children:c("span",{className:"inline-flex items-center gap-1.5",children:["#",y.connectionId,y.admin&&t($,{variant:"outline",children:n("admin")})]})}),t(N,{className:"font-mono text-xs",children:I?.functionPath??k}),t(N,{children:I?.table??k}),t(N,{className:"max-w-[32ch] truncate font-mono text-xs text-muted-foreground",title:w||void 0,children:w||k})]},y.key)})})]})})})]}),e[3]=s,e[4]=h,e[5]=r,e[6]=o,e[7]=m,e[8]=n,e[9]=b}else b=e[9];return b};export{oe as default};
1
+ import{c as K}from"react/compiler-runtime";import{E as M}from"../packem_shared/error-alert--Ie7ofJ0.js";import{ShardInput as T}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as $}from"../packem_shared/badge-BbuuAio7.js";import{c as j,u as _}from"../packem_shared/card-CIDGUN6K.js";import{E as q}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as D,d as F,m as C,p as g,f as J,u as N}from"../packem_shared/table-DdJBrClo.js";import{N as L}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{useAutoRefresh as O}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{S as P}from"../packem_shared/use-shard-key-B2JtNa5m.js";import{useT as R}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as W}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{jsx as t,jsxs as c}from"react/jsx-runtime";const A=80,B=a=>{if(a===void 0)return"";const e=JSON.stringify(a);return e.length>A?`${e.slice(0,A)}…`:e},G=a=>{const e=[];for(const i of a){const n=i.id.toString();if(i.subscriptions.length===0){e.push({admin:i.admin,connectionId:i.id,key:`c${n}`,subscription:null});continue}i.subscriptions.forEach((u,o)=>{e.push({admin:i.admin,connectionId:i.id,key:`c${n}-s${o.toString()}`,subscription:u})})}return e},k=t("span",{className:"text-muted-foreground",children:"—"}),oe=a=>{const e=K(22),{initialShardKey:i}=a,n=R(),{queryShardKey:u,setShardKey:o,shardKey:m}=P(i);let p;e[0]===Symbol.for("react.memo_cache_sentinel")?(p={},e[0]=p):p=e[0];let f;e[1]!==u?(f={keepPreviousData:!0,shardKey:u},e[1]=u,e[2]=f):f=e[2];const{data:r,error:s,errorSource:h,refetch:E}=L(W.listSubscriptions,p,f);O(E,!0);let b;if(e[3]!==s||e[4]!==h||e[5]!==r||e[6]!==o||e[7]!==m||e[8]!==n){const S=r===void 0?[]:G(r.connections);let l;e[10]!==o||e[11]!==m?(l=t(T,{onChange:o,testId:"subs-shard-input",value:m}),e[10]=o,e[11]=m,e[12]=l):l=e[12];let d;e[13]!==r||e[14]!==n?(d=r!==void 0&&c("div",{className:"ml-auto flex items-center gap-2 text-sm text-muted-foreground","data-testid":"subs-count",children:[t($,{variant:"secondary",children:n("{count} connections",{count:r.totalConnections})}),t($,{variant:"secondary",children:n("{count} subscriptions",{count:r.totalSubscriptions})})]}),e[13]=r,e[14]=n,e[15]=d):d=e[15];let v;e[16]!==l||e[17]!==d?(v=c("div",{className:"flex flex-wrap items-center gap-2",children:[l,d]}),e[16]=l,e[17]=d,e[18]=v):v=e[18];let x;e[19]!==s||e[20]!==h?(x=s!==null&&t(M,{error:h,testId:"subs-error"}),e[19]=s,e[20]=h,e[21]=x):x=e[21],b=c("div",{className:"flex flex-col gap-4","data-testid":"subs-panel",children:[v,x,s===null&&r!==void 0&&S.length===0&&t(q,{description:n("Active WebSocket subscriptions on this shard."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M5 12a7 7 0 0 1 14 0M8 12a4 4 0 0 1 8 0M12 12v8m0-8a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"})}),testId:"subs-empty",title:n("No active subscriptions.")}),s===null&&S.length>0&&t(j,{className:"overflow-hidden py-0",children:t(_,{className:"px-0",children:c(D,{"data-testid":"subs-table",children:[t(F,{children:c(C,{children:[t(g,{children:n("Connection")}),t(g,{children:n("Function path")}),t(g,{children:n("Table")}),t(g,{children:n("Arguments")})]})}),t(J,{children:S.map(y=>{const{subscription:I}=y,w=B(I?.args);return c(C,{"data-testid":"subs-row",children:[t(N,{className:"font-medium tabular-nums",children:c("span",{className:"inline-flex items-center gap-1.5",children:["#",y.connectionId,y.admin&&t($,{variant:"outline",children:n("admin")})]})}),t(N,{className:"font-mono text-xs",children:I?.functionPath??k}),t(N,{children:I?.table??k}),t(N,{className:"max-w-[32ch] truncate font-mono text-xs text-muted-foreground",title:w||void 0,children:w||k})]},y.key)})})]})})})]}),e[3]=s,e[4]=h,e[5]=r,e[6]=o,e[7]=m,e[8]=n,e[9]=b}else b=e[9];return b};export{oe as default};
@@ -1 +1 @@
1
- import{c as z}from"react/compiler-runtime";import{useLunora as D}from"@lunora/react";import{g as C}from"../packem_shared/badge-BbuuAio7.js";import{c as K,u as L}from"../packem_shared/card-CIDGUN6K.js";import{E as j}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as A,d as E,m as _,p as i,f as M,u as c}from"../packem_shared/table-DdJBrClo.js";import{O as Y}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useAutoRefresh as B}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as F}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{jsx as t,jsxs as s}from"react/jsx-runtime";const G=2e3,H=new Set(["open"]),re=O=>{const e=z(41),{read:x}=O,n=F(),P=D();let S;e[0]!==P||e[1]!==x?(S=()=>Promise.resolve(x?x():P.debug()),e[0]=P,e[1]=x,e[2]=S):S=e[2];const W=S,R=x?"injected":"live";let v;e[3]!==R?(v=["lunora-studio","sync-client-debug",R],e[3]=R,e[4]=v):v=e[4];const{data:l,refetch:q}=Y(v,W);if(B(q,!0,G),!l){let r;e[5]!==n?(r=n("Reading the sync client's state…"),e[5]=n,e[6]=r):r=e[6];let y;e[7]!==n?(y=n("Sync client"),e[7]=n,e[8]=y):y=e[8];let w;return e[9]!==r||e[10]!==y?(w=t(K,{children:t(L,{children:t(j,{description:r,title:y})})}),e[9]=r,e[10]=y,e[11]=w):w=e[11],w}const{pendingWrites:$,shards:b,subscriptions:N}=l;let o;e[12]!==n?(o=n("This Studio session's sync client"),e[12]=n,e[13]=o):o=e[13];let d;e[14]!==o?(d=t("span",{className:"text-sm font-medium",children:o}),e[14]=o,e[15]=d):d=e[15];const T=l.connectionStatus==="connected"?"default":"secondary";let a;e[16]!==l.connectionStatus||e[17]!==T?(a=t(C,{variant:T,children:l.connectionStatus}),e[16]=l.connectionStatus,e[17]=T,e[18]=a):a=e[18];let h;e[19]!==$||e[20]!==n?(h=$>0?t(C,{variant:"secondary",children:n("{count} pending writes",{count:$})}):null,e[19]=$,e[20]=n,e[21]=h):h=e[21];let u;e[22]!==d||e[23]!==a||e[24]!==h?(u=s("div",{className:"flex flex-wrap items-center gap-2",children:[d,a,h]}),e[22]=d,e[23]=a,e[24]=h,e[25]=u):u=e[25];let m;e[26]!==n?(m=n("Reads client.debug() for the client running in this page — not your application's client. Call client.debug() in your app to diagnose a specific stuck overlay there."),e[26]=n,e[27]=m):m=e[27];let p;e[28]!==m?(p=t("p",{className:"text-muted-foreground text-xs",children:m}),e[28]=m,e[29]=p):p=e[29];let f;e[30]!==b||e[31]!==n?(f=b.length===0?t(j,{description:n("No shard connection has been opened yet."),title:n("No shards")}):s(A,{children:[t(E,{children:s(_,{children:[t(i,{children:n("Shard")}),t(i,{children:n("Socket")}),t(i,{children:n("Confirmed watermark")})]})}),t(M,{children:b.map(r=>s(_,{children:[t(c,{children:r.shardKey??n("(default)")}),t(c,{children:t(C,{variant:H.has(r.wsState)?"default":"secondary",children:r.wsState})}),t(c,{children:r.confirmedMutationWatermark})]},r.shardKey??"__default__"))})]}),e[30]=b,e[31]=n,e[32]=f):f=e[32];let g;e[33]!==N||e[34]!==n?(g=N.length===0?t(j,{description:n("This client holds no live queries or shapes."),title:n("No subscriptions")}):s(A,{children:[t(E,{children:s(_,{children:[t(i,{children:n("Subscription")}),t(i,{children:n("Kind")}),t(i,{children:n("Acked")}),t(i,{children:n("Cursor")}),t(i,{children:n("Pending overlays")})]})}),t(M,{children:N.map(r=>s(_,{children:[t(c,{className:"font-mono text-xs",children:r.functionPath}),t(c,{children:r.kind}),t(c,{children:t(C,{variant:r.acked?"default":"secondary",children:r.acked?n("yes"):n("no")})}),t(c,{children:r.serverCursor??"—"}),t(c,{children:r.pendingOptimisticLayers})]},r.id))})]}),e[33]=N,e[34]=n,e[35]=g):g=e[35];let k;return e[36]!==p||e[37]!==f||e[38]!==g||e[39]!==u?(k=t(K,{children:s(L,{className:"flex flex-col gap-4",children:[u,p,f,g]})}),e[36]=p,e[37]=f,e[38]=g,e[39]=u,e[40]=k):k=e[40],k};export{re as default};
1
+ import{c as z}from"react/compiler-runtime";import{useLunora as D}from"@lunora/react";import{g as C}from"../packem_shared/badge-BbuuAio7.js";import{c as K,u as L}from"../packem_shared/card-CIDGUN6K.js";import{E as j}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as A,d as E,m as _,p as i,f as M,u as c}from"../packem_shared/table-DdJBrClo.js";import{O as Y}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{useAutoRefresh as B}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as F}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{jsx as t,jsxs as s}from"react/jsx-runtime";const G=2e3,H=new Set(["open"]),re=O=>{const e=z(41),{read:x}=O,n=F(),P=D();let S;e[0]!==P||e[1]!==x?(S=()=>Promise.resolve(x?x():P.debug()),e[0]=P,e[1]=x,e[2]=S):S=e[2];const W=S,R=x?"injected":"live";let v;e[3]!==R?(v=["lunora-studio","sync-client-debug",R],e[3]=R,e[4]=v):v=e[4];const{data:l,refetch:q}=Y(v,W);if(B(q,!0,G),!l){let r;e[5]!==n?(r=n("Reading the sync client's state…"),e[5]=n,e[6]=r):r=e[6];let y;e[7]!==n?(y=n("Sync client"),e[7]=n,e[8]=y):y=e[8];let w;return e[9]!==r||e[10]!==y?(w=t(K,{children:t(L,{children:t(j,{description:r,title:y})})}),e[9]=r,e[10]=y,e[11]=w):w=e[11],w}const{pendingWrites:$,shards:b,subscriptions:N}=l;let o;e[12]!==n?(o=n("This Studio session's sync client"),e[12]=n,e[13]=o):o=e[13];let d;e[14]!==o?(d=t("span",{className:"text-sm font-medium",children:o}),e[14]=o,e[15]=d):d=e[15];const T=l.connectionStatus==="connected"?"default":"secondary";let a;e[16]!==l.connectionStatus||e[17]!==T?(a=t(C,{variant:T,children:l.connectionStatus}),e[16]=l.connectionStatus,e[17]=T,e[18]=a):a=e[18];let h;e[19]!==$||e[20]!==n?(h=$>0?t(C,{variant:"secondary",children:n("{count} pending writes",{count:$})}):null,e[19]=$,e[20]=n,e[21]=h):h=e[21];let u;e[22]!==d||e[23]!==a||e[24]!==h?(u=s("div",{className:"flex flex-wrap items-center gap-2",children:[d,a,h]}),e[22]=d,e[23]=a,e[24]=h,e[25]=u):u=e[25];let m;e[26]!==n?(m=n("Reads client.debug() for the client running in this page — not your application's client. Call client.debug() in your app to diagnose a specific stuck overlay there."),e[26]=n,e[27]=m):m=e[27];let p;e[28]!==m?(p=t("p",{className:"text-muted-foreground text-xs",children:m}),e[28]=m,e[29]=p):p=e[29];let f;e[30]!==b||e[31]!==n?(f=b.length===0?t(j,{description:n("No shard connection has been opened yet."),title:n("No shards")}):s(A,{children:[t(E,{children:s(_,{children:[t(i,{children:n("Shard")}),t(i,{children:n("Socket")}),t(i,{children:n("Confirmed watermark")})]})}),t(M,{children:b.map(r=>s(_,{children:[t(c,{children:r.shardKey??n("(default)")}),t(c,{children:t(C,{variant:H.has(r.wsState)?"default":"secondary",children:r.wsState})}),t(c,{children:r.confirmedMutationWatermark})]},r.shardKey??"__default__"))})]}),e[30]=b,e[31]=n,e[32]=f):f=e[32];let g;e[33]!==N||e[34]!==n?(g=N.length===0?t(j,{description:n("This client holds no live queries or shapes."),title:n("No subscriptions")}):s(A,{children:[t(E,{children:s(_,{children:[t(i,{children:n("Subscription")}),t(i,{children:n("Kind")}),t(i,{children:n("Acked")}),t(i,{children:n("Cursor")}),t(i,{children:n("Pending overlays")})]})}),t(M,{children:N.map(r=>s(_,{children:[t(c,{className:"font-mono text-xs",children:r.functionPath}),t(c,{children:r.kind}),t(c,{children:t(C,{variant:r.acked?"default":"secondary",children:r.acked?n("yes"):n("no")})}),t(c,{children:r.serverCursor??"—"}),t(c,{children:r.pendingOptimisticLayers})]},r.id))})]}),e[33]=N,e[34]=n,e[35]=g):g=e[35];let k;return e[36]!==p||e[37]!==f||e[38]!==g||e[39]!==u?(k=t(K,{children:s(L,{className:"flex flex-col gap-4",children:[u,p,f,g]})}),e[36]=p,e[37]=f,e[38]=g,e[39]=u,e[40]=k):k=e[40],k};export{re as default};
@@ -1 +1 @@
1
- import{c as z}from"react/compiler-runtime";import{useState as W,useEffect as J}from"react";import{f as X}from"../packem_shared/log-fields-CoL3hsIQ.js";import{E as Y}from"../packem_shared/error-alert-t6cpEi0z.js";import{L as Z}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as ee}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as te}from"../packem_shared/badge-BbuuAio7.js";import{E as re}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as ae}from"../packem_shared/input-JHu63lTv.js";import{N as se}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{S as ne}from"../packem_shared/use-shard-key-B2JtNa5m.js";import{useT as G}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as oe}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as le}from"../packem_shared/internal-BSIsQVC6.js";import{r as ie}from"../packem_shared/shard-history-DMEW5VBE.js";import{p as de,c as ce}from"../packem_shared/trace-handoff-Dw7mwjxu.js";import{c as me}from"../packem_shared/utils-bhneXptQ.js";import{jsx as s,jsxs as B}from"react/jsx-runtime";const Q=o=>Math.min(100,Math.max(0,o)),ue=(o,e)=>{if(!Number.isFinite(e)||e<=0)return{leftPercent:0,widthPercent:100};const t=Q(o.offsetMs/e*100),a=o.durationMs/e*100,r=Math.max(.5,Math.min(Q(a),100-t));return{leftPercent:t,widthPercent:r}},he=(o,e)=>{const t=e.trim().toLowerCase();return t===""?[...o]:o.filter(a=>a.rootName.toLowerCase().includes(t)||a.functionPath.toLowerCase().includes(t)||a.traceId.toLowerCase().includes(t))},U=o=>Number.isFinite(o)?o>0&&o<1?`${o.toFixed(2)}ms`:`${String(Math.round(o))}ms`:"—",fe=14,pe=o=>Array.isArray(o?.traces)?o.traces:[],ge=o=>{const e=z(50),{span:t,traceDurationMs:a}=o,r=G();let n;e[0]!==t||e[1]!==a?(n=ue(t,a),e[0]=t,e[1]=a,e[2]=n):n=e[2];const{leftPercent:p,widthPercent:y}=n;let g;e[3]!==t.attributes?(g=X(t.attributes),e[3]=t.attributes,e[4]=g):g=e[4];const I=g,$=t.depth*fe;let P;e[5]!==$?(P={paddingLeft:$},e[5]=$,e[6]=P):P=e[6];const x=P,b=`${String(p)}%`,w=`${String(y)}%`;let l;e[7]!==b||e[8]!==w?(l={left:b,width:w},e[7]=b,e[8]=w,e[9]=l):l=e[9];const i=l,k=t.depth;let u;e[10]!==t.ok||e[11]!==r?(u=t.ok?null:s("span",{"aria-label":r("Errored span"),className:"mr-1 text-destructive","data-testid":"tr-span-error",role:"img",children:"●"}),e[10]=t.ok,e[11]=r,e[12]=u):u=e[12];let h;e[13]!==x||e[14]!==t.name||e[15]!==u?(h=B("span",{className:"w-56 shrink-0 truncate",role:"gridcell",style:x,title:t.name,children:[u,t.name]}),e[13]=x,e[14]=t.name,e[15]=u,e[16]=h):h=e[16];let d;e[17]!==t.durationMs||e[18]!==t.offsetMs||e[19]!==r?(d=r("starts {offset} in, runs {duration}",{duration:U(t.durationMs),offset:U(t.offsetMs)}),e[17]=t.durationMs,e[18]=t.offsetMs,e[19]=r,e[20]=d):d=e[20];const N=t.ok?"bg-primary/70":"bg-destructive";let c;e[21]!==N?(c=me("absolute inset-y-0 rounded-sm",N),e[21]=N,e[22]=c):c=e[22];let m;e[23]!==i||e[24]!==p||e[25]!==c||e[26]!==y?(m=s("span",{className:c,"data-left":p,"data-testid":"tr-span-bar","data-width":y,style:i}),e[23]=i,e[24]=p,e[25]=c,e[26]=y,e[27]=m):m=e[27];let f;e[28]!==d||e[29]!==m?(f=s("span",{"aria-label":d,className:"relative h-3 flex-1 overflow-hidden rounded-sm bg-muted",role:"gridcell",children:m}),e[28]=d,e[29]=m,e[30]=f):f=e[30];let M;e[31]!==t.durationMs?(M=U(t.durationMs),e[31]=t.durationMs,e[32]=M):M=e[32];let v;e[33]!==M?(v=s("span",{className:"w-16 shrink-0 text-right tabular-nums text-muted-foreground",role:"gridcell",children:M}),e[33]=M,e[34]=v):v=e[34];let S;e[35]!==t.error?(S=t.error===void 0?null:s("span",{className:"text-destructive","data-testid":"tr-span-error-message",title:t.error.message,children:`${t.error.type}: ${t.error.message}`}),e[35]=t.error,e[36]=S):S=e[36];let C;e[37]!==S?(C=s("span",{className:"w-64 shrink-0 truncate text-muted-foreground",role:"gridcell",children:S}),e[37]=S,e[38]=C):C=e[38];let T;e[39]!==I?(T=I===""?null:s("span",{"data-testid":"tr-span-attributes",title:I,children:I}),e[39]=I,e[40]=T):T=e[40];let K;e[41]!==T?(K=s("span",{className:"w-64 shrink-0 truncate text-muted-foreground",role:"gridcell",children:T}),e[41]=T,e[42]=K):K=e[42];let E;return e[43]!==t.depth||e[44]!==h||e[45]!==f||e[46]!==v||e[47]!==C||e[48]!==K?(E=B("div",{className:"flex items-center gap-2 border-b border-border px-3 py-1.5 font-mono text-xs last:border-b-0 hover:bg-muted/50","data-depth":k,"data-testid":"tr-span-row",role:"row",children:[h,f,v,C,K]}),e[43]=t.depth,e[44]=h,e[45]=f,e[46]=v,e[47]=C,e[48]=K,e[49]=E):E=e[49],E},xe=o=>{const e=z(50),{expanded:t,onToggle:a,trace:r}=o,n=G();let p;e[0]!==a||e[1]!==r.traceId?(p=()=>{a(r.traceId)},e[0]=a,e[1]=r.traceId,e[2]=p):p=e[2];const y=p,g=`tr-row-${r.traceId}`,I=`tr-waterfall-${r.traceId}`,$=`tr-toggle-${r.traceId}`,P=t?"▾":"▸";let x;e[3]!==P?(x=s("span",{"aria-hidden":"true",className:"w-3 shrink-0 text-xs text-muted-foreground",children:P}),e[3]=P,e[4]=x):x=e[4];let b;e[5]!==r.rootName?(b=s("span",{className:"w-56 shrink-0 truncate text-sm font-medium",title:r.rootName,children:r.rootName}),e[5]=r.rootName,e[6]=b):b=e[6];let w;e[7]!==r.functionPath?(w=s("span",{className:"w-48 shrink-0 truncate font-mono text-xs text-muted-foreground",title:r.functionPath,children:r.functionPath}),e[7]=r.functionPath,e[8]=w):w=e[8];let l;e[9]!==r.durationMs?(l=U(r.durationMs),e[9]=r.durationMs,e[10]=l):l=e[10];let i;e[11]!==l?(i=s("span",{className:"w-20 shrink-0 text-right font-mono text-xs tabular-nums text-muted-foreground",children:l}),e[11]=l,e[12]=i):i=e[12];let k;e[13]!==n||e[14]!==r.spans.length?(k=n("{count} spans",{count:r.spans.length}),e[13]=n,e[14]=r.spans.length,e[15]=k):k=e[15];let u;e[16]!==k?(u=s("span",{className:"w-20 shrink-0 text-right font-mono text-xs tabular-nums text-muted-foreground",children:k}),e[16]=k,e[17]=u):u=e[17];const h=r.ok?"secondary":"destructive";let d;e[18]!==n||e[19]!==r.ok?(d=r.ok?n("ok"):n("error"),e[18]=n,e[19]=r.ok,e[20]=d):d=e[20];let N;e[21]!==h||e[22]!==d?(N=s("span",{className:"shrink-0",children:s(te,{variant:h,children:d})}),e[21]=h,e[22]=d,e[23]=N):N=e[23];let c;e[24]!==r.startTs?(c=le(r.startTs),e[24]=r.startTs,e[25]=c):c=e[25];let m;e[26]!==c?(m=s("span",{className:"flex-1 truncate text-right font-mono text-xs tabular-nums text-muted-foreground",children:c}),e[26]=c,e[27]=m):m=e[27];let f;e[28]!==t||e[29]!==y||e[30]!==i||e[31]!==u||e[32]!==N||e[33]!==m||e[34]!==I||e[35]!==$||e[36]!==x||e[37]!==b||e[38]!==w?(f=B("button",{"aria-controls":I,"aria-expanded":t,className:"flex w-full items-center gap-3 px-3 py-2 text-left hover:bg-muted/50","data-testid":$,onClick:y,type:"button",children:[x,b,w,i,u,N,m]}),e[28]=t,e[29]=y,e[30]=i,e[31]=u,e[32]=N,e[33]=m,e[34]=I,e[35]=$,e[36]=x,e[37]=b,e[38]=w,e[39]=f):f=e[39];let M;e[40]!==t||e[41]!==n||e[42]!==r.durationMs||e[43]!==r.spans||e[44]!==r.traceId?(M=t&&s("div",{"aria-label":n("Trace waterfall"),className:"bg-muted/20","data-testid":`tr-waterfall-${r.traceId}`,id:`tr-waterfall-${r.traceId}`,role:"grid",children:r.spans.map(S=>s(ge,{span:S,traceDurationMs:r.durationMs},S.spanId))}),e[40]=t,e[41]=n,e[42]=r.durationMs,e[43]=r.spans,e[44]=r.traceId,e[45]=M):M=e[45];let v;return e[46]!==f||e[47]!==M||e[48]!==g?(v=B("div",{className:"border-b border-border last:border-b-0","data-testid":g,children:[f,M]}),e[46]=f,e[47]=M,e[48]=g,e[49]=v):v=e[49],v},je=o=>{const e=z(44),{initialShardKey:t}=o,a=G(),[r]=W(de),{queryShardKey:n,setShardKey:p,shardKey:y}=ne(r?.shardKey!==void 0&&r.shardKey!==""?r.shardKey:t??""),[g,I]=W(r?.traceId??""),[$,P]=W(be);let x;e[0]===Symbol.for("react.memo_cache_sentinel")?(x=[],e[0]=x):x=e[0],J(we,x);let b;e[1]===Symbol.for("react.memo_cache_sentinel")?(b={},e[1]=b):b=e[1];let w;e[2]!==n?(w={live:!0,shardKey:n},e[2]=n,e[3]=w):w=e[3];const{data:l,error:i,errorSource:k,isLoading:u,liveError:h}=se(oe.getTraces,b,w);let d,N;e[4]!==l||e[5]!==n?(d=()=>{l!==void 0&&ie(n)},N=[l,n],e[4]=l,e[5]=n,e[6]=d,e[7]=N):(d=e[6],N=e[7]),J(d,N);let c;if(e[8]!==l||e[9]!==i||e[10]!==k||e[11]!==$||e[12]!==u||e[13]!==h||e[14]!==g||e[15]!==p||e[16]!==y||e[17]!==a){const m=pe(l),f=l?.total??m.length,M=f>m.length,v=he(m,g);let S;e[19]===Symbol.for("react.memo_cache_sentinel")?(S=L=>{I(L.target.value)},e[19]=S):S=e[19];const C=S;let T;e[20]===Symbol.for("react.memo_cache_sentinel")?(T=L=>{P(V=>{const H=new Set(V);return H.has(L)?H.delete(L):H.add(L),H})},e[20]=T):T=e[20];const K=T,E=i===null&&v.length===0&&!u;let F;e[21]!==p||e[22]!==y?(F=s(ee,{onChange:p,testId:"tr-shard-input",value:y}),e[21]=p,e[22]=y,e[23]=F):F=e[23];let A;e[24]!==a?(A=a("Search traces"),e[24]=a,e[25]=A):A=e[25];let D;e[26]!==a?(D=a("search trace or function"),e[26]=a,e[27]=D):D=e[27];let _;e[28]!==g||e[29]!==A||e[30]!==D?(_=s(ae,{"aria-label":A,className:"h-8 w-56","data-testid":"tr-search",onChange:C,placeholder:D,value:g}),e[28]=g,e[29]=A,e[30]=D,e[31]=_):_=e[31];let j;e[32]!==h?(j=s(Z,{message:h,prefix:"tr"}),e[32]=h,e[33]=j):j=e[33];let q;e[34]!==_||e[35]!==j||e[36]!==F?(q=B("div",{className:"flex flex-wrap items-center gap-2",children:[F,_,j]}),e[34]=_,e[35]=j,e[36]=F,e[37]=q):q=e[37];let O;e[38]!==i||e[39]!==k?(O=i!==null&&s(Y,{error:k,testId:"tr-error"}),e[38]=i,e[39]=k,e[40]=O):O=e[40];let R;e[41]!==E||e[42]!==a?(R=E&&s(re,{description:a("Traces recorded with ctx.trace show up here as your app handles traffic. The span buffer resets when the shard hibernates."),icon:s("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:s("path",{d:"M4 6h10M7 12h13M10 18h7"})}),testId:"tr-empty",title:a("No traces")}),e[41]=E,e[42]=a,e[43]=R):R=e[43],c=B("div",{className:"flex flex-col gap-4","data-testid":"lunora-traces-panel",children:[q,O,R,i===null&&M&&s("p",{className:"text-xs text-muted-foreground","data-testid":"tr-truncated",children:a("Showing the {shown} most recent of {total} traces in the buffer.",{shown:m.length,total:f})}),i===null&&v.length>0&&s("div",{"aria-label":a("Recent traces"),className:"overflow-hidden rounded-xl border border-border shadow-xs","data-testid":"tr-list",children:v.map(L=>s(xe,{expanded:$.has(L.traceId),onToggle:K,trace:L},L.traceId))})]}),e[8]=l,e[9]=i,e[10]=k,e[11]=$,e[12]=u,e[13]=h,e[14]=g,e[15]=p,e[16]=y,e[17]=a,e[18]=c}else c=e[18];return c};function be(){return new Set}function we(){ce()}export{je as TracesPanel};
1
+ import{c as z}from"react/compiler-runtime";import{useState as W,useEffect as J}from"react";import{f as X}from"../packem_shared/log-fields-CoL3hsIQ.js";import{E as Y}from"../packem_shared/error-alert--Ie7ofJ0.js";import{L as Z}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as ee}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as te}from"../packem_shared/badge-BbuuAio7.js";import{E as re}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as ae}from"../packem_shared/input-JHu63lTv.js";import{N as se}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{S as ne}from"../packem_shared/use-shard-key-B2JtNa5m.js";import{useT as G}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as oe}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as le}from"../packem_shared/internal-zkEvTqy8.js";import{r as ie}from"../packem_shared/shard-history-DMEW5VBE.js";import{p as de,c as ce}from"../packem_shared/trace-handoff-Dw7mwjxu.js";import{c as me}from"../packem_shared/utils-bhneXptQ.js";import{jsx as s,jsxs as B}from"react/jsx-runtime";const Q=o=>Math.min(100,Math.max(0,o)),ue=(o,e)=>{if(!Number.isFinite(e)||e<=0)return{leftPercent:0,widthPercent:100};const t=Q(o.offsetMs/e*100),a=o.durationMs/e*100,r=Math.max(.5,Math.min(Q(a),100-t));return{leftPercent:t,widthPercent:r}},he=(o,e)=>{const t=e.trim().toLowerCase();return t===""?[...o]:o.filter(a=>a.rootName.toLowerCase().includes(t)||a.functionPath.toLowerCase().includes(t)||a.traceId.toLowerCase().includes(t))},U=o=>Number.isFinite(o)?o>0&&o<1?`${o.toFixed(2)}ms`:`${String(Math.round(o))}ms`:"—",fe=14,pe=o=>Array.isArray(o?.traces)?o.traces:[],ge=o=>{const e=z(50),{span:t,traceDurationMs:a}=o,r=G();let n;e[0]!==t||e[1]!==a?(n=ue(t,a),e[0]=t,e[1]=a,e[2]=n):n=e[2];const{leftPercent:p,widthPercent:y}=n;let g;e[3]!==t.attributes?(g=X(t.attributes),e[3]=t.attributes,e[4]=g):g=e[4];const I=g,$=t.depth*fe;let P;e[5]!==$?(P={paddingLeft:$},e[5]=$,e[6]=P):P=e[6];const x=P,b=`${String(p)}%`,w=`${String(y)}%`;let l;e[7]!==b||e[8]!==w?(l={left:b,width:w},e[7]=b,e[8]=w,e[9]=l):l=e[9];const i=l,k=t.depth;let u;e[10]!==t.ok||e[11]!==r?(u=t.ok?null:s("span",{"aria-label":r("Errored span"),className:"mr-1 text-destructive","data-testid":"tr-span-error",role:"img",children:"●"}),e[10]=t.ok,e[11]=r,e[12]=u):u=e[12];let h;e[13]!==x||e[14]!==t.name||e[15]!==u?(h=B("span",{className:"w-56 shrink-0 truncate",role:"gridcell",style:x,title:t.name,children:[u,t.name]}),e[13]=x,e[14]=t.name,e[15]=u,e[16]=h):h=e[16];let d;e[17]!==t.durationMs||e[18]!==t.offsetMs||e[19]!==r?(d=r("starts {offset} in, runs {duration}",{duration:U(t.durationMs),offset:U(t.offsetMs)}),e[17]=t.durationMs,e[18]=t.offsetMs,e[19]=r,e[20]=d):d=e[20];const N=t.ok?"bg-primary/70":"bg-destructive";let c;e[21]!==N?(c=me("absolute inset-y-0 rounded-sm",N),e[21]=N,e[22]=c):c=e[22];let m;e[23]!==i||e[24]!==p||e[25]!==c||e[26]!==y?(m=s("span",{className:c,"data-left":p,"data-testid":"tr-span-bar","data-width":y,style:i}),e[23]=i,e[24]=p,e[25]=c,e[26]=y,e[27]=m):m=e[27];let f;e[28]!==d||e[29]!==m?(f=s("span",{"aria-label":d,className:"relative h-3 flex-1 overflow-hidden rounded-sm bg-muted",role:"gridcell",children:m}),e[28]=d,e[29]=m,e[30]=f):f=e[30];let M;e[31]!==t.durationMs?(M=U(t.durationMs),e[31]=t.durationMs,e[32]=M):M=e[32];let v;e[33]!==M?(v=s("span",{className:"w-16 shrink-0 text-right tabular-nums text-muted-foreground",role:"gridcell",children:M}),e[33]=M,e[34]=v):v=e[34];let S;e[35]!==t.error?(S=t.error===void 0?null:s("span",{className:"text-destructive","data-testid":"tr-span-error-message",title:t.error.message,children:`${t.error.type}: ${t.error.message}`}),e[35]=t.error,e[36]=S):S=e[36];let C;e[37]!==S?(C=s("span",{className:"w-64 shrink-0 truncate text-muted-foreground",role:"gridcell",children:S}),e[37]=S,e[38]=C):C=e[38];let T;e[39]!==I?(T=I===""?null:s("span",{"data-testid":"tr-span-attributes",title:I,children:I}),e[39]=I,e[40]=T):T=e[40];let K;e[41]!==T?(K=s("span",{className:"w-64 shrink-0 truncate text-muted-foreground",role:"gridcell",children:T}),e[41]=T,e[42]=K):K=e[42];let E;return e[43]!==t.depth||e[44]!==h||e[45]!==f||e[46]!==v||e[47]!==C||e[48]!==K?(E=B("div",{className:"flex items-center gap-2 border-b border-border px-3 py-1.5 font-mono text-xs last:border-b-0 hover:bg-muted/50","data-depth":k,"data-testid":"tr-span-row",role:"row",children:[h,f,v,C,K]}),e[43]=t.depth,e[44]=h,e[45]=f,e[46]=v,e[47]=C,e[48]=K,e[49]=E):E=e[49],E},xe=o=>{const e=z(50),{expanded:t,onToggle:a,trace:r}=o,n=G();let p;e[0]!==a||e[1]!==r.traceId?(p=()=>{a(r.traceId)},e[0]=a,e[1]=r.traceId,e[2]=p):p=e[2];const y=p,g=`tr-row-${r.traceId}`,I=`tr-waterfall-${r.traceId}`,$=`tr-toggle-${r.traceId}`,P=t?"▾":"▸";let x;e[3]!==P?(x=s("span",{"aria-hidden":"true",className:"w-3 shrink-0 text-xs text-muted-foreground",children:P}),e[3]=P,e[4]=x):x=e[4];let b;e[5]!==r.rootName?(b=s("span",{className:"w-56 shrink-0 truncate text-sm font-medium",title:r.rootName,children:r.rootName}),e[5]=r.rootName,e[6]=b):b=e[6];let w;e[7]!==r.functionPath?(w=s("span",{className:"w-48 shrink-0 truncate font-mono text-xs text-muted-foreground",title:r.functionPath,children:r.functionPath}),e[7]=r.functionPath,e[8]=w):w=e[8];let l;e[9]!==r.durationMs?(l=U(r.durationMs),e[9]=r.durationMs,e[10]=l):l=e[10];let i;e[11]!==l?(i=s("span",{className:"w-20 shrink-0 text-right font-mono text-xs tabular-nums text-muted-foreground",children:l}),e[11]=l,e[12]=i):i=e[12];let k;e[13]!==n||e[14]!==r.spans.length?(k=n("{count} spans",{count:r.spans.length}),e[13]=n,e[14]=r.spans.length,e[15]=k):k=e[15];let u;e[16]!==k?(u=s("span",{className:"w-20 shrink-0 text-right font-mono text-xs tabular-nums text-muted-foreground",children:k}),e[16]=k,e[17]=u):u=e[17];const h=r.ok?"secondary":"destructive";let d;e[18]!==n||e[19]!==r.ok?(d=r.ok?n("ok"):n("error"),e[18]=n,e[19]=r.ok,e[20]=d):d=e[20];let N;e[21]!==h||e[22]!==d?(N=s("span",{className:"shrink-0",children:s(te,{variant:h,children:d})}),e[21]=h,e[22]=d,e[23]=N):N=e[23];let c;e[24]!==r.startTs?(c=le(r.startTs),e[24]=r.startTs,e[25]=c):c=e[25];let m;e[26]!==c?(m=s("span",{className:"flex-1 truncate text-right font-mono text-xs tabular-nums text-muted-foreground",children:c}),e[26]=c,e[27]=m):m=e[27];let f;e[28]!==t||e[29]!==y||e[30]!==i||e[31]!==u||e[32]!==N||e[33]!==m||e[34]!==I||e[35]!==$||e[36]!==x||e[37]!==b||e[38]!==w?(f=B("button",{"aria-controls":I,"aria-expanded":t,className:"flex w-full items-center gap-3 px-3 py-2 text-left hover:bg-muted/50","data-testid":$,onClick:y,type:"button",children:[x,b,w,i,u,N,m]}),e[28]=t,e[29]=y,e[30]=i,e[31]=u,e[32]=N,e[33]=m,e[34]=I,e[35]=$,e[36]=x,e[37]=b,e[38]=w,e[39]=f):f=e[39];let M;e[40]!==t||e[41]!==n||e[42]!==r.durationMs||e[43]!==r.spans||e[44]!==r.traceId?(M=t&&s("div",{"aria-label":n("Trace waterfall"),className:"bg-muted/20","data-testid":`tr-waterfall-${r.traceId}`,id:`tr-waterfall-${r.traceId}`,role:"grid",children:r.spans.map(S=>s(ge,{span:S,traceDurationMs:r.durationMs},S.spanId))}),e[40]=t,e[41]=n,e[42]=r.durationMs,e[43]=r.spans,e[44]=r.traceId,e[45]=M):M=e[45];let v;return e[46]!==f||e[47]!==M||e[48]!==g?(v=B("div",{className:"border-b border-border last:border-b-0","data-testid":g,children:[f,M]}),e[46]=f,e[47]=M,e[48]=g,e[49]=v):v=e[49],v},je=o=>{const e=z(44),{initialShardKey:t}=o,a=G(),[r]=W(de),{queryShardKey:n,setShardKey:p,shardKey:y}=ne(r?.shardKey!==void 0&&r.shardKey!==""?r.shardKey:t??""),[g,I]=W(r?.traceId??""),[$,P]=W(be);let x;e[0]===Symbol.for("react.memo_cache_sentinel")?(x=[],e[0]=x):x=e[0],J(we,x);let b;e[1]===Symbol.for("react.memo_cache_sentinel")?(b={},e[1]=b):b=e[1];let w;e[2]!==n?(w={live:!0,shardKey:n},e[2]=n,e[3]=w):w=e[3];const{data:l,error:i,errorSource:k,isLoading:u,liveError:h}=se(oe.getTraces,b,w);let d,N;e[4]!==l||e[5]!==n?(d=()=>{l!==void 0&&ie(n)},N=[l,n],e[4]=l,e[5]=n,e[6]=d,e[7]=N):(d=e[6],N=e[7]),J(d,N);let c;if(e[8]!==l||e[9]!==i||e[10]!==k||e[11]!==$||e[12]!==u||e[13]!==h||e[14]!==g||e[15]!==p||e[16]!==y||e[17]!==a){const m=pe(l),f=l?.total??m.length,M=f>m.length,v=he(m,g);let S;e[19]===Symbol.for("react.memo_cache_sentinel")?(S=L=>{I(L.target.value)},e[19]=S):S=e[19];const C=S;let T;e[20]===Symbol.for("react.memo_cache_sentinel")?(T=L=>{P(V=>{const H=new Set(V);return H.has(L)?H.delete(L):H.add(L),H})},e[20]=T):T=e[20];const K=T,E=i===null&&v.length===0&&!u;let F;e[21]!==p||e[22]!==y?(F=s(ee,{onChange:p,testId:"tr-shard-input",value:y}),e[21]=p,e[22]=y,e[23]=F):F=e[23];let A;e[24]!==a?(A=a("Search traces"),e[24]=a,e[25]=A):A=e[25];let D;e[26]!==a?(D=a("search trace or function"),e[26]=a,e[27]=D):D=e[27];let _;e[28]!==g||e[29]!==A||e[30]!==D?(_=s(ae,{"aria-label":A,className:"h-8 w-56","data-testid":"tr-search",onChange:C,placeholder:D,value:g}),e[28]=g,e[29]=A,e[30]=D,e[31]=_):_=e[31];let j;e[32]!==h?(j=s(Z,{message:h,prefix:"tr"}),e[32]=h,e[33]=j):j=e[33];let q;e[34]!==_||e[35]!==j||e[36]!==F?(q=B("div",{className:"flex flex-wrap items-center gap-2",children:[F,_,j]}),e[34]=_,e[35]=j,e[36]=F,e[37]=q):q=e[37];let O;e[38]!==i||e[39]!==k?(O=i!==null&&s(Y,{error:k,testId:"tr-error"}),e[38]=i,e[39]=k,e[40]=O):O=e[40];let R;e[41]!==E||e[42]!==a?(R=E&&s(re,{description:a("Traces recorded with ctx.trace show up here as your app handles traffic. The span buffer resets when the shard hibernates."),icon:s("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:s("path",{d:"M4 6h10M7 12h13M10 18h7"})}),testId:"tr-empty",title:a("No traces")}),e[41]=E,e[42]=a,e[43]=R):R=e[43],c=B("div",{className:"flex flex-col gap-4","data-testid":"lunora-traces-panel",children:[q,O,R,i===null&&M&&s("p",{className:"text-xs text-muted-foreground","data-testid":"tr-truncated",children:a("Showing the {shown} most recent of {total} traces in the buffer.",{shown:m.length,total:f})}),i===null&&v.length>0&&s("div",{"aria-label":a("Recent traces"),className:"overflow-hidden rounded-xl border border-border shadow-xs","data-testid":"tr-list",children:v.map(L=>s(xe,{expanded:$.has(L.traceId),onToggle:K,trace:L},L.traceId))})]}),e[8]=l,e[9]=i,e[10]=k,e[11]=$,e[12]=u,e[13]=h,e[14]=g,e[15]=p,e[16]=y,e[17]=a,e[18]=c}else c=e[18];return c};function be(){return new Set}function we(){ce()}export{je as TracesPanel};
@@ -1 +1 @@
1
- import{useLunora as ge}from"@lunora/react";import{useState as $,useEffect as Ve}from"react";import{g as M}from"../packem_shared/badge-BbuuAio7.js";import{u as S}from"../packem_shared/button-BkCrNcAs.js";import{c as $e,u as Fe}from"../packem_shared/card-CIDGUN6K.js";import{E as Je}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as j}from"../packem_shared/input-JHu63lTv.js";import{n as Ue,d as Pe,m as L,p as z,f as Re,u as U}from"../packem_shared/table-DdJBrClo.js";import{O as Ke}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{c as Ne}from"react/compiler-runtime";import{u as Oe}from"../packem_shared/use-auth-config-BObBpdsi.js";import{useAutoRefresh as We}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import Ze from"../packem_shared/useDebounced-CU-uftxO.js";import{useT as ke}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{i as Ie,h as Ae,f as _e,b as Ee}from"../packem_shared/internal-BSIsQVC6.js";import{f as Qe}from"../packem_shared/checkbox-StT4Gob6.js";import{p as V}from"../packem_shared/label-6uP1obNF.js";import{M as Ge}from"../packem_shared/modal-shell-CUwwWC2o.js";import{u as Xe}from"../packem_shared/use-async-submit-q3ymBJkD.js";import{jsx as t,jsxs as n,Fragment as Ye}from"react/jsx-runtime";const et=()=>{const u=Ne(3),{config:e,ready:s}=Oe();let l;return u[0]!==e.capabilities||u[1]!==s?(l={capabilities:e.capabilities,ready:s},u[0]=e.capabilities,u[1]=s,u[2]=l):l=u[2],l},tt={boolean:"checkbox",date:"datetime-local",number:"number",string:"text"},at=(u,e)=>u.type==="boolean"?!0:typeof e!="string"||e.trim()===""?!1:u.type!=="number"||!Number.isNaN(Number(e.trim())),lt=(u,e)=>{if(u.type==="boolean")return e===!0?{value:!0}:u.required?{value:!1}:void 0;const s=typeof e=="string"?e.trim():"";if(s!==""){if(u.type==="number"){const l=Number(s);return Number.isNaN(l)?void 0:{value:l}}return{value:s}}},st=u=>{const e=Ne(105),{onClose:s,onCreated:l}=u,c=ge(),a=ke(),{config:o}=Oe(),{busy:r,error:i,run:m}=Xe(),[k,I]=$(""),[x,w]=$(""),[y,A]=$(""),[h,g]=$("");let v;e[0]===Symbol.for("react.memo_cache_sentinel")?(v={},e[0]=v):v=e[0];const[f,d]=$(v);let C;e[1]===Symbol.for("react.memo_cache_sentinel")?(C=p=>{I(p.target.value)},e[1]=C):C=e[1];const b=C;let F;e[2]===Symbol.for("react.memo_cache_sentinel")?(F=p=>{w(p.target.value)},e[2]=F):F=e[2];const T=F;let R;e[3]===Symbol.for("react.memo_cache_sentinel")?(R=p=>{A(p.target.value)},e[3]=R):R=e[3];const De=R;let O;e[4]===Symbol.for("react.memo_cache_sentinel")?(O=p=>{g(p.target.value)},e[4]=O):O=e[4];const je=O;let G;e[5]===Symbol.for("react.memo_cache_sentinel")?(G=(p,P)=>{d(q=>({...q,[p]:P}))},e[5]=G):G=e[5];const Se=G;let H;e[6]!==f?(H=p=>f[p.name]??(p.type==="boolean"?!1:""),e[6]=f,e[7]=H):H=e[7];const _=H;let J;if(e[8]!==o.userFields||e[9]!==_){let p;e[11]!==_?(p=P=>!P.required||at(P,_(P)),e[11]=_,e[12]=p):p=e[12],J=o.userFields.every(p),e[8]=o.userFields,e[9]=_,e[10]=J}else J=e[10];const we=J;let K;e[13]!==r||e[14]!==k||e[15]!==x||e[16]!==we?(K=!r&&k.trim()!==""&&x.trim()!==""&&we,e[13]=r,e[14]=k,e[15]=x,e[16]=we,e[17]=K):K=e[17];const Te=K;let W;e[18]!==o.userFields||e[19]!==_?(W=()=>{const p={};for(const P of o.userFields){const q=lt(P,_(P));q!==void 0&&(p[P.name]=q.value)}return Object.keys(p).length===0?void 0:p},e[18]=o.userFields,e[19]=_,e[20]=W):W=e[20];const Ce=W;let Z;e[21]!==Ce||e[22]!==c||e[23]!==k||e[24]!==x||e[25]!==s||e[26]!==l||e[27]!==y||e[28]!==h||e[29]!==m?(Z=()=>{m(async()=>{await c.createAuthUser({data:Ce(),email:k.trim(),name:x.trim(),password:y===""?void 0:y,role:h.trim()===""?void 0:h.trim()}),l(),s()})},e[21]=Ce,e[22]=c,e[23]=k,e[24]=x,e[25]=s,e[26]=l,e[27]=y,e[28]=h,e[29]=m,e[30]=Z):Z=e[30];const N=Z;let D;e[31]!==a?(D=a("Create user"),e[31]=a,e[32]=D):D=e[32];let B;e[33]!==a?(B=a("Create user"),e[33]=a,e[34]=B):B=e[34];let E;e[35]!==B?(E=t("h2",{className:"text-sm font-semibold text-foreground",children:B}),e[35]=B,e[36]=E):E=e[36];let Q;e[37]!==a?(Q=a("email"),e[37]=a,e[38]=Q):Q=e[38];let X;e[39]!==Q?(X=t(V,{htmlFor:"uc-email",children:Q}),e[39]=Q,e[40]=X):X=e[40];let Y;e[41]!==k?(Y=t(j,{"data-testid":"uc-email",id:"uc-email",onChange:b,type:"email",value:k}),e[41]=k,e[42]=Y):Y=e[42];let ee;e[43]!==X||e[44]!==Y?(ee=n("div",{className:"flex flex-col gap-1",children:[X,Y]}),e[43]=X,e[44]=Y,e[45]=ee):ee=e[45];let te;e[46]!==a?(te=a("name"),e[46]=a,e[47]=te):te=e[47];let ae;e[48]!==te?(ae=t(V,{htmlFor:"uc-name",children:te}),e[48]=te,e[49]=ae):ae=e[49];let le;e[50]!==x?(le=t(j,{"data-testid":"uc-name",id:"uc-name",onChange:T,value:x}),e[50]=x,e[51]=le):le=e[51];let se;e[52]!==ae||e[53]!==le?(se=n("div",{className:"flex flex-col gap-1",children:[ae,le]}),e[52]=ae,e[53]=le,e[54]=se):se=e[54];let re;e[55]!==a?(re=a("Password (optional)"),e[55]=a,e[56]=re):re=e[56];let ie;e[57]!==re?(ie=t(V,{htmlFor:"uc-password",children:re}),e[57]=re,e[58]=ie):ie=e[58];let ne;e[59]!==y?(ne=t(j,{"data-testid":"uc-password",id:"uc-password",onChange:De,type:"password",value:y}),e[59]=y,e[60]=ne):ne=e[60];let de;e[61]!==ie||e[62]!==ne?(de=n("div",{className:"flex flex-col gap-1",children:[ie,ne]}),e[61]=ie,e[62]=ne,e[63]=de):de=e[63];let oe;e[64]!==a?(oe=a("Role (optional)"),e[64]=a,e[65]=oe):oe=e[65];let ce;e[66]!==oe?(ce=t(V,{htmlFor:"uc-role",children:oe}),e[66]=oe,e[67]=ce):ce=e[67];let ue;e[68]!==h?(ue=t(j,{"data-testid":"uc-role",id:"uc-role",onChange:je,value:h}),e[68]=h,e[69]=ue):ue=e[69];let me;e[70]!==ce||e[71]!==ue?(me=n("div",{className:"flex flex-col gap-1",children:[ce,ue]}),e[70]=ce,e[71]=ue,e[72]=me):me=e[72];let he;e[73]!==o.userFields||e[74]!==_||e[75]!==a?(he=o.userFields.length>0&&n("div",{className:"flex flex-col gap-3 border-t border-border pt-3","data-testid":"uc-plugin-fields",children:[t("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a("Plugin fields")}),o.userFields.map(p=>{const P=`uc-field-${p.name}`,q=p.required?"":` (${a("optional")})`;if(p.type==="boolean"){const Me=_(p)===!0;return n("label",{className:"flex items-center gap-2",htmlFor:P,children:[t(Qe,{checked:Me,"data-testid":P,id:P,onCheckedChange:He=>{Se(p.name,He)}}),n("span",{className:"text-sm",children:[p.name,q]})]},p.name)}const qe=_(p);return n("div",{className:"flex flex-col gap-1",children:[n(V,{htmlFor:P,children:[p.name,q]}),t(j,{"data-testid":P,id:P,onChange:Me=>{Se(p.name,Me.target.value)},type:tt[p.type],value:typeof qe=="string"?qe:""})]},p.name)})]}),e[73]=o.userFields,e[74]=_,e[75]=a,e[76]=he):he=e[76];let pe;e[77]!==i?(pe=i!==null&&t("p",{className:"text-sm text-destructive","data-testid":"uc-error",role:"alert",children:i}),e[77]=i,e[78]=pe):pe=e[78];let fe;e[79]!==a?(fe=a("Cancel"),e[79]=a,e[80]=fe):fe=e[80];let ve;e[81]!==s||e[82]!==fe?(ve=t(S,{"data-testid":"uc-cancel",onClick:s,size:"sm",type:"button",variant:"outline",children:fe}),e[81]=s,e[82]=fe,e[83]=ve):ve=e[83];const Be=!Te;let be;e[84]!==r||e[85]!==a?(be=a(r?"Creating…":"Create"),e[84]=r,e[85]=a,e[86]=be):be=e[86];let xe;e[87]!==N||e[88]!==Be||e[89]!==be?(xe=t(S,{"data-testid":"uc-submit",disabled:Be,onClick:N,size:"sm",type:"button",children:be}),e[87]=N,e[88]=Be,e[89]=be,e[90]=xe):xe=e[90];let ye;e[91]!==ve||e[92]!==xe?(ye=n("div",{className:"flex justify-end gap-2 pt-1",children:[ve,xe]}),e[91]=ve,e[92]=xe,e[93]=ye):ye=e[93];let ze;return e[94]!==s||e[95]!==D||e[96]!==E||e[97]!==ee||e[98]!==se||e[99]!==de||e[100]!==me||e[101]!==he||e[102]!==pe||e[103]!==ye?(ze=n(Ge,{label:D,onClose:s,panelTestId:"uc-dialog",testId:"uc-overlay",variant:"dialog",children:[E,ee,se,de,me,he,pe,ye]}),e[94]=s,e[95]=D,e[96]=E,e[97]=ee,e[98]=se,e[99]=de,e[100]=me,e[101]=he,e[102]=pe,e[103]=ye,e[104]=ze):ze=e[104],ze},Le=u=>{const e=Ne(2),{children:s}=u;let l;return e[0]!==s?(l=t("h3",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:s}),e[0]=s,e[1]=l):l=e[1],l},rt=u=>{const e=Ne(29),{busy:s,runAction:l,userId:c,version:a}=u,o=ge(),r=ke(),[i,m]=$(null),[k,I]=$(null);let x;e[0]!==o||e[1]!==c?(x=()=>{_e((async()=>{I(null);try{const b=await o.listAuthSessions({limit:50,userId:c});m(b.rows)}catch(b){const F=b;m(null),I(Ee(F))}})())},e[0]=o,e[1]=c,e[2]=x):x=e[2];let w;e[3]!==o||e[4]!==c||e[5]!==a?(w=[o,c,a],e[3]=o,e[4]=c,e[5]=a,e[6]=w):w=e[6],Ve(x,w);let y;e[7]!==o||e[8]!==l?(y=b=>{l(()=>o.revokeAuthSession({sessionId:b}))},e[7]=o,e[8]=l,e[9]=y):y=e[9];const A=y;let h;e[10]!==r?(h=r("Sessions"),e[10]=r,e[11]=h):h=e[11];let g;e[12]!==h?(g=t(Le,{children:h}),e[12]=h,e[13]=g):g=e[13];let v;e[14]!==k?(v=k!==null&&t("p",{className:"text-sm text-destructive","data-testid":"ud-sessions-error",role:"alert",children:k}),e[14]=k,e[15]=v):v=e[15];let f;e[16]!==i||e[17]!==r?(f=i!==null&&i.length===0&&t("p",{className:"text-sm text-muted-foreground","data-testid":"ud-sessions-empty",children:r("No active sessions.")}),e[16]=i,e[17]=r,e[18]=f):f=e[18];let d;e[19]!==s||e[20]!==A||e[21]!==i||e[22]!==r?(d=i!==null&&i.length>0&&t($e,{className:"overflow-hidden py-0",children:t(Fe,{className:"px-0",children:n(Ue,{"data-testid":"ud-sessions-table",children:[t(Pe,{children:n(L,{children:[t(z,{children:r("expires")}),t(z,{children:r("ip")}),t(z,{children:r("user agent")}),t(z,{"aria-label":r("Actions")})]})}),t(Re,{children:i.map(b=>n(L,{"data-testid":`ud-session-${b.id}`,children:[t(U,{className:"text-muted-foreground tabular-nums",children:Ie(b.expiresAt)}),t(U,{children:b.ipAddress??""}),t(U,{className:"max-w-40 truncate",children:b.userAgent??""}),t(U,{children:t(S,{"data-testid":`ud-revoke-${b.id}`,disabled:s,onClick:()=>{A(b.id)},size:"xs",type:"button",variant:"ghost",children:r("Revoke")})})]},b.id))})]})})}),e[19]=s,e[20]=A,e[21]=i,e[22]=r,e[23]=d):d=e[23];let C;return e[24]!==g||e[25]!==v||e[26]!==f||e[27]!==d?(C=n("div",{className:"flex flex-col gap-2","data-testid":"ud-sessions",children:[g,v,f,d]}),e[24]=g,e[25]=v,e[26]=f,e[27]=d,e[28]=C):C=e[28],C},it=u=>{const e=Ne(30),{busy:s,runAction:l,userId:c,version:a}=u,o=ge(),r=ke(),[i,m]=$(null),[k,I]=$(null);let x;e[0]!==o||e[1]!==c?(x=()=>{_e((async()=>{I(null);try{m(await o.listAuthAccounts({userId:c}))}catch(b){const F=b;m(null),I(Ee(F))}})())},e[0]=o,e[1]=c,e[2]=x):x=e[2];let w;e[3]!==o||e[4]!==c||e[5]!==a?(w=[o,c,a],e[3]=o,e[4]=c,e[5]=a,e[6]=w):w=e[6],Ve(x,w);let y;e[7]!==o||e[8]!==l||e[9]!==c?(y=b=>{l(()=>o.unlinkAuthAccount({accountId:b,userId:c}))},e[7]=o,e[8]=l,e[9]=c,e[10]=y):y=e[10];const A=y;let h;e[11]!==r?(h=r("Linked accounts"),e[11]=r,e[12]=h):h=e[12];let g;e[13]!==h?(g=t(Le,{children:h}),e[13]=h,e[14]=g):g=e[14];let v;e[15]!==k?(v=k!==null&&t("p",{className:"text-sm text-destructive",role:"alert",children:k}),e[15]=k,e[16]=v):v=e[16];let f;e[17]!==i||e[18]!==r?(f=i!==null&&i.length===0&&t("p",{className:"text-sm text-muted-foreground",children:r("No linked accounts.")}),e[17]=i,e[18]=r,e[19]=f):f=e[19];let d;e[20]!==i||e[21]!==s||e[22]!==A||e[23]!==r?(d=i!==null&&i.length>0&&t($e,{className:"overflow-hidden py-0",children:t(Fe,{className:"px-0",children:n(Ue,{"data-testid":"ud-accounts-table",children:[t(Pe,{children:n(L,{children:[t(z,{children:r("provider")}),t(z,{children:r("created")}),t(z,{"aria-label":r("Actions")})]})}),t(Re,{children:i.map(b=>{const F=Ae(b.id);return n(L,{"data-testid":`ud-account-${F}`,children:[t(U,{children:Ae(b.providerId)}),t(U,{className:"text-muted-foreground tabular-nums",children:Ie(b.createdAt)}),t(U,{children:t(S,{"data-testid":`ud-unlink-${F}`,disabled:s,onClick:()=>{A(F)},size:"xs",type:"button",variant:"ghost",children:r("Unlink")})})]},F)})})]})})}),e[20]=i,e[21]=s,e[22]=A,e[23]=r,e[24]=d):d=e[24];let C;return e[25]!==g||e[26]!==v||e[27]!==f||e[28]!==d?(C=n("div",{className:"flex flex-col gap-2","data-testid":"ud-accounts",children:[g,v,f,d]}),e[25]=g,e[26]=v,e[27]=f,e[28]=d,e[29]=C):C=e[29],C},nt=u=>{const e=Ne(40),{busy:s,capabilities:l,runAction:c,userId:a,version:o}=u,r=ge(),i=ke(),[m,k]=$(null);let I;e[0]!==l.passkey||e[1]!==r||e[2]!==a?(I=()=>{l.passkey&&_e((async()=>{try{k(await r.listAuthPasskeys({userId:a}))}catch{k(null)}})())},e[0]=l.passkey,e[1]=r,e[2]=a,e[3]=I):I=e[3];let x;e[4]!==l.passkey||e[5]!==r||e[6]!==a||e[7]!==o?(x=[l.passkey,r,a,o],e[4]=l.passkey,e[5]=r,e[6]=a,e[7]=o,e[8]=x):x=e[8],Ve(I,x);let w;e[9]!==r||e[10]!==c||e[11]!==a?(w=()=>{c(()=>r.disableAuthTwoFactor({userId:a}))},e[9]=r,e[10]=c,e[11]=a,e[12]=w):w=e[12];const y=w;let A;e[13]!==r||e[14]!==c?(A=F=>{c(()=>r.deleteAuthPasskey({passkeyId:F}))},e[13]=r,e[14]=c,e[15]=A):A=e[15];const h=A;let g;e[16]!==i?(g=i("Security"),e[16]=i,e[17]=g):g=e[17];let v;e[18]!==g?(v=t(Le,{children:g}),e[18]=g,e[19]=v):v=e[19];let f;e[20]!==s||e[21]!==l.twoFactor||e[22]!==y||e[23]!==i?(f=l.twoFactor&&t(S,{"data-testid":"ud-disable-2fa",disabled:s,onClick:y,size:"sm",type:"button",variant:"outline",children:i("Disable two-factor")}),e[20]=s,e[21]=l.twoFactor,e[22]=y,e[23]=i,e[24]=f):f=e[24];let d;e[25]!==l.passkey||e[26]!==m||e[27]!==i?(d=l.passkey&&m!==null&&m.length===0&&t("p",{className:"text-sm text-muted-foreground",children:i("No passkeys.")}),e[25]=l.passkey,e[26]=m,e[27]=i,e[28]=d):d=e[28];let C;e[29]!==s||e[30]!==l.passkey||e[31]!==h||e[32]!==m||e[33]!==i?(C=l.passkey&&m!==null&&m.length>0&&t($e,{className:"overflow-hidden py-0",children:t(Fe,{className:"px-0",children:n(Ue,{"data-testid":"ud-passkeys-table",children:[t(Pe,{children:n(L,{children:[t(z,{children:i("name")}),t(z,{children:i("created")}),t(z,{"aria-label":i("Actions")})]})}),t(Re,{children:m.map(F=>{const T=Ae(F.id);return n(L,{"data-testid":`ud-passkey-${T}`,children:[t(U,{children:Ae(F.name)||T}),t(U,{className:"text-muted-foreground tabular-nums",children:Ie(F.createdAt)}),t(U,{children:t(S,{"data-testid":`ud-delete-passkey-${T}`,disabled:s,onClick:()=>{h(T)},size:"xs",type:"button",variant:"ghost",children:i("Delete")})})]},T)})})]})})}),e[29]=s,e[30]=l.passkey,e[31]=h,e[32]=m,e[33]=i,e[34]=C):C=e[34];let b;return e[35]!==v||e[36]!==f||e[37]!==d||e[38]!==C?(b=n("div",{className:"flex flex-col gap-2","data-testid":"ud-security",children:[v,f,d,C]}),e[35]=v,e[36]=f,e[37]=d,e[38]=C,e[39]=b):b=e[39],b},dt=/(?:at|expires)$/iu,ot=new Set(["banExpires","banned","banReason","email","emailVerified","id","name","role"]),ct=(u,e)=>typeof e=="number"&&dt.test(u)?Ie(e):Ae(e),ut=({capabilities:u,onChanged:e,onClose:s,user:l})=>{const c=ge(),a=ke(),o=l.banned===!0,[r,i]=$(null),[m,k]=$(!1),[I,x]=$(0),[w,y]=$(typeof l.role=="string"?l.role:""),[A,h]=$(""),[g,v]=$(""),[f,d]=$(""),[C,b]=$(null),[F,T]=$(!1),R=(N,D)=>{_e((async()=>{k(!0),i(null);try{const B=await N();D?.refresh!==!1&&(x(E=>E+1),e()),D?.onResult?.(B)}catch(B){i(Ee(B))}k(!1)})())},De=N=>{y(N.target.value)},O=N=>{h(N.target.value)},je=N=>{v(N.target.value)},G=N=>{d(N.target.value)},Se=()=>{const N=w.trim();N!==""&&R(async()=>{await c.setAuthUserRole({role:N,userId:l.id})})},H=()=>{const N=Number.parseInt(g,10),D=Number.isFinite(N)&&N>0?N*86400:void 0;R(async()=>{await c.banAuthUser({expiresInSeconds:D,reason:A.trim()===""?void 0:A.trim(),userId:l.id})})},_=()=>{R(async()=>{await c.unbanAuthUser({userId:l.id})})},J=()=>{R(async()=>{await c.setAuthUserPassword({newPassword:f,userId:l.id}),d("")})},we=()=>{R(()=>c.impersonateAuthUser({userId:l.id}),{onResult:N=>{b(N.token)},refresh:!1})},K=()=>{R(async()=>{await c.revokeAuthUserSessions({userId:l.id})})},Te=()=>{R(async()=>{await c.removeAuthUser({userId:l.id}),s()})},W=()=>{T(!0)},Ce=()=>{T(!1)},Z=Object.entries(l).filter(([N])=>!ot.has(N));return n(Ge,{label:a("User details"),onClose:s,panelTestId:"ud-panel",testId:"ud-overlay",variant:"drawer",children:[n("div",{className:"flex items-start justify-between gap-2",children:[n("div",{className:"flex flex-col gap-1",children:[t("h2",{className:"text-sm font-semibold text-foreground",children:l.name??l.email??l.id}),t("p",{className:"font-mono text-xs text-muted-foreground",children:l.id}),n("div",{className:"flex flex-wrap items-center gap-1.5 pt-1",children:[typeof l.role=="string"&&l.role!==""&&t(M,{variant:"secondary",children:l.role}),o?t(M,{variant:"destructive",children:a("Banned")}):t(M,{variant:"outline",children:a("Active")}),l.emailVerified===!0?t(M,{variant:"secondary",children:a("verified")}):t(M,{variant:"outline",children:a("unverified")})]})]}),t(S,{"data-testid":"ud-close",onClick:s,size:"sm",type:"button",variant:"ghost",children:a("Close")})]}),r!==null&&t("p",{className:"text-sm text-destructive","data-testid":"ud-action-error",role:"alert",children:r}),u.admin&&n($e,{className:"gap-0 py-0",children:[t("header",{className:"border-b border-border px-4 py-3",children:t("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a("Actions")})}),n(Fe,{className:"flex flex-col gap-3 p-3",children:[n("div",{className:"flex items-end gap-2",children:[n("div",{className:"flex flex-1 flex-col gap-1",children:[t(V,{htmlFor:"ud-role",children:a("Role")}),t(j,{"data-testid":"ud-role-input",id:"ud-role",onChange:De,value:w})]}),t(S,{"data-testid":"ud-set-role",disabled:m||w.trim()==="",onClick:Se,size:"sm",type:"button",variant:"outline",children:a("Set role")})]}),o?t(S,{"data-testid":"ud-unban",disabled:m,onClick:_,size:"sm",type:"button",variant:"outline",children:a("Unban")}):n("div",{className:"flex items-end gap-2",children:[n("div",{className:"flex flex-1 flex-col gap-1",children:[t(V,{htmlFor:"ud-ban-reason",children:a("Ban reason (optional)")}),t(j,{"data-testid":"ud-ban-reason",id:"ud-ban-reason",onChange:O,value:A})]}),n("div",{className:"flex w-24 flex-col gap-1",children:[t(V,{htmlFor:"ud-ban-days",children:a("Days")}),t(j,{"data-testid":"ud-ban-days",id:"ud-ban-days",onChange:je,type:"number",value:g})]}),t(S,{"data-testid":"ud-ban",disabled:m,onClick:H,size:"sm",type:"button",variant:"destructive",children:a("Ban user")})]}),n("div",{className:"flex items-end gap-2",children:[n("div",{className:"flex flex-1 flex-col gap-1",children:[t(V,{htmlFor:"ud-password",children:a("New password")}),t(j,{"data-testid":"ud-password",id:"ud-password",onChange:G,type:"password",value:f})]}),t(S,{"data-testid":"ud-set-password",disabled:m||f==="",onClick:J,size:"sm",type:"button",variant:"outline",children:a("Set password")})]}),n("div",{className:"flex flex-wrap gap-2",children:[t(S,{"data-testid":"ud-impersonate",disabled:m,onClick:we,size:"sm",type:"button",variant:"outline",children:a("Impersonate")}),t(S,{"data-testid":"ud-revoke-all",disabled:m,onClick:K,size:"sm",type:"button",variant:"outline",children:a("Revoke all sessions")}),F?n(Ye,{children:[t(S,{"data-testid":"ud-delete-confirm",disabled:m,onClick:Te,size:"sm",type:"button",variant:"destructive",children:a("Confirm delete")}),t(S,{"data-testid":"ud-delete-cancel",onClick:Ce,size:"sm",type:"button",variant:"ghost",children:a("Cancel")})]}):t(S,{"data-testid":"ud-delete",disabled:m,onClick:W,size:"sm",type:"button",variant:"destructive",children:a("Delete user")})]}),C!==null&&n("div",{className:"flex flex-col gap-1","data-testid":"ud-impersonation",children:[t(V,{htmlFor:"ud-token",children:a("Impersonation token")}),t(j,{"data-testid":"ud-token",id:"ud-token",readOnly:!0,value:C})]})]})]}),t(rt,{busy:m,runAction:R,userId:l.id,version:I}),u.accounts&&t(it,{busy:m,runAction:R,userId:l.id,version:I}),(u.twoFactor||u.passkey)&&t(nt,{busy:m,capabilities:u,runAction:R,userId:l.id,version:I}),n("div",{className:"flex flex-col gap-1","data-testid":"ud-fields",children:[t("h3",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a("Fields")}),t("dl",{className:"flex flex-col",children:Z.map(([N,D])=>n("div",{className:"flex flex-col border-t border-border py-1.5",children:[t("dt",{className:"text-xs font-semibold text-muted-foreground",children:N}),t("dd",{className:"m-0 font-mono text-xs break-words",children:ct(N,D)})]},N))})]})]})},mt=50,Rt=({pageSize:u=mt}={})=>{const e=ge(),s=ke(),[l,c]=$(""),[a,o]=$(""),r=Ze(l),[i,m]=$(null),[k,I]=$(!1),{capabilities:x}=et(),w=r.trim(),y=a.trim(),A=Ke(["lunora-auth-users",w,y,u],()=>e.listAuthUsers({filterField:y===""?void 0:"role",filterValue:y===""?void 0:y,limit:u,search:w===""?void 0:w}),{keepPreviousData:!0}),h=A.data?.rows??null,g=A.error,v=()=>{A.refetch()};We(()=>{A.refetch()},!0);const f=i===null?null:h?.find(d=>d.id===i)??null;return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-users",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[t(j,{"aria-label":s("Search users"),className:"w-56","data-testid":"us-search",onChange:d=>{c(d.target.value)},placeholder:s("Search by email or name…"),value:l}),t(j,{"aria-label":s("Filter by role"),className:"w-40","data-testid":"us-role-filter",onChange:d=>{o(d.target.value)},placeholder:s("Filter by role"),value:a}),t(S,{"data-testid":"us-new",onClick:()=>{I(!0)},size:"sm",type:"button",children:s("New user")})]}),g!==null&&t("p",{className:"text-sm text-destructive","data-testid":"us-users-error",role:"alert",children:g}),h!==null&&h.length===0&&t(Je,{description:s("Users who sign up to your app will appear here."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M16 20v-2a4 4 0 0 0-4-4H7a4 4 0 0 0-4 4v2M9.5 10a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7Zm11.5 10v-2a4 4 0 0 0-3-3.85"})}),testId:"us-empty",title:s("No users.")}),h!==null&&h.length>0&&t($e,{className:"overflow-hidden py-0",children:t(Fe,{className:"px-0",children:n(Ue,{"data-testid":"us-table",children:[t(Pe,{children:n(L,{children:[t(z,{children:s("id")}),t(z,{children:s("email")}),t(z,{children:s("name")}),t(z,{children:s("role")}),t(z,{children:s("status")}),t(z,{children:s("verified")}),t(z,{children:s("created")}),t(z,{"aria-label":s("Actions")})]})}),t(Re,{children:h.map(d=>n(L,{"data-testid":`us-row-${d.id}`,children:[t(U,{className:"font-mono text-xs",children:d.id}),t(U,{children:d.email??""}),t(U,{children:d.name??""}),t(U,{children:typeof d.role=="string"&&d.role!==""?t(M,{variant:"secondary",children:d.role}):""}),t(U,{children:d.banned===!0?t(M,{variant:"destructive",children:s("Banned")}):t(M,{variant:"success",children:s("Active")})}),t(U,{children:d.emailVerified===!0?t(M,{variant:"success",children:s("yes")}):t(M,{variant:"outline",children:s("no")})}),t(U,{className:"text-muted-foreground tabular-nums",children:Ie(d.createdAt)}),t(U,{children:t(S,{"data-testid":`us-manage-${d.id}`,onClick:()=>{m(d.id)},size:"xs",type:"button",variant:"ghost",children:s("Manage")})})]},d.id))})]})})}),f!==null&&t(ut,{capabilities:x,onChanged:v,onClose:()=>{m(null)},user:f}),k&&t(st,{onClose:()=>{I(!1)},onCreated:v})]})};export{Rt as UsersPanel};
1
+ import{useLunora as ge}from"@lunora/react";import{useState as $,useEffect as Ve}from"react";import{g as M}from"../packem_shared/badge-BbuuAio7.js";import{u as S}from"../packem_shared/button-BkCrNcAs.js";import{c as $e,u as Fe}from"../packem_shared/card-CIDGUN6K.js";import{E as Je}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as j}from"../packem_shared/input-JHu63lTv.js";import{n as Ue,d as Pe,m as L,p as z,f as Re,u as U}from"../packem_shared/table-DdJBrClo.js";import{O as Ke}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{c as Ne}from"react/compiler-runtime";import{u as Oe}from"../packem_shared/use-auth-config-0EnNCdLu.js";import{useAutoRefresh as We}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import Ze from"../packem_shared/useDebounced-CU-uftxO.js";import{useT as ke}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{i as Ie,h as Ae,f as _e,b as Ee}from"../packem_shared/internal-zkEvTqy8.js";import{f as Qe}from"../packem_shared/checkbox-StT4Gob6.js";import{p as V}from"../packem_shared/label-6uP1obNF.js";import{M as Ge}from"../packem_shared/modal-shell-CUwwWC2o.js";import{u as Xe}from"../packem_shared/use-async-submit-BFIMhRqh.js";import{jsx as t,jsxs as n,Fragment as Ye}from"react/jsx-runtime";const et=()=>{const u=Ne(3),{config:e,ready:s}=Oe();let l;return u[0]!==e.capabilities||u[1]!==s?(l={capabilities:e.capabilities,ready:s},u[0]=e.capabilities,u[1]=s,u[2]=l):l=u[2],l},tt={boolean:"checkbox",date:"datetime-local",number:"number",string:"text"},at=(u,e)=>u.type==="boolean"?!0:typeof e!="string"||e.trim()===""?!1:u.type!=="number"||!Number.isNaN(Number(e.trim())),lt=(u,e)=>{if(u.type==="boolean")return e===!0?{value:!0}:u.required?{value:!1}:void 0;const s=typeof e=="string"?e.trim():"";if(s!==""){if(u.type==="number"){const l=Number(s);return Number.isNaN(l)?void 0:{value:l}}return{value:s}}},st=u=>{const e=Ne(105),{onClose:s,onCreated:l}=u,c=ge(),a=ke(),{config:o}=Oe(),{busy:r,error:i,run:m}=Xe(),[k,I]=$(""),[x,w]=$(""),[y,A]=$(""),[h,g]=$("");let v;e[0]===Symbol.for("react.memo_cache_sentinel")?(v={},e[0]=v):v=e[0];const[f,d]=$(v);let C;e[1]===Symbol.for("react.memo_cache_sentinel")?(C=p=>{I(p.target.value)},e[1]=C):C=e[1];const b=C;let F;e[2]===Symbol.for("react.memo_cache_sentinel")?(F=p=>{w(p.target.value)},e[2]=F):F=e[2];const T=F;let R;e[3]===Symbol.for("react.memo_cache_sentinel")?(R=p=>{A(p.target.value)},e[3]=R):R=e[3];const De=R;let O;e[4]===Symbol.for("react.memo_cache_sentinel")?(O=p=>{g(p.target.value)},e[4]=O):O=e[4];const je=O;let G;e[5]===Symbol.for("react.memo_cache_sentinel")?(G=(p,P)=>{d(q=>({...q,[p]:P}))},e[5]=G):G=e[5];const Se=G;let H;e[6]!==f?(H=p=>f[p.name]??(p.type==="boolean"?!1:""),e[6]=f,e[7]=H):H=e[7];const _=H;let J;if(e[8]!==o.userFields||e[9]!==_){let p;e[11]!==_?(p=P=>!P.required||at(P,_(P)),e[11]=_,e[12]=p):p=e[12],J=o.userFields.every(p),e[8]=o.userFields,e[9]=_,e[10]=J}else J=e[10];const we=J;let K;e[13]!==r||e[14]!==k||e[15]!==x||e[16]!==we?(K=!r&&k.trim()!==""&&x.trim()!==""&&we,e[13]=r,e[14]=k,e[15]=x,e[16]=we,e[17]=K):K=e[17];const Te=K;let W;e[18]!==o.userFields||e[19]!==_?(W=()=>{const p={};for(const P of o.userFields){const q=lt(P,_(P));q!==void 0&&(p[P.name]=q.value)}return Object.keys(p).length===0?void 0:p},e[18]=o.userFields,e[19]=_,e[20]=W):W=e[20];const Ce=W;let Z;e[21]!==Ce||e[22]!==c||e[23]!==k||e[24]!==x||e[25]!==s||e[26]!==l||e[27]!==y||e[28]!==h||e[29]!==m?(Z=()=>{m(async()=>{await c.createAuthUser({data:Ce(),email:k.trim(),name:x.trim(),password:y===""?void 0:y,role:h.trim()===""?void 0:h.trim()}),l(),s()})},e[21]=Ce,e[22]=c,e[23]=k,e[24]=x,e[25]=s,e[26]=l,e[27]=y,e[28]=h,e[29]=m,e[30]=Z):Z=e[30];const N=Z;let D;e[31]!==a?(D=a("Create user"),e[31]=a,e[32]=D):D=e[32];let B;e[33]!==a?(B=a("Create user"),e[33]=a,e[34]=B):B=e[34];let E;e[35]!==B?(E=t("h2",{className:"text-sm font-semibold text-foreground",children:B}),e[35]=B,e[36]=E):E=e[36];let Q;e[37]!==a?(Q=a("email"),e[37]=a,e[38]=Q):Q=e[38];let X;e[39]!==Q?(X=t(V,{htmlFor:"uc-email",children:Q}),e[39]=Q,e[40]=X):X=e[40];let Y;e[41]!==k?(Y=t(j,{"data-testid":"uc-email",id:"uc-email",onChange:b,type:"email",value:k}),e[41]=k,e[42]=Y):Y=e[42];let ee;e[43]!==X||e[44]!==Y?(ee=n("div",{className:"flex flex-col gap-1",children:[X,Y]}),e[43]=X,e[44]=Y,e[45]=ee):ee=e[45];let te;e[46]!==a?(te=a("name"),e[46]=a,e[47]=te):te=e[47];let ae;e[48]!==te?(ae=t(V,{htmlFor:"uc-name",children:te}),e[48]=te,e[49]=ae):ae=e[49];let le;e[50]!==x?(le=t(j,{"data-testid":"uc-name",id:"uc-name",onChange:T,value:x}),e[50]=x,e[51]=le):le=e[51];let se;e[52]!==ae||e[53]!==le?(se=n("div",{className:"flex flex-col gap-1",children:[ae,le]}),e[52]=ae,e[53]=le,e[54]=se):se=e[54];let re;e[55]!==a?(re=a("Password (optional)"),e[55]=a,e[56]=re):re=e[56];let ie;e[57]!==re?(ie=t(V,{htmlFor:"uc-password",children:re}),e[57]=re,e[58]=ie):ie=e[58];let ne;e[59]!==y?(ne=t(j,{"data-testid":"uc-password",id:"uc-password",onChange:De,type:"password",value:y}),e[59]=y,e[60]=ne):ne=e[60];let de;e[61]!==ie||e[62]!==ne?(de=n("div",{className:"flex flex-col gap-1",children:[ie,ne]}),e[61]=ie,e[62]=ne,e[63]=de):de=e[63];let oe;e[64]!==a?(oe=a("Role (optional)"),e[64]=a,e[65]=oe):oe=e[65];let ce;e[66]!==oe?(ce=t(V,{htmlFor:"uc-role",children:oe}),e[66]=oe,e[67]=ce):ce=e[67];let ue;e[68]!==h?(ue=t(j,{"data-testid":"uc-role",id:"uc-role",onChange:je,value:h}),e[68]=h,e[69]=ue):ue=e[69];let me;e[70]!==ce||e[71]!==ue?(me=n("div",{className:"flex flex-col gap-1",children:[ce,ue]}),e[70]=ce,e[71]=ue,e[72]=me):me=e[72];let he;e[73]!==o.userFields||e[74]!==_||e[75]!==a?(he=o.userFields.length>0&&n("div",{className:"flex flex-col gap-3 border-t border-border pt-3","data-testid":"uc-plugin-fields",children:[t("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a("Plugin fields")}),o.userFields.map(p=>{const P=`uc-field-${p.name}`,q=p.required?"":` (${a("optional")})`;if(p.type==="boolean"){const Me=_(p)===!0;return n("label",{className:"flex items-center gap-2",htmlFor:P,children:[t(Qe,{checked:Me,"data-testid":P,id:P,onCheckedChange:He=>{Se(p.name,He)}}),n("span",{className:"text-sm",children:[p.name,q]})]},p.name)}const qe=_(p);return n("div",{className:"flex flex-col gap-1",children:[n(V,{htmlFor:P,children:[p.name,q]}),t(j,{"data-testid":P,id:P,onChange:Me=>{Se(p.name,Me.target.value)},type:tt[p.type],value:typeof qe=="string"?qe:""})]},p.name)})]}),e[73]=o.userFields,e[74]=_,e[75]=a,e[76]=he):he=e[76];let pe;e[77]!==i?(pe=i!==null&&t("p",{className:"text-sm text-destructive","data-testid":"uc-error",role:"alert",children:i}),e[77]=i,e[78]=pe):pe=e[78];let fe;e[79]!==a?(fe=a("Cancel"),e[79]=a,e[80]=fe):fe=e[80];let ve;e[81]!==s||e[82]!==fe?(ve=t(S,{"data-testid":"uc-cancel",onClick:s,size:"sm",type:"button",variant:"outline",children:fe}),e[81]=s,e[82]=fe,e[83]=ve):ve=e[83];const Be=!Te;let be;e[84]!==r||e[85]!==a?(be=a(r?"Creating…":"Create"),e[84]=r,e[85]=a,e[86]=be):be=e[86];let xe;e[87]!==N||e[88]!==Be||e[89]!==be?(xe=t(S,{"data-testid":"uc-submit",disabled:Be,onClick:N,size:"sm",type:"button",children:be}),e[87]=N,e[88]=Be,e[89]=be,e[90]=xe):xe=e[90];let ye;e[91]!==ve||e[92]!==xe?(ye=n("div",{className:"flex justify-end gap-2 pt-1",children:[ve,xe]}),e[91]=ve,e[92]=xe,e[93]=ye):ye=e[93];let ze;return e[94]!==s||e[95]!==D||e[96]!==E||e[97]!==ee||e[98]!==se||e[99]!==de||e[100]!==me||e[101]!==he||e[102]!==pe||e[103]!==ye?(ze=n(Ge,{label:D,onClose:s,panelTestId:"uc-dialog",testId:"uc-overlay",variant:"dialog",children:[E,ee,se,de,me,he,pe,ye]}),e[94]=s,e[95]=D,e[96]=E,e[97]=ee,e[98]=se,e[99]=de,e[100]=me,e[101]=he,e[102]=pe,e[103]=ye,e[104]=ze):ze=e[104],ze},Le=u=>{const e=Ne(2),{children:s}=u;let l;return e[0]!==s?(l=t("h3",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:s}),e[0]=s,e[1]=l):l=e[1],l},rt=u=>{const e=Ne(29),{busy:s,runAction:l,userId:c,version:a}=u,o=ge(),r=ke(),[i,m]=$(null),[k,I]=$(null);let x;e[0]!==o||e[1]!==c?(x=()=>{_e((async()=>{I(null);try{const b=await o.listAuthSessions({limit:50,userId:c});m(b.rows)}catch(b){const F=b;m(null),I(Ee(F))}})())},e[0]=o,e[1]=c,e[2]=x):x=e[2];let w;e[3]!==o||e[4]!==c||e[5]!==a?(w=[o,c,a],e[3]=o,e[4]=c,e[5]=a,e[6]=w):w=e[6],Ve(x,w);let y;e[7]!==o||e[8]!==l?(y=b=>{l(()=>o.revokeAuthSession({sessionId:b}))},e[7]=o,e[8]=l,e[9]=y):y=e[9];const A=y;let h;e[10]!==r?(h=r("Sessions"),e[10]=r,e[11]=h):h=e[11];let g;e[12]!==h?(g=t(Le,{children:h}),e[12]=h,e[13]=g):g=e[13];let v;e[14]!==k?(v=k!==null&&t("p",{className:"text-sm text-destructive","data-testid":"ud-sessions-error",role:"alert",children:k}),e[14]=k,e[15]=v):v=e[15];let f;e[16]!==i||e[17]!==r?(f=i!==null&&i.length===0&&t("p",{className:"text-sm text-muted-foreground","data-testid":"ud-sessions-empty",children:r("No active sessions.")}),e[16]=i,e[17]=r,e[18]=f):f=e[18];let d;e[19]!==s||e[20]!==A||e[21]!==i||e[22]!==r?(d=i!==null&&i.length>0&&t($e,{className:"overflow-hidden py-0",children:t(Fe,{className:"px-0",children:n(Ue,{"data-testid":"ud-sessions-table",children:[t(Pe,{children:n(L,{children:[t(z,{children:r("expires")}),t(z,{children:r("ip")}),t(z,{children:r("user agent")}),t(z,{"aria-label":r("Actions")})]})}),t(Re,{children:i.map(b=>n(L,{"data-testid":`ud-session-${b.id}`,children:[t(U,{className:"text-muted-foreground tabular-nums",children:Ie(b.expiresAt)}),t(U,{children:b.ipAddress??""}),t(U,{className:"max-w-40 truncate",children:b.userAgent??""}),t(U,{children:t(S,{"data-testid":`ud-revoke-${b.id}`,disabled:s,onClick:()=>{A(b.id)},size:"xs",type:"button",variant:"ghost",children:r("Revoke")})})]},b.id))})]})})}),e[19]=s,e[20]=A,e[21]=i,e[22]=r,e[23]=d):d=e[23];let C;return e[24]!==g||e[25]!==v||e[26]!==f||e[27]!==d?(C=n("div",{className:"flex flex-col gap-2","data-testid":"ud-sessions",children:[g,v,f,d]}),e[24]=g,e[25]=v,e[26]=f,e[27]=d,e[28]=C):C=e[28],C},it=u=>{const e=Ne(30),{busy:s,runAction:l,userId:c,version:a}=u,o=ge(),r=ke(),[i,m]=$(null),[k,I]=$(null);let x;e[0]!==o||e[1]!==c?(x=()=>{_e((async()=>{I(null);try{m(await o.listAuthAccounts({userId:c}))}catch(b){const F=b;m(null),I(Ee(F))}})())},e[0]=o,e[1]=c,e[2]=x):x=e[2];let w;e[3]!==o||e[4]!==c||e[5]!==a?(w=[o,c,a],e[3]=o,e[4]=c,e[5]=a,e[6]=w):w=e[6],Ve(x,w);let y;e[7]!==o||e[8]!==l||e[9]!==c?(y=b=>{l(()=>o.unlinkAuthAccount({accountId:b,userId:c}))},e[7]=o,e[8]=l,e[9]=c,e[10]=y):y=e[10];const A=y;let h;e[11]!==r?(h=r("Linked accounts"),e[11]=r,e[12]=h):h=e[12];let g;e[13]!==h?(g=t(Le,{children:h}),e[13]=h,e[14]=g):g=e[14];let v;e[15]!==k?(v=k!==null&&t("p",{className:"text-sm text-destructive",role:"alert",children:k}),e[15]=k,e[16]=v):v=e[16];let f;e[17]!==i||e[18]!==r?(f=i!==null&&i.length===0&&t("p",{className:"text-sm text-muted-foreground",children:r("No linked accounts.")}),e[17]=i,e[18]=r,e[19]=f):f=e[19];let d;e[20]!==i||e[21]!==s||e[22]!==A||e[23]!==r?(d=i!==null&&i.length>0&&t($e,{className:"overflow-hidden py-0",children:t(Fe,{className:"px-0",children:n(Ue,{"data-testid":"ud-accounts-table",children:[t(Pe,{children:n(L,{children:[t(z,{children:r("provider")}),t(z,{children:r("created")}),t(z,{"aria-label":r("Actions")})]})}),t(Re,{children:i.map(b=>{const F=Ae(b.id);return n(L,{"data-testid":`ud-account-${F}`,children:[t(U,{children:Ae(b.providerId)}),t(U,{className:"text-muted-foreground tabular-nums",children:Ie(b.createdAt)}),t(U,{children:t(S,{"data-testid":`ud-unlink-${F}`,disabled:s,onClick:()=>{A(F)},size:"xs",type:"button",variant:"ghost",children:r("Unlink")})})]},F)})})]})})}),e[20]=i,e[21]=s,e[22]=A,e[23]=r,e[24]=d):d=e[24];let C;return e[25]!==g||e[26]!==v||e[27]!==f||e[28]!==d?(C=n("div",{className:"flex flex-col gap-2","data-testid":"ud-accounts",children:[g,v,f,d]}),e[25]=g,e[26]=v,e[27]=f,e[28]=d,e[29]=C):C=e[29],C},nt=u=>{const e=Ne(40),{busy:s,capabilities:l,runAction:c,userId:a,version:o}=u,r=ge(),i=ke(),[m,k]=$(null);let I;e[0]!==l.passkey||e[1]!==r||e[2]!==a?(I=()=>{l.passkey&&_e((async()=>{try{k(await r.listAuthPasskeys({userId:a}))}catch{k(null)}})())},e[0]=l.passkey,e[1]=r,e[2]=a,e[3]=I):I=e[3];let x;e[4]!==l.passkey||e[5]!==r||e[6]!==a||e[7]!==o?(x=[l.passkey,r,a,o],e[4]=l.passkey,e[5]=r,e[6]=a,e[7]=o,e[8]=x):x=e[8],Ve(I,x);let w;e[9]!==r||e[10]!==c||e[11]!==a?(w=()=>{c(()=>r.disableAuthTwoFactor({userId:a}))},e[9]=r,e[10]=c,e[11]=a,e[12]=w):w=e[12];const y=w;let A;e[13]!==r||e[14]!==c?(A=F=>{c(()=>r.deleteAuthPasskey({passkeyId:F}))},e[13]=r,e[14]=c,e[15]=A):A=e[15];const h=A;let g;e[16]!==i?(g=i("Security"),e[16]=i,e[17]=g):g=e[17];let v;e[18]!==g?(v=t(Le,{children:g}),e[18]=g,e[19]=v):v=e[19];let f;e[20]!==s||e[21]!==l.twoFactor||e[22]!==y||e[23]!==i?(f=l.twoFactor&&t(S,{"data-testid":"ud-disable-2fa",disabled:s,onClick:y,size:"sm",type:"button",variant:"outline",children:i("Disable two-factor")}),e[20]=s,e[21]=l.twoFactor,e[22]=y,e[23]=i,e[24]=f):f=e[24];let d;e[25]!==l.passkey||e[26]!==m||e[27]!==i?(d=l.passkey&&m!==null&&m.length===0&&t("p",{className:"text-sm text-muted-foreground",children:i("No passkeys.")}),e[25]=l.passkey,e[26]=m,e[27]=i,e[28]=d):d=e[28];let C;e[29]!==s||e[30]!==l.passkey||e[31]!==h||e[32]!==m||e[33]!==i?(C=l.passkey&&m!==null&&m.length>0&&t($e,{className:"overflow-hidden py-0",children:t(Fe,{className:"px-0",children:n(Ue,{"data-testid":"ud-passkeys-table",children:[t(Pe,{children:n(L,{children:[t(z,{children:i("name")}),t(z,{children:i("created")}),t(z,{"aria-label":i("Actions")})]})}),t(Re,{children:m.map(F=>{const T=Ae(F.id);return n(L,{"data-testid":`ud-passkey-${T}`,children:[t(U,{children:Ae(F.name)||T}),t(U,{className:"text-muted-foreground tabular-nums",children:Ie(F.createdAt)}),t(U,{children:t(S,{"data-testid":`ud-delete-passkey-${T}`,disabled:s,onClick:()=>{h(T)},size:"xs",type:"button",variant:"ghost",children:i("Delete")})})]},T)})})]})})}),e[29]=s,e[30]=l.passkey,e[31]=h,e[32]=m,e[33]=i,e[34]=C):C=e[34];let b;return e[35]!==v||e[36]!==f||e[37]!==d||e[38]!==C?(b=n("div",{className:"flex flex-col gap-2","data-testid":"ud-security",children:[v,f,d,C]}),e[35]=v,e[36]=f,e[37]=d,e[38]=C,e[39]=b):b=e[39],b},dt=/(?:at|expires)$/iu,ot=new Set(["banExpires","banned","banReason","email","emailVerified","id","name","role"]),ct=(u,e)=>typeof e=="number"&&dt.test(u)?Ie(e):Ae(e),ut=({capabilities:u,onChanged:e,onClose:s,user:l})=>{const c=ge(),a=ke(),o=l.banned===!0,[r,i]=$(null),[m,k]=$(!1),[I,x]=$(0),[w,y]=$(typeof l.role=="string"?l.role:""),[A,h]=$(""),[g,v]=$(""),[f,d]=$(""),[C,b]=$(null),[F,T]=$(!1),R=(N,D)=>{_e((async()=>{k(!0),i(null);try{const B=await N();D?.refresh!==!1&&(x(E=>E+1),e()),D?.onResult?.(B)}catch(B){i(Ee(B))}k(!1)})())},De=N=>{y(N.target.value)},O=N=>{h(N.target.value)},je=N=>{v(N.target.value)},G=N=>{d(N.target.value)},Se=()=>{const N=w.trim();N!==""&&R(async()=>{await c.setAuthUserRole({role:N,userId:l.id})})},H=()=>{const N=Number.parseInt(g,10),D=Number.isFinite(N)&&N>0?N*86400:void 0;R(async()=>{await c.banAuthUser({expiresInSeconds:D,reason:A.trim()===""?void 0:A.trim(),userId:l.id})})},_=()=>{R(async()=>{await c.unbanAuthUser({userId:l.id})})},J=()=>{R(async()=>{await c.setAuthUserPassword({newPassword:f,userId:l.id}),d("")})},we=()=>{R(()=>c.impersonateAuthUser({userId:l.id}),{onResult:N=>{b(N.token)},refresh:!1})},K=()=>{R(async()=>{await c.revokeAuthUserSessions({userId:l.id})})},Te=()=>{R(async()=>{await c.removeAuthUser({userId:l.id}),s()})},W=()=>{T(!0)},Ce=()=>{T(!1)},Z=Object.entries(l).filter(([N])=>!ot.has(N));return n(Ge,{label:a("User details"),onClose:s,panelTestId:"ud-panel",testId:"ud-overlay",variant:"drawer",children:[n("div",{className:"flex items-start justify-between gap-2",children:[n("div",{className:"flex flex-col gap-1",children:[t("h2",{className:"text-sm font-semibold text-foreground",children:l.name??l.email??l.id}),t("p",{className:"font-mono text-xs text-muted-foreground",children:l.id}),n("div",{className:"flex flex-wrap items-center gap-1.5 pt-1",children:[typeof l.role=="string"&&l.role!==""&&t(M,{variant:"secondary",children:l.role}),o?t(M,{variant:"destructive",children:a("Banned")}):t(M,{variant:"outline",children:a("Active")}),l.emailVerified===!0?t(M,{variant:"secondary",children:a("verified")}):t(M,{variant:"outline",children:a("unverified")})]})]}),t(S,{"data-testid":"ud-close",onClick:s,size:"sm",type:"button",variant:"ghost",children:a("Close")})]}),r!==null&&t("p",{className:"text-sm text-destructive","data-testid":"ud-action-error",role:"alert",children:r}),u.admin&&n($e,{className:"gap-0 py-0",children:[t("header",{className:"border-b border-border px-4 py-3",children:t("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a("Actions")})}),n(Fe,{className:"flex flex-col gap-3 p-3",children:[n("div",{className:"flex items-end gap-2",children:[n("div",{className:"flex flex-1 flex-col gap-1",children:[t(V,{htmlFor:"ud-role",children:a("Role")}),t(j,{"data-testid":"ud-role-input",id:"ud-role",onChange:De,value:w})]}),t(S,{"data-testid":"ud-set-role",disabled:m||w.trim()==="",onClick:Se,size:"sm",type:"button",variant:"outline",children:a("Set role")})]}),o?t(S,{"data-testid":"ud-unban",disabled:m,onClick:_,size:"sm",type:"button",variant:"outline",children:a("Unban")}):n("div",{className:"flex items-end gap-2",children:[n("div",{className:"flex flex-1 flex-col gap-1",children:[t(V,{htmlFor:"ud-ban-reason",children:a("Ban reason (optional)")}),t(j,{"data-testid":"ud-ban-reason",id:"ud-ban-reason",onChange:O,value:A})]}),n("div",{className:"flex w-24 flex-col gap-1",children:[t(V,{htmlFor:"ud-ban-days",children:a("Days")}),t(j,{"data-testid":"ud-ban-days",id:"ud-ban-days",onChange:je,type:"number",value:g})]}),t(S,{"data-testid":"ud-ban",disabled:m,onClick:H,size:"sm",type:"button",variant:"destructive",children:a("Ban user")})]}),n("div",{className:"flex items-end gap-2",children:[n("div",{className:"flex flex-1 flex-col gap-1",children:[t(V,{htmlFor:"ud-password",children:a("New password")}),t(j,{"data-testid":"ud-password",id:"ud-password",onChange:G,type:"password",value:f})]}),t(S,{"data-testid":"ud-set-password",disabled:m||f==="",onClick:J,size:"sm",type:"button",variant:"outline",children:a("Set password")})]}),n("div",{className:"flex flex-wrap gap-2",children:[t(S,{"data-testid":"ud-impersonate",disabled:m,onClick:we,size:"sm",type:"button",variant:"outline",children:a("Impersonate")}),t(S,{"data-testid":"ud-revoke-all",disabled:m,onClick:K,size:"sm",type:"button",variant:"outline",children:a("Revoke all sessions")}),F?n(Ye,{children:[t(S,{"data-testid":"ud-delete-confirm",disabled:m,onClick:Te,size:"sm",type:"button",variant:"destructive",children:a("Confirm delete")}),t(S,{"data-testid":"ud-delete-cancel",onClick:Ce,size:"sm",type:"button",variant:"ghost",children:a("Cancel")})]}):t(S,{"data-testid":"ud-delete",disabled:m,onClick:W,size:"sm",type:"button",variant:"destructive",children:a("Delete user")})]}),C!==null&&n("div",{className:"flex flex-col gap-1","data-testid":"ud-impersonation",children:[t(V,{htmlFor:"ud-token",children:a("Impersonation token")}),t(j,{"data-testid":"ud-token",id:"ud-token",readOnly:!0,value:C})]})]})]}),t(rt,{busy:m,runAction:R,userId:l.id,version:I}),u.accounts&&t(it,{busy:m,runAction:R,userId:l.id,version:I}),(u.twoFactor||u.passkey)&&t(nt,{busy:m,capabilities:u,runAction:R,userId:l.id,version:I}),n("div",{className:"flex flex-col gap-1","data-testid":"ud-fields",children:[t("h3",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a("Fields")}),t("dl",{className:"flex flex-col",children:Z.map(([N,D])=>n("div",{className:"flex flex-col border-t border-border py-1.5",children:[t("dt",{className:"text-xs font-semibold text-muted-foreground",children:N}),t("dd",{className:"m-0 font-mono text-xs break-words",children:ct(N,D)})]},N))})]})]})},mt=50,Rt=({pageSize:u=mt}={})=>{const e=ge(),s=ke(),[l,c]=$(""),[a,o]=$(""),r=Ze(l),[i,m]=$(null),[k,I]=$(!1),{capabilities:x}=et(),w=r.trim(),y=a.trim(),A=Ke(["lunora-auth-users",w,y,u],()=>e.listAuthUsers({filterField:y===""?void 0:"role",filterValue:y===""?void 0:y,limit:u,search:w===""?void 0:w}),{keepPreviousData:!0}),h=A.data?.rows??null,g=A.error,v=()=>{A.refetch()};We(()=>{A.refetch()},!0);const f=i===null?null:h?.find(d=>d.id===i)??null;return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-users",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[t(j,{"aria-label":s("Search users"),className:"w-56","data-testid":"us-search",onChange:d=>{c(d.target.value)},placeholder:s("Search by email or name…"),value:l}),t(j,{"aria-label":s("Filter by role"),className:"w-40","data-testid":"us-role-filter",onChange:d=>{o(d.target.value)},placeholder:s("Filter by role"),value:a}),t(S,{"data-testid":"us-new",onClick:()=>{I(!0)},size:"sm",type:"button",children:s("New user")})]}),g!==null&&t("p",{className:"text-sm text-destructive","data-testid":"us-users-error",role:"alert",children:g}),h!==null&&h.length===0&&t(Je,{description:s("Users who sign up to your app will appear here."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M16 20v-2a4 4 0 0 0-4-4H7a4 4 0 0 0-4 4v2M9.5 10a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7Zm11.5 10v-2a4 4 0 0 0-3-3.85"})}),testId:"us-empty",title:s("No users.")}),h!==null&&h.length>0&&t($e,{className:"overflow-hidden py-0",children:t(Fe,{className:"px-0",children:n(Ue,{"data-testid":"us-table",children:[t(Pe,{children:n(L,{children:[t(z,{children:s("id")}),t(z,{children:s("email")}),t(z,{children:s("name")}),t(z,{children:s("role")}),t(z,{children:s("status")}),t(z,{children:s("verified")}),t(z,{children:s("created")}),t(z,{"aria-label":s("Actions")})]})}),t(Re,{children:h.map(d=>n(L,{"data-testid":`us-row-${d.id}`,children:[t(U,{className:"font-mono text-xs",children:d.id}),t(U,{children:d.email??""}),t(U,{children:d.name??""}),t(U,{children:typeof d.role=="string"&&d.role!==""?t(M,{variant:"secondary",children:d.role}):""}),t(U,{children:d.banned===!0?t(M,{variant:"destructive",children:s("Banned")}):t(M,{variant:"success",children:s("Active")})}),t(U,{children:d.emailVerified===!0?t(M,{variant:"success",children:s("yes")}):t(M,{variant:"outline",children:s("no")})}),t(U,{className:"text-muted-foreground tabular-nums",children:Ie(d.createdAt)}),t(U,{children:t(S,{"data-testid":`us-manage-${d.id}`,onClick:()=>{m(d.id)},size:"xs",type:"button",variant:"ghost",children:s("Manage")})})]},d.id))})]})})}),f!==null&&t(ut,{capabilities:x,onChanged:v,onClose:()=>{m(null)},user:f}),k&&t(st,{onClose:()=>{I(!1)},onCreated:v})]})};export{Rt as UsersPanel};
@@ -1 +1 @@
1
- import{c as A}from"react/compiler-runtime";import{useLunora as H}from"@lunora/react";import{useState as h,useEffect as Q}from"react";import{u as R}from"../packem_shared/button-BkCrNcAs.js";import{c as V,u as j}from"../packem_shared/card-CIDGUN6K.js";import{E as W}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as D}from"../packem_shared/input-JHu63lTv.js";import{n as q,d as E,m as N,p as o,f as L,u as i}from"../packem_shared/table-DdJBrClo.js";import{useT as G}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{f as M,b as B,h as J}from"../packem_shared/internal-BSIsQVC6.js";import{jsxs as n,jsx as e}from"react/jsx-runtime";const O=10,g=x=>{const r=A(7),{label:m,value:a}=x;let l;r[0]!==m?(l=e("span",{className:"font-mono text-[11px] uppercase tracking-wide text-muted-foreground",children:m}),r[0]=m,r[1]=l):l=r[1];const f=a??"—";let c;r[2]!==f?(c=e("span",{className:"font-mono text-sm",children:f}),r[2]=f,r[3]=c):c=r[3];let u;return r[4]!==l||r[5]!==c?(u=n("div",{className:"flex flex-col gap-0.5",children:[l,c]}),r[4]=l,r[5]=c,r[6]=u):u=r[6],u},ce=({loadIndexes:x,runQuery:r}={})=>{const m=H(),a=G(),[l,f]=h(null),[c,u]=h(null),[v,C]=h(null),[b,F]=h(""),[p,y]=h(null),[k,w]=h(null),[I,S]=h(!1);Q(()=>{const t={cancelled:!1};return M((async()=>{try{const d=await(x??(()=>m.listVectorIndexes()))();t.cancelled||(f(d),u(null),C($=>$??d[0]?.name??null))}catch(d){t.cancelled||(f(null),u(B(d)))}})()),()=>{t.cancelled=!0}},[m,x]);const s=l?.find(t=>t.name===v)??null,K=t=>{C(t.currentTarget.dataset.index??null),y(null),w(null)},T=t=>{F(t.target.value)},Z=async()=>{const t=b.trim();if(!(v===null||t==="")){S(!0),w(null);try{const d=await(r??($=>m.queryVectorIndex($)))({name:v,text:t,topK:O});y(d)}catch(d){y(null),w(B(d))}S(!1)}},z=()=>{M(Z())};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-vector-browser",children:[c!==null&&e("p",{className:"text-sm text-destructive","data-testid":"vector-error",role:"alert",children:c}),l!==null&&l.length===0&&e(W,{description:a("Indexes declared with .vectorize() or defineVectorIndex() appear here."),icon:e("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:e("path",{d:"M4 7l8-4 8 4-8 4-8-4Zm0 5 8 4 8-4M4 17l8 4 8-4"})}),testId:"vector-empty",title:a("No vector indexes.")}),l!==null&&l.length>0&&e(V,{className:"overflow-hidden py-0",children:e(j,{className:"px-0",children:n(q,{"data-testid":"vector-table",children:[e(E,{children:n(N,{children:[e(o,{children:a("name")}),e(o,{children:a("table")}),e(o,{children:a("dimensions")}),e(o,{children:a("metric")}),e(o,{children:a("vectors")})]})}),e(L,{children:l.map(t=>n(N,{className:t.name===v?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-index":t.name,"data-testid":`vector-row-${t.name}`,onClick:K,children:[e(i,{className:"font-mono text-xs",children:t.name}),e(i,{className:"font-mono text-xs",children:t.table}),e(i,{className:"tabular-nums",children:t.dimensions??"—"}),e(i,{children:t.metric??"—"}),e(i,{className:"tabular-nums",children:t.vectorsCount??"—"})]},t.name))})]})})}),s!==null&&n("section",{className:"border border-border bg-card p-3","data-testid":"vector-detail",children:[n("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4",children:[e(g,{label:a("field"),value:s.field}),e(g,{label:a("dimensions"),value:s.dimensions}),e(g,{label:a("metric"),value:s.metric}),e(g,{label:a("vectors"),value:s.vectorsCount})]}),s.metadata!==void 0&&s.metadata.length>0&&n("p",{className:"mt-3 text-xs text-muted-foreground","data-testid":"vector-metadata",children:[a("metadata"),": ",e("span",{className:"font-mono",children:s.metadata.join(", ")})]}),n("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:[e(D,{className:"min-w-[18rem] flex-1","data-testid":"vector-query-input",onChange:T,placeholder:a("Search by similarity…"),value:b}),e(R,{"data-testid":"vector-search",disabled:I||b.trim()==="",onClick:z,children:a(I?"Searching…":"Search")})]}),k!==null&&e("p",{className:"mt-2 text-sm text-destructive","data-testid":"vector-query-error",role:"alert",children:k}),p!==null&&p.length===0&&e("p",{className:"mt-2 text-sm text-muted-foreground","data-testid":"vector-no-matches",children:a("No matches.")}),p!==null&&p.length>0&&e(V,{className:"mt-3 overflow-hidden py-0",children:e(j,{className:"px-0",children:n(q,{"data-testid":"vector-matches",children:[e(E,{children:n(N,{children:[e(o,{children:a("id")}),e(o,{children:a("score")}),e(o,{children:a("metadata")})]})}),e(L,{children:p.map(t=>n(N,{"data-testid":`vector-match-${t.id}`,children:[e(i,{className:"font-mono text-xs",children:t.id}),e(i,{className:"tabular-nums",children:t.score.toFixed(4)}),e(i,{className:"max-w-md truncate font-mono text-xs",children:t.metadata===void 0?"—":J(t.metadata)})]},t.id))})]})})})]})]})};export{ce as VectorBrowser};
1
+ import{c as A}from"react/compiler-runtime";import{useLunora as H}from"@lunora/react";import{useState as h,useEffect as Q}from"react";import{u as R}from"../packem_shared/button-BkCrNcAs.js";import{c as V,u as j}from"../packem_shared/card-CIDGUN6K.js";import{E as W}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as D}from"../packem_shared/input-JHu63lTv.js";import{n as q,d as E,m as N,p as o,f as L,u as i}from"../packem_shared/table-DdJBrClo.js";import{useT as G}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{f as M,b as B,h as J}from"../packem_shared/internal-zkEvTqy8.js";import{jsxs as n,jsx as e}from"react/jsx-runtime";const O=10,g=x=>{const r=A(7),{label:m,value:a}=x;let l;r[0]!==m?(l=e("span",{className:"font-mono text-[11px] uppercase tracking-wide text-muted-foreground",children:m}),r[0]=m,r[1]=l):l=r[1];const f=a??"—";let c;r[2]!==f?(c=e("span",{className:"font-mono text-sm",children:f}),r[2]=f,r[3]=c):c=r[3];let u;return r[4]!==l||r[5]!==c?(u=n("div",{className:"flex flex-col gap-0.5",children:[l,c]}),r[4]=l,r[5]=c,r[6]=u):u=r[6],u},ce=({loadIndexes:x,runQuery:r}={})=>{const m=H(),a=G(),[l,f]=h(null),[c,u]=h(null),[v,C]=h(null),[b,F]=h(""),[p,y]=h(null),[k,w]=h(null),[I,S]=h(!1);Q(()=>{const t={cancelled:!1};return M((async()=>{try{const d=await(x??(()=>m.listVectorIndexes()))();t.cancelled||(f(d),u(null),C($=>$??d[0]?.name??null))}catch(d){t.cancelled||(f(null),u(B(d)))}})()),()=>{t.cancelled=!0}},[m,x]);const s=l?.find(t=>t.name===v)??null,K=t=>{C(t.currentTarget.dataset.index??null),y(null),w(null)},T=t=>{F(t.target.value)},Z=async()=>{const t=b.trim();if(!(v===null||t==="")){S(!0),w(null);try{const d=await(r??($=>m.queryVectorIndex($)))({name:v,text:t,topK:O});y(d)}catch(d){y(null),w(B(d))}S(!1)}},z=()=>{M(Z())};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-vector-browser",children:[c!==null&&e("p",{className:"text-sm text-destructive","data-testid":"vector-error",role:"alert",children:c}),l!==null&&l.length===0&&e(W,{description:a("Indexes declared with .vectorize() or defineVectorIndex() appear here."),icon:e("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:e("path",{d:"M4 7l8-4 8 4-8 4-8-4Zm0 5 8 4 8-4M4 17l8 4 8-4"})}),testId:"vector-empty",title:a("No vector indexes.")}),l!==null&&l.length>0&&e(V,{className:"overflow-hidden py-0",children:e(j,{className:"px-0",children:n(q,{"data-testid":"vector-table",children:[e(E,{children:n(N,{children:[e(o,{children:a("name")}),e(o,{children:a("table")}),e(o,{children:a("dimensions")}),e(o,{children:a("metric")}),e(o,{children:a("vectors")})]})}),e(L,{children:l.map(t=>n(N,{className:t.name===v?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-index":t.name,"data-testid":`vector-row-${t.name}`,onClick:K,children:[e(i,{className:"font-mono text-xs",children:t.name}),e(i,{className:"font-mono text-xs",children:t.table}),e(i,{className:"tabular-nums",children:t.dimensions??"—"}),e(i,{children:t.metric??"—"}),e(i,{className:"tabular-nums",children:t.vectorsCount??"—"})]},t.name))})]})})}),s!==null&&n("section",{className:"border border-border bg-card p-3","data-testid":"vector-detail",children:[n("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4",children:[e(g,{label:a("field"),value:s.field}),e(g,{label:a("dimensions"),value:s.dimensions}),e(g,{label:a("metric"),value:s.metric}),e(g,{label:a("vectors"),value:s.vectorsCount})]}),s.metadata!==void 0&&s.metadata.length>0&&n("p",{className:"mt-3 text-xs text-muted-foreground","data-testid":"vector-metadata",children:[a("metadata"),": ",e("span",{className:"font-mono",children:s.metadata.join(", ")})]}),n("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:[e(D,{className:"min-w-[18rem] flex-1","data-testid":"vector-query-input",onChange:T,placeholder:a("Search by similarity…"),value:b}),e(R,{"data-testid":"vector-search",disabled:I||b.trim()==="",onClick:z,children:a(I?"Searching…":"Search")})]}),k!==null&&e("p",{className:"mt-2 text-sm text-destructive","data-testid":"vector-query-error",role:"alert",children:k}),p!==null&&p.length===0&&e("p",{className:"mt-2 text-sm text-muted-foreground","data-testid":"vector-no-matches",children:a("No matches.")}),p!==null&&p.length>0&&e(V,{className:"mt-3 overflow-hidden py-0",children:e(j,{className:"px-0",children:n(q,{"data-testid":"vector-matches",children:[e(E,{children:n(N,{children:[e(o,{children:a("id")}),e(o,{children:a("score")}),e(o,{children:a("metadata")})]})}),e(L,{children:p.map(t=>n(N,{"data-testid":`vector-match-${t.id}`,children:[e(i,{className:"font-mono text-xs",children:t.id}),e(i,{className:"tabular-nums",children:t.score.toFixed(4)}),e(i,{className:"max-w-md truncate font-mono text-xs",children:t.metadata===void 0?"—":J(t.metadata)})]},t.id))})]})})})]})]})};export{ce as VectorBrowser};
@@ -1 +1 @@
1
- import{useLunora as Q}from"@lunora/react";import{useState as m,useEffect as te}from"react";import{u as W}from"../packem_shared/button-BkCrNcAs.js";import{c as J,u as L}from"../packem_shared/card-CIDGUN6K.js";import{E as M}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as ae}from"../packem_shared/input-JHu63lTv.js";import{n as U,d as _,m as x,p as i,f as q,u as d}from"../packem_shared/table-DdJBrClo.js";import{l as re}from"../packem_shared/textarea-Bu2-jKAs.js";import{N as ne}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useT as V}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as B}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{f as A,b as E,d as H,g as X}from"../packem_shared/internal-BSIsQVC6.js";import{jsxs as s,jsx as e}from"react/jsx-runtime";const se=["queued","running","paused","waiting","complete","errored","terminated"],oe=["pause","resume","terminate"],le="WORKFLOWS_NOT_CONFIGURED",ie=o=>typeof o=="object"&&o!==null&&o.code===le,de=o=>{const r=o.error??o.output;if(r===void 0)return"—";try{return JSON.stringify(r)}catch{return"(unserializable)"}},ce=({loadDetail:o,loadInstances:r,readOnly:N,runAction:T,workflowName:g})=>{const I=Q(),n=V(),[h,k]=m(null),[S,$]=m(null),[v,j]=m(""),[b,f]=m(null),[F,C]=m(!1),[R,z]=m(null),p=o??(a=>I.getWorkflowInstance(a)),w=N?void 0:T??(r===void 0?a=>I.setWorkflowInstanceStatus(a):void 0),O=async()=>{f(null),C(!1);const a=v===""?void 0:v;try{if(r===void 0){const l=await I.listWorkflowInstances({name:g,status:a});if(l.configured===!1){k(null),C(!0);return}k(l.instances);return}k(await r({name:g,status:a}))}catch(l){k(null),ie(l)?C(!0):f(E(l))}};te(()=>{$(null),A(O())},[g,v]);const D=async a=>{f(null);try{$(await p({id:a,name:g}))}catch(l){f(E(l))}},K=async(a,l)=>{if(w!==void 0){z(a),f(null);try{await w({action:l,id:a,name:g}),await O()}catch(P){f(E(P))}z(null)}};return s("div",{className:"flex flex-col gap-3","data-testid":"lunora-workflow-instances",children:[s("div",{className:"flex items-center justify-between gap-2",children:[e("h3",{className:"text-sm font-medium",children:n("Instance history")}),s("select",{"aria-label":n("Filter by status"),className:"h-8 rounded-md border border-input bg-transparent px-2.5 py-1 text-xs outline-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50","data-testid":"workflow-instances-filter",onChange:a=>{j(a.target.value)},value:v,children:[e("option",{value:"",children:n("All statuses")}),se.map(a=>e("option",{value:a,children:a},a))]})]}),b!==null&&e("p",{className:"text-sm text-destructive","data-testid":"workflow-instances-error",role:"alert",children:b}),F&&e(M,{description:n("Set CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN in your .dev.vars to enable workflow instance history."),testId:"workflow-instances-unconfigured",title:n("Workflow inspection not configured")}),!F&&h!==null&&h.length===0&&e(M,{description:n("No instances match this filter for the selected workflow."),testId:"workflow-instances-empty",title:n("No instances")}),h!==null&&h.length>0&&e(J,{className:"overflow-hidden py-0",children:e(L,{className:"px-0",children:s(U,{"data-testid":"workflow-instances-table",children:[e(_,{children:s(x,{children:[e(i,{children:n("Instance id")}),e(i,{children:n("Status")}),e(i,{children:n("Created")}),e(i,{children:n("Ended")}),e(i,{"aria-label":n("Actions")})]})}),e(q,{children:h.map(a=>s(x,{"data-testid":`workflow-instance-${a.id}`,children:[e(d,{className:"font-mono text-xs",children:a.id}),e(d,{className:"font-mono text-xs",children:a.status}),e(d,{className:"text-muted-foreground tabular-nums",children:a.createdOn??"—"}),e(d,{className:"text-muted-foreground tabular-nums",children:a.endedOn??"—"}),e(d,{className:"text-right",children:s("div",{className:"flex justify-end gap-1.5",children:[e(W,{"data-testid":`workflow-instance-steps-${a.id}`,onClick:()=>{A(D(a.id))},size:"sm",type:"button",variant:"outline",children:n("Steps")}),w!==void 0&&oe.map(l=>e(W,{"data-testid":`workflow-instance-${l}-${a.id}`,disabled:R===a.id,onClick:()=>{A(K(a.id,l))},size:"sm",type:"button",variant:"ghost",children:n(l)},l))]})})]},a.id))})]})})}),S!==null&&e(J,{className:"overflow-hidden py-0","data-testid":"workflow-instance-detail",children:s(L,{className:"flex flex-col gap-2 px-4 py-3",children:[s("div",{className:"flex items-center justify-between",children:[s("span",{className:"font-mono text-xs",children:[n("Steps")," · ",S.id]}),e(W,{"data-testid":"workflow-instance-detail-close",onClick:()=>{$(null)},size:"xs",type:"button",variant:"ghost",children:n("Close")})]}),S.steps.length===0?e("p",{className:"text-xs text-muted-foreground",children:n("This instance has no recorded steps yet.")}):s(U,{"data-testid":"workflow-instance-steps",children:[e(_,{children:s(x,{children:[e(i,{children:n("Step")}),e(i,{children:n("Type")}),e(i,{children:n("Attempts")}),e(i,{children:n("Started")}),e(i,{children:n("Output")})]})}),e(q,{children:S.steps.map((a,l)=>s(x,{"data-testid":`workflow-step-${String(l)}`,children:[e(d,{className:"font-mono text-xs",children:a.name}),e(d,{className:"text-xs text-muted-foreground",children:a.type??"—"}),e(d,{className:"tabular-nums",children:a.attempts??"—"}),e(d,{className:"text-muted-foreground tabular-nums",children:a.start??"—"}),e(d,{className:"font-mono text-xs text-muted-foreground",children:de(a)})]},`${a.name}:${String(l)}`))})]})]})})]})},me=X(B.createWorkflowInstance),ue=X(B.getWorkflowInstanceStatus),fe=o=>{if(o.error)return`${o.error.name}: ${o.error.message}`;if(o.output===void 0)return"—";try{return JSON.stringify(o.output)}catch{return"(unserializable)"}},he=(o,r)=>o.some(N=>N.exportName===r)?r:o[0]?.exportName??"",Oe=()=>{const o=Q(),r=V(),{data:N,error:T}=ne(B.listWorkflows,{}),[g,I]=m(""),[n,h]=m(""),[k,S]=m(""),[$,v]=m(!1),[j,b]=m(null),[f,F]=m([]),[C,R]=m(null),z=N!==void 0,p=Array.isArray(N?.workflows)?[...N.workflows].toSorted((t,u)=>t.exportName.localeCompare(u.exportName)):[],w=he(p,g),O=p.find(t=>t.exportName===w),D=t=>{F(u=>{const c=u.filter(y=>!(y.exportName===t.exportName&&y.id===t.id));return[t,...c]})},K=async()=>{const t=w;if(t==="")return;let u;const c=k.trim();if(c!=="")try{u=JSON.parse(c)}catch{b(r("Params must be valid JSON"));return}v(!0),b(null);try{const y=n.trim(),G=await o.query(me,{exportName:t,id:y===""?void 0:y,params:u},H(""));D({exportName:t,id:G.id,status:G.status}),h("")}catch(y){b(E(y))}v(!1)},a=()=>{A(K())},l=async(t,u)=>{R(u);try{const c=await o.query(ue,{exportName:t,id:u},H(""));D({error:c.error,exportName:t,id:c.id,output:c.output,status:c.status})}catch(c){b(E(c))}R(null)},P=t=>{I(t.target.value)},Y=t=>{h(t.target.value)},Z=t=>{S(t.target.value)},ee=t=>{const{export:u,id:c}=t.currentTarget.dataset;u!==void 0&&c!==void 0&&A(l(u,c))};return s("div",{className:"flex flex-col gap-6","data-testid":"lunora-workflows-panel",children:[T!==null&&e("p",{className:"text-sm text-destructive","data-testid":"workflows-error",role:"alert",children:T}),e("p",{className:"text-sm text-muted-foreground",children:r("Workflows are declared in code with defineWorkflow and run as durable Cloudflare Workflows. Start an instance and observe its status below.")}),z&&p.length===0?e(M,{description:r("No defineWorkflow is declared in lunora/workflows.ts in this deployment. Add one to run a durable, multi-step workflow."),testId:"workflows-empty",title:r("No workflows defined")}):e(J,{className:"overflow-hidden py-0",children:e(L,{className:"px-0",children:s(U,{"data-testid":"workflows-table",children:[e(_,{children:s(x,{children:[e(i,{children:r("Export")}),e(i,{children:r("Name")}),e(i,{children:r("Class")}),e(i,{children:r("Binding")})]})}),e(q,{children:p.map(t=>s(x,{"data-testid":`workflows-row-${t.exportName}`,children:[e(d,{className:"font-mono text-xs",children:t.exportName}),e(d,{className:"font-mono text-xs text-muted-foreground",children:t.name}),e(d,{className:"font-mono text-xs text-muted-foreground",children:t.className}),e(d,{className:"font-mono text-xs text-muted-foreground",children:t.binding})]},t.exportName))})]})})}),p.length>0&&s("div",{className:"flex flex-col gap-3","data-testid":"workflows-start",children:[e("h3",{className:"text-sm font-medium",children:r("Start instance")}),j!==null&&e("p",{className:"text-sm text-destructive","data-testid":"workflows-start-error",role:"alert",children:j}),s("div",{className:"flex flex-wrap items-center gap-2",children:[e("select",{"aria-label":r("Workflow"),className:"h-8 rounded-md border border-input bg-transparent px-2.5 py-1 text-xs outline-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50","data-testid":"workflows-start-select",onChange:P,value:w,children:p.map(t=>e("option",{value:t.exportName,children:t.exportName},t.exportName))}),e(ae,{"aria-label":r("Instance id (optional)"),className:"max-w-48","data-testid":"workflows-start-id",onChange:Y,placeholder:r("Instance id (optional)"),value:n}),e(W,{"data-testid":"workflows-start-button",disabled:$||w==="",onClick:a,children:r($?"Starting…":"Start instance")})]}),e(re,{"aria-label":r("Params (JSON)"),className:"font-mono","data-testid":"workflows-start-params",onChange:Z,placeholder:r("Params (JSON, optional)"),value:k})]}),f.length>0&&s("div",{className:"flex flex-col gap-3","data-testid":"workflows-instances",children:[e("h3",{className:"text-sm font-medium",children:r("Instances")}),e(J,{className:"overflow-hidden py-0",children:e(L,{className:"px-0",children:s(U,{"data-testid":"workflows-instances-table",children:[e(_,{children:s(x,{children:[e(i,{children:r("Workflow")}),e(i,{children:r("Instance id")}),e(i,{children:r("Status")}),e(i,{children:r("Output")}),e(i,{})]})}),e(q,{children:f.map(t=>s(x,{"data-testid":`workflows-instance-${t.id}`,children:[e(d,{className:"font-mono text-xs",children:t.exportName}),e(d,{className:"font-mono text-xs text-muted-foreground",children:t.id}),e(d,{className:"font-mono text-xs",children:t.status}),e(d,{className:"font-mono text-xs text-muted-foreground",children:fe(t)}),e(d,{children:e(W,{"data-export":t.exportName,"data-id":t.id,"data-testid":`workflows-instance-refresh-${t.id}`,disabled:C===t.id,onClick:ee,size:"xs",variant:"outline",children:C===t.id?r("Refreshing…"):r("Refresh")})})]},`${t.exportName}:${t.id}`))})]})})})]}),O!==void 0&&e(ce,{workflowName:O.name})]})};export{Oe as default};
1
+ import{useLunora as Q}from"@lunora/react";import{useState as m,useEffect as te}from"react";import{u as W}from"../packem_shared/button-BkCrNcAs.js";import{c as J,u as L}from"../packem_shared/card-CIDGUN6K.js";import{E as M}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as ae}from"../packem_shared/input-JHu63lTv.js";import{n as U,d as _,m as x,p as i,f as q,u as d}from"../packem_shared/table-DdJBrClo.js";import{l as re}from"../packem_shared/textarea-Bu2-jKAs.js";import{N as ne}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{useT as V}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as B}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{f as A,b as E,d as H,g as X}from"../packem_shared/internal-zkEvTqy8.js";import{jsxs as s,jsx as e}from"react/jsx-runtime";const se=["queued","running","paused","waiting","complete","errored","terminated"],oe=["pause","resume","terminate"],le="WORKFLOWS_NOT_CONFIGURED",ie=o=>typeof o=="object"&&o!==null&&o.code===le,de=o=>{const r=o.error??o.output;if(r===void 0)return"—";try{return JSON.stringify(r)}catch{return"(unserializable)"}},ce=({loadDetail:o,loadInstances:r,readOnly:N,runAction:T,workflowName:g})=>{const I=Q(),n=V(),[h,k]=m(null),[S,$]=m(null),[v,j]=m(""),[b,f]=m(null),[F,C]=m(!1),[R,z]=m(null),p=o??(a=>I.getWorkflowInstance(a)),w=N?void 0:T??(r===void 0?a=>I.setWorkflowInstanceStatus(a):void 0),O=async()=>{f(null),C(!1);const a=v===""?void 0:v;try{if(r===void 0){const l=await I.listWorkflowInstances({name:g,status:a});if(l.configured===!1){k(null),C(!0);return}k(l.instances);return}k(await r({name:g,status:a}))}catch(l){k(null),ie(l)?C(!0):f(E(l))}};te(()=>{$(null),A(O())},[g,v]);const D=async a=>{f(null);try{$(await p({id:a,name:g}))}catch(l){f(E(l))}},K=async(a,l)=>{if(w!==void 0){z(a),f(null);try{await w({action:l,id:a,name:g}),await O()}catch(P){f(E(P))}z(null)}};return s("div",{className:"flex flex-col gap-3","data-testid":"lunora-workflow-instances",children:[s("div",{className:"flex items-center justify-between gap-2",children:[e("h3",{className:"text-sm font-medium",children:n("Instance history")}),s("select",{"aria-label":n("Filter by status"),className:"h-8 rounded-md border border-input bg-transparent px-2.5 py-1 text-xs outline-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50","data-testid":"workflow-instances-filter",onChange:a=>{j(a.target.value)},value:v,children:[e("option",{value:"",children:n("All statuses")}),se.map(a=>e("option",{value:a,children:a},a))]})]}),b!==null&&e("p",{className:"text-sm text-destructive","data-testid":"workflow-instances-error",role:"alert",children:b}),F&&e(M,{description:n("Set CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN in your .dev.vars to enable workflow instance history."),testId:"workflow-instances-unconfigured",title:n("Workflow inspection not configured")}),!F&&h!==null&&h.length===0&&e(M,{description:n("No instances match this filter for the selected workflow."),testId:"workflow-instances-empty",title:n("No instances")}),h!==null&&h.length>0&&e(J,{className:"overflow-hidden py-0",children:e(L,{className:"px-0",children:s(U,{"data-testid":"workflow-instances-table",children:[e(_,{children:s(x,{children:[e(i,{children:n("Instance id")}),e(i,{children:n("Status")}),e(i,{children:n("Created")}),e(i,{children:n("Ended")}),e(i,{"aria-label":n("Actions")})]})}),e(q,{children:h.map(a=>s(x,{"data-testid":`workflow-instance-${a.id}`,children:[e(d,{className:"font-mono text-xs",children:a.id}),e(d,{className:"font-mono text-xs",children:a.status}),e(d,{className:"text-muted-foreground tabular-nums",children:a.createdOn??"—"}),e(d,{className:"text-muted-foreground tabular-nums",children:a.endedOn??"—"}),e(d,{className:"text-right",children:s("div",{className:"flex justify-end gap-1.5",children:[e(W,{"data-testid":`workflow-instance-steps-${a.id}`,onClick:()=>{A(D(a.id))},size:"sm",type:"button",variant:"outline",children:n("Steps")}),w!==void 0&&oe.map(l=>e(W,{"data-testid":`workflow-instance-${l}-${a.id}`,disabled:R===a.id,onClick:()=>{A(K(a.id,l))},size:"sm",type:"button",variant:"ghost",children:n(l)},l))]})})]},a.id))})]})})}),S!==null&&e(J,{className:"overflow-hidden py-0","data-testid":"workflow-instance-detail",children:s(L,{className:"flex flex-col gap-2 px-4 py-3",children:[s("div",{className:"flex items-center justify-between",children:[s("span",{className:"font-mono text-xs",children:[n("Steps")," · ",S.id]}),e(W,{"data-testid":"workflow-instance-detail-close",onClick:()=>{$(null)},size:"xs",type:"button",variant:"ghost",children:n("Close")})]}),S.steps.length===0?e("p",{className:"text-xs text-muted-foreground",children:n("This instance has no recorded steps yet.")}):s(U,{"data-testid":"workflow-instance-steps",children:[e(_,{children:s(x,{children:[e(i,{children:n("Step")}),e(i,{children:n("Type")}),e(i,{children:n("Attempts")}),e(i,{children:n("Started")}),e(i,{children:n("Output")})]})}),e(q,{children:S.steps.map((a,l)=>s(x,{"data-testid":`workflow-step-${String(l)}`,children:[e(d,{className:"font-mono text-xs",children:a.name}),e(d,{className:"text-xs text-muted-foreground",children:a.type??"—"}),e(d,{className:"tabular-nums",children:a.attempts??"—"}),e(d,{className:"text-muted-foreground tabular-nums",children:a.start??"—"}),e(d,{className:"font-mono text-xs text-muted-foreground",children:de(a)})]},`${a.name}:${String(l)}`))})]})]})})]})},me=X(B.createWorkflowInstance),ue=X(B.getWorkflowInstanceStatus),fe=o=>{if(o.error)return`${o.error.name}: ${o.error.message}`;if(o.output===void 0)return"—";try{return JSON.stringify(o.output)}catch{return"(unserializable)"}},he=(o,r)=>o.some(N=>N.exportName===r)?r:o[0]?.exportName??"",Oe=()=>{const o=Q(),r=V(),{data:N,error:T}=ne(B.listWorkflows,{}),[g,I]=m(""),[n,h]=m(""),[k,S]=m(""),[$,v]=m(!1),[j,b]=m(null),[f,F]=m([]),[C,R]=m(null),z=N!==void 0,p=Array.isArray(N?.workflows)?[...N.workflows].toSorted((t,u)=>t.exportName.localeCompare(u.exportName)):[],w=he(p,g),O=p.find(t=>t.exportName===w),D=t=>{F(u=>{const c=u.filter(y=>!(y.exportName===t.exportName&&y.id===t.id));return[t,...c]})},K=async()=>{const t=w;if(t==="")return;let u;const c=k.trim();if(c!=="")try{u=JSON.parse(c)}catch{b(r("Params must be valid JSON"));return}v(!0),b(null);try{const y=n.trim(),G=await o.query(me,{exportName:t,id:y===""?void 0:y,params:u},H(""));D({exportName:t,id:G.id,status:G.status}),h("")}catch(y){b(E(y))}v(!1)},a=()=>{A(K())},l=async(t,u)=>{R(u);try{const c=await o.query(ue,{exportName:t,id:u},H(""));D({error:c.error,exportName:t,id:c.id,output:c.output,status:c.status})}catch(c){b(E(c))}R(null)},P=t=>{I(t.target.value)},Y=t=>{h(t.target.value)},Z=t=>{S(t.target.value)},ee=t=>{const{export:u,id:c}=t.currentTarget.dataset;u!==void 0&&c!==void 0&&A(l(u,c))};return s("div",{className:"flex flex-col gap-6","data-testid":"lunora-workflows-panel",children:[T!==null&&e("p",{className:"text-sm text-destructive","data-testid":"workflows-error",role:"alert",children:T}),e("p",{className:"text-sm text-muted-foreground",children:r("Workflows are declared in code with defineWorkflow and run as durable Cloudflare Workflows. Start an instance and observe its status below.")}),z&&p.length===0?e(M,{description:r("No defineWorkflow is declared in lunora/workflows.ts in this deployment. Add one to run a durable, multi-step workflow."),testId:"workflows-empty",title:r("No workflows defined")}):e(J,{className:"overflow-hidden py-0",children:e(L,{className:"px-0",children:s(U,{"data-testid":"workflows-table",children:[e(_,{children:s(x,{children:[e(i,{children:r("Export")}),e(i,{children:r("Name")}),e(i,{children:r("Class")}),e(i,{children:r("Binding")})]})}),e(q,{children:p.map(t=>s(x,{"data-testid":`workflows-row-${t.exportName}`,children:[e(d,{className:"font-mono text-xs",children:t.exportName}),e(d,{className:"font-mono text-xs text-muted-foreground",children:t.name}),e(d,{className:"font-mono text-xs text-muted-foreground",children:t.className}),e(d,{className:"font-mono text-xs text-muted-foreground",children:t.binding})]},t.exportName))})]})})}),p.length>0&&s("div",{className:"flex flex-col gap-3","data-testid":"workflows-start",children:[e("h3",{className:"text-sm font-medium",children:r("Start instance")}),j!==null&&e("p",{className:"text-sm text-destructive","data-testid":"workflows-start-error",role:"alert",children:j}),s("div",{className:"flex flex-wrap items-center gap-2",children:[e("select",{"aria-label":r("Workflow"),className:"h-8 rounded-md border border-input bg-transparent px-2.5 py-1 text-xs outline-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50","data-testid":"workflows-start-select",onChange:P,value:w,children:p.map(t=>e("option",{value:t.exportName,children:t.exportName},t.exportName))}),e(ae,{"aria-label":r("Instance id (optional)"),className:"max-w-48","data-testid":"workflows-start-id",onChange:Y,placeholder:r("Instance id (optional)"),value:n}),e(W,{"data-testid":"workflows-start-button",disabled:$||w==="",onClick:a,children:r($?"Starting…":"Start instance")})]}),e(re,{"aria-label":r("Params (JSON)"),className:"font-mono","data-testid":"workflows-start-params",onChange:Z,placeholder:r("Params (JSON, optional)"),value:k})]}),f.length>0&&s("div",{className:"flex flex-col gap-3","data-testid":"workflows-instances",children:[e("h3",{className:"text-sm font-medium",children:r("Instances")}),e(J,{className:"overflow-hidden py-0",children:e(L,{className:"px-0",children:s(U,{"data-testid":"workflows-instances-table",children:[e(_,{children:s(x,{children:[e(i,{children:r("Workflow")}),e(i,{children:r("Instance id")}),e(i,{children:r("Status")}),e(i,{children:r("Output")}),e(i,{})]})}),e(q,{children:f.map(t=>s(x,{"data-testid":`workflows-instance-${t.id}`,children:[e(d,{className:"font-mono text-xs",children:t.exportName}),e(d,{className:"font-mono text-xs text-muted-foreground",children:t.id}),e(d,{className:"font-mono text-xs",children:t.status}),e(d,{className:"font-mono text-xs text-muted-foreground",children:fe(t)}),e(d,{children:e(W,{"data-export":t.exportName,"data-id":t.id,"data-testid":`workflows-instance-refresh-${t.id}`,disabled:C===t.id,onClick:ee,size:"xs",variant:"outline",children:C===t.id?r("Refreshing…"):r("Refresh")})})]},`${t.exportName}:${t.id}`))})]})})})]}),O!==void 0&&e(ce,{workflowName:O.name})]})};export{Oe as default};
@@ -1,2 +1,2 @@
1
- import{c as E}from"react/compiler-runtime";import{useLunora as Y}from"@lunora/react";import{useState as M,useEffect as Z}from"react";import{u as Q}from"./button-BkCrNcAs.js";import{E as z}from"./empty-state-Cg7t_8qu.js";import{useT as L}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as B}from"./ADMIN_FUNCTIONS-4aE59aDq.js";import{c as ee,d as te,g as ae}from"./internal-BSIsQVC6.js";import{jsxs as A,jsx as m}from"react/jsx-runtime";const ne=ae(B.listTables),ie=["react","client","cli"],le=!1,oe={action:"action",mutation:"mutation",query:"query"},J=i=>{const e=i.indexOf(":");return e===-1?{file:"",fn:i}:{file:i.slice(0,e),fn:i.slice(e+1)}},U=({file:i,fn:e,kind:l})=>`await client.${oe[l]}(api.${i}.${e}, { /* args */ });`,re=i=>{const e=`api.${i.file}.${i.fn}`;switch(i.kind){case"action":return U(i);case"mutation":return`const ${i.fn} = useMutation(${e});`;default:return`const data = useQuery(${e}, { /* args */ });`}},se=({file:i,fn:e})=>`lunora run ${i}:${e} --args '{ }'`,de=i=>["// Read rows",`const rows = await ctx.db.query("${i}").collect();`,"","// Insert a row",`const id = await ctx.db.insert("${i}", { /* fields */ });`,"","// Generated types",`type Row = Doc<"${i}">;`,`type RowId = Id<"${i}">;`].join(`
1
+ import{c as E}from"react/compiler-runtime";import{useLunora as Y}from"@lunora/react";import{useState as M,useEffect as Z}from"react";import{u as Q}from"./button-BkCrNcAs.js";import{E as z}from"./empty-state-Cg7t_8qu.js";import{useT as L}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as B}from"./ADMIN_FUNCTIONS-4aE59aDq.js";import{c as ee,d as te,g as ae}from"./internal-zkEvTqy8.js";import{jsxs as A,jsx as m}from"react/jsx-runtime";const ne=ae(B.listTables),ie=["react","client","cli"],le=!1,oe={action:"action",mutation:"mutation",query:"query"},J=i=>{const e=i.indexOf(":");return e===-1?{file:"",fn:i}:{file:i.slice(0,e),fn:i.slice(e+1)}},U=({file:i,fn:e,kind:l})=>`await client.${oe[l]}(api.${i}.${e}, { /* args */ });`,re=i=>{const e=`api.${i.file}.${i.fn}`;switch(i.kind){case"action":return U(i);case"mutation":return`const ${i.fn} = useMutation(${e});`;default:return`const data = useQuery(${e}, { /* args */ });`}},se=({file:i,fn:e})=>`lunora run ${i}:${e} --args '{ }'`,de=i=>["// Read rows",`const rows = await ctx.db.query("${i}").collect();`,"","// Insert a row",`const id = await ctx.db.insert("${i}", { /* fields */ });`,"","// Generated types",`type Row = Doc<"${i}">;`,`type RowId = Id<"${i}">;`].join(`
2
2
  `),ce=(i,e)=>{switch(i){case"cli":return se(e);case"client":return U(e);default:return re(e)}},V=i=>{const e=E(19),{code:l,label:o,testId:a}=i,n=L();let s;e[0]!==l?(s=()=>{ee(l)},e[0]=l,e[1]=s):s=e[1];const u=s;let t;e[2]!==o?(t=m("span",{className:"text-xs font-medium text-muted-foreground",children:o}),e[2]=o,e[3]=t):t=e[3];const c=`${a}-copy`;let r;e[4]!==n?(r=n("Copy"),e[4]=n,e[5]=r):r=e[5];let p;e[6]!==u||e[7]!==c||e[8]!==r?(p=m(Q,{"data-testid":c,onClick:u,size:"xs",type:"button",variant:"ghost",children:r}),e[6]=u,e[7]=c,e[8]=r,e[9]=p):p=e[9];let f;e[10]!==t||e[11]!==p?(f=A("div",{className:"flex items-center justify-between gap-2",children:[t,p]}),e[10]=t,e[11]=p,e[12]=f):f=e[12];let d;e[13]!==l||e[14]!==a?(d=m("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":a,children:l}),e[13]=l,e[14]=a,e[15]=d):d=e[15];let h;return e[16]!==f||e[17]!==d?(h=A("div",{className:"flex flex-col gap-1.5",children:[f,d]}),e[16]=f,e[17]=d,e[18]=h):h=e[18],h},pe=i=>{const e=E(50),{file:l,fn:o,kind:a}=i,n=L(),[s,u]=M("react");let t,c,r;if(e[0]!==l||e[1]!==o||e[2]!==a||e[3]!==n||e[4]!==s){const x={file:l,fn:o,kind:a};let I;e[8]!==n?(I=n("CLI"),e[8]=n,e[9]=I):I=e[9];let C;e[10]!==n?(C=n("Client"),e[10]=n,e[11]=C):C=e[11];let T;e[12]!==n?(T=n("React"),e[12]=n,e[13]=T):T=e[13];let _;e[14]!==I||e[15]!==C||e[16]!==T?(_={cli:I,client:C,react:T},e[14]=I,e[15]=C,e[16]=T,e[17]=_):_=e[17],r=_;let D;e[18]===Symbol.for("react.memo_cache_sentinel")?(D=P=>{u(P.currentTarget.dataset.tab)},e[18]=D):D=e[18],t=D,c=ce(s,x),e[0]=l,e[1]=o,e[2]=a,e[3]=n,e[4]=s,e[5]=t,e[6]=c,e[7]=r}else t=e[5],c=e[6],r=e[7];const p=c,f=a==="action"&&s==="react"&&!le,d=`api.${l}.${o}`;let h;e[19]!==d?(h=m("h2",{className:"font-mono text-sm font-semibold text-foreground","data-testid":"api-fn-title",children:d}),e[19]=d,e[20]=h):h=e[20];let b;e[21]!==a||e[22]!==n?(b=n("Call this {kind} from your app.",{kind:a}),e[21]=a,e[22]=n,e[23]=b):b=e[23];let v;e[24]!==b?(v=m("p",{className:"text-xs text-muted-foreground",children:b}),e[24]=b,e[25]=v):v=e[25];let y;e[26]!==h||e[27]!==v?(y=A("div",{children:[h,v]}),e[26]=h,e[27]=v,e[28]=y):y=e[28];let k;e[29]!==n?(k=n("Snippet flavour"),e[29]=n,e[30]=k):k=e[30];let $;e[31]!==t||e[32]!==s||e[33]!==r?($=ie.map(x=>m(Q,{"aria-selected":s===x,"data-tab":x,"data-testid":`api-tab-${x}`,onClick:t,role:"tab",size:"xs",type:"button",variant:s===x?"default":"outline",children:r[x]},x)),e[31]=t,e[32]=s,e[33]=r,e[34]=$):$=e[34];let N;e[35]!==k||e[36]!==$?(N=m("div",{"aria-label":k,className:"flex gap-1.5","data-testid":"api-tabs",role:"tablist",children:$}),e[35]=k,e[36]=$,e[37]=N):N=e[37];const O=r[s],j=`api-snippet-${s}`;let w;e[38]!==p||e[39]!==O||e[40]!==j?(w=m(V,{code:p,label:O,testId:j}),e[38]=p,e[39]=O,e[40]=j,e[41]=w):w=e[41];let S;e[42]!==f||e[43]!==n?(S=f&&m("p",{className:"text-xs text-muted-foreground","data-testid":"api-action-note",children:n("Actions have no React hook — call them through the client.")}),e[42]=f,e[43]=n,e[44]=S):S=e[44];let R;return e[45]!==w||e[46]!==S||e[47]!==y||e[48]!==N?(R=A("div",{className:"flex flex-col gap-3","data-testid":"api-fn-doc",children:[y,N,w,S]}),e[45]=w,e[46]=S,e[47]=y,e[48]=N,e[49]=R):R=e[49],R},fe=i=>{const e=E(19),{name:l}=i,o=L();let a;e[0]!==l?(a=de(l),e[0]=l,e[1]=a):a=e[1];const n=a;let s;e[2]!==l?(s=m("h2",{className:"font-mono text-sm font-semibold text-foreground","data-testid":"api-table-title",children:l}),e[2]=l,e[3]=s):s=e[3];let u;e[4]!==o?(u=o("Read and write this table through the typed data model."),e[4]=o,e[5]=u):u=e[5];let t;e[6]!==u?(t=m("p",{className:"text-xs text-muted-foreground",children:u}),e[6]=u,e[7]=t):t=e[7];let c;e[8]!==s||e[9]!==t?(c=A("div",{children:[s,t]}),e[8]=s,e[9]=t,e[10]=c):c=e[10];let r;e[11]!==o?(r=o("Data model"),e[11]=o,e[12]=r):r=e[12];let p;e[13]!==n||e[14]!==r?(p=m(V,{code:n,label:r,testId:"api-snippet-table"}),e[13]=n,e[14]=r,e[15]=p):p=e[15];let f;return e[16]!==c||e[17]!==p?(f=A("div",{className:"flex flex-col gap-3","data-testid":"api-table-doc",children:[c,p]}),e[16]=c,e[17]=p,e[18]=f):f=e[18],f},G=i=>{const e=E(8),{active:l,label:o,onSelect:a,testId:n,value:s}=i;let u;e[0]!==a||e[1]!==s?(u=()=>{a(s)},e[0]=a,e[1]=s,e[2]=u):u=e[2];const t=u,c=l?"page":void 0;let r;return e[3]!==o||e[4]!==t||e[5]!==c||e[6]!==n?(r=m("button",{"aria-current":c,className:"w-full truncate rounded-md px-2 py-1 text-start font-mono text-xs text-muted-foreground outline-none transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:bg-sidebar-accent aria-[current=page]:bg-sidebar-accent aria-[current=page]:font-medium aria-[current=page]:text-foreground","data-testid":n,onClick:t,type:"button",children:o}),e[3]=o,e[4]=t,e[5]=c,e[6]=n,e[7]=r):r=e[7],r},me=i=>{const e=new Map;for(const l of i){const{file:o,fn:a}=J(l.path),n=e.get(o)??[];n.push({fn:a,kind:l.kind,path:l.path}),e.set(o,n)}return[...e.entries()].map(([l,o])=>({file:l,items:o.toSorted((a,n)=>a.fn.localeCompare(n.fn))})).toSorted((l,o)=>l.file.localeCompare(o.file))},Se=i=>{const e=E(58),{functions:l,initialShardKey:o}=i,a=L(),n=Y(),[s,u]=M(null),[t,c]=M(null);let r,p;e[0]!==n||e[1]!==o?(r=()=>{let _=!1;return n.query(ne,{},te(o??"")).then(D=>(_||u(D),D)).catch(()=>{_||u([])}),()=>{_=!0}},p=[n,o],e[0]=n,e[1]=o,e[2]=r,e[3]=p):(r=e[2],p=e[3]),Z(r,p);let f,d,h,b,v,y,k,$,N,O;if(e[4]!==l||e[5]!==t||e[6]!==a||e[7]!==s){const _=l??[],D=me(_),P=(s??[]).map(ue).toSorted(he);let F;e[18]===Symbol.for("react.memo_cache_sentinel")?(F=g=>{c({kind:"fn",path:g})},e[18]=F):F=e[18];const W=F;let H;e[19]===Symbol.for("react.memo_cache_sentinel")?(H=g=>{c({kind:"table",name:g})},e[19]=H):H=e[19];const X=H;d=t?.kind==="fn"?_.find(g=>g.path===t.path):void 0,f=_.length>0||P.length>0,h=d===void 0?void 0:J(d.path),N="grid min-h-0 gap-6 md:grid-cols-[16rem_minmax(0,1fr)]",O="lunora-api-docs",e[20]!==a?(b=a("API resources"),e[20]=a,e[21]=b):b=e[21],v="flex flex-col gap-4 overflow-y-auto",y="api-rail";let K;e[22]!==t||e[23]!==a?(K=g=>A("div",{className:"flex flex-col gap-1",children:[m("span",{className:"px-2 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:g.file||a("(root)")}),g.items.map(q=>m(G,{active:t?.kind==="fn"&&t.path===q.path,label:q.fn,onSelect:W,testId:`api-rail-fn-${q.path}`,value:q.path},q.path))]},g.file),e[22]=t,e[23]=a,e[24]=K):K=e[24],k=D.map(K),$=P.length>0&&A("div",{className:"flex flex-col gap-1",children:[m("span",{className:"px-2 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a("Tables")}),P.map(g=>m(G,{active:t?.kind==="table"&&t.name===g,label:g,onSelect:X,testId:`api-rail-table-${g}`,value:g},g))]}),e[4]=l,e[5]=t,e[6]=a,e[7]=s,e[8]=f,e[9]=d,e[10]=h,e[11]=b,e[12]=v,e[13]=y,e[14]=k,e[15]=$,e[16]=N,e[17]=O}else f=e[8],d=e[9],h=e[10],b=e[11],v=e[12],y=e[13],k=e[14],$=e[15],N=e[16],O=e[17];let j;e[25]!==f||e[26]!==a?(j=!f&&m("p",{className:"px-2 text-xs text-muted-foreground","data-testid":"api-rail-empty",children:a("No functions or tables to document yet.")}),e[25]=f,e[26]=a,e[27]=j):j=e[27];let w;e[28]!==j||e[29]!==b||e[30]!==v||e[31]!==y||e[32]!==k||e[33]!==$?(w=A("nav",{"aria-label":b,className:v,"data-testid":y,children:[k,$,j]}),e[28]=j,e[29]=b,e[30]=v,e[31]=y,e[32]=k,e[33]=$,e[34]=w):w=e[34];let S;e[35]!==t||e[36]!==a?(S=t===null&&m(z,{description:a("Select a function or table to see how to call it from your app."),testId:"api-empty",title:a("API usage snippets")}),e[35]=t,e[36]=a,e[37]=S):S=e[37];let R;e[38]!==t?.kind||e[39]!==d||e[40]!==h?(R=t?.kind==="fn"&&d!==void 0&&h!==void 0&&m(pe,{file:h.file,fn:h.fn,kind:d.kind},d.path),e[38]=t?.kind,e[39]=d,e[40]=h,e[41]=R):R=e[41];let x;e[42]!==t?.kind||e[43]!==d||e[44]!==a?(x=t?.kind==="fn"&&d===void 0&&m(z,{testId:"api-empty",title:a("API usage snippets")}),e[42]=t?.kind,e[43]=d,e[44]=a,e[45]=x):x=e[45];let I;e[46]!==t?(I=t?.kind==="table"&&m(fe,{name:t.name}),e[46]=t,e[47]=I):I=e[47];let C;e[48]!==S||e[49]!==R||e[50]!==x||e[51]!==I?(C=A("div",{className:"min-w-0",children:[S,R,x,I]}),e[48]=S,e[49]=R,e[50]=x,e[51]=I,e[52]=C):C=e[52];let T;return e[53]!==w||e[54]!==C||e[55]!==N||e[56]!==O?(T=A("div",{className:N,"data-testid":O,children:[w,C]}),e[53]=w,e[54]=C,e[55]=N,e[56]=O,e[57]=T):T=e[57],T};function ue(i){return i.name}function he(i,e){return i.localeCompare(e)}export{le as REACT_HAS_ACTION_HOOK,se as buildCliSnippet,U as buildClientSnippet,re as buildReactSnippet,de as buildTableSnippet,Se as default,J as splitPath};