@lunora/studio 1.0.0-alpha.78 → 1.0.0-alpha.79

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 (119) hide show
  1. package/dist/index.d.ts +2 -1
  2. package/dist/index.js +1 -1
  3. package/dist/mount.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/ExportImportPanel.js +1 -1
  7. package/dist/packem_chunks/FileBrowser.js +1 -1
  8. package/dist/packem_chunks/FunctionRunner.js +1 -1
  9. package/dist/packem_chunks/FunctionStatsPanel.js +1 -1
  10. package/dist/packem_chunks/HealthPanel.js +1 -1
  11. package/dist/packem_chunks/InsightsPanel.js +1 -1
  12. package/dist/packem_chunks/LogsPanel.js +1 -1
  13. package/dist/packem_chunks/MailPanel.js +1 -1
  14. package/dist/packem_chunks/MetricsPanel.js +1 -1
  15. package/dist/packem_chunks/MigrationsPanel.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/auth-audit-panel.js +1 -1
  25. package/dist/packem_chunks/containers-panel.js +1 -1
  26. package/dist/packem_chunks/dashboards-panel.js +1 -1
  27. package/dist/packem_chunks/fanout-panel.js +1 -1
  28. package/dist/packem_chunks/flags-panel.js +1 -1
  29. package/dist/packem_chunks/issues-panel.js +1 -1
  30. package/dist/packem_chunks/kv-browser.js +1 -1
  31. package/dist/packem_chunks/organizations-panel.js +1 -1
  32. package/dist/packem_chunks/payments-panel.js +1 -1
  33. package/dist/packem_chunks/permissions-panel.js +1 -1
  34. package/dist/packem_chunks/queues-panel.js +1 -1
  35. package/dist/packem_chunks/rls-panel.js +1 -1
  36. package/dist/packem_chunks/storage-rules-panel.js +1 -1
  37. package/dist/packem_chunks/subscriptions-panel.js +1 -1
  38. package/dist/packem_chunks/traces-panel.js +1 -1
  39. package/dist/packem_chunks/users-panel.js +1 -1
  40. package/dist/packem_chunks/workflows-panel.js +1 -1
  41. package/dist/packem_shared/ADMIN_FUNCTIONS-CpgIo9pj.js +1 -0
  42. package/dist/packem_shared/{ApiDocsPanel-eJYZlylw.js → ApiDocsPanel-CjdsxN1t.js} +1 -1
  43. package/dist/packem_shared/{DataBrowser-B8J5lHjP.js → DataBrowser-Bfstz_au.js} +1 -1
  44. package/dist/packem_shared/{HomePanel-DL1HupAN.js → HomePanel-B8EFM4u3.js} +1 -1
  45. package/dist/packem_shared/{Studio-BWBclm_C.js → Studio-BDtS9C5g.js} +1 -1
  46. package/dist/packem_shared/{StudioApp-BFm73yVr.js → StudioApp-DjLzIO9E.js} +1 -1
  47. package/dist/packem_shared/{home-panel-B-8BCffw.js → home-panel-Cm88Nvqh.js} +1 -1
  48. package/dist/packem_shared/{studio-BHA7hnI3.js → studio-BmWFd-Rz.js} +1 -1
  49. package/dist/packem_shared/use-async-submit-DLNCqLFq.js +1 -0
  50. package/dist/packem_shared/use-auth-config-9S_K_W-G.js +1 -0
  51. package/dist/standalone/{chunk-EVN46TVV.js → chunk-2SHUN7KF.js} +1 -1
  52. package/dist/standalone/{chunk-C43X4M5U.js → chunk-3EXLKL6V.js} +1 -1
  53. package/dist/standalone/{chunk-KDOC2DP5.js → chunk-3KAERFMC.js} +1 -1
  54. package/dist/standalone/{chunk-GSPTEMYN.js → chunk-4XDMVUS5.js} +1 -1
  55. package/dist/standalone/{chunk-YD5NF6UT.js → chunk-5YWJNF5X.js} +1 -1
  56. package/dist/standalone/chunk-66YJ3IOZ.js +1 -0
  57. package/dist/standalone/{chunk-2F7G7IWQ.js → chunk-6CULAILE.js} +1 -1
  58. package/dist/standalone/{chunk-D7XXWV4E.js → chunk-6KHEBRBB.js} +1 -1
  59. package/dist/standalone/{chunk-4WLYA3XE.js → chunk-6WCIFGDW.js} +1 -1
  60. package/dist/standalone/{chunk-OHKRN65U.js → chunk-7RG3AKPY.js} +1 -1
  61. package/dist/standalone/{chunk-65OTWFS3.js → chunk-A2FPLOMJ.js} +1 -1
  62. package/dist/standalone/chunk-AADILRJW.js +14 -0
  63. package/dist/standalone/chunk-AADXUXZO.js +1 -0
  64. package/dist/standalone/{chunk-L7N7F3DA.js → chunk-ARI4JTIH.js} +1 -1
  65. package/dist/standalone/chunk-AVZGVZZ7.js +1 -0
  66. package/dist/standalone/{chunk-5U2THBI7.js → chunk-BDO4J5AP.js} +1 -1
  67. package/dist/standalone/{chunk-XSD4Y6SQ.js → chunk-BMQJ4CAO.js} +1 -1
  68. package/dist/standalone/{chunk-5L2MD6F6.js → chunk-CMUP7HPS.js} +1 -1
  69. package/dist/standalone/{chunk-QGKAJTQQ.js → chunk-CP7AUUOU.js} +1 -1
  70. package/dist/standalone/{chunk-UIS34ZPB.js → chunk-DX3RMFQU.js} +1 -1
  71. package/dist/standalone/{chunk-5OWIOACV.js → chunk-E2CJUP53.js} +1 -1
  72. package/dist/standalone/{chunk-FGTK44LR.js → chunk-EIT7ERYE.js} +1 -1
  73. package/dist/standalone/{chunk-35II7U25.js → chunk-EN2QAEO4.js} +1 -1
  74. package/dist/standalone/{chunk-QVEHPYA5.js → chunk-FLYO3XY5.js} +1 -1
  75. package/dist/standalone/{chunk-DVOBKIUX.js → chunk-FWCKM2CU.js} +1 -1
  76. package/dist/standalone/{chunk-VPAXCQ2Y.js → chunk-GITJXQOS.js} +1 -1
  77. package/dist/standalone/{chunk-SA3MDZC3.js → chunk-GP6IRITM.js} +1 -1
  78. package/dist/standalone/{chunk-VGHSEUEX.js → chunk-GXU3ATKS.js} +1 -1
  79. package/dist/standalone/{chunk-FPLGBHY4.js → chunk-H5Y5NQPL.js} +1 -1
  80. package/dist/standalone/{chunk-34UVAASH.js → chunk-HALNNKTC.js} +1 -1
  81. package/dist/standalone/{chunk-UNUU7CJJ.js → chunk-HK4OVYG3.js} +1 -1
  82. package/dist/standalone/{chunk-ZNNAGR6N.js → chunk-HQEMYD2K.js} +1 -1
  83. package/dist/standalone/{chunk-F6GOKFMU.js → chunk-HYT2ZUNP.js} +2 -2
  84. package/dist/standalone/{chunk-7RXOPYR5.js → chunk-I4WGRDL2.js} +1 -1
  85. package/dist/standalone/{chunk-P24JBHEZ.js → chunk-ISZSYNTI.js} +1 -1
  86. package/dist/standalone/chunk-JWG3VRGB.js +1 -0
  87. package/dist/standalone/{chunk-RAA2RGG6.js → chunk-KDYNM3GV.js} +1 -1
  88. package/dist/standalone/{chunk-T2JIUFOD.js → chunk-KP6JQSH2.js} +1 -1
  89. package/dist/standalone/{chunk-IDNNI63H.js → chunk-LSEZN2ZL.js} +1 -1
  90. package/dist/standalone/{chunk-LJDP7NRB.js → chunk-LU3GW7HI.js} +1 -1
  91. package/dist/standalone/chunk-MVGE3JJN.js +1 -0
  92. package/dist/standalone/chunk-MXSHWB3M.js +1 -0
  93. package/dist/standalone/{chunk-BEH5N5ZA.js → chunk-NG6LYBPJ.js} +1 -1
  94. package/dist/standalone/{chunk-HP2UCWND.js → chunk-NL2DZKFI.js} +1 -1
  95. package/dist/standalone/{chunk-EXFBIISG.js → chunk-OGVCXKRL.js} +1 -1
  96. package/dist/standalone/{chunk-EKRN4ZQM.js → chunk-OPC233PZ.js} +1 -1
  97. package/dist/standalone/{chunk-TLHJRWNK.js → chunk-P4CWOYFL.js} +1 -1
  98. package/dist/standalone/{chunk-QLJJ5YYZ.js → chunk-PRJ4RJDU.js} +1 -1
  99. package/dist/standalone/{chunk-XEDU5FO4.js → chunk-PUY3YDXI.js} +1 -1
  100. package/dist/standalone/{chunk-FGTABSAK.js → chunk-QZMR6MUG.js} +1 -1
  101. package/dist/standalone/{chunk-F5QWLENA.js → chunk-W6TE2I2D.js} +1 -1
  102. package/dist/standalone/{chunk-PF7V3G2Z.js → chunk-WCWYSOCN.js} +1 -1
  103. package/dist/standalone/{chunk-BNUJ7QMG.js → chunk-WEO3YVP6.js} +1 -1
  104. package/dist/standalone/{chunk-6DWCIIHE.js → chunk-XIZNYKOD.js} +1 -1
  105. package/dist/standalone/{chunk-3FUFEZ65.js → chunk-XS6Q6GGV.js} +1 -1
  106. package/dist/standalone/{chunk-XQBTNJUQ.js → chunk-Y3CQDULJ.js} +1 -1
  107. package/dist/standalone/{chunk-7J5N6DGQ.js → chunk-YCRMVBPW.js} +1 -1
  108. package/dist/standalone/{chunk-H7NIIBHH.js → chunk-Z2JPEI2V.js} +1 -1
  109. package/dist/standalone/studio.js +1 -1
  110. package/dist/styles.css +1 -1
  111. package/package.json +6 -6
  112. package/dist/packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js +0 -1
  113. package/dist/packem_shared/use-async-submit-H68GHPz8.js +0 -1
  114. package/dist/standalone/chunk-3QRTYSSX.js +0 -1
  115. package/dist/standalone/chunk-B43FTQJ7.js +0 -1
  116. package/dist/standalone/chunk-GXZAXNZI.js +0 -1
  117. package/dist/standalone/chunk-LE56LPNH.js +0 -13
  118. package/dist/standalone/chunk-PWWHP76O.js +0 -1
  119. package/dist/standalone/chunk-YI3WYUXK.js +0 -1
@@ -1 +1 @@
1
- import{useState as k,useMemo as u}from"react";import{E as w}from"../packem_shared/error-alert-B59DnrDI.js";import{g as A}from"../packem_shared/badge-BbuuAio7.js";import{c as T,u as F}from"../packem_shared/card-CIDGUN6K.js";import{E as p}from"../packem_shared/empty-state-Cg7t_8qu.js";import{p as O}from"../packem_shared/label-6uP1obNF.js";import{n as C,d as j,m as h,p as n,f as E,u as i}from"../packem_shared/table-DdJBrClo.js";import{l as I}from"../packem_shared/textarea-Bu2-jKAs.js";import{K as J}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{useT as K}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as V}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{jsx as e,jsxs as s}from"react/jsx-runtime";const L=a=>{const t=a.trim();if(t.length===0)return{context:void 0,error:null};try{const o=JSON.parse(t);return o===null||typeof o!="object"||Array.isArray(o)?{context:void 0,error:"Targeting context must be a JSON object."}:{context:o,error:null}}catch{return{context:void 0,error:"Targeting context is not valid JSON."}}},M='{ "targetingKey": "user-123", "plan": "premium" }',_=a=>a.type==="object"?JSON.stringify(a.value):String(a.value),Y=({initialShardKey:a=""})=>{const t=K(),[o,x]=k(""),{context:c,error:f}=L(o),v=u(()=>c===void 0?{}:{context:c},[c]),{data:l,error:y,errorSource:N,liveError:b}=J(V.listFlags,v,{live:!0,shardKey:a}),g=l!==void 0,S=l?.configured??!1,m=u(()=>Array.isArray(l?.flags)?[...l.flags].toSorted((r,$)=>r.key.localeCompare($.key)):[],[l]);let d;return g&&!S?d=e(p,{description:t("No @lunora/flags provider is wired in this deployment. Add lunora/flags.ts with defineFlags({ provider }) to gate code paths on feature flags."),testId:"flags-unconfigured",title:t("No flags provider configured")}):g&&m.length===0?d=e(p,{description:t('A flags provider is configured, but no handler reads a flag yet. Call ctx.flags.boolean("key", false) in a query, mutation, or action.'),testId:"flags-empty",title:t("No flags read")}):d=e(T,{className:"overflow-hidden py-0",children:e(F,{className:"px-0",children:s(C,{"data-testid":"flags-table",children:[e(j,{children:s(h,{children:[e(n,{children:t("Key")}),e(n,{children:t("Type")}),e(n,{children:t("Value")}),e(n,{children:t("Reason")}),e(n,{children:t("Variant")})]})}),e(E,{children:m.map(r=>s(h,{"data-testid":`flags-row-${r.key}`,children:[e(i,{className:"font-mono text-xs",children:r.key}),e(i,{className:"font-mono text-xs text-muted-foreground",children:r.type}),e(i,{className:"font-mono text-xs",children:_(r)}),e(i,{children:r.errorCode===void 0?e("span",{className:"font-mono text-xs text-muted-foreground",children:r.reason??"—"}):e(A,{"data-testid":`flags-error-${r.key}`,variant:"destructive",children:r.errorCode})}),e(i,{className:"font-mono text-xs text-muted-foreground",children:r.variant??"—"})]},r.key))})]})})}),s("div",{className:"flex flex-col gap-6","data-testid":"lunora-flags-panel",children:[y!==null&&e(w,{error:N,testId:"flags-error"}),e("p",{className:"text-sm text-muted-foreground",children:t('Feature flags are read in code with ctx.flags.<type>("key", default). They evaluate through the OpenFeature provider configured in lunora/flags.ts; edit the targeting context below to see how each flag resolves for a given audience.')}),s("div",{className:"flex flex-col gap-2",children:[e(O,{htmlFor:"flags-targeting-context",children:t("Targeting context (JSON)")}),e(I,{className:"font-mono text-xs","data-testid":"flags-context-input",id:"flags-targeting-context",onChange:r=>{x(r.target.value)},placeholder:M,rows:3,value:o}),f!==null&&e("p",{className:"text-xs text-destructive","data-testid":"flags-context-error",role:"alert",children:t(f)}),b!==void 0&&e("p",{className:"text-xs text-amber-600 dark:text-amber-500","data-testid":"flags-live-error",role:"alert",children:t("Live updates unavailable; showing the last evaluation.")})]}),d]})};export{Y as FlagsPanel};
1
+ import{useState as k,useMemo as u}from"react";import{E as w}from"../packem_shared/error-alert-B59DnrDI.js";import{g as A}from"../packem_shared/badge-BbuuAio7.js";import{c as T,u as F}from"../packem_shared/card-CIDGUN6K.js";import{E as p}from"../packem_shared/empty-state-Cg7t_8qu.js";import{p as O}from"../packem_shared/label-6uP1obNF.js";import{n as C,d as j,m as h,p as n,f as E,u as i}from"../packem_shared/table-DdJBrClo.js";import{l as I}from"../packem_shared/textarea-Bu2-jKAs.js";import{K as J}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{useT as K}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as V}from"../packem_shared/ADMIN_FUNCTIONS-CpgIo9pj.js";import{jsx as e,jsxs as s}from"react/jsx-runtime";const L=a=>{const t=a.trim();if(t.length===0)return{context:void 0,error:null};try{const o=JSON.parse(t);return o===null||typeof o!="object"||Array.isArray(o)?{context:void 0,error:"Targeting context must be a JSON object."}:{context:o,error:null}}catch{return{context:void 0,error:"Targeting context is not valid JSON."}}},M='{ "targetingKey": "user-123", "plan": "premium" }',_=a=>a.type==="object"?JSON.stringify(a.value):String(a.value),Y=({initialShardKey:a=""})=>{const t=K(),[o,x]=k(""),{context:c,error:f}=L(o),v=u(()=>c===void 0?{}:{context:c},[c]),{data:l,error:y,errorSource:N,liveError:b}=J(V.listFlags,v,{live:!0,shardKey:a}),g=l!==void 0,S=l?.configured??!1,m=u(()=>Array.isArray(l?.flags)?[...l.flags].toSorted((r,$)=>r.key.localeCompare($.key)):[],[l]);let d;return g&&!S?d=e(p,{description:t("No @lunora/flags provider is wired in this deployment. Add lunora/flags.ts with defineFlags({ provider }) to gate code paths on feature flags."),testId:"flags-unconfigured",title:t("No flags provider configured")}):g&&m.length===0?d=e(p,{description:t('A flags provider is configured, but no handler reads a flag yet. Call ctx.flags.boolean("key", false) in a query, mutation, or action.'),testId:"flags-empty",title:t("No flags read")}):d=e(T,{className:"overflow-hidden py-0",children:e(F,{className:"px-0",children:s(C,{"data-testid":"flags-table",children:[e(j,{children:s(h,{children:[e(n,{children:t("Key")}),e(n,{children:t("Type")}),e(n,{children:t("Value")}),e(n,{children:t("Reason")}),e(n,{children:t("Variant")})]})}),e(E,{children:m.map(r=>s(h,{"data-testid":`flags-row-${r.key}`,children:[e(i,{className:"font-mono text-xs",children:r.key}),e(i,{className:"font-mono text-xs text-muted-foreground",children:r.type}),e(i,{className:"font-mono text-xs",children:_(r)}),e(i,{children:r.errorCode===void 0?e("span",{className:"font-mono text-xs text-muted-foreground",children:r.reason??"—"}):e(A,{"data-testid":`flags-error-${r.key}`,variant:"destructive",children:r.errorCode})}),e(i,{className:"font-mono text-xs text-muted-foreground",children:r.variant??"—"})]},r.key))})]})})}),s("div",{className:"flex flex-col gap-6","data-testid":"lunora-flags-panel",children:[y!==null&&e(w,{error:N,testId:"flags-error"}),e("p",{className:"text-sm text-muted-foreground",children:t('Feature flags are read in code with ctx.flags.<type>("key", default). They evaluate through the OpenFeature provider configured in lunora/flags.ts; edit the targeting context below to see how each flag resolves for a given audience.')}),s("div",{className:"flex flex-col gap-2",children:[e(O,{htmlFor:"flags-targeting-context",children:t("Targeting context (JSON)")}),e(I,{className:"font-mono text-xs","data-testid":"flags-context-input",id:"flags-targeting-context",onChange:r=>{x(r.target.value)},placeholder:M,rows:3,value:o}),f!==null&&e("p",{className:"text-xs text-destructive","data-testid":"flags-context-error",role:"alert",children:t(f)}),b!==void 0&&e("p",{className:"text-xs text-amber-600 dark:text-amber-500","data-testid":"flags-live-error",role:"alert",children:t("Live updates unavailable; showing the last evaluation.")})]}),d]})};export{Y as FlagsPanel};
@@ -1 +1 @@
1
- import{c as ae}from"react/compiler-runtime";import{useLunora as te}from"@lunora/react";import{useState as F}from"react";import{L as ie}from"../packem_shared/live-status-CGW2JHf_.js";import{ShardInput as le}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as q}from"../packem_shared/badge-BbuuAio7.js";import{u as L}from"../packem_shared/button-BkCrNcAs.js";import{c as ne,u as oe}from"../packem_shared/card-CIDGUN6K.js";import{E as de}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as ce}from"../packem_shared/input-JHu63lTv.js";import{w as he,y as ue,N as me,_ as pe,k as Z}from"../packem_shared/select-Bul-DeII.js";import{n as fe,d as ge,m as X,p,f as ve,u as f}from"../packem_shared/table-DdJBrClo.js";import{K as xe}from"../packem_shared/use-admin-query-Di3fLE8H.js";import ye from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as Ne}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as S}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{i as $e,f as I,a as U,c as we,e as Ie}from"../packem_shared/internal-AtZ4bTal.js";import{jsx as r,jsxs as c}from"react/jsx-runtime";const P="none",Se=["all","open","resolved","ignored"],be=["critical","high","medium","low"],Ae=U(S.resolveIssue),Ce=U(S.ignoreIssue),Y=U(S.assignIssue),ke=U(S.setIssueSeverity),Ee=t=>Array.isArray(t?.issues)?t.issues:[],Ke=t=>t==="resolved"?"success":t==="ignored"?"secondary":"warning",Me=t=>t==="critical"?"destructive":t==="high"?"warning":t==="medium"?"info":"secondary",Qe=t=>{const e=ae(42),{initialShardKey:H}=t,a=Ne(),$=te(),[h,J]=F(H??""),[l,Q]=F("all"),[V,W]=F(Re),[j,B]=F(Te);let b;e[0]!==h?(b=h.trim(),e[0]=h,e[1]=b):b=e[1];const u=ye(b,400);let A;e[2]!==l?(A=l==="all"?{}:{status:l},e[2]=l,e[3]=A):A=e[3];let C;e[4]!==u?(C={live:!0,shardKey:u},e[4]=u,e[5]=C):C=e[5];const{data:k,error:g,liveError:w}=xe(S.getIssues,A,C),D=k!==void 0;let E;if(e[6]!==j||e[7]!==V||e[8]!==$||e[9]!==k||e[10]!==u||e[11]!==g||e[12]!==w||e[13]!==D||e[14]!==h||e[15]!==l||e[16]!==a){const G=Ee(k);let K;e[18]!==$||e[19]!==u?(K=async(s,i,o)=>{B(d=>{if(!d.has(s))return d;const m=new Map(d);return m.delete(s),m}),W(d=>new Set(d).add(s));try{await $.query(i,{...o,hash:s},we(u))}catch(d){const m=Ie(d);B(re=>new Map(re).set(s,m))}W(d=>{const m=new Set(d);return m.delete(s),m})},e[18]=$,e[19]=u,e[20]=K):K=e[20];const n=K;let M;e[21]!==n?(M=s=>i=>{if(i.key!=="Enter")return;const o=i.currentTarget.value.trim();I(n(s.hash,Y,{assignee:o===""?null:o}))},e[21]=n,e[22]=M):M=e[22];const ee=M;let R;e[23]!==n?(R=s=>i=>{const o=i===null||i===P?null:i;I(n(s.hash,ke,{severity:o}))},e[23]=n,e[24]=R):R=e[24];const se=R;let T;e[25]!==a?(T=s=>a(s==="all"?"All":s==="open"?"Open":s==="resolved"?"Resolved":"Ignored"),e[25]=a,e[26]=T):T=e[26];const _=T;let z;e[27]!==g?(z=g!==null&&r("p",{className:"text-sm text-destructive","data-testid":"issues-error",role:"alert",children:g}),e[27]=g,e[28]=z):z=e[28];let v;e[29]!==h?(v=r(le,{onChange:J,testId:"issues-shard-input",value:h}),e[29]=h,e[30]=v):v=e[30];let x;e[31]!==w?(x=r(ie,{message:w,prefix:"issues"}),e[31]=w,e[32]=x):x=e[32];let y;e[33]!==l||e[34]!==_?(y=Se.map(s=>r(L,{"data-active":l===s?"":void 0,"data-testid":`issues-filter-${s}`,onClick:()=>{Q(s)},size:"xs",variant:l===s?"default":"outline",children:_(s)},s)),e[33]=l,e[34]=_,e[35]=y):y=e[35];let N;e[36]!==y?(N=r("div",{className:"ms-auto flex items-center gap-1","data-testid":"issues-status-filter",role:"group",children:y}),e[36]=y,e[37]=N):N=e[37];let O;e[38]!==v||e[39]!==x||e[40]!==N?(O=c("div",{className:"flex flex-wrap items-center gap-2",children:[v,x,N]}),e[38]=v,e[39]=x,e[40]=N,e[41]=O):O=e[41],E=c("div",{className:"flex flex-col gap-6","data-testid":"lunora-issues-panel",children:[z,O,D&&G.length===0?r(de,{description:a("No grouped errors yet. When a function throws or a container crashes, matching errors fold into a single issue here."),testId:"issues-empty",title:a("No issues")}):r(ne,{className:"overflow-hidden py-0",children:r(oe,{className:"px-0",children:c(fe,{"data-testid":"issues-table",children:[r(ge,{children:c(X,{children:[r(p,{children:a("Issue")}),r(p,{children:a("Status")}),r(p,{children:a("Severity")}),r(p,{children:a("Assignee")}),r(p,{className:"text-right",children:a("Events")}),r(p,{children:a("Last seen")}),r(p,{className:"text-right",children:a("Actions")})]})}),r(ve,{children:G.map(s=>{const i=V.has(s.hash),o=j.get(s.hash);return c(X,{"data-testid":`issues-row-${s.hash}`,children:[c(f,{className:"max-w-80",children:[r("div",{className:"truncate font-medium",title:s.title,children:s.title}),r("div",{className:"truncate font-mono text-xs text-muted-foreground",title:s.culprit,children:s.culprit}),o!==void 0&&r("p",{className:"text-xs text-destructive","data-testid":`issues-action-error-${s.hash}`,role:"alert",children:o})]}),r(f,{children:r(q,{"data-testid":`issues-status-${s.hash}`,variant:Ke(s.status),children:s.status})}),r(f,{children:c(he,{disabled:i,onValueChange:se(s),value:s.severity??P,children:[r(ue,{"aria-label":a("Set severity"),className:"h-7 w-[110px]","data-testid":`issues-severity-${s.hash}`,children:r(me,{placeholder:a("—"),children:s.severity===void 0?r("span",{className:"text-muted-foreground",children:a("—")}):r(q,{variant:Me(s.severity),children:s.severity})})}),c(pe,{children:[be.map(ze),r(Z,{value:P,children:a("Clear")})]})]})}),r(f,{children:r(ce,{"aria-label":a("Assignee"),className:"h-7 w-32","data-testid":`issues-assignee-${s.hash}`,defaultValue:s.assignee??"",disabled:i,onKeyDown:ee(s),placeholder:a("Unassigned")},s.assignee??"")}),r(f,{className:"text-right",children:r(q,{variant:"secondary",children:s.count})}),r(f,{className:"text-xs tabular-nums text-muted-foreground",children:$e(s.lastSeen)}),r(f,{className:"text-right",children:c("div",{className:"flex justify-end gap-1",children:[s.status!=="resolved"&&r(L,{"data-testid":`issues-resolve-${s.hash}`,disabled:i,onClick:()=>{I(n(s.hash,Ae,{}))},size:"xs",variant:"outline",children:a("Resolve")}),s.status!=="ignored"&&r(L,{"data-testid":`issues-ignore-${s.hash}`,disabled:i,onClick:()=>{I(n(s.hash,Ce,{}))},size:"xs",variant:"ghost",children:a("Ignore")}),s.status!=="open"&&r(L,{"data-testid":`issues-reopen-${s.hash}`,disabled:i,onClick:()=>{I(n(s.hash,Y,{assignee:s.assignee??null}))},size:"xs",variant:"ghost",children:a("Reopen")})]})})]},s.hash)})})]})})})]}),e[6]=j,e[7]=V,e[8]=$,e[9]=k,e[10]=u,e[11]=g,e[12]=w,e[13]=D,e[14]=h,e[15]=l,e[16]=a,e[17]=E}else E=e[17];return E};function Re(){return new Set}function Te(){return new Map}function ze(t){return r(Z,{value:t,children:t},t)}export{Qe as IssuesPanel};
1
+ import{c as xe}from"react/compiler-runtime";import{findIssueSolution as Ie,flattenHint as Se}from"@lunora/errors";import{useLunora as Ne}from"@lunora/react";import{useState as re}from"react";import{L as ke}from"../packem_shared/live-status-CGW2JHf_.js";import{ShardInput as Me}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as ge}from"../packem_shared/badge-BbuuAio7.js";import{u as oe}from"../packem_shared/button-BkCrNcAs.js";import{c as Ae,u as Ce}from"../packem_shared/card-CIDGUN6K.js";import{E as Te}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as Ke}from"../packem_shared/input-JHu63lTv.js";import{N as _e,y as Ee,_ as Le,k as be,w as Re}from"../packem_shared/select-Bul-DeII.js";import{n as ze,d as Fe,m as ve,p as q,f as Ve,u as j}from"../packem_shared/table-DdJBrClo.js";import{K as We}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{u as je}from"../packem_shared/use-async-submit-DLNCqLFq.js";import qe from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as ye}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as le}from"../packem_shared/ADMIN_FUNCTIONS-CpgIo9pj.js";import{i as De,f as ne,a as de,c as we,e as Oe}from"../packem_shared/internal-AtZ4bTal.js";import{jsx as s,jsxs as I,Fragment as Be}from"react/jsx-runtime";const fe="none",Ge=["all","open","resolved","ignored"],Ue=["critical","high","medium","low"],He=de(le.resolveIssue),Je=de(le.ignoreIssue),$e=de(le.assignIssue),Pe=de(le.setIssueSeverity),Qe=de(le.explainIssue),Xe=n=>Array.isArray(n?.issues)?n.issues:[],Ye=n=>n==="resolved"?"success":n==="ignored"?"secondary":"warning",Ze=n=>n==="critical"?"destructive":n==="high"?"warning":n==="medium"?"info":"secondary",et=n=>{const e=xe(44),{expanded:o,issue:t,shardKey:S}=n,i=Ne(),l=ye(),[a,C]=re(void 0),{busy:T,error:K,run:F}=je();let _;e[0]!==i||e[1]!==t||e[2]!==F||e[3]!==S?(_=()=>{C(void 0),F(async()=>{const g={culprit:t.culprit,sampleMessage:t.sampleMessage,title:t.title},w=await i.query(Qe,g,we(S));C(w)})},e[0]=i,e[1]=t,e[2]=F,e[3]=S,e[4]=_):_=e[4];const E=_;if(!o)return null;let d;if(e[5]!==t.sampleMessage){const g=Ie(t.sampleMessage);d=g===void 0?void 0:Se(g.body),e[5]=t.sampleMessage,e[6]=d}else d=e[6];const M=d,L=`issues-detail-${t.hash}`;let h;e[7]!==t.sampleMessage?(h=s("p",{className:"whitespace-pre-wrap font-mono text-xs text-muted-foreground",children:t.sampleMessage}),e[7]=t.sampleMessage,e[8]=h):h=e[8];let f;e[9]!==l?(f=l("Suggested fix"),e[9]=l,e[10]=f):f=e[10];let v;e[11]!==f?(v=s("div",{className:"text-xs font-medium text-muted-foreground",children:f}),e[11]=f,e[12]=v):v=e[12];let $;e[13]!==M||e[14]!==t.hash||e[15]!==l?($=M===void 0?s("p",{className:"mt-1 text-sm text-muted-foreground","data-testid":`issues-hint-empty-${t.hash}`,children:l("No known fix for this error yet.")}):s("p",{className:"mt-1 whitespace-pre-wrap text-sm","data-testid":`issues-hint-${t.hash}`,children:M}),e[13]=M,e[14]=t.hash,e[15]=l,e[16]=$):$=e[16];let c;e[17]!==v||e[18]!==$?(c=I("div",{children:[v,$]}),e[17]=v,e[18]=$,e[19]=c):c=e[19];const A=`issues-explain-${t.hash}`;let u;e[20]!==T||e[21]!==l?(u=l(T?"Explaining…":"Explain in plain language"),e[20]=T,e[21]=l,e[22]=u):u=e[22];let N;e[23]!==T||e[24]!==E||e[25]!==u||e[26]!==A?(N=s("div",{children:s(oe,{"data-testid":A,disabled:T,onClick:E,size:"sm",type:"button",variant:"outline",children:u})}),e[23]=T,e[24]=E,e[25]=u,e[26]=A,e[27]=N):N=e[27];let m;e[28]!==K||e[29]!==t.hash?(m=K!==null&&s("p",{className:"text-xs text-destructive","data-testid":`issues-explain-error-${t.hash}`,role:"alert",children:K}),e[28]=K,e[29]=t.hash,e[30]=m):m=e[30];let x;e[31]!==a||e[32]!==t.hash||e[33]!==l?(x=a!==void 0&&(a.degraded?s("p",{className:"text-xs text-muted-foreground","data-testid":`issues-degraded-${t.hash}`,children:a.reason==="no-ai-binding"?l("No AI binding is configured. Wire an AI binding to enable plain-language explanations — the suggested fix above is always available."):l("The AI model could not explain this error right now. The suggested fix above still applies.")}):I("div",{"data-testid":`issues-explanation-${t.hash}`,children:[s("div",{className:"text-xs font-medium text-muted-foreground",children:l("AI explanation")}),s("p",{className:"mt-1 whitespace-pre-wrap text-sm",children:a.explanation}),a.groundedId===void 0&&s("p",{className:"mt-1 text-xs text-muted-foreground","data-testid":`issues-ungrounded-${t.hash}`,children:l("No catalog fix matched this error, so this explanation is the model's own reading of the message. Verify before acting on it.")}),s("p",{className:"mt-1 text-[0.7rem] text-muted-foreground",children:l("Generated by {model}",{model:a.model})})]})),e[31]=a,e[32]=t.hash,e[33]=l,e[34]=x):x=e[34];let p;e[35]!==N||e[36]!==m||e[37]!==x||e[38]!==h||e[39]!==c?(p=s(j,{className:"bg-muted/30",colSpan:7,children:I("div",{className:"flex flex-col gap-3 py-1",children:[h,c,N,m,x]})}),e[35]=N,e[36]=m,e[37]=x,e[38]=h,e[39]=c,e[40]=p):p=e[40];let b;return e[41]!==p||e[42]!==L?(b=s(ve,{"data-testid":L,children:p}),e[41]=p,e[42]=L,e[43]=b):b=e[43],b},tt=n=>{const e=xe(119),{busy:o,issue:t,rowError:S,runTriage:i,shardKey:l}=n,a=ye(),[C,T]=re(!1);let K;e[0]===Symbol.for("react.memo_cache_sentinel")?(K=()=>{T(st)},e[0]=K):K=e[0];const F=K;let _;e[1]!==t.hash||e[2]!==i?(_=ie=>{const ce=ie===null||ie===fe?null:ie;ne(i(t.hash,Pe,{severity:ce}))},e[1]=t.hash,e[2]=i,e[3]=_):_=e[3];const E=_;let d;e[4]!==t.hash||e[5]!==i?(d=ie=>{if(ie.key!=="Enter")return;const ce=ie.currentTarget.value.trim();ne(i(t.hash,$e,{assignee:ce===""?null:ce}))},e[4]=t.hash,e[5]=i,e[6]=d):d=e[6];const M=d,L=`issues-row-${t.hash}`;let h;e[7]!==a?(h=a("Toggle issue details"),e[7]=a,e[8]=h):h=e[8];const f=`issues-toggle-${t.hash}`,v=`mt-1 size-3 shrink-0 text-muted-foreground transition-transform ${C?"rotate-90":""}`;let $;e[9]===Symbol.for("react.memo_cache_sentinel")?($=s("path",{d:"m9 6 6 6-6 6"}),e[9]=$):$=e[9];let c;e[10]!==v?(c=s("svg",{"aria-hidden":"true",className:v,fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,viewBox:"0 0 24 24",children:$}),e[10]=v,e[11]=c):c=e[11];let A;e[12]!==t.title?(A=s("span",{className:"block truncate font-medium",title:t.title,children:t.title}),e[12]=t.title,e[13]=A):A=e[13];let u;e[14]!==t.culprit?(u=s("span",{className:"block truncate font-mono text-xs text-muted-foreground",title:t.culprit,children:t.culprit}),e[14]=t.culprit,e[15]=u):u=e[15];let N;e[16]!==A||e[17]!==u?(N=I("span",{className:"min-w-0",children:[A,u]}),e[16]=A,e[17]=u,e[18]=N):N=e[18];let m;e[19]!==C||e[20]!==N||e[21]!==h||e[22]!==f||e[23]!==c?(m=I("button",{"aria-expanded":C,"aria-label":h,className:"flex w-full items-start gap-2 text-left","data-testid":f,onClick:F,type:"button",children:[c,N]}),e[19]=C,e[20]=N,e[21]=h,e[22]=f,e[23]=c,e[24]=m):m=e[24];let x;e[25]!==t.hash||e[26]!==S?(x=S!==void 0&&s("p",{className:"mt-1 text-xs text-destructive","data-testid":`issues-action-error-${t.hash}`,role:"alert",children:S}),e[25]=t.hash,e[26]=S,e[27]=x):x=e[27];let p;e[28]!==m||e[29]!==x?(p=I(j,{className:"max-w-80",children:[m,x]}),e[28]=m,e[29]=x,e[30]=p):p=e[30];const b=`issues-status-${t.hash}`;let g;e[31]!==t.status?(g=Ye(t.status),e[31]=t.status,e[32]=g):g=e[32];let w;e[33]!==t.status||e[34]!==b||e[35]!==g?(w=s(j,{children:s(ge,{"data-testid":b,variant:g,children:t.status})}),e[33]=t.status,e[34]=b,e[35]=g,e[36]=w):w=e[36];const z=t.severity??fe;let R;e[37]!==a?(R=a("Set severity"),e[37]=a,e[38]=R):R=e[38];const r=`issues-severity-${t.hash}`;let V;e[39]!==a?(V=a("—"),e[39]=a,e[40]=V):V=e[40];let W;e[41]!==t.severity||e[42]!==a?(W=t.severity===void 0?s("span",{className:"text-muted-foreground",children:a("—")}):s(ge,{variant:Ze(t.severity),children:t.severity}),e[41]=t.severity,e[42]=a,e[43]=W):W=e[43];let y;e[44]!==V||e[45]!==W?(y=s(_e,{placeholder:V,children:W}),e[44]=V,e[45]=W,e[46]=y):y=e[46];let k;e[47]!==R||e[48]!==r||e[49]!==y?(k=s(Ee,{"aria-label":R,className:"h-7 w-[110px]","data-testid":r,children:y}),e[47]=R,e[48]=r,e[49]=y,e[50]=k):k=e[50];let D;e[51]===Symbol.for("react.memo_cache_sentinel")?(D=Ue.map(at),e[51]=D):D=e[51];let O;e[52]!==a?(O=a("Clear"),e[52]=a,e[53]=O):O=e[53];let B;e[54]!==O?(B=I(Le,{children:[D,s(be,{value:fe,children:O})]}),e[54]=O,e[55]=B):B=e[55];let G;e[56]!==o||e[57]!==E||e[58]!==z||e[59]!==k||e[60]!==B?(G=s(j,{children:I(Re,{disabled:o,onValueChange:E,value:z,children:[k,B]})}),e[56]=o,e[57]=E,e[58]=z,e[59]=k,e[60]=B,e[61]=G):G=e[61];let U;e[62]!==a?(U=a("Assignee"),e[62]=a,e[63]=U):U=e[63];const ue=`issues-assignee-${t.hash}`,me=t.assignee??"",pe=t.assignee??"";let H;e[64]!==a?(H=a("Unassigned"),e[64]=a,e[65]=H):H=e[65];let J;e[66]!==o||e[67]!==M||e[68]!==U||e[69]!==ue||e[70]!==me||e[71]!==pe||e[72]!==H?(J=s(j,{children:s(Ke,{"aria-label":U,className:"h-7 w-32","data-testid":ue,defaultValue:me,disabled:o,onKeyDown:M,placeholder:H},pe)}),e[66]=o,e[67]=M,e[68]=U,e[69]=ue,e[70]=me,e[71]=pe,e[72]=H,e[73]=J):J=e[73];let P;e[74]!==t.count?(P=s(j,{className:"text-right",children:s(ge,{variant:"secondary",children:t.count})}),e[74]=t.count,e[75]=P):P=e[75];let Q;e[76]!==t.lastSeen?(Q=De(t.lastSeen),e[76]=t.lastSeen,e[77]=Q):Q=e[77];let X;e[78]!==Q?(X=s(j,{className:"text-xs tabular-nums text-muted-foreground",children:Q}),e[78]=Q,e[79]=X):X=e[79];let Y;e[80]!==o||e[81]!==t.hash||e[82]!==t.status||e[83]!==i||e[84]!==a?(Y=t.status!=="resolved"&&s(oe,{"data-testid":`issues-resolve-${t.hash}`,disabled:o,onClick:()=>{ne(i(t.hash,He,{}))},size:"xs",variant:"outline",children:a("Resolve")}),e[80]=o,e[81]=t.hash,e[82]=t.status,e[83]=i,e[84]=a,e[85]=Y):Y=e[85];let Z;e[86]!==o||e[87]!==t.hash||e[88]!==t.status||e[89]!==i||e[90]!==a?(Z=t.status!=="ignored"&&s(oe,{"data-testid":`issues-ignore-${t.hash}`,disabled:o,onClick:()=>{ne(i(t.hash,Je,{}))},size:"xs",variant:"ghost",children:a("Ignore")}),e[86]=o,e[87]=t.hash,e[88]=t.status,e[89]=i,e[90]=a,e[91]=Z):Z=e[91];let ee;e[92]!==o||e[93]!==t.assignee||e[94]!==t.hash||e[95]!==t.status||e[96]!==i||e[97]!==a?(ee=t.status!=="open"&&s(oe,{"data-testid":`issues-reopen-${t.hash}`,disabled:o,onClick:()=>{ne(i(t.hash,$e,{assignee:t.assignee??null}))},size:"xs",variant:"ghost",children:a("Reopen")}),e[92]=o,e[93]=t.assignee,e[94]=t.hash,e[95]=t.status,e[96]=i,e[97]=a,e[98]=ee):ee=e[98];let te;e[99]!==Y||e[100]!==Z||e[101]!==ee?(te=s(j,{className:"text-right",children:I("div",{className:"flex justify-end gap-1",children:[Y,Z,ee]})}),e[99]=Y,e[100]=Z,e[101]=ee,e[102]=te):te=e[102];let se;e[103]!==p||e[104]!==w||e[105]!==G||e[106]!==J||e[107]!==P||e[108]!==X||e[109]!==L||e[110]!==te?(se=I(ve,{"data-testid":L,children:[p,w,G,J,P,X,te]}),e[103]=p,e[104]=w,e[105]=G,e[106]=J,e[107]=P,e[108]=X,e[109]=L,e[110]=te,e[111]=se):se=e[111];let ae;e[112]!==C||e[113]!==t||e[114]!==l?(ae=s(et,{expanded:C,issue:t,shardKey:l},t.sampleMessage),e[112]=C,e[113]=t,e[114]=l,e[115]=ae):ae=e[115];let he;return e[116]!==se||e[117]!==ae?(he=I(Be,{children:[se,ae]}),e[116]=se,e[117]=ae,e[118]=he):he=e[118],he},kt=n=>{const e=xe(38),{initialShardKey:o}=n,t=ye(),S=Ne(),[i,l]=re(o??""),[a,C]=re("all"),[T,K]=re(it),[F,_]=re(rt);let E;e[0]!==i?(E=i.trim(),e[0]=i,e[1]=E):E=e[1];const d=qe(E,400);let M;e[2]!==a?(M=a==="all"?{}:{status:a},e[2]=a,e[3]=M):M=e[3];let L;e[4]!==d?(L={live:!0,shardKey:d},e[4]=d,e[5]=L):L=e[5];const{data:h,error:f,liveError:v}=We(le.getIssues,M,L),$=h!==void 0;let c;if(e[6]!==F||e[7]!==T||e[8]!==S||e[9]!==h||e[10]!==d||e[11]!==f||e[12]!==v||e[13]!==$||e[14]!==i||e[15]!==a||e[16]!==t){const A=Xe(h);let u;e[18]!==S||e[19]!==d?(u=async(r,V,W)=>{_(y=>{if(!y.has(r))return y;const k=new Map(y);return k.delete(r),k}),K(y=>new Set(y).add(r));try{await S.query(V,{...W,hash:r},we(d))}catch(y){const k=Oe(y);_(D=>new Map(D).set(r,k))}K(y=>{const k=new Set(y);return k.delete(r),k})},e[18]=S,e[19]=d,e[20]=u):u=e[20];const N=u;let m;e[21]!==t?(m=r=>t(r==="all"?"All":r==="open"?"Open":r==="resolved"?"Resolved":"Ignored"),e[21]=t,e[22]=m):m=e[22];const x=m;let p;e[23]!==f?(p=f!==null&&s("p",{className:"text-sm text-destructive","data-testid":"issues-error",role:"alert",children:f}),e[23]=f,e[24]=p):p=e[24];let b;e[25]!==i?(b=s(Me,{onChange:l,testId:"issues-shard-input",value:i}),e[25]=i,e[26]=b):b=e[26];let g;e[27]!==v?(g=s(ke,{message:v,prefix:"issues"}),e[27]=v,e[28]=g):g=e[28];let w;e[29]!==a||e[30]!==x?(w=Ge.map(r=>s(oe,{"data-active":a===r?"":void 0,"data-testid":`issues-filter-${r}`,onClick:()=>{C(r)},size:"xs",variant:a===r?"default":"outline",children:x(r)},r)),e[29]=a,e[30]=x,e[31]=w):w=e[31];let z;e[32]!==w?(z=s("div",{className:"ms-auto flex items-center gap-1","data-testid":"issues-status-filter",role:"group",children:w}),e[32]=w,e[33]=z):z=e[33];let R;e[34]!==z||e[35]!==b||e[36]!==g?(R=I("div",{className:"flex flex-wrap items-center gap-2",children:[b,g,z]}),e[34]=z,e[35]=b,e[36]=g,e[37]=R):R=e[37],c=I("div",{className:"flex flex-col gap-6","data-testid":"lunora-issues-panel",children:[p,R,$&&A.length===0?s(Te,{description:t("No grouped errors yet. When a function throws or a container crashes, matching errors fold into a single issue here."),testId:"issues-empty",title:t("No issues")}):s(Ae,{className:"overflow-hidden py-0",children:s(Ce,{className:"px-0",children:I(ze,{"data-testid":"issues-table",children:[s(Fe,{children:I(ve,{children:[s(q,{children:t("Issue")}),s(q,{children:t("Status")}),s(q,{children:t("Severity")}),s(q,{children:t("Assignee")}),s(q,{className:"text-right",children:t("Events")}),s(q,{children:t("Last seen")}),s(q,{className:"text-right",children:t("Actions")})]})}),s(Ve,{children:A.map(r=>s(tt,{busy:T.has(r.hash),issue:r,rowError:F.get(r.hash),runTriage:N,shardKey:d},r.hash))})]})})})]}),e[6]=F,e[7]=T,e[8]=S,e[9]=h,e[10]=d,e[11]=f,e[12]=v,e[13]=$,e[14]=i,e[15]=a,e[16]=t,e[17]=c}else c=e[17];return c};function st(n){return!n}function at(n){return s(be,{value:n,children:n},n)}function it(){return new Set}function rt(){return new Map}export{kt as IssuesPanel};
@@ -1 +1 @@
1
- import{useLunora as ee}from"@lunora/react";import{useState as Z,useReducer as ae,useEffect as le}from"react";import{c as ve,u as pe}from"../packem_shared/card-CIDGUN6K.js";import{E as Fe}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as ye,d as he,m as X,p as Y,f as ke,u as Q}from"../packem_shared/table-DdJBrClo.js";import{useT as G}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{f as z,e as H,k as Ke,g as ne}from"../packem_shared/internal-AtZ4bTal.js";import{u as B}from"../packem_shared/button-BkCrNcAs.js";import{f as de}from"../packem_shared/checkbox-StT4Gob6.js";import{u as re}from"../packem_shared/input-JHu63lTv.js";import{g as se,c as ie,N as oe,v as ce}from"../packem_shared/studio-BHA7hnI3.js";import{c as te}from"react/compiler-runtime";import{p as q}from"../packem_shared/label-6uP1obNF.js";import{l as fe}from"../packem_shared/textarea-Bu2-jKAs.js";import{N as Ee,y as Ve,k as Me,_ as Te,w as Ie}from"../packem_shared/select-Bul-DeII.js";import{jsx as r,jsxs as $,Fragment as be}from"react/jsx-runtime";import{g as Oe}from"../packem_shared/badge-BbuuAio7.js";const _e=l=>{const e=l.trim();if(e==="")return;const n=Number(e);return Number.isFinite(n)&&n>0?Math.floor(n):void 0},Je=l=>l===void 0?"—":new Date(l*1e3).toISOString(),De=l=>new TextEncoder().encode(l).length,ge=l=>{if(l.trim()!=="")try{return JSON.stringify(JSON.parse(l),void 0,2)}catch{return}},xe=l=>{if(l.trim()==="")return!0;try{return JSON.parse(l),!0}catch{return!1}},Ne=[{key:"seconds",seconds:1},{key:"minutes",seconds:60},{key:"hours",seconds:3600},{key:"days",seconds:86400}],ue=(l,e)=>{const n=l.trim();if(n==="")return"";const c=Number(n),s=Ne.find(v=>v.key===e)?.seconds??1;return Number.isFinite(c)&&c>0?String(Math.round(c*s)):n},Ce=l=>{const e=l.trim();if(e==="")return!0;const n=Number(e);return Number.isInteger(n)&&n>=60},we=(l,e,n,c)=>{const s=_e(l.ttl);return{expiration:s===void 0?c:void 0,expirationTtl:s,key:e,metadata:l.metadata.trim()===""?void 0:JSON.parse(l.metadata),namespace:n,value:l.value}},$e=l=>{const e=te(60),{helper:n,id:c,invalid:s,onChange:v,testId:i}=l,t=G(),[a,p]=Z(""),[o,g]=Z("seconds");let f;e[0]!==v||e[1]!==o?(f=b=>{p(b.target.value),v(ue(b.target.value,o))},e[0]=v,e[1]=o,e[2]=f):f=e[2];const I=f;let V;e[3]!==a||e[4]!==v?(V=b=>{b!==null&&(g(b),v(ue(a,b)))},e[3]=a,e[4]=v,e[5]=V):V=e[5];const O=V;let y;e[6]!==t?(y=t("days"),e[6]=t,e[7]=y):y=e[7];let m;e[8]!==t?(m=t("hours"),e[8]=t,e[9]=m):m=e[9];let h;e[10]!==t?(h=t("minutes"),e[10]=t,e[11]=h):h=e[11];let x;e[12]!==t?(x=t("seconds"),e[12]=t,e[13]=x):x=e[13];let N;e[14]!==y||e[15]!==m||e[16]!==h||e[17]!==x?(N={days:y,hours:m,minutes:h,seconds:x},e[14]=y,e[15]=m,e[16]=h,e[17]=x,e[18]=N):N=e[18];const C=N;let k;e[19]!==t?(k=t("Expires after"),e[19]=t,e[20]=k):k=e[20];let w;e[21]!==c||e[22]!==k?(w=r(q,{className:"text-xs",htmlFor:c,children:k}),e[21]=c,e[22]=k,e[23]=w):w=e[23];let F;e[24]!==t?(F=t("No expiration"),e[24]=t,e[25]=F):F=e[25];let _;e[26]!==a||e[27]!==c||e[28]!==s||e[29]!==I||e[30]!==F||e[31]!==i?(_=r(re,{"aria-invalid":s,className:"flex-1","data-testid":i,id:c,inputMode:"numeric",onChange:I,placeholder:F,value:a}),e[26]=a,e[27]=c,e[28]=s,e[29]=I,e[30]=F,e[31]=i,e[32]=_):_=e[32];let M;e[33]!==t?(M=t("TTL unit"),e[33]=t,e[34]=M):M=e[34];const D=`${i}-unit`;let J;e[35]===Symbol.for("react.memo_cache_sentinel")?(J=r(Ee,{}),e[35]=J):J=e[35];let d;e[36]!==M||e[37]!==D?(d=r(Ve,{"aria-label":M,className:"w-[7.5rem]","data-testid":D,children:J}),e[36]=M,e[37]=D,e[38]=d):d=e[38];let u;e[39]!==C?(u=Ne.map(b=>r(Me,{value:b.key,children:C[b.key]},b.key)),e[39]=C,e[40]=u):u=e[40];let E;e[41]!==u?(E=r(Te,{children:u}),e[41]=u,e[42]=E):E=e[42];let S;e[43]!==O||e[44]!==d||e[45]!==E||e[46]!==o?(S=$(Ie,{onValueChange:O,value:o,children:[d,E]}),e[43]=O,e[44]=d,e[45]=E,e[46]=o,e[47]=S):S=e[47];let T;e[48]!==_||e[49]!==S?(T=$("div",{className:"flex gap-2",children:[_,S]}),e[48]=_,e[49]=S,e[50]=T):T=e[50];let K;e[51]!==n||e[52]!==s||e[53]!==t||e[54]!==i?(K=s?r("p",{className:"text-xs text-destructive","data-testid":`${i}-invalid`,children:t("TTL must be at least 60 seconds.")}):n!==void 0&&r("p",{className:"text-xs text-muted-foreground",children:n}),e[51]=n,e[52]=s,e[53]=t,e[54]=i,e[55]=K):K=e[55];let L;return e[56]!==T||e[57]!==K||e[58]!==w?(L=$("div",{className:"mb-3 grid gap-1",children:[w,T,K]}),e[56]=T,e[57]=K,e[58]=w,e[59]=L):L=e[59],L},Se=l=>{const e=te(36),{id:n,invalidTestId:c,onChange:s,testId:v,valid:i,value:t}=l,a=G();let p;e[0]!==t?(p=ge(t),e[0]=t,e[1]=p):p=e[1];const o=p;let g;e[2]!==a?(g=a("Metadata (JSON)"),e[2]=a,e[3]=g):g=e[3];let f;e[4]!==n||e[5]!==g?(f=r(q,{className:"text-xs",htmlFor:n,children:g}),e[4]=n,e[5]=g,e[6]=f):f=e[6];const I=`${v}-format`,V=o===void 0;let O;e[7]!==o||e[8]!==s?(O=()=>{o!==void 0&&s(o)},e[7]=o,e[8]=s,e[9]=O):O=e[9];let y;e[10]!==a?(y=a("Format JSON"),e[10]=a,e[11]=y):y=e[11];let m;e[12]!==I||e[13]!==V||e[14]!==O||e[15]!==y?(m=r(B,{"data-testid":I,disabled:V,onClick:O,size:"sm",variant:"outline",children:y}),e[12]=I,e[13]=V,e[14]=O,e[15]=y,e[16]=m):m=e[16];let h;e[17]!==f||e[18]!==m?(h=$("div",{className:"flex items-center justify-between gap-2",children:[f,m]}),e[17]=f,e[18]=m,e[19]=h):h=e[19];const x=!i;let N;e[20]!==s?(N=F=>{s(F.target.value)},e[20]=s,e[21]=N):N=e[21];let C;e[22]!==n||e[23]!==x||e[24]!==N||e[25]!==v||e[26]!==t?(C=r(fe,{"aria-invalid":x,className:"min-h-[4rem] font-mono text-xs","data-testid":v,id:n,onChange:N,value:t}),e[22]=n,e[23]=x,e[24]=N,e[25]=v,e[26]=t,e[27]=C):C=e[27];let k;e[28]!==c||e[29]!==a||e[30]!==i?(k=!i&&r("p",{className:"text-xs text-destructive","data-testid":c,children:a("Metadata must be valid JSON.")}),e[28]=c,e[29]=a,e[30]=i,e[31]=k):k=e[31];let w;return e[32]!==C||e[33]!==k||e[34]!==h?(w=$("div",{className:"mb-3 grid gap-1",children:[h,C,k]}),e[32]=C,e[33]=k,e[34]=h,e[35]=w):w=e[35],w},Le={busy:!1,error:null,metadata:"",name:"",ttl:"",value:""},Be=(l,e)=>{switch(e.type){case"setField":return{...l,[e.field]:e.value};case"submitFailed":return{...l,busy:!1,error:e.error};case"submitStart":return{...l,busy:!0,error:null};default:return l}},Pe=l=>{const e=te(73),{namespace:n,onCancel:c,onCreated:s}=l,v=ee(),i=G(),[t,a]=ae(Be,Le);let p;e[0]!==t.metadata?(p=xe(t.metadata),e[0]=t.metadata,e[1]=p):p=e[1];const o=p;let g;e[2]!==t.ttl?(g=Ce(t.ttl),e[2]=t.ttl,e[3]=g):g=e[3];const f=g;let I;e[4]!==o||e[5]!==t.busy||e[6]!==t.name||e[7]!==f?(I=t.name.trim()!==""&&o&&f&&!t.busy,e[4]=o,e[5]=t.busy,e[6]=t.name,e[7]=f,e[8]=I):I=e[8];const V=I;let O;e[9]!==V||e[10]!==v||e[11]!==n||e[12]!==s||e[13]!==t.metadata||e[14]!==t.name||e[15]!==t.ttl||e[16]!==t.value?(O=()=>{V&&(a({type:"submitStart"}),z((async()=>{try{await v.putKvValue(we({metadata:t.metadata,ttl:t.ttl,value:t.value},t.name,n)),s()}catch(j){a({error:H(j),type:"submitFailed"})}})()))},e[9]=V,e[10]=v,e[11]=n,e[12]=s,e[13]=t.metadata,e[14]=t.name,e[15]=t.ttl,e[16]=t.value,e[17]=O):O=e[17];const y=O;let m;e[18]!==i?(m=i("Key name"),e[18]=i,e[19]=m):m=e[19];let h;e[20]!==m?(h=r(q,{className:"text-xs",htmlFor:"kv-create-name",children:m}),e[20]=m,e[21]=h):h=e[21];let x;e[22]===Symbol.for("react.memo_cache_sentinel")?(x=j=>{a({field:"name",type:"setField",value:j.target.value})},e[22]=x):x=e[22];let N;e[23]!==i?(N=i("Key name"),e[23]=i,e[24]=N):N=e[24];let C;e[25]!==t.name||e[26]!==N?(C=r(re,{autoFocus:!0,"data-testid":"kv-create-name",id:"kv-create-name",onChange:x,placeholder:N,value:t.name}),e[25]=t.name,e[26]=N,e[27]=C):C=e[27];let k;e[28]!==h||e[29]!==C?(k=$("div",{className:"grid gap-1",children:[h,C]}),e[28]=h,e[29]=C,e[30]=k):k=e[30];let w;e[31]!==i?(w=i("Value"),e[31]=i,e[32]=w):w=e[32];let F;e[33]!==w?(F=r(q,{className:"text-xs",htmlFor:"kv-create-value",children:w}),e[33]=w,e[34]=F):F=e[34];let _;e[35]===Symbol.for("react.memo_cache_sentinel")?(_=j=>{a({field:"value",type:"setField",value:j.target.value})},e[35]=_):_=e[35];let M;e[36]!==t.value?(M=r(fe,{className:"min-h-[6rem] font-mono text-xs","data-testid":"kv-create-value",id:"kv-create-value",onChange:_,value:t.value}),e[36]=t.value,e[37]=M):M=e[37];let D;e[38]!==F||e[39]!==M?(D=$("div",{className:"grid gap-1",children:[F,M]}),e[38]=F,e[39]=M,e[40]=D):D=e[40];const J=!f;let d;e[41]===Symbol.for("react.memo_cache_sentinel")?(d=j=>{a({field:"ttl",type:"setField",value:j})},e[41]=d):d=e[41];let u;e[42]!==J?(u=r($e,{id:"kv-create-ttl",invalid:J,onChange:d,testId:"kv-create-ttl"}),e[42]=J,e[43]=u):u=e[43];let E;e[44]===Symbol.for("react.memo_cache_sentinel")?(E=j=>{a({field:"metadata",type:"setField",value:j})},e[44]=E):E=e[44];let S;e[45]!==o||e[46]!==t.metadata?(S=r(Se,{id:"kv-create-metadata",invalidTestId:"kv-create-metadata-invalid",onChange:E,testId:"kv-create-metadata",valid:o,value:t.metadata}),e[45]=o,e[46]=t.metadata,e[47]=S):S=e[47];const T=!V;let K;e[48]!==t.busy||e[49]!==i?(K=t.busy?i("Creating…"):i("Create key"),e[48]=t.busy,e[49]=i,e[50]=K):K=e[50];let L;e[51]!==y||e[52]!==T||e[53]!==K?(L=r(B,{"data-testid":"kv-create-submit",disabled:T,onClick:y,children:K}),e[51]=y,e[52]=T,e[53]=K,e[54]=L):L=e[54];const b=t.busy;let P;e[55]!==i?(P=i("Cancel"),e[55]=i,e[56]=P):P=e[56];let A;e[57]!==c||e[58]!==t.busy||e[59]!==P?(A=r(B,{"data-testid":"kv-create-cancel",disabled:b,onClick:c,variant:"outline",children:P}),e[57]=c,e[58]=t.busy,e[59]=P,e[60]=A):A=e[60];let R;e[61]!==L||e[62]!==A?(R=$("div",{className:"flex flex-wrap gap-2",children:[L,A]}),e[61]=L,e[62]=A,e[63]=R):R=e[63];let U;e[64]!==t.error?(U=t.error!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-create-error",role:"alert",children:t.error}),e[64]=t.error,e[65]=U):U=e[65];let W;return e[66]!==k||e[67]!==D||e[68]!==u||e[69]!==S||e[70]!==R||e[71]!==U?(W=$("div",{className:"grid gap-3 px-4 pb-4","data-testid":"kv-create-form",children:[k,D,u,S,R,U]}),e[66]=k,e[67]=D,e[68]=u,e[69]=S,e[70]=R,e[71]=U,e[72]=W):W=e[72],W},je={busy:"",editedMetadata:"",editedTtl:"",editedValue:"",loadError:null,loading:!0,value:null,writeError:null},Ae=(l,e)=>{switch(e.type){case"deleteStart":return{...l,busy:"deleting",writeError:null};case"editMetadata":return{...l,editedMetadata:e.value};case"editTtl":return{...l,editedTtl:e.value};case"editValue":return{...l,editedValue:e.value};case"loaded":return{...l,editedMetadata:e.metadata===null||e.metadata===void 0?"":JSON.stringify(e.metadata,null,2),editedValue:e.value??"",loading:!1,value:e.value};case"loadFailed":return{...l,loadError:e.error,loading:!1};case"saveOk":return{...l,busy:"",value:l.editedValue};case"saveStart":return{...l,busy:"saving",writeError:null};case"writeFailed":return{...l,busy:"",writeError:e.error};default:return l}},ze=l=>{const e=te(67),{expiration:n,keyName:c,namespace:s,onDeleted:v}=l,i=ee(),t=G(),[a,p]=ae(Ae,je);let o,g;e[0]!==i||e[1]!==c||e[2]!==s?(o=()=>{const b={cancelled:!1};return z((async()=>{try{const P=await i.getKvValue({key:c,namespace:s});b.cancelled||p({metadata:P.metadata,type:"loaded",value:P.value})}catch(P){const A=P;b.cancelled||p({error:H(A),type:"loadFailed"})}})()),()=>{b.cancelled=!0}},g=[i,s,c],e[0]=i,e[1]=c,e[2]=s,e[3]=o,e[4]=g):(o=e[3],g=e[4]),le(o,g);let f;e[5]===Symbol.for("react.memo_cache_sentinel")?(f=b=>{p({type:"editValue",value:b.target.value})},e[5]=f):f=e[5];const I=f;let V;e[6]===Symbol.for("react.memo_cache_sentinel")?(V=b=>{p({type:"editMetadata",value:b})},e[6]=V):V=e[6];const O=V;let y;e[7]!==a.editedValue?(y=ge(a.editedValue),e[7]=a.editedValue,e[8]=y):y=e[8];const m=y;let h;e[9]!==a.editedMetadata?(h=xe(a.editedMetadata),e[9]=a.editedMetadata,e[10]=h):h=e[10];const x=h;let N;e[11]!==a.editedTtl?(N=Ce(a.editedTtl),e[11]=a.editedTtl,e[12]=N):N=e[12];const C=N;let k;e[13]!==m?(k=()=>{m!==void 0&&p({type:"editValue",value:m})},e[13]=m,e[14]=k):k=e[14];const w=k;let F;e[15]!==i||e[16]!==n||e[17]!==c||e[18]!==x||e[19]!==s||e[20]!==a.editedMetadata||e[21]!==a.editedTtl||e[22]!==a.editedValue||e[23]!==t?(F=()=>{if(!x){p({error:t("Metadata must be valid JSON."),type:"writeFailed"});return}p({type:"saveStart"}),z((async()=>{try{await i.putKvValue(we({metadata:a.editedMetadata,ttl:a.editedTtl,value:a.editedValue},c,s,n)),p({type:"saveOk"})}catch(b){p({error:H(b),type:"writeFailed"})}})())},e[15]=i,e[16]=n,e[17]=c,e[18]=x,e[19]=s,e[20]=a.editedMetadata,e[21]=a.editedTtl,e[22]=a.editedValue,e[23]=t,e[24]=F):F=e[24];const _=F;let M;e[25]!==i||e[26]!==c||e[27]!==s||e[28]!==v?(M=()=>{p({type:"deleteStart"}),z((async()=>{try{await i.deleteKvKey({key:c,namespace:s}),v(c)}catch(b){p({error:H(b),type:"writeFailed"})}})())},e[25]=i,e[26]=c,e[27]=s,e[28]=v,e[29]=M):M=e[29];const D=M;let J;e[30]!==c?(J=()=>{ne(c)},e[30]=c,e[31]=J):J=e[31];let d;e[32]!==t?(d=t("Copy key"),e[32]=t,e[33]=d):d=e[33];let u;e[34]!==J||e[35]!==d?(u=r("div",{className:"mb-2 flex justify-end",children:r(B,{"data-testid":"kv-copy-key-btn",onClick:J,size:"sm",variant:"outline",children:d})}),e[34]=J,e[35]=d,e[36]=u):u=e[36];let E;e[37]!==a.loadError?(E=a.loadError!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-value-error",role:"alert",children:a.loadError}),e[37]=a.loadError,e[38]=E):E=e[38];let S;e[39]!==a.loading||e[40]!==t?(S=a.loading&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-value-loading",children:t("Loading…")}),e[39]=a.loading,e[40]=t,e[41]=S):S=e[41];let T;e[42]!==m||e[43]!==x||e[44]!==D||e[45]!==w||e[46]!==_||e[47]!==a.busy||e[48]!==a.editedMetadata||e[49]!==a.editedValue||e[50]!==a.loading||e[51]!==a.value||e[52]!==a.writeError||e[53]!==t||e[54]!==C?(T=!a.loading&&a.value!==null&&$(be,{children:[$("div",{className:"mb-1 flex flex-wrap items-center gap-2",children:[r(q,{className:"text-xs",htmlFor:"kv-value-editor",children:t("Value")}),m!==void 0&&r(Oe,{variant:"secondary",children:t("JSON")}),r("span",{className:"ml-auto text-xs tabular-nums text-muted-foreground","data-testid":"kv-value-size",children:Ke(De(a.editedValue))})]}),r("textarea",{"aria-label":t("KV value"),className:"mb-2 min-h-[8rem] w-full rounded border border-border bg-muted/30 p-2 font-mono text-xs","data-testid":"kv-value-editor",id:"kv-value-editor",onChange:I,value:a.editedValue}),$("div",{className:"mb-3 flex flex-wrap gap-2",children:[r(B,{"data-testid":"kv-format-btn",disabled:m===void 0,onClick:w,size:"sm",variant:"outline",children:t("Format JSON")}),r(B,{"data-testid":"kv-copy-value-btn",onClick:()=>{ne(a.editedValue)},size:"sm",variant:"outline",children:t("Copy value")})]}),r($e,{helper:t("Leave blank to keep the current expiration."),id:"kv-ttl-input",invalid:!C,onChange:b=>{p({type:"editTtl",value:b})},testId:"kv-ttl-input"}),r(Se,{id:"kv-metadata-editor",invalidTestId:"kv-metadata-invalid",onChange:O,testId:"kv-metadata-editor",valid:x,value:a.editedMetadata}),$("div",{className:"flex flex-wrap gap-2",children:[r(B,{"data-testid":"kv-save-btn",disabled:a.busy!==""||!x||!C,onClick:_,children:a.busy==="saving"?t("Saving…"):t("Save")}),r(B,{"data-testid":"kv-delete-btn",disabled:a.busy!=="",onClick:D,variant:"destructive",children:a.busy==="deleting"?t("Deleting…"):t("Delete")})]}),a.writeError!==null&&r("p",{className:"mt-2 text-sm text-destructive","data-testid":"kv-save-error",role:"alert",children:a.writeError})]}),e[42]=m,e[43]=x,e[44]=D,e[45]=w,e[46]=_,e[47]=a.busy,e[48]=a.editedMetadata,e[49]=a.editedValue,e[50]=a.loading,e[51]=a.value,e[52]=a.writeError,e[53]=t,e[54]=C,e[55]=T):T=e[55];let K;e[56]!==a.loadError||e[57]!==a.loading||e[58]!==a.value||e[59]!==t?(K=!a.loading&&a.value===null&&a.loadError===null&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-absent",children:t("Key is absent or has no value.")}),e[56]=a.loadError,e[57]=a.loading,e[58]=a.value,e[59]=t,e[60]=K):K=e[60];let L;return e[61]!==u||e[62]!==E||e[63]!==S||e[64]!==T||e[65]!==K?(L=$("div",{className:"px-4 pb-4","data-testid":"kv-value-section",children:[u,E,S,T,K]}),e[61]=u,e[62]=E,e[63]=S,e[64]=T,e[65]=K,e[66]=L):L=e[66],L},me=100,He={appliedPrefix:"",bulk:[],bulkBusy:!1,bulkError:null,cursor:null,keys:null,listComplete:!1,loadError:null,loading:!1,prefixInput:"",reloadNonce:0,selectedKey:null},Re=(l,e)=>{switch(e.type){case"appendPage":return{...l,cursor:e.cursor,keys:[...l.keys??[],...e.keys],listComplete:e.listComplete,loading:!1};case"applyFilter":return{...l,appliedPrefix:l.prefixInput,bulk:[],bulkError:null,cursor:null,keys:null,listComplete:!1,selectedKey:null};case"bulkDeleted":{const n=new Set(e.deleted);return{...l,bulk:l.bulk.filter(c=>!n.has(c)),bulkBusy:!1,bulkError:e.error,keys:l.keys===null?null:l.keys.filter(c=>!n.has(c.name)),selectedKey:l.selectedKey!==null&&n.has(l.selectedKey)?null:l.selectedKey}}case"bulkDeleteStart":return{...l,bulkBusy:!0,bulkError:null};case"firstPage":return{...l,cursor:e.cursor,keys:e.keys,listComplete:e.listComplete,loading:!1};case"keyDeleted":return{...l,bulk:l.bulk.filter(n=>n!==e.name),keys:l.keys===null?null:l.keys.filter(n=>n.name!==e.name),selectedKey:null};case"loadFailed":return{...l,loadError:e.error,loading:!1};case"loadStart":return{...l,loadError:null,loading:!0};case"prefixInput":return{...l,prefixInput:e.value};case"reload":return{...l,bulk:[],bulkError:null,reloadNonce:l.reloadNonce+1,selectedKey:null};case"selectKey":return{...l,selectedKey:e.name};case"toggleAllBulk":return{...l,bulk:e.names};case"toggleBulk":return{...l,bulk:l.bulk.includes(e.name)?l.bulk.filter(n=>n!==e.name):[...l.bulk,e.name]};default:return l}},Ue=({namespace:l})=>{const e=ee(),n=G(),[c,s]=ae(Re,He),{appliedPrefix:v,bulk:i,bulkBusy:t,bulkError:a,cursor:p,keys:o,listComplete:g,loadError:f,loading:I,prefixInput:V,reloadNonce:O,selectedKey:y}=c,[m,h]=Z(!1);le(()=>{const d={cancelled:!1};return z((async()=>{s({type:"loadStart"});try{const u=await e.listKvKeys({limit:me,namespace:l,prefix:v===""?void 0:v});d.cancelled||s({cursor:u.cursor??null,keys:u.keys,listComplete:u.listComplete,type:"firstPage"})}catch(u){d.cancelled||s({error:H(u),type:"loadFailed"})}})()),()=>{d.cancelled=!0}},[e,l,v,O]);const x=d=>{s({type:"prefixInput",value:d.target.value})},N=()=>{s({type:"applyFilter"})},C=d=>{s({name:d.currentTarget.dataset.key??null,type:"selectKey"})},k=()=>{p!==null&&(s({type:"loadStart"}),z((async()=>{try{const d=await e.listKvKeys({cursor:p,limit:me,namespace:l,prefix:v===""?void 0:v});s({cursor:d.cursor??null,keys:d.keys,listComplete:d.listComplete,type:"appendPage"})}catch(d){s({error:H(d),type:"loadFailed"})}})()))},w=d=>{s({name:d,type:"keyDeleted"})},F=d=>{s({name:d,type:"toggleBulk"})},_=d=>{s({names:d&&o!==null?o.map(u=>u.name):[],type:"toggleAllBulk"})},M=()=>{if(i.length===0)return;const d=[...i];s({type:"bulkDeleteStart"}),z((async()=>{const u=await Promise.allSettled(d.map(T=>e.deleteKvKey({key:T,namespace:l}))),E=d.filter((T,K)=>u[K]?.status==="fulfilled"),S=d.length-E.length;s({deleted:E,error:S>0?n("Failed to delete {count} keys.",{count:S}):null,type:"bulkDeleted"})})())},D=()=>{h(!1),s({type:"reload"})},J=o!==null&&o.length>0&&i.length===o.length;return $(be,{children:[$("section",{className:"border border-border bg-card p-3","data-testid":"kv-keys-section",children:[$("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[r(re,{"aria-label":n("Filter keys by prefix"),className:"min-w-[16rem] flex-1","data-testid":"kv-prefix-input",onChange:x,placeholder:n("Filter by prefix…"),value:V}),r(B,{"data-testid":"kv-filter-btn",disabled:I,onClick:N,children:n("Filter")}),r(B,{"data-testid":"kv-new-key-btn",onClick:()=>{h(d=>!d)},variant:"outline",children:n("New key")}),i.length>0&&r(B,{"data-testid":"kv-bulk-delete-btn",disabled:t,onClick:M,variant:"destructive",children:t?n("Deleting…"):n("Delete {count}",{count:i.length})})]}),a!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-bulk-error",role:"alert",children:a}),f!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-keys-error",role:"alert",children:f}),o!==null&&o.length===0&&!I&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-no-keys",children:n("No keys.")}),o!==null&&o.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(pe,{className:"px-0",children:$(ye,{"data-testid":"kv-key-table",children:[r(he,{children:$(X,{children:[r(Y,{className:"w-10",children:r(de,{"aria-label":n("Select all"),checked:J,"data-testid":"kv-select-all",onCheckedChange:_})}),r(Y,{children:n("Key")}),r(Y,{children:n("Expiration")})]})}),r(ke,{children:o.map(d=>$(X,{className:d.name===y?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-key":d.name,"data-testid":`kv-key-row-${d.name}`,onClick:C,children:[r(Q,{onClick:u=>{u.stopPropagation()},children:r(de,{"aria-label":n("Select {name}",{name:d.name}),checked:i.includes(d.name),"data-testid":`kv-select-${d.name}`,onCheckedChange:()=>{F(d.name)}})}),r(Q,{className:"font-mono text-xs",children:d.name}),r(Q,{className:"tabular-nums text-xs",children:Je(d.expiration)})]},d.name))})]})})}),!g&&p!==null&&r("div",{className:"mt-2",children:r(B,{"data-testid":"kv-load-more",disabled:I,onClick:k,variant:"outline",children:n(I?"Loading…":"Load more")})})]}),r(se,{onOpenChange:d=>{d||h(!1)},open:m,children:$(ie,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-create-sheet",side:"right",children:[r(oe,{children:r(ce,{children:n("New key")})}),r(Pe,{namespace:l,onCancel:()=>{h(!1)},onCreated:D})]})}),r(se,{onOpenChange:d=>{d||s({name:null,type:"selectKey"})},open:y!==null,children:$(ie,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-editor-sheet",side:"right",children:[r(oe,{children:r(ce,{className:"truncate font-mono text-xs",children:y})}),y!==null&&r(ze,{expiration:o?.find(d=>d.name===y)?.expiration,keyName:y,namespace:l,onDeleted:w},`${l}:${y}`)]})})]})},ct=({loadNamespaces:l}={})=>{const e=ee(),n=G(),[c,s]=Z(null),[v,i]=Z(null),[t,a]=Z(null);le(()=>{const o={cancelled:!1};return z((async()=>{try{const g=await(l??(()=>e.listKvNamespaces()))();o.cancelled||(s(g),i(null),a(f=>f??g[0]?.binding??null))}catch(g){o.cancelled||(s(null),i(H(g)))}})()),()=>{o.cancelled=!0}},[e,l]);const p=o=>{a(o.currentTarget.dataset.ns??null)};return $("div",{className:"flex flex-col gap-4","data-testid":"lunora-kv-browser",children:[v!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-ns-error",role:"alert",children:v}),c!==null&&c.length===0&&r(Fe,{description:n("Add a kv_namespaces binding to wrangler.jsonc — it appears here automatically, no wiring needed."),icon:r("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:r("path",{d:"M5 5h14v4H5V5Zm0 5h14v4H5v-4Zm0 5h14v4H5v-4Z"})}),testId:"kv-empty",title:n("No KV namespaces.")}),c!==null&&c.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(pe,{className:"px-0",children:$(ye,{"data-testid":"kv-namespace-table",children:[r(he,{children:r(X,{children:r(Y,{children:n("Namespace")})})}),r(ke,{children:c.map(o=>r(X,{className:o.binding===t?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-ns":o.binding,"data-testid":`kv-ns-row-${o.binding}`,onClick:p,children:r(Q,{className:"font-mono text-xs",children:o.binding})},o.binding))})]})})}),t!==null&&r(Ue,{namespace:t},t)]})};export{ct as KvBrowser};
1
+ import{useLunora as ee}from"@lunora/react";import{useState as Z,useReducer as ae,useEffect as le}from"react";import{c as ve,u as pe}from"../packem_shared/card-CIDGUN6K.js";import{E as Fe}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as ye,d as he,m as X,p as Y,f as ke,u as Q}from"../packem_shared/table-DdJBrClo.js";import{useT as G}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{f as z,e as H,k as Ke,g as ne}from"../packem_shared/internal-AtZ4bTal.js";import{u as B}from"../packem_shared/button-BkCrNcAs.js";import{f as de}from"../packem_shared/checkbox-StT4Gob6.js";import{u as re}from"../packem_shared/input-JHu63lTv.js";import{g as se,c as ie,N as oe,v as ce}from"../packem_shared/studio-BmWFd-Rz.js";import{c as te}from"react/compiler-runtime";import{p as q}from"../packem_shared/label-6uP1obNF.js";import{l as fe}from"../packem_shared/textarea-Bu2-jKAs.js";import{N as Ee,y as Ve,k as Me,_ as Te,w as Ie}from"../packem_shared/select-Bul-DeII.js";import{jsx as r,jsxs as $,Fragment as be}from"react/jsx-runtime";import{g as Oe}from"../packem_shared/badge-BbuuAio7.js";const _e=l=>{const e=l.trim();if(e==="")return;const n=Number(e);return Number.isFinite(n)&&n>0?Math.floor(n):void 0},Je=l=>l===void 0?"—":new Date(l*1e3).toISOString(),De=l=>new TextEncoder().encode(l).length,ge=l=>{if(l.trim()!=="")try{return JSON.stringify(JSON.parse(l),void 0,2)}catch{return}},xe=l=>{if(l.trim()==="")return!0;try{return JSON.parse(l),!0}catch{return!1}},Ne=[{key:"seconds",seconds:1},{key:"minutes",seconds:60},{key:"hours",seconds:3600},{key:"days",seconds:86400}],ue=(l,e)=>{const n=l.trim();if(n==="")return"";const c=Number(n),s=Ne.find(v=>v.key===e)?.seconds??1;return Number.isFinite(c)&&c>0?String(Math.round(c*s)):n},Ce=l=>{const e=l.trim();if(e==="")return!0;const n=Number(e);return Number.isInteger(n)&&n>=60},we=(l,e,n,c)=>{const s=_e(l.ttl);return{expiration:s===void 0?c:void 0,expirationTtl:s,key:e,metadata:l.metadata.trim()===""?void 0:JSON.parse(l.metadata),namespace:n,value:l.value}},$e=l=>{const e=te(60),{helper:n,id:c,invalid:s,onChange:v,testId:i}=l,t=G(),[a,p]=Z(""),[o,g]=Z("seconds");let f;e[0]!==v||e[1]!==o?(f=b=>{p(b.target.value),v(ue(b.target.value,o))},e[0]=v,e[1]=o,e[2]=f):f=e[2];const I=f;let V;e[3]!==a||e[4]!==v?(V=b=>{b!==null&&(g(b),v(ue(a,b)))},e[3]=a,e[4]=v,e[5]=V):V=e[5];const O=V;let y;e[6]!==t?(y=t("days"),e[6]=t,e[7]=y):y=e[7];let m;e[8]!==t?(m=t("hours"),e[8]=t,e[9]=m):m=e[9];let h;e[10]!==t?(h=t("minutes"),e[10]=t,e[11]=h):h=e[11];let x;e[12]!==t?(x=t("seconds"),e[12]=t,e[13]=x):x=e[13];let N;e[14]!==y||e[15]!==m||e[16]!==h||e[17]!==x?(N={days:y,hours:m,minutes:h,seconds:x},e[14]=y,e[15]=m,e[16]=h,e[17]=x,e[18]=N):N=e[18];const C=N;let k;e[19]!==t?(k=t("Expires after"),e[19]=t,e[20]=k):k=e[20];let w;e[21]!==c||e[22]!==k?(w=r(q,{className:"text-xs",htmlFor:c,children:k}),e[21]=c,e[22]=k,e[23]=w):w=e[23];let F;e[24]!==t?(F=t("No expiration"),e[24]=t,e[25]=F):F=e[25];let _;e[26]!==a||e[27]!==c||e[28]!==s||e[29]!==I||e[30]!==F||e[31]!==i?(_=r(re,{"aria-invalid":s,className:"flex-1","data-testid":i,id:c,inputMode:"numeric",onChange:I,placeholder:F,value:a}),e[26]=a,e[27]=c,e[28]=s,e[29]=I,e[30]=F,e[31]=i,e[32]=_):_=e[32];let M;e[33]!==t?(M=t("TTL unit"),e[33]=t,e[34]=M):M=e[34];const D=`${i}-unit`;let J;e[35]===Symbol.for("react.memo_cache_sentinel")?(J=r(Ee,{}),e[35]=J):J=e[35];let d;e[36]!==M||e[37]!==D?(d=r(Ve,{"aria-label":M,className:"w-[7.5rem]","data-testid":D,children:J}),e[36]=M,e[37]=D,e[38]=d):d=e[38];let u;e[39]!==C?(u=Ne.map(b=>r(Me,{value:b.key,children:C[b.key]},b.key)),e[39]=C,e[40]=u):u=e[40];let E;e[41]!==u?(E=r(Te,{children:u}),e[41]=u,e[42]=E):E=e[42];let S;e[43]!==O||e[44]!==d||e[45]!==E||e[46]!==o?(S=$(Ie,{onValueChange:O,value:o,children:[d,E]}),e[43]=O,e[44]=d,e[45]=E,e[46]=o,e[47]=S):S=e[47];let T;e[48]!==_||e[49]!==S?(T=$("div",{className:"flex gap-2",children:[_,S]}),e[48]=_,e[49]=S,e[50]=T):T=e[50];let K;e[51]!==n||e[52]!==s||e[53]!==t||e[54]!==i?(K=s?r("p",{className:"text-xs text-destructive","data-testid":`${i}-invalid`,children:t("TTL must be at least 60 seconds.")}):n!==void 0&&r("p",{className:"text-xs text-muted-foreground",children:n}),e[51]=n,e[52]=s,e[53]=t,e[54]=i,e[55]=K):K=e[55];let L;return e[56]!==T||e[57]!==K||e[58]!==w?(L=$("div",{className:"mb-3 grid gap-1",children:[w,T,K]}),e[56]=T,e[57]=K,e[58]=w,e[59]=L):L=e[59],L},Se=l=>{const e=te(36),{id:n,invalidTestId:c,onChange:s,testId:v,valid:i,value:t}=l,a=G();let p;e[0]!==t?(p=ge(t),e[0]=t,e[1]=p):p=e[1];const o=p;let g;e[2]!==a?(g=a("Metadata (JSON)"),e[2]=a,e[3]=g):g=e[3];let f;e[4]!==n||e[5]!==g?(f=r(q,{className:"text-xs",htmlFor:n,children:g}),e[4]=n,e[5]=g,e[6]=f):f=e[6];const I=`${v}-format`,V=o===void 0;let O;e[7]!==o||e[8]!==s?(O=()=>{o!==void 0&&s(o)},e[7]=o,e[8]=s,e[9]=O):O=e[9];let y;e[10]!==a?(y=a("Format JSON"),e[10]=a,e[11]=y):y=e[11];let m;e[12]!==I||e[13]!==V||e[14]!==O||e[15]!==y?(m=r(B,{"data-testid":I,disabled:V,onClick:O,size:"sm",variant:"outline",children:y}),e[12]=I,e[13]=V,e[14]=O,e[15]=y,e[16]=m):m=e[16];let h;e[17]!==f||e[18]!==m?(h=$("div",{className:"flex items-center justify-between gap-2",children:[f,m]}),e[17]=f,e[18]=m,e[19]=h):h=e[19];const x=!i;let N;e[20]!==s?(N=F=>{s(F.target.value)},e[20]=s,e[21]=N):N=e[21];let C;e[22]!==n||e[23]!==x||e[24]!==N||e[25]!==v||e[26]!==t?(C=r(fe,{"aria-invalid":x,className:"min-h-[4rem] font-mono text-xs","data-testid":v,id:n,onChange:N,value:t}),e[22]=n,e[23]=x,e[24]=N,e[25]=v,e[26]=t,e[27]=C):C=e[27];let k;e[28]!==c||e[29]!==a||e[30]!==i?(k=!i&&r("p",{className:"text-xs text-destructive","data-testid":c,children:a("Metadata must be valid JSON.")}),e[28]=c,e[29]=a,e[30]=i,e[31]=k):k=e[31];let w;return e[32]!==C||e[33]!==k||e[34]!==h?(w=$("div",{className:"mb-3 grid gap-1",children:[h,C,k]}),e[32]=C,e[33]=k,e[34]=h,e[35]=w):w=e[35],w},Le={busy:!1,error:null,metadata:"",name:"",ttl:"",value:""},Be=(l,e)=>{switch(e.type){case"setField":return{...l,[e.field]:e.value};case"submitFailed":return{...l,busy:!1,error:e.error};case"submitStart":return{...l,busy:!0,error:null};default:return l}},Pe=l=>{const e=te(73),{namespace:n,onCancel:c,onCreated:s}=l,v=ee(),i=G(),[t,a]=ae(Be,Le);let p;e[0]!==t.metadata?(p=xe(t.metadata),e[0]=t.metadata,e[1]=p):p=e[1];const o=p;let g;e[2]!==t.ttl?(g=Ce(t.ttl),e[2]=t.ttl,e[3]=g):g=e[3];const f=g;let I;e[4]!==o||e[5]!==t.busy||e[6]!==t.name||e[7]!==f?(I=t.name.trim()!==""&&o&&f&&!t.busy,e[4]=o,e[5]=t.busy,e[6]=t.name,e[7]=f,e[8]=I):I=e[8];const V=I;let O;e[9]!==V||e[10]!==v||e[11]!==n||e[12]!==s||e[13]!==t.metadata||e[14]!==t.name||e[15]!==t.ttl||e[16]!==t.value?(O=()=>{V&&(a({type:"submitStart"}),z((async()=>{try{await v.putKvValue(we({metadata:t.metadata,ttl:t.ttl,value:t.value},t.name,n)),s()}catch(j){a({error:H(j),type:"submitFailed"})}})()))},e[9]=V,e[10]=v,e[11]=n,e[12]=s,e[13]=t.metadata,e[14]=t.name,e[15]=t.ttl,e[16]=t.value,e[17]=O):O=e[17];const y=O;let m;e[18]!==i?(m=i("Key name"),e[18]=i,e[19]=m):m=e[19];let h;e[20]!==m?(h=r(q,{className:"text-xs",htmlFor:"kv-create-name",children:m}),e[20]=m,e[21]=h):h=e[21];let x;e[22]===Symbol.for("react.memo_cache_sentinel")?(x=j=>{a({field:"name",type:"setField",value:j.target.value})},e[22]=x):x=e[22];let N;e[23]!==i?(N=i("Key name"),e[23]=i,e[24]=N):N=e[24];let C;e[25]!==t.name||e[26]!==N?(C=r(re,{autoFocus:!0,"data-testid":"kv-create-name",id:"kv-create-name",onChange:x,placeholder:N,value:t.name}),e[25]=t.name,e[26]=N,e[27]=C):C=e[27];let k;e[28]!==h||e[29]!==C?(k=$("div",{className:"grid gap-1",children:[h,C]}),e[28]=h,e[29]=C,e[30]=k):k=e[30];let w;e[31]!==i?(w=i("Value"),e[31]=i,e[32]=w):w=e[32];let F;e[33]!==w?(F=r(q,{className:"text-xs",htmlFor:"kv-create-value",children:w}),e[33]=w,e[34]=F):F=e[34];let _;e[35]===Symbol.for("react.memo_cache_sentinel")?(_=j=>{a({field:"value",type:"setField",value:j.target.value})},e[35]=_):_=e[35];let M;e[36]!==t.value?(M=r(fe,{className:"min-h-[6rem] font-mono text-xs","data-testid":"kv-create-value",id:"kv-create-value",onChange:_,value:t.value}),e[36]=t.value,e[37]=M):M=e[37];let D;e[38]!==F||e[39]!==M?(D=$("div",{className:"grid gap-1",children:[F,M]}),e[38]=F,e[39]=M,e[40]=D):D=e[40];const J=!f;let d;e[41]===Symbol.for("react.memo_cache_sentinel")?(d=j=>{a({field:"ttl",type:"setField",value:j})},e[41]=d):d=e[41];let u;e[42]!==J?(u=r($e,{id:"kv-create-ttl",invalid:J,onChange:d,testId:"kv-create-ttl"}),e[42]=J,e[43]=u):u=e[43];let E;e[44]===Symbol.for("react.memo_cache_sentinel")?(E=j=>{a({field:"metadata",type:"setField",value:j})},e[44]=E):E=e[44];let S;e[45]!==o||e[46]!==t.metadata?(S=r(Se,{id:"kv-create-metadata",invalidTestId:"kv-create-metadata-invalid",onChange:E,testId:"kv-create-metadata",valid:o,value:t.metadata}),e[45]=o,e[46]=t.metadata,e[47]=S):S=e[47];const T=!V;let K;e[48]!==t.busy||e[49]!==i?(K=t.busy?i("Creating…"):i("Create key"),e[48]=t.busy,e[49]=i,e[50]=K):K=e[50];let L;e[51]!==y||e[52]!==T||e[53]!==K?(L=r(B,{"data-testid":"kv-create-submit",disabled:T,onClick:y,children:K}),e[51]=y,e[52]=T,e[53]=K,e[54]=L):L=e[54];const b=t.busy;let P;e[55]!==i?(P=i("Cancel"),e[55]=i,e[56]=P):P=e[56];let A;e[57]!==c||e[58]!==t.busy||e[59]!==P?(A=r(B,{"data-testid":"kv-create-cancel",disabled:b,onClick:c,variant:"outline",children:P}),e[57]=c,e[58]=t.busy,e[59]=P,e[60]=A):A=e[60];let R;e[61]!==L||e[62]!==A?(R=$("div",{className:"flex flex-wrap gap-2",children:[L,A]}),e[61]=L,e[62]=A,e[63]=R):R=e[63];let U;e[64]!==t.error?(U=t.error!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-create-error",role:"alert",children:t.error}),e[64]=t.error,e[65]=U):U=e[65];let W;return e[66]!==k||e[67]!==D||e[68]!==u||e[69]!==S||e[70]!==R||e[71]!==U?(W=$("div",{className:"grid gap-3 px-4 pb-4","data-testid":"kv-create-form",children:[k,D,u,S,R,U]}),e[66]=k,e[67]=D,e[68]=u,e[69]=S,e[70]=R,e[71]=U,e[72]=W):W=e[72],W},je={busy:"",editedMetadata:"",editedTtl:"",editedValue:"",loadError:null,loading:!0,value:null,writeError:null},Ae=(l,e)=>{switch(e.type){case"deleteStart":return{...l,busy:"deleting",writeError:null};case"editMetadata":return{...l,editedMetadata:e.value};case"editTtl":return{...l,editedTtl:e.value};case"editValue":return{...l,editedValue:e.value};case"loaded":return{...l,editedMetadata:e.metadata===null||e.metadata===void 0?"":JSON.stringify(e.metadata,null,2),editedValue:e.value??"",loading:!1,value:e.value};case"loadFailed":return{...l,loadError:e.error,loading:!1};case"saveOk":return{...l,busy:"",value:l.editedValue};case"saveStart":return{...l,busy:"saving",writeError:null};case"writeFailed":return{...l,busy:"",writeError:e.error};default:return l}},ze=l=>{const e=te(67),{expiration:n,keyName:c,namespace:s,onDeleted:v}=l,i=ee(),t=G(),[a,p]=ae(Ae,je);let o,g;e[0]!==i||e[1]!==c||e[2]!==s?(o=()=>{const b={cancelled:!1};return z((async()=>{try{const P=await i.getKvValue({key:c,namespace:s});b.cancelled||p({metadata:P.metadata,type:"loaded",value:P.value})}catch(P){const A=P;b.cancelled||p({error:H(A),type:"loadFailed"})}})()),()=>{b.cancelled=!0}},g=[i,s,c],e[0]=i,e[1]=c,e[2]=s,e[3]=o,e[4]=g):(o=e[3],g=e[4]),le(o,g);let f;e[5]===Symbol.for("react.memo_cache_sentinel")?(f=b=>{p({type:"editValue",value:b.target.value})},e[5]=f):f=e[5];const I=f;let V;e[6]===Symbol.for("react.memo_cache_sentinel")?(V=b=>{p({type:"editMetadata",value:b})},e[6]=V):V=e[6];const O=V;let y;e[7]!==a.editedValue?(y=ge(a.editedValue),e[7]=a.editedValue,e[8]=y):y=e[8];const m=y;let h;e[9]!==a.editedMetadata?(h=xe(a.editedMetadata),e[9]=a.editedMetadata,e[10]=h):h=e[10];const x=h;let N;e[11]!==a.editedTtl?(N=Ce(a.editedTtl),e[11]=a.editedTtl,e[12]=N):N=e[12];const C=N;let k;e[13]!==m?(k=()=>{m!==void 0&&p({type:"editValue",value:m})},e[13]=m,e[14]=k):k=e[14];const w=k;let F;e[15]!==i||e[16]!==n||e[17]!==c||e[18]!==x||e[19]!==s||e[20]!==a.editedMetadata||e[21]!==a.editedTtl||e[22]!==a.editedValue||e[23]!==t?(F=()=>{if(!x){p({error:t("Metadata must be valid JSON."),type:"writeFailed"});return}p({type:"saveStart"}),z((async()=>{try{await i.putKvValue(we({metadata:a.editedMetadata,ttl:a.editedTtl,value:a.editedValue},c,s,n)),p({type:"saveOk"})}catch(b){p({error:H(b),type:"writeFailed"})}})())},e[15]=i,e[16]=n,e[17]=c,e[18]=x,e[19]=s,e[20]=a.editedMetadata,e[21]=a.editedTtl,e[22]=a.editedValue,e[23]=t,e[24]=F):F=e[24];const _=F;let M;e[25]!==i||e[26]!==c||e[27]!==s||e[28]!==v?(M=()=>{p({type:"deleteStart"}),z((async()=>{try{await i.deleteKvKey({key:c,namespace:s}),v(c)}catch(b){p({error:H(b),type:"writeFailed"})}})())},e[25]=i,e[26]=c,e[27]=s,e[28]=v,e[29]=M):M=e[29];const D=M;let J;e[30]!==c?(J=()=>{ne(c)},e[30]=c,e[31]=J):J=e[31];let d;e[32]!==t?(d=t("Copy key"),e[32]=t,e[33]=d):d=e[33];let u;e[34]!==J||e[35]!==d?(u=r("div",{className:"mb-2 flex justify-end",children:r(B,{"data-testid":"kv-copy-key-btn",onClick:J,size:"sm",variant:"outline",children:d})}),e[34]=J,e[35]=d,e[36]=u):u=e[36];let E;e[37]!==a.loadError?(E=a.loadError!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-value-error",role:"alert",children:a.loadError}),e[37]=a.loadError,e[38]=E):E=e[38];let S;e[39]!==a.loading||e[40]!==t?(S=a.loading&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-value-loading",children:t("Loading…")}),e[39]=a.loading,e[40]=t,e[41]=S):S=e[41];let T;e[42]!==m||e[43]!==x||e[44]!==D||e[45]!==w||e[46]!==_||e[47]!==a.busy||e[48]!==a.editedMetadata||e[49]!==a.editedValue||e[50]!==a.loading||e[51]!==a.value||e[52]!==a.writeError||e[53]!==t||e[54]!==C?(T=!a.loading&&a.value!==null&&$(be,{children:[$("div",{className:"mb-1 flex flex-wrap items-center gap-2",children:[r(q,{className:"text-xs",htmlFor:"kv-value-editor",children:t("Value")}),m!==void 0&&r(Oe,{variant:"secondary",children:t("JSON")}),r("span",{className:"ml-auto text-xs tabular-nums text-muted-foreground","data-testid":"kv-value-size",children:Ke(De(a.editedValue))})]}),r("textarea",{"aria-label":t("KV value"),className:"mb-2 min-h-[8rem] w-full rounded border border-border bg-muted/30 p-2 font-mono text-xs","data-testid":"kv-value-editor",id:"kv-value-editor",onChange:I,value:a.editedValue}),$("div",{className:"mb-3 flex flex-wrap gap-2",children:[r(B,{"data-testid":"kv-format-btn",disabled:m===void 0,onClick:w,size:"sm",variant:"outline",children:t("Format JSON")}),r(B,{"data-testid":"kv-copy-value-btn",onClick:()=>{ne(a.editedValue)},size:"sm",variant:"outline",children:t("Copy value")})]}),r($e,{helper:t("Leave blank to keep the current expiration."),id:"kv-ttl-input",invalid:!C,onChange:b=>{p({type:"editTtl",value:b})},testId:"kv-ttl-input"}),r(Se,{id:"kv-metadata-editor",invalidTestId:"kv-metadata-invalid",onChange:O,testId:"kv-metadata-editor",valid:x,value:a.editedMetadata}),$("div",{className:"flex flex-wrap gap-2",children:[r(B,{"data-testid":"kv-save-btn",disabled:a.busy!==""||!x||!C,onClick:_,children:a.busy==="saving"?t("Saving…"):t("Save")}),r(B,{"data-testid":"kv-delete-btn",disabled:a.busy!=="",onClick:D,variant:"destructive",children:a.busy==="deleting"?t("Deleting…"):t("Delete")})]}),a.writeError!==null&&r("p",{className:"mt-2 text-sm text-destructive","data-testid":"kv-save-error",role:"alert",children:a.writeError})]}),e[42]=m,e[43]=x,e[44]=D,e[45]=w,e[46]=_,e[47]=a.busy,e[48]=a.editedMetadata,e[49]=a.editedValue,e[50]=a.loading,e[51]=a.value,e[52]=a.writeError,e[53]=t,e[54]=C,e[55]=T):T=e[55];let K;e[56]!==a.loadError||e[57]!==a.loading||e[58]!==a.value||e[59]!==t?(K=!a.loading&&a.value===null&&a.loadError===null&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-absent",children:t("Key is absent or has no value.")}),e[56]=a.loadError,e[57]=a.loading,e[58]=a.value,e[59]=t,e[60]=K):K=e[60];let L;return e[61]!==u||e[62]!==E||e[63]!==S||e[64]!==T||e[65]!==K?(L=$("div",{className:"px-4 pb-4","data-testid":"kv-value-section",children:[u,E,S,T,K]}),e[61]=u,e[62]=E,e[63]=S,e[64]=T,e[65]=K,e[66]=L):L=e[66],L},me=100,He={appliedPrefix:"",bulk:[],bulkBusy:!1,bulkError:null,cursor:null,keys:null,listComplete:!1,loadError:null,loading:!1,prefixInput:"",reloadNonce:0,selectedKey:null},Re=(l,e)=>{switch(e.type){case"appendPage":return{...l,cursor:e.cursor,keys:[...l.keys??[],...e.keys],listComplete:e.listComplete,loading:!1};case"applyFilter":return{...l,appliedPrefix:l.prefixInput,bulk:[],bulkError:null,cursor:null,keys:null,listComplete:!1,selectedKey:null};case"bulkDeleted":{const n=new Set(e.deleted);return{...l,bulk:l.bulk.filter(c=>!n.has(c)),bulkBusy:!1,bulkError:e.error,keys:l.keys===null?null:l.keys.filter(c=>!n.has(c.name)),selectedKey:l.selectedKey!==null&&n.has(l.selectedKey)?null:l.selectedKey}}case"bulkDeleteStart":return{...l,bulkBusy:!0,bulkError:null};case"firstPage":return{...l,cursor:e.cursor,keys:e.keys,listComplete:e.listComplete,loading:!1};case"keyDeleted":return{...l,bulk:l.bulk.filter(n=>n!==e.name),keys:l.keys===null?null:l.keys.filter(n=>n.name!==e.name),selectedKey:null};case"loadFailed":return{...l,loadError:e.error,loading:!1};case"loadStart":return{...l,loadError:null,loading:!0};case"prefixInput":return{...l,prefixInput:e.value};case"reload":return{...l,bulk:[],bulkError:null,reloadNonce:l.reloadNonce+1,selectedKey:null};case"selectKey":return{...l,selectedKey:e.name};case"toggleAllBulk":return{...l,bulk:e.names};case"toggleBulk":return{...l,bulk:l.bulk.includes(e.name)?l.bulk.filter(n=>n!==e.name):[...l.bulk,e.name]};default:return l}},Ue=({namespace:l})=>{const e=ee(),n=G(),[c,s]=ae(Re,He),{appliedPrefix:v,bulk:i,bulkBusy:t,bulkError:a,cursor:p,keys:o,listComplete:g,loadError:f,loading:I,prefixInput:V,reloadNonce:O,selectedKey:y}=c,[m,h]=Z(!1);le(()=>{const d={cancelled:!1};return z((async()=>{s({type:"loadStart"});try{const u=await e.listKvKeys({limit:me,namespace:l,prefix:v===""?void 0:v});d.cancelled||s({cursor:u.cursor??null,keys:u.keys,listComplete:u.listComplete,type:"firstPage"})}catch(u){d.cancelled||s({error:H(u),type:"loadFailed"})}})()),()=>{d.cancelled=!0}},[e,l,v,O]);const x=d=>{s({type:"prefixInput",value:d.target.value})},N=()=>{s({type:"applyFilter"})},C=d=>{s({name:d.currentTarget.dataset.key??null,type:"selectKey"})},k=()=>{p!==null&&(s({type:"loadStart"}),z((async()=>{try{const d=await e.listKvKeys({cursor:p,limit:me,namespace:l,prefix:v===""?void 0:v});s({cursor:d.cursor??null,keys:d.keys,listComplete:d.listComplete,type:"appendPage"})}catch(d){s({error:H(d),type:"loadFailed"})}})()))},w=d=>{s({name:d,type:"keyDeleted"})},F=d=>{s({name:d,type:"toggleBulk"})},_=d=>{s({names:d&&o!==null?o.map(u=>u.name):[],type:"toggleAllBulk"})},M=()=>{if(i.length===0)return;const d=[...i];s({type:"bulkDeleteStart"}),z((async()=>{const u=await Promise.allSettled(d.map(T=>e.deleteKvKey({key:T,namespace:l}))),E=d.filter((T,K)=>u[K]?.status==="fulfilled"),S=d.length-E.length;s({deleted:E,error:S>0?n("Failed to delete {count} keys.",{count:S}):null,type:"bulkDeleted"})})())},D=()=>{h(!1),s({type:"reload"})},J=o!==null&&o.length>0&&i.length===o.length;return $(be,{children:[$("section",{className:"border border-border bg-card p-3","data-testid":"kv-keys-section",children:[$("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[r(re,{"aria-label":n("Filter keys by prefix"),className:"min-w-[16rem] flex-1","data-testid":"kv-prefix-input",onChange:x,placeholder:n("Filter by prefix…"),value:V}),r(B,{"data-testid":"kv-filter-btn",disabled:I,onClick:N,children:n("Filter")}),r(B,{"data-testid":"kv-new-key-btn",onClick:()=>{h(d=>!d)},variant:"outline",children:n("New key")}),i.length>0&&r(B,{"data-testid":"kv-bulk-delete-btn",disabled:t,onClick:M,variant:"destructive",children:t?n("Deleting…"):n("Delete {count}",{count:i.length})})]}),a!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-bulk-error",role:"alert",children:a}),f!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-keys-error",role:"alert",children:f}),o!==null&&o.length===0&&!I&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-no-keys",children:n("No keys.")}),o!==null&&o.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(pe,{className:"px-0",children:$(ye,{"data-testid":"kv-key-table",children:[r(he,{children:$(X,{children:[r(Y,{className:"w-10",children:r(de,{"aria-label":n("Select all"),checked:J,"data-testid":"kv-select-all",onCheckedChange:_})}),r(Y,{children:n("Key")}),r(Y,{children:n("Expiration")})]})}),r(ke,{children:o.map(d=>$(X,{className:d.name===y?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-key":d.name,"data-testid":`kv-key-row-${d.name}`,onClick:C,children:[r(Q,{onClick:u=>{u.stopPropagation()},children:r(de,{"aria-label":n("Select {name}",{name:d.name}),checked:i.includes(d.name),"data-testid":`kv-select-${d.name}`,onCheckedChange:()=>{F(d.name)}})}),r(Q,{className:"font-mono text-xs",children:d.name}),r(Q,{className:"tabular-nums text-xs",children:Je(d.expiration)})]},d.name))})]})})}),!g&&p!==null&&r("div",{className:"mt-2",children:r(B,{"data-testid":"kv-load-more",disabled:I,onClick:k,variant:"outline",children:n(I?"Loading…":"Load more")})})]}),r(se,{onOpenChange:d=>{d||h(!1)},open:m,children:$(ie,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-create-sheet",side:"right",children:[r(oe,{children:r(ce,{children:n("New key")})}),r(Pe,{namespace:l,onCancel:()=>{h(!1)},onCreated:D})]})}),r(se,{onOpenChange:d=>{d||s({name:null,type:"selectKey"})},open:y!==null,children:$(ie,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-editor-sheet",side:"right",children:[r(oe,{children:r(ce,{className:"truncate font-mono text-xs",children:y})}),y!==null&&r(ze,{expiration:o?.find(d=>d.name===y)?.expiration,keyName:y,namespace:l,onDeleted:w},`${l}:${y}`)]})})]})},ct=({loadNamespaces:l}={})=>{const e=ee(),n=G(),[c,s]=Z(null),[v,i]=Z(null),[t,a]=Z(null);le(()=>{const o={cancelled:!1};return z((async()=>{try{const g=await(l??(()=>e.listKvNamespaces()))();o.cancelled||(s(g),i(null),a(f=>f??g[0]?.binding??null))}catch(g){o.cancelled||(s(null),i(H(g)))}})()),()=>{o.cancelled=!0}},[e,l]);const p=o=>{a(o.currentTarget.dataset.ns??null)};return $("div",{className:"flex flex-col gap-4","data-testid":"lunora-kv-browser",children:[v!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-ns-error",role:"alert",children:v}),c!==null&&c.length===0&&r(Fe,{description:n("Add a kv_namespaces binding to wrangler.jsonc — it appears here automatically, no wiring needed."),icon:r("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:r("path",{d:"M5 5h14v4H5V5Zm0 5h14v4H5v-4Zm0 5h14v4H5v-4Z"})}),testId:"kv-empty",title:n("No KV namespaces.")}),c!==null&&c.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(pe,{className:"px-0",children:$(ye,{"data-testid":"kv-namespace-table",children:[r(he,{children:r(X,{children:r(Y,{children:n("Namespace")})})}),r(ke,{children:c.map(o=>r(X,{className:o.binding===t?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-ns":o.binding,"data-testid":`kv-ns-row-${o.binding}`,onClick:p,children:r(Q,{className:"font-mono text-xs",children:o.binding})},o.binding))})]})})}),t!==null&&r(Ue,{namespace:t},t)]})};export{ct as KvBrowser};
@@ -1 +1 @@
1
- import{c as G}from"react/compiler-runtime";import{useLunora as le}from"@lunora/react";import{useState as P}from"react";import{u as j}from"../packem_shared/button-BkCrNcAs.js";import{u as St,c as kt}from"../packem_shared/card-CIDGUN6K.js";import{E as et}from"../packem_shared/empty-state-Cg7t_8qu.js";import{p as me,d as Nt,m as bt,f as At,n as Ot,u as de}from"../packem_shared/table-DdJBrClo.js";import{T as Ze}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{u as ie,a as Mt}from"../packem_shared/use-async-submit-H68GHPz8.js";import{useAutoRefresh as Dt}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as W}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{h as S,f as Et,e as Lt,i as jt}from"../packem_shared/internal-AtZ4bTal.js";import{u as V}from"../packem_shared/input-JHu63lTv.js";import{p as Pt}from"../packem_shared/label-6uP1obNF.js";import{M as Jt}from"../packem_shared/modal-shell-CUwwWC2o.js";import{l as _t}from"../packem_shared/textarea-Bu2-jKAs.js";import{jsx as n,jsxs as M,Fragment as ht}from"react/jsx-runtime";const Ft=t=>{const e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("Expected a JSON object");return e},Ut=t=>{const e=Ft(t),r={};for(const[s,c]of Object.entries(e)){if(!Array.isArray(c)||c.some(l=>typeof l!="string"))throw new TypeError(`"${s}" must map to an array of action strings`);r[s]=c}return r},Rt=t=>t==null||t===""?"":typeof t=="string"?t:JSON.stringify(t,null,2),Q=t=>{const e=G(6),{children:r,htmlFor:s,label:c}=t;let l;e[0]!==s||e[1]!==c?(l=n(Pt,{htmlFor:s,children:c}),e[0]=s,e[1]=c,e[2]=l):l=e[2];let o;return e[3]!==r||e[4]!==l?(o=M("div",{className:"flex flex-col gap-1",children:[l,r]}),e[3]=r,e[4]=l,e[5]=o):o=e[5],o},se=({busy:t,canSubmit:e,children:r,destructive:s=!1,error:c,onClose:l,onSubmit:o,submitLabel:a,testId:i,title:m})=>{const d=W();return M(Jt,{label:m,onClose:l,panelTestId:`${i}-panel`,testId:`${i}-overlay`,variant:"dialog",children:[n("h2",{className:"text-sm font-semibold text-foreground",children:m}),r,c!==null&&n("p",{className:"text-sm text-destructive","data-testid":`${i}-error`,role:"alert",children:c}),M("div",{className:"flex justify-end gap-2 pt-1",children:[n(j,{"data-testid":`${i}-cancel`,onClick:l,size:"sm",type:"button",variant:"outline",children:d("Cancel")}),n(j,{"data-testid":`${i}-submit`,disabled:t||!e,onClick:o,size:"sm",type:"button",variant:s?"destructive":"default",children:t?d("Saving…"):a})]})]})},$t=t=>{const e=G(79),{mode:r,onClose:s,onDone:c,org:l}=t,o=le(),a=W(),{busy:i,error:m,run:d}=ie();let p;e[0]!==l?(p=l?S(l.name):"",e[0]=l,e[1]=p):p=e[1];const[u,g]=P(p);let C;e[2]!==l?(C=l?S(l.slug):"",e[2]=l,e[3]=C):C=e[3];const[b,v]=P(C);let $;e[4]!==l?($=l?S(l.logo):"",e[4]=l,e[5]=$):$=e[5];const[f,w]=P($),[h,x]=P("");let y;e[6]!==r||e[7]!==l?.metadata?(y=r==="edit"?Rt(l?.metadata):"",e[6]=r,e[7]=l?.metadata,e[8]=y):y=e[8];const[I,z]=P(y);let O;e[9]!==o||e[10]!==f||e[11]!==I||e[12]!==r||e[13]!==u||e[14]!==s||e[15]!==c||e[16]!==l?.id||e[17]!==h||e[18]!==d||e[19]!==b?(O=()=>{d(async()=>{const E=I.trim()===""?void 0:Ft(I);r==="create"?await o.createAuthOrganization({logo:f.trim()===""?void 0:f.trim(),metadata:E,name:u.trim(),ownerId:h.trim()===""?void 0:h.trim(),slug:b.trim()===""?void 0:b.trim()}):await o.updateAuthOrganization({logo:f.trim()===""?void 0:f.trim(),metadata:E,name:u.trim()===""?void 0:u.trim(),organizationId:S(l?.id),slug:b.trim()===""?void 0:b.trim()}),c(),s()})},e[9]=o,e[10]=f,e[11]=I,e[12]=r,e[13]=u,e[14]=s,e[15]=c,e[16]=l?.id,e[17]=h,e[18]=d,e[19]=b,e[20]=O):O=e[20];const N=O;let k;e[21]!==r||e[22]!==u?(k=u.trim()!==""||r==="edit",e[21]=r,e[22]=u,e[23]=k):k=e[23];let D;e[24]!==r||e[25]!==a?(D=a(r==="create"?"Create":"Save"),e[24]=r,e[25]=a,e[26]=D):D=e[26];let _;e[27]!==r||e[28]!==a?(_=a(r==="create"?"New organization":"Edit organization"),e[27]=r,e[28]=a,e[29]=_):_=e[29];let J;e[30]!==a?(J=a("name"),e[30]=a,e[31]=J):J=e[31];let q;e[32]===Symbol.for("react.memo_cache_sentinel")?(q=E=>{g(E.target.value)},e[32]=q):q=e[32];let U;e[33]!==u?(U=n(V,{"data-testid":"org-form-name",id:"org-form-name",onChange:q,value:u}),e[33]=u,e[34]=U):U=e[34];let L;e[35]!==U||e[36]!==J?(L=n(Q,{htmlFor:"org-form-name",label:J,children:U}),e[35]=U,e[36]=J,e[37]=L):L=e[37];let B;e[38]!==a?(B=a("Slug (optional — derived from name)"),e[38]=a,e[39]=B):B=e[39];let K;e[40]===Symbol.for("react.memo_cache_sentinel")?(K=E=>{v(E.target.value)},e[40]=K):K=e[40];let F;e[41]!==b?(F=n(V,{"data-testid":"org-form-slug",id:"org-form-slug",onChange:K,value:b}),e[41]=b,e[42]=F):F=e[42];let R;e[43]!==B||e[44]!==F?(R=n(Q,{htmlFor:"org-form-slug",label:B,children:F}),e[43]=B,e[44]=F,e[45]=R):R=e[45];let H;e[46]!==a?(H=a("Logo URL (optional)"),e[46]=a,e[47]=H):H=e[47];let re;e[48]===Symbol.for("react.memo_cache_sentinel")?(re=E=>{w(E.target.value)},e[48]=re):re=e[48];let X;e[49]!==f?(X=n(V,{"data-testid":"org-form-logo",id:"org-form-logo",onChange:re,value:f}),e[49]=f,e[50]=X):X=e[50];let Y;e[51]!==H||e[52]!==X?(Y=n(Q,{htmlFor:"org-form-logo",label:H,children:X}),e[51]=H,e[52]=X,e[53]=Y):Y=e[53];let Z;e[54]!==r||e[55]!==h||e[56]!==a?(Z=r==="create"&&n(Q,{htmlFor:"org-form-owner",label:a("Owner user id (optional)"),children:n(V,{"data-testid":"org-form-owner",id:"org-form-owner",onChange:E=>{x(E.target.value)},value:h})}),e[54]=r,e[55]=h,e[56]=a,e[57]=Z):Z=e[57];let ee;e[58]!==a?(ee=a("Metadata (JSON, optional)"),e[58]=a,e[59]=ee):ee=e[59];let oe;e[60]===Symbol.for("react.memo_cache_sentinel")?(oe=E=>{z(E.target.value)},e[60]=oe):oe=e[60];let te;e[61]!==I?(te=n(_t,{"data-testid":"org-form-metadata",id:"org-form-metadata",onChange:oe,value:I}),e[61]=I,e[62]=te):te=e[62];let A;e[63]!==ee||e[64]!==te?(A=n(Q,{htmlFor:"org-form-metadata",label:ee,children:te}),e[63]=ee,e[64]=te,e[65]=A):A=e[65];let ne;return e[66]!==i||e[67]!==m||e[68]!==s||e[69]!==N||e[70]!==L||e[71]!==R||e[72]!==Y||e[73]!==Z||e[74]!==A||e[75]!==k||e[76]!==D||e[77]!==_?(ne=M(se,{busy:i,canSubmit:k,error:m,onClose:s,onSubmit:N,submitLabel:D,testId:"org-form",title:_,children:[L,R,Y,Z,A]}),e[66]=i,e[67]=m,e[68]=s,e[69]=N,e[70]=L,e[71]=R,e[72]=Y,e[73]=Z,e[74]=A,e[75]=k,e[76]=D,e[77]=_,e[78]=ne):ne=e[78],ne},Bt=t=>{const e=G(40),{onClose:r,onDone:s,organizationId:c}=t,l=le(),o=W(),{busy:a,error:i,run:m}=ie(),[d,p]=P(""),[u,g]=P("");let C;e[0]!==l||e[1]!==r||e[2]!==s||e[3]!==c||e[4]!==u||e[5]!==m||e[6]!==d?(C=()=>{m(async()=>{await l.addAuthOrgMember({organizationId:c,role:u.trim()===""?void 0:u.trim(),userId:d.trim()}),s(),r()})},e[0]=l,e[1]=r,e[2]=s,e[3]=c,e[4]=u,e[5]=m,e[6]=d,e[7]=C):C=e[7];const b=C;let v;e[8]!==d?(v=d.trim(),e[8]=d,e[9]=v):v=e[9];const $=v!=="";let f;e[10]!==o?(f=o("Add member"),e[10]=o,e[11]=f):f=e[11];let w;e[12]!==o?(w=o("Add member"),e[12]=o,e[13]=w):w=e[13];let h;e[14]!==o?(h=o("User id"),e[14]=o,e[15]=h):h=e[15];let x;e[16]===Symbol.for("react.memo_cache_sentinel")?(x=_=>{p(_.target.value)},e[16]=x):x=e[16];let y;e[17]!==d?(y=n(V,{"data-testid":"org-add-member-user",id:"org-add-member-user",onChange:x,value:d}),e[17]=d,e[18]=y):y=e[18];let I;e[19]!==h||e[20]!==y?(I=n(Q,{htmlFor:"org-add-member-user",label:h,children:y}),e[19]=h,e[20]=y,e[21]=I):I=e[21];let z;e[22]!==o?(z=o("Role (optional)"),e[22]=o,e[23]=z):z=e[23];let O;e[24]===Symbol.for("react.memo_cache_sentinel")?(O=_=>{g(_.target.value)},e[24]=O):O=e[24];let N;e[25]!==u?(N=n(V,{"data-testid":"org-add-member-role",id:"org-add-member-role",onChange:O,value:u}),e[25]=u,e[26]=N):N=e[26];let k;e[27]!==z||e[28]!==N?(k=n(Q,{htmlFor:"org-add-member-role",label:z,children:N}),e[27]=z,e[28]=N,e[29]=k):k=e[29];let D;return e[30]!==a||e[31]!==i||e[32]!==r||e[33]!==b||e[34]!==k||e[35]!==$||e[36]!==f||e[37]!==w||e[38]!==I?(D=M(se,{busy:a,canSubmit:$,error:i,onClose:r,onSubmit:b,submitLabel:f,testId:"org-add-member",title:w,children:[I,k]}),e[30]=a,e[31]=i,e[32]=r,e[33]=b,e[34]=k,e[35]=$,e[36]=f,e[37]=w,e[38]=I,e[39]=D):D=e[39],D},Ht=t=>{const e=G(40),{onClose:r,onDone:s,organizationId:c}=t,l=le(),o=W(),{busy:a,error:i,run:m}=ie(),[d,p]=P(""),[u,g]=P("");let C;e[0]!==l||e[1]!==d||e[2]!==r||e[3]!==s||e[4]!==c||e[5]!==u||e[6]!==m?(C=()=>{m(async()=>{await l.inviteAuthOrgMember({email:d.trim(),organizationId:c,role:u.trim()===""?void 0:u.trim()}),s(),r()})},e[0]=l,e[1]=d,e[2]=r,e[3]=s,e[4]=c,e[5]=u,e[6]=m,e[7]=C):C=e[7];const b=C;let v;e[8]!==d?(v=d.trim(),e[8]=d,e[9]=v):v=e[9];const $=v!=="";let f;e[10]!==o?(f=o("Send invitation"),e[10]=o,e[11]=f):f=e[11];let w;e[12]!==o?(w=o("Invite member"),e[12]=o,e[13]=w):w=e[13];let h;e[14]!==o?(h=o("email"),e[14]=o,e[15]=h):h=e[15];let x;e[16]===Symbol.for("react.memo_cache_sentinel")?(x=_=>{p(_.target.value)},e[16]=x):x=e[16];let y;e[17]!==d?(y=n(V,{"data-testid":"org-invite-member-email",id:"org-invite-member-email",onChange:x,type:"email",value:d}),e[17]=d,e[18]=y):y=e[18];let I;e[19]!==h||e[20]!==y?(I=n(Q,{htmlFor:"org-invite-member-email",label:h,children:y}),e[19]=h,e[20]=y,e[21]=I):I=e[21];let z;e[22]!==o?(z=o("Role (optional)"),e[22]=o,e[23]=z):z=e[23];let O;e[24]===Symbol.for("react.memo_cache_sentinel")?(O=_=>{g(_.target.value)},e[24]=O):O=e[24];let N;e[25]!==u?(N=n(V,{"data-testid":"org-invite-member-role",id:"org-invite-member-role",onChange:O,value:u}),e[25]=u,e[26]=N):N=e[26];let k;e[27]!==z||e[28]!==N?(k=n(Q,{htmlFor:"org-invite-member-role",label:z,children:N}),e[27]=z,e[28]=N,e[29]=k):k=e[29];let D;return e[30]!==a||e[31]!==i||e[32]!==r||e[33]!==b||e[34]!==k||e[35]!==$||e[36]!==f||e[37]!==w||e[38]!==I?(D=M(se,{busy:a,canSubmit:$,error:i,onClose:r,onSubmit:b,submitLabel:f,testId:"org-invite-member",title:w,children:[I,k]}),e[30]=a,e[31]=i,e[32]=r,e[33]=b,e[34]=k,e[35]=$,e[36]=f,e[37]=w,e[38]=I,e[39]=D):D=e[39],D},qt=t=>{const e=G(32),{member:r,onClose:s,onDone:c}=t,l=le(),o=W(),{busy:a,error:i,run:m}=ie();let d;e[0]!==r.role?(d=S(r.role),e[0]=r.role,e[1]=d):d=e[1];const[p,u]=P(d);let g;e[2]!==l||e[3]!==r.id||e[4]!==s||e[5]!==c||e[6]!==p||e[7]!==m?(g=()=>{m(async()=>{await l.setAuthOrgMemberRole({memberId:S(r.id),role:p.trim()}),c(),s()})},e[2]=l,e[3]=r.id,e[4]=s,e[5]=c,e[6]=p,e[7]=m,e[8]=g):g=e[8];const C=g;let b;e[9]!==p?(b=p.trim(),e[9]=p,e[10]=b):b=e[10];const v=b!=="";let $;e[11]!==o?($=o("Save"),e[11]=o,e[12]=$):$=e[12];let f;e[13]!==o?(f=o("Change member role"),e[13]=o,e[14]=f):f=e[14];let w;e[15]!==o?(w=o("Role"),e[15]=o,e[16]=w):w=e[16];let h;e[17]===Symbol.for("react.memo_cache_sentinel")?(h=z=>{u(z.target.value)},e[17]=h):h=e[17];let x;e[18]!==p?(x=n(V,{"data-testid":"org-member-role-value",id:"org-member-role-value",onChange:h,value:p}),e[18]=p,e[19]=x):x=e[19];let y;e[20]!==w||e[21]!==x?(y=n(Q,{htmlFor:"org-member-role-value",label:w,children:x}),e[20]=w,e[21]=x,e[22]=y):y=e[22];let I;return e[23]!==a||e[24]!==i||e[25]!==s||e[26]!==C||e[27]!==y||e[28]!==v||e[29]!==$||e[30]!==f?(I=n(se,{busy:a,canSubmit:v,error:i,onClose:s,onSubmit:C,submitLabel:$,testId:"org-member-role",title:f,children:y}),e[23]=a,e[24]=i,e[25]=s,e[26]=C,e[27]=y,e[28]=v,e[29]=$,e[30]=f,e[31]=I):I=e[31],I},xt=t=>{const e=G(36),{mode:r,onClose:s,onDone:c,organizationId:l,team:o}=t,a=le(),i=W(),{busy:m,error:d,run:p}=ie();let u;e[0]!==o?(u=o?S(o.name):"",e[0]=o,e[1]=u):u=e[1];const[g,C]=P(u);let b;e[2]!==a||e[3]!==r||e[4]!==g||e[5]!==s||e[6]!==c||e[7]!==l||e[8]!==p||e[9]!==o?.id?(b=()=>{p(async()=>{await(r==="create"?a.createAuthOrgTeam({name:g.trim(),organizationId:l}):a.updateAuthOrgTeam({name:g.trim(),teamId:S(o?.id)})),c(),s()})},e[2]=a,e[3]=r,e[4]=g,e[5]=s,e[6]=c,e[7]=l,e[8]=p,e[9]=o?.id,e[10]=b):b=e[10];const v=b;let $;e[11]!==g?($=g.trim(),e[11]=g,e[12]=$):$=e[12];const f=$!=="";let w;e[13]!==r||e[14]!==i?(w=i(r==="create"?"Create":"Save"),e[13]=r,e[14]=i,e[15]=w):w=e[15];let h;e[16]!==r||e[17]!==i?(h=i(r==="create"?"New team":"Rename team"),e[16]=r,e[17]=i,e[18]=h):h=e[18];let x;e[19]!==i?(x=i("name"),e[19]=i,e[20]=x):x=e[20];let y;e[21]===Symbol.for("react.memo_cache_sentinel")?(y=N=>{C(N.target.value)},e[21]=y):y=e[21];let I;e[22]!==g?(I=n(V,{"data-testid":"org-team-form-name",id:"org-team-form-name",onChange:y,value:g}),e[22]=g,e[23]=I):I=e[23];let z;e[24]!==x||e[25]!==I?(z=n(Q,{htmlFor:"org-team-form-name",label:x,children:I}),e[24]=x,e[25]=I,e[26]=z):z=e[26];let O;return e[27]!==m||e[28]!==d||e[29]!==s||e[30]!==v||e[31]!==z||e[32]!==f||e[33]!==w||e[34]!==h?(O=n(se,{busy:m,canSubmit:f,error:d,onClose:s,onSubmit:v,submitLabel:w,testId:"org-team-form",title:h,children:z}),e[27]=m,e[28]=d,e[29]=s,e[30]=v,e[31]=z,e[32]=f,e[33]=w,e[34]=h,e[35]=O):O=e[35],O},Kt=t=>{const e=G(30),{onClose:r,onDone:s,teamId:c}=t,l=le(),o=W(),{busy:a,error:i,run:m}=ie(),[d,p]=P("");let u;e[0]!==l||e[1]!==r||e[2]!==s||e[3]!==m||e[4]!==c||e[5]!==d?(u=()=>{m(async()=>{await l.addAuthOrgTeamMember({teamId:c,userId:d.trim()}),s(),r()})},e[0]=l,e[1]=r,e[2]=s,e[3]=m,e[4]=c,e[5]=d,e[6]=u):u=e[6];const g=u;let C;e[7]!==d?(C=d.trim(),e[7]=d,e[8]=C):C=e[8];const b=C!=="";let v;e[9]!==o?(v=o("Add member"),e[9]=o,e[10]=v):v=e[10];let $;e[11]!==o?($=o("Add team member"),e[11]=o,e[12]=$):$=e[12];let f;e[13]!==o?(f=o("User id"),e[13]=o,e[14]=f):f=e[14];let w;e[15]===Symbol.for("react.memo_cache_sentinel")?(w=I=>{p(I.target.value)},e[15]=w):w=e[15];let h;e[16]!==d?(h=n(V,{"data-testid":"org-team-add-member-user",id:"org-team-add-member-user",onChange:w,value:d}),e[16]=d,e[17]=h):h=e[17];let x;e[18]!==f||e[19]!==h?(x=n(Q,{htmlFor:"org-team-add-member-user",label:f,children:h}),e[18]=f,e[19]=h,e[20]=x):x=e[20];let y;return e[21]!==a||e[22]!==i||e[23]!==r||e[24]!==g||e[25]!==b||e[26]!==v||e[27]!==$||e[28]!==x?(y=n(se,{busy:a,canSubmit:b,error:i,onClose:r,onSubmit:g,submitLabel:v,testId:"org-team-add-member",title:$,children:x}),e[21]=a,e[22]=i,e[23]=r,e[24]=g,e[25]=b,e[26]=v,e[27]=$,e[28]=x,e[29]=y):y=e[29],y},zt=t=>{const e=G(47),{mode:r,onClose:s,onDone:c,organizationId:l,role:o}=t,a=le(),i=W(),{busy:m,error:d,run:p}=ie();let u;e[0]!==o?(u=o?S(o.role):"",e[0]=o,e[1]=u):u=e[1];const[g,C]=P(u);let b;e[2]!==r||e[3]!==o?.permission?(b=r==="edit"?Rt(o?.permission):"",e[2]=r,e[3]=o?.permission,e[4]=b):b=e[4];const[v,$]=P(b);let f;e[5]!==a||e[6]!==r||e[7]!==g||e[8]!==s||e[9]!==c||e[10]!==l||e[11]!==v||e[12]!==o?.id||e[13]!==p?(f=()=>{p(async()=>{const _=Ut(v);await(r==="create"?a.createAuthOrgRole({organizationId:l,permission:_,role:g.trim()}):a.updateAuthOrgRole({permission:_,roleId:S(o?.id)})),c(),s()})},e[5]=a,e[6]=r,e[7]=g,e[8]=s,e[9]=c,e[10]=l,e[11]=v,e[12]=o?.id,e[13]=p,e[14]=f):f=e[14];const w=f;let h;e[15]!==r||e[16]!==g||e[17]!==v?(h=v.trim()!==""&&(r==="edit"||g.trim()!==""),e[15]=r,e[16]=g,e[17]=v,e[18]=h):h=e[18];let x;e[19]!==r||e[20]!==i?(x=i(r==="create"?"Create":"Save"),e[19]=r,e[20]=i,e[21]=x):x=e[21];let y;e[22]!==r||e[23]!==i?(y=i(r==="create"?"New role":"Edit role"),e[22]=r,e[23]=i,e[24]=y):y=e[24];let I;e[25]!==r||e[26]!==g||e[27]!==i?(I=r==="create"&&n(Q,{htmlFor:"org-role-form-name",label:i("Role name"),children:n(V,{"data-testid":"org-role-form-name",id:"org-role-form-name",onChange:_=>{C(_.target.value)},value:g})}),e[25]=r,e[26]=g,e[27]=i,e[28]=I):I=e[28];let z;e[29]!==i?(z=i('Permission (JSON, e.g. {"project":["create","update"]})'),e[29]=i,e[30]=z):z=e[30];let O;e[31]===Symbol.for("react.memo_cache_sentinel")?(O=_=>{$(_.target.value)},e[31]=O):O=e[31];let N;e[32]!==v?(N=n(_t,{"data-testid":"org-role-form-permission",id:"org-role-form-permission",onChange:O,value:v}),e[32]=v,e[33]=N):N=e[33];let k;e[34]!==N||e[35]!==z?(k=n(Q,{htmlFor:"org-role-form-permission",label:z,children:N}),e[34]=N,e[35]=z,e[36]=k):k=e[36];let D;return e[37]!==m||e[38]!==d||e[39]!==s||e[40]!==w||e[41]!==k||e[42]!==h||e[43]!==x||e[44]!==y||e[45]!==I?(D=M(se,{busy:m,canSubmit:h,error:d,onClose:s,onSubmit:w,submitLabel:x,testId:"org-role-form",title:y,children:[I,k]}),e[37]=m,e[38]=d,e[39]=s,e[40]=w,e[41]=k,e[42]=h,e[43]=x,e[44]=y,e[45]=I,e[46]=D):D=e[46],D},Tt=t=>{const e=G(18),{action:r,message:s,onClose:c,onDone:l,testId:o,title:a}=t,i=W(),{busy:m,error:d,run:p}=ie();let u;e[0]!==r||e[1]!==c||e[2]!==l||e[3]!==p?(u=()=>{p(async()=>{await r(),l(),c()})},e[0]=r,e[1]=c,e[2]=l,e[3]=p,e[4]=u):u=e[4];const g=u;let C;e[5]!==i?(C=i("Delete"),e[5]=i,e[6]=C):C=e[6];let b;e[7]!==s?(b=n("p",{className:"text-sm text-muted-foreground",children:s}),e[7]=s,e[8]=b):b=e[8];let v;return e[9]!==m||e[10]!==d||e[11]!==c||e[12]!==g||e[13]!==C||e[14]!==b||e[15]!==o||e[16]!==a?(v=n(se,{busy:m,canSubmit:!0,destructive:!0,error:d,onClose:c,onSubmit:g,submitLabel:C,testId:o,title:a,children:b}),e[9]=m,e[10]=d,e[11]=c,e[12]=g,e[13]=C,e[14]=b,e[15]=o,e[16]=a,e[17]=v):v=e[17],v},tt=t=>{const e=G(13),{action:r,children:s,heading:c,testId:l}=t;let o;e[0]!==c?(o=n("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:c}),e[0]=c,e[1]=o):o=e[1];let a;e[2]!==r?(a=r!==void 0&&n("div",{className:"flex items-center gap-2",children:r}),e[2]=r,e[3]=a):a=e[3];let i;e[4]!==o||e[5]!==a?(i=M("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[o,a]}),e[4]=o,e[5]=a,e[6]=i):i=e[6];let m;e[7]!==s?(m=n(St,{className:"px-0",children:s}),e[7]=s,e[8]=m):m=e[8];let d;return e[9]!==i||e[10]!==m||e[11]!==l?(d=M(kt,{className:"overflow-hidden py-0","data-testid":l,children:[i,m]}),e[9]=i,e[10]=m,e[11]=l,e[12]=d):d=e[12],d},rt=t=>{const e=G(23),{columns:r,rowActions:s,rowPrefix:c,rows:l}=t,o=W();let a;e[0]!==r?(a=r.map(Gt),e[0]=r,e[1]=a):a=e[1];let i;e[2]!==o?(i=o("Actions"),e[2]=o,e[3]=i):i=e[3];let m;e[4]!==i?(m=n(me,{"aria-label":i}),e[4]=i,e[5]=m):m=e[5];let d;e[6]!==a||e[7]!==m?(d=n(Nt,{children:M(bt,{children:[a,m]})}),e[6]=a,e[7]=m,e[8]=d):d=e[8];let p;if(e[9]!==r||e[10]!==s||e[11]!==c||e[12]!==l){let C;e[14]!==r||e[15]!==s||e[16]!==c?(C=b=>{const v=S(b.id);return M(bt,{"data-testid":`${c}-${v}`,children:[r.map($=>n(de,{className:$.className,children:$.render(b)},$.head)),n(de,{children:n("div",{className:"flex justify-end gap-1",children:s(b)})})]},v)},e[14]=r,e[15]=s,e[16]=c,e[17]=C):C=e[17],p=l.map(C),e[9]=r,e[10]=s,e[11]=c,e[12]=l,e[13]=p}else p=e[13];let u;e[18]!==p?(u=n(At,{children:p}),e[18]=p,e[19]=u):u=e[19];let g;return e[20]!==d||e[21]!==u?(g=M(Ot,{children:[d,u]}),e[20]=d,e[21]=u,e[22]=g):g=e[22],g},Qt=t=>{const e=G(219),{organizationId:r,rolesEnabled:s,teamsEnabled:c}=t,l=le(),o=W(),[a,i]=P(null),[m,d]=P(null),[p,u]=P(!1),[g,C]=P(null);let b;e[0]!==r?(b=["lunora-auth-org-members",r],e[0]=r,e[1]=b):b=e[1];let v;e[2]!==l||e[3]!==r?(v=()=>l.listAuthOrgMembers({limit:200,organizationId:r}),e[2]=l,e[3]=r,e[4]=v):v=e[4];const $=Ze(b,v);let f;e[5]!==r?(f=["lunora-auth-org-invitations",r],e[5]=r,e[6]=f):f=e[6];let w;e[7]!==l||e[8]!==r?(w=()=>l.listAuthOrgInvitations({limit:200,organizationId:r}),e[7]=l,e[8]=r,e[9]=w):w=e[9];const h=Ze(f,w);let x;e[10]!==r?(x=["lunora-auth-org-teams",r],e[10]=r,e[11]=x):x=e[11];let y;e[12]!==l||e[13]!==r?(y=()=>l.listAuthOrgTeams({limit:200,organizationId:r}),e[12]=l,e[13]=r,e[14]=y):y=e[14];let I;e[15]!==c?(I={enabled:c},e[15]=c,e[16]=I):I=e[16];const z=Ze(x,y,I);let O;e[17]!==r?(O=["lunora-auth-org-roles",r],e[17]=r,e[18]=O):O=e[18];let N;e[19]!==l||e[20]!==r?(N=()=>l.listAuthOrgRoles({limit:200,organizationId:r}),e[19]=l,e[20]=r,e[21]=N):N=e[21];let k;e[22]!==s?(k={enabled:s},e[22]=s,e[23]=k):k=e[23];const D=Ze(O,N,k);let _;e[24]!==m?(_=["lunora-auth-org-team-members",m],e[24]=m,e[25]=_):_=e[25];let J;e[26]!==l||e[27]!==m?(J=()=>l.listAuthOrgTeamMembers({limit:200,teamId:m??""}),e[26]=l,e[27]=m,e[28]=J):J=e[28];const q=m!==null;let U;e[29]!==q?(U={enabled:q},e[29]=q,e[30]=U):U=e[30];const L=Ze(_,J,U);let B;e[31]!==$.data?.rows?(B=$.data?.rows??[],e[31]=$.data?.rows,e[32]=B):B=e[32];const K=B;let F;e[33]!==h.data?.rows?(F=h.data?.rows??[],e[33]=h.data?.rows,e[34]=F):F=e[34];const R=F;let H;e[35]!==z.data?.rows?(H=z.data?.rows??[],e[35]=z.data?.rows,e[36]=H):H=e[36];const re=H;let X;e[37]!==D.data?.rows?(X=D.data?.rows??[],e[37]=D.data?.rows,e[38]=X):X=e[38];const Y=X;let Z;e[39]!==m||e[40]!==L?(Z=m===null?[]:L.data?.rows??[],e[39]=m,e[40]=L,e[41]=Z):Z=e[41];const ee=Z,oe=$.error??h.error??z.error??D.error??L.error;let te;e[42]!==h||e[43]!==$||e[44]!==s||e[45]!==D||e[46]!==m||e[47]!==L||e[48]!==c||e[49]!==z?(te=()=>{$.refetch(),h.refetch(),c&&z.refetch(),s&&D.refetch(),m!==null&&L.refetch()},e[42]=h,e[43]=$,e[44]=s,e[45]=D,e[46]=m,e[47]=L,e[48]=c,e[49]=z,e[50]=te):te=e[50];const A=te;Dt(A,!0);let ne;e[51]===Symbol.for("react.memo_cache_sentinel")?(ne=()=>{i(null)},e[51]=ne):ne=e[51];const E=ne;let ot;e[52]!==A?(ot=T=>{Et((async()=>{u(!0),C(null);try{await T(),A(),u(!1)}catch(gt){C(Lt(gt)),u(!1)}})())},e[52]=A,e[53]=ot):ot=e[53];const ae=ot;let nt;e[54]!==l||e[55]!==o?(nt=T=>{const gt=S(T.id);i({action:async()=>{await l.removeAuthOrgTeam({teamId:gt}),d(Ct=>Ct===gt?null:Ct)},kind:"confirm",message:o("Delete this team and its memberships? This cannot be undone."),testId:"org-team-delete",title:o("Delete team")})},e[54]=l,e[55]=o,e[56]=nt):nt=e[56];const ft=nt;let ce;e[57]!==o?(ce=o("userId"),e[57]=o,e[58]=ce):ce=e[58];let ue;e[59]!==ce?(ue={head:ce,render:Vt},e[59]=ce,e[60]=ue):ue=e[60];let ge;e[61]!==o?(ge=o("role"),e[61]=o,e[62]=ge):ge=e[62];let he;e[63]!==ge?(he={head:ge,render:Wt},e[63]=ge,e[64]=he):he=e[64];let at;e[65]!==ue||e[66]!==he?(at=[ue,he],e[65]=ue,e[66]=he,e[67]=at):at=e[67];const pt=at;let be;e[68]!==o?(be=o("email"),e[68]=o,e[69]=be):be=e[69];let fe;e[70]!==be?(fe={head:be,render:Xt},e[70]=be,e[71]=fe):fe=e[71];let pe;e[72]!==o?(pe=o("role"),e[72]=o,e[73]=pe):pe=e[73];let ve;e[74]!==pe?(ve={head:pe,render:Yt},e[74]=pe,e[75]=ve):ve=e[75];let ye;e[76]!==o?(ye=o("status"),e[76]=o,e[77]=ye):ye=e[77];let Ie;e[78]!==ye?(Ie={head:ye,render:Zt},e[78]=ye,e[79]=Ie):Ie=e[79];let lt;e[80]!==fe||e[81]!==ve||e[82]!==Ie?(lt=[fe,ve,Ie],e[80]=fe,e[81]=ve,e[82]=Ie,e[83]=lt):lt=e[83];const vt=lt;let we;e[84]!==o?(we=o("id"),e[84]=o,e[85]=we):we=e[85];let Ce;e[86]!==we?(Ce={className:"font-mono text-xs",head:we,render:er},e[86]=we,e[87]=Ce):Ce=e[87];let $e;e[88]!==o?($e=o("name"),e[88]=o,e[89]=$e):$e=e[89];let xe;e[90]!==$e?(xe={head:$e,render:tr},e[90]=$e,e[91]=xe):xe=e[91];let it;e[92]!==Ce||e[93]!==xe?(it=[Ce,xe],e[92]=Ce,e[93]=xe,e[94]=it):it=e[94];const yt=it;let ze;e[95]!==o?(ze=o("userId"),e[95]=o,e[96]=ze):ze=e[96];let st;e[97]!==ze?(st=[{head:ze,render:rr}],e[97]=ze,e[98]=st):st=e[98];const It=st;let Se;e[99]!==o?(Se=o("role"),e[99]=o,e[100]=Se):Se=e[100];let ke;e[101]!==Se?(ke={head:Se,render:or},e[101]=Se,e[102]=ke):ke=e[102];let Ne;e[103]!==o?(Ne=o("Permission"),e[103]=o,e[104]=Ne):Ne=e[104];let Ae;e[105]!==Ne?(Ae={className:"font-mono text-xs whitespace-pre-wrap",head:Ne,render:nr},e[105]=Ne,e[106]=Ae):Ae=e[106];let mt;e[107]!==ke||e[108]!==Ae?(mt=[ke,Ae],e[107]=ke,e[108]=Ae,e[109]=mt):mt=e[109];const wt=mt;let Oe;e[110]!==oe?(Oe=oe!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-detail-error",role:"alert",children:oe}),e[110]=oe,e[111]=Oe):Oe=e[111];let De;e[112]!==g?(De=g!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-action-error",role:"alert",children:g}),e[112]=g,e[113]=De):De=e[113];let dt;e[114]===Symbol.for("react.memo_cache_sentinel")?(dt=()=>{i({kind:"add-member"})},e[114]=dt):dt=e[114];let _e;e[115]!==o?(_e=o("Add member"),e[115]=o,e[116]=_e):_e=e[116];let Fe;e[117]!==_e?(Fe=n(j,{"data-testid":"org-open-add-member",onClick:dt,size:"xs",type:"button",variant:"outline",children:_e}),e[117]=_e,e[118]=Fe):Fe=e[118];let ct;e[119]===Symbol.for("react.memo_cache_sentinel")?(ct=()=>{i({kind:"invite-member"})},e[119]=ct):ct=e[119];let Re;e[120]!==o?(Re=o("Invite member"),e[120]=o,e[121]=Re):Re=e[121];let Te;e[122]!==Re?(Te=n(j,{"data-testid":"org-open-invite-member",onClick:ct,size:"xs",type:"button",variant:"outline",children:Re}),e[122]=Re,e[123]=Te):Te=e[123];let Me;e[124]!==Fe||e[125]!==Te?(Me=M(ht,{children:[Fe,Te]}),e[124]=Fe,e[125]=Te,e[126]=Me):Me=e[126];let Ee;e[127]!==o?(Ee=o("Members"),e[127]=o,e[128]=Ee):Ee=e[128];let Le;e[129]!==p||e[130]!==l||e[131]!==pt||e[132]!==K||e[133]!==ae||e[134]!==o?(Le=K.length===0?n("div",{className:"p-3",children:n(et,{testId:"org-members-empty",title:o("No members.")})}):n(rt,{columns:pt,rowActions:T=>M(ht,{children:[n(j,{"data-testid":`org-member-role-${S(T.id)}`,onClick:()=>{i({kind:"member-role",member:T})},size:"xs",type:"button",variant:"ghost",children:o("Change role")}),n(j,{"data-testid":`org-remove-member-${S(T.id)}`,disabled:p,onClick:()=>{ae(()=>l.removeAuthOrgMember({memberId:S(T.id)}))},size:"xs",type:"button",variant:"ghost",children:o("Remove")})]}),rowPrefix:"org-member",rows:K}),e[129]=p,e[130]=l,e[131]=pt,e[132]=K,e[133]=ae,e[134]=o,e[135]=Le):Le=e[135];let je;e[136]!==Me||e[137]!==Ee||e[138]!==Le?(je=n(tt,{action:Me,heading:Ee,testId:"org-members",children:Le}),e[136]=Me,e[137]=Ee,e[138]=Le,e[139]=je):je=e[139];let Pe;e[140]!==p||e[141]!==l||e[142]!==vt||e[143]!==R||e[144]!==ae||e[145]!==o?(Pe=R.length>0&&n(tt,{heading:o("Invitations"),testId:"org-invitations",children:n(rt,{columns:vt,rowActions:T=>n(j,{"data-testid":`org-cancel-invitation-${S(T.id)}`,disabled:p,onClick:()=>{ae(()=>l.cancelAuthOrgInvitation({invitationId:S(T.id)}))},size:"xs",type:"button",variant:"ghost",children:o("Cancel")}),rowPrefix:"org-invitation",rows:R})}),e[140]=p,e[141]=l,e[142]=vt,e[143]=R,e[144]=ae,e[145]=o,e[146]=Pe):Pe=e[146];let Je;e[147]!==ft||e[148]!==m||e[149]!==o||e[150]!==yt||e[151]!==re||e[152]!==c?(Je=c&&n(tt,{action:n(j,{"data-testid":"org-open-create-team",onClick:()=>{i({kind:"team-create"})},size:"xs",type:"button",variant:"outline",children:o("New team")}),heading:o("Teams"),testId:"org-teams",children:re.length===0?n("div",{className:"p-3",children:n(et,{testId:"org-teams-empty",title:o("No teams.")})}):n(rt,{columns:yt,rowActions:T=>M(ht,{children:[n(j,{"aria-pressed":m===S(T.id),"data-testid":`org-team-select-${S(T.id)}`,onClick:()=>{d(S(T.id))},size:"xs",type:"button",variant:"ghost",children:o("Members")}),n(j,{"data-testid":`org-team-rename-${S(T.id)}`,onClick:()=>{i({kind:"team-rename",team:T})},size:"xs",type:"button",variant:"ghost",children:o("Rename")}),n(j,{"data-testid":`org-team-delete-${S(T.id)}`,onClick:()=>{ft(T)},size:"xs",type:"button",variant:"ghost",children:o("Delete")})]}),rowPrefix:"org-team",rows:re})}),e[147]=ft,e[148]=m,e[149]=o,e[150]=yt,e[151]=re,e[152]=c,e[153]=Je):Je=e[153];let Ue;e[154]!==p||e[155]!==l||e[156]!==ae||e[157]!==m||e[158]!==o||e[159]!==It||e[160]!==ee||e[161]!==c?(Ue=c&&m!==null&&n(tt,{action:n(j,{"data-testid":"org-open-add-team-member",onClick:()=>{i({kind:"team-add-member",teamId:m})},size:"xs",type:"button",variant:"outline",children:o("Add member")}),heading:o("Team members"),testId:"org-team-members",children:ee.length===0?n("div",{className:"p-3",children:n(et,{testId:"org-team-members-empty",title:o("No team members.")})}):n(rt,{columns:It,rowActions:T=>n(j,{"data-testid":`org-team-remove-member-${S(T.id)}`,disabled:p,onClick:()=>{ae(()=>l.removeAuthOrgTeamMember({teamMemberId:S(T.id)}))},size:"xs",type:"button",variant:"ghost",children:o("Remove")}),rowPrefix:"org-team-member",rows:ee})}),e[154]=p,e[155]=l,e[156]=ae,e[157]=m,e[158]=o,e[159]=It,e[160]=ee,e[161]=c,e[162]=Ue):Ue=e[162];let Be;e[163]!==l||e[164]!==wt||e[165]!==Y||e[166]!==s||e[167]!==o?(Be=s&&n(tt,{action:n(j,{"data-testid":"org-open-create-role",onClick:()=>{i({kind:"role-create"})},size:"xs",type:"button",variant:"outline",children:o("New role")}),heading:o("Roles"),testId:"org-roles",children:Y.length===0?n("div",{className:"p-3",children:n(et,{testId:"org-roles-empty",title:o("No custom roles.")})}):n(rt,{columns:wt,rowActions:T=>M(ht,{children:[n(j,{"data-testid":`org-role-edit-${S(T.id)}`,onClick:()=>{i({kind:"role-edit",role:T})},size:"xs",type:"button",variant:"ghost",children:o("Edit")}),n(j,{"data-testid":`org-role-delete-${S(T.id)}`,onClick:()=>{i({action:()=>l.deleteAuthOrgRole({roleId:S(T.id)}),kind:"confirm",message:o("Delete this custom role? Members keeping it will lose its grants."),testId:"org-role-delete",title:o("Delete role")})},size:"xs",type:"button",variant:"ghost",children:o("Delete")})]}),rowPrefix:"org-role",rows:Y})}),e[163]=l,e[164]=wt,e[165]=Y,e[166]=s,e[167]=o,e[168]=Be):Be=e[168];let He;e[169]!==a?.kind||e[170]!==r||e[171]!==A?(He=a?.kind==="add-member"&&n(Bt,{onClose:E,onDone:A,organizationId:r}),e[169]=a?.kind,e[170]=r,e[171]=A,e[172]=He):He=e[172];let qe;e[173]!==a?.kind||e[174]!==r||e[175]!==A?(qe=a?.kind==="invite-member"&&n(Ht,{onClose:E,onDone:A,organizationId:r}),e[173]=a?.kind,e[174]=r,e[175]=A,e[176]=qe):qe=e[176];let Ke;e[177]!==a||e[178]!==A?(Ke=a?.kind==="member-role"&&n(qt,{member:a.member,onClose:E,onDone:A}),e[177]=a,e[178]=A,e[179]=Ke):Ke=e[179];let Qe;e[180]!==a?.kind||e[181]!==r||e[182]!==A?(Qe=a?.kind==="team-create"&&n(xt,{mode:"create",onClose:E,onDone:A,organizationId:r}),e[180]=a?.kind,e[181]=r,e[182]=A,e[183]=Qe):Qe=e[183];let Ge;e[184]!==a||e[185]!==r||e[186]!==A?(Ge=a?.kind==="team-rename"&&n(xt,{mode:"edit",onClose:E,onDone:A,organizationId:r,team:a.team}),e[184]=a,e[185]=r,e[186]=A,e[187]=Ge):Ge=e[187];let Ve;e[188]!==a||e[189]!==A?(Ve=a?.kind==="team-add-member"&&n(Kt,{onClose:E,onDone:A,teamId:a.teamId}),e[188]=a,e[189]=A,e[190]=Ve):Ve=e[190];let We;e[191]!==a?.kind||e[192]!==r||e[193]!==A?(We=a?.kind==="role-create"&&n(zt,{mode:"create",onClose:E,onDone:A,organizationId:r}),e[191]=a?.kind,e[192]=r,e[193]=A,e[194]=We):We=e[194];let Xe;e[195]!==a||e[196]!==r||e[197]!==A?(Xe=a?.kind==="role-edit"&&n(zt,{mode:"edit",onClose:E,onDone:A,organizationId:r,role:a.role}),e[195]=a,e[196]=r,e[197]=A,e[198]=Xe):Xe=e[198];let Ye;e[199]!==a||e[200]!==A?(Ye=a?.kind==="confirm"&&n(Tt,{action:a.action,message:a.message,onClose:E,onDone:A,testId:a.testId,title:a.title}),e[199]=a,e[200]=A,e[201]=Ye):Ye=e[201];let ut;return e[202]!==Oe||e[203]!==De||e[204]!==je||e[205]!==Pe||e[206]!==Je||e[207]!==Ue||e[208]!==Be||e[209]!==He||e[210]!==qe||e[211]!==Ke||e[212]!==Qe||e[213]!==Ge||e[214]!==Ve||e[215]!==We||e[216]!==Xe||e[217]!==Ye?(ut=M("div",{className:"flex flex-col gap-4","data-testid":"org-detail",children:[Oe,De,je,Pe,Je,Ue,Be,He,qe,Ke,Qe,Ge,Ve,We,Xe,Ye]}),e[202]=Oe,e[203]=De,e[204]=je,e[205]=Pe,e[206]=Je,e[207]=Ue,e[208]=Be,e[209]=He,e[210]=qe,e[211]=Ke,e[212]=Qe,e[213]=Ge,e[214]=Ve,e[215]=We,e[216]=Xe,e[217]=Ye,e[218]=ut):ut=e[218],ut};function Gt(t){return n(me,{children:t.head},t.head)}function Vt(t){return n("span",{className:"font-mono text-xs",children:S(t.userId)})}function Wt(t){return S(t.role)}function Xt(t){return S(t.email)}function Yt(t){return S(t.role)}function Zt(t){return S(t.status)}function er(t){return S(t.id)}function tr(t){return S(t.name)}function rr(t){return n("span",{className:"font-mono text-xs",children:S(t.userId)})}function or(t){return S(t.role)}function nr(t){return S(t.permission)}const Cr=()=>{const t=G(62),e=le(),r=W(),{config:s,ready:c}=Mt(),l=s.capabilities.organization,[o,a]=P(null),[i,m]=P(null);let d;t[0]===Symbol.for("react.memo_cache_sentinel")?(d=["lunora-auth-orgs"],t[0]=d):d=t[0];let p;t[1]!==e?(p=()=>e.listAuthOrganizations({limit:100}),t[1]=e,t[2]=p):p=t[2];let u;t[3]!==l?(u={enabled:l},t[3]=l,t[4]=u):u=t[4];const g=Ze(d,p,u),C=g.data?.rows??null;let b;t[5]!==g?(b=()=>{g.refetch()},t[5]=g,t[6]=b):b=t[6],Dt(b,l);let v;t[7]===Symbol.for("react.memo_cache_sentinel")?(v=()=>{m(null)},t[7]=v):v=t[7];const $=v;let f;t[8]!==g?(f=()=>{g.refetch()},t[8]=g,t[9]=f):f=t[9];const w=f;let h;t[10]===Symbol.for("react.memo_cache_sentinel")?(h=F=>{a(F)},t[10]=h):h=t[10];const x=h;if(c&&!l){let F;t[11]!==r?(F=r("Enable the organization() plugin in your auth config to manage organizations here."),t[11]=r,t[12]=F):F=t[12];let R;t[13]!==r?(R=r("Organizations are not enabled."),t[13]=r,t[14]=R):R=t[14];let H;return t[15]!==F||t[16]!==R?(H=n(et,{description:F,testId:"org-disabled",title:R}),t[15]=F,t[16]=R,t[17]=H):H=t[17],H}let y;t[18]!==r?(y=r("Organizations"),t[18]=r,t[19]=y):y=t[19];let I;t[20]!==y?(I=n("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:y}),t[20]=y,t[21]=I):I=t[21];let z;t[22]===Symbol.for("react.memo_cache_sentinel")?(z=()=>{m({kind:"create"})},t[22]=z):z=t[22];let O;t[23]!==r?(O=r("New organization"),t[23]=r,t[24]=O):O=t[24];let N;t[25]!==O?(N=n(j,{"data-testid":"org-new",onClick:z,size:"sm",type:"button",children:O}),t[25]=O,t[26]=N):N=t[26];let k;t[27]!==N||t[28]!==I?(k=M("div",{className:"flex items-center justify-between",children:[I,N]}),t[27]=N,t[28]=I,t[29]=k):k=t[29];let D;t[30]!==g.error?(D=g.error!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-error",role:"alert",children:g.error}),t[30]=g.error,t[31]=D):D=t[31];let _;t[32]!==C||t[33]!==r?(_=C!==null&&C.length===0&&n(et,{testId:"org-empty",title:r("No organizations.")}),t[32]=C,t[33]=r,t[34]=_):_=t[34];let J;t[35]!==C||t[36]!==o||t[37]!==r?(J=C!==null&&C.length>0&&n(kt,{className:"overflow-hidden py-0",children:n(St,{className:"px-0",children:M(Ot,{"data-testid":"org-table",children:[n(Nt,{children:M(bt,{children:[n(me,{children:r("id")}),n(me,{children:r("name")}),n(me,{children:r("slug")}),n(me,{children:r("created")}),n(me,{"aria-label":r("Actions")})]})}),n(At,{children:C.map(F=>{const R=S(F.id);return M(bt,{"data-testid":`org-row-${R}`,children:[n(de,{className:"font-mono text-xs",children:R}),n(de,{children:S(F.name)}),n(de,{children:S(F.slug)}),n(de,{className:"text-muted-foreground tabular-nums",children:jt(F.createdAt)}),n(de,{children:M("div",{className:"flex justify-end gap-1",children:[n(j,{"aria-pressed":o===R,"data-testid":`org-select-${R}`,onClick:()=>{x(R)},size:"xs",type:"button",variant:"ghost",children:r("Manage")}),n(j,{"data-testid":`org-edit-${R}`,onClick:()=>{m({kind:"edit",org:F})},size:"xs",type:"button",variant:"ghost",children:r("Edit")}),n(j,{"data-testid":`org-delete-${R}`,onClick:()=>{m({kind:"delete",org:F})},size:"xs",type:"button",variant:"ghost",children:r("Delete")})]})})]},R)})})]})})}),t[35]=C,t[36]=o,t[37]=r,t[38]=J):J=t[38];let q;t[39]!==s.organization||t[40]!==o?(q=o!==null&&n(Qt,{organizationId:o,rolesEnabled:s.organization.roles,teamsEnabled:s.organization.teams}),t[39]=s.organization,t[40]=o,t[41]=q):q=t[41];let U;t[42]!==i?.kind||t[43]!==w?(U=i?.kind==="create"&&n($t,{mode:"create",onClose:$,onDone:w}),t[42]=i?.kind,t[43]=w,t[44]=U):U=t[44];let L;t[45]!==i||t[46]!==w?(L=i?.kind==="edit"&&n($t,{mode:"edit",onClose:$,onDone:w,org:i.org}),t[45]=i,t[46]=w,t[47]=L):L=t[47];let B;t[48]!==e||t[49]!==i||t[50]!==w||t[51]!==r?(B=i?.kind==="delete"&&n(Tt,{action:async()=>{const F=S(i.org.id);await e.deleteAuthOrganization({organizationId:F}),a(R=>R===F?null:R)},message:r("Delete this organization? Its members, invitations, teams, and custom roles are removed. This cannot be undone."),onClose:$,onDone:w,testId:"org-delete",title:r("Delete organization")}),t[48]=e,t[49]=i,t[50]=w,t[51]=r,t[52]=B):B=t[52];let K;return t[53]!==k||t[54]!==D||t[55]!==_||t[56]!==J||t[57]!==q||t[58]!==U||t[59]!==L||t[60]!==B?(K=M("div",{className:"flex flex-col gap-4","data-testid":"lunora-organizations",children:[k,D,_,J,q,U,L,B]}),t[53]=k,t[54]=D,t[55]=_,t[56]=J,t[57]=q,t[58]=U,t[59]=L,t[60]=B,t[61]=K):K=t[61],K};export{Cr as OrganizationsPanel};
1
+ import{c as G}from"react/compiler-runtime";import{useLunora as le}from"@lunora/react";import{useState as P}from"react";import{u as j}from"../packem_shared/button-BkCrNcAs.js";import{u as St,c as kt}from"../packem_shared/card-CIDGUN6K.js";import{E as et}from"../packem_shared/empty-state-Cg7t_8qu.js";import{p as me,d as Nt,m as bt,f as At,n as Ot,u as de}from"../packem_shared/table-DdJBrClo.js";import{T as Ze}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{u as Mt}from"../packem_shared/use-auth-config-9S_K_W-G.js";import{useAutoRefresh as Dt}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as W}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{h as S,f as Et,e as Lt,i as jt}from"../packem_shared/internal-AtZ4bTal.js";import{u as V}from"../packem_shared/input-JHu63lTv.js";import{p as Pt}from"../packem_shared/label-6uP1obNF.js";import{M as Jt}from"../packem_shared/modal-shell-CUwwWC2o.js";import{l as _t}from"../packem_shared/textarea-Bu2-jKAs.js";import{u as ie}from"../packem_shared/use-async-submit-DLNCqLFq.js";import{jsx as n,jsxs as M,Fragment as ht}from"react/jsx-runtime";const Ft=t=>{const e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("Expected a JSON object");return e},Ut=t=>{const e=Ft(t),r={};for(const[s,c]of Object.entries(e)){if(!Array.isArray(c)||c.some(l=>typeof l!="string"))throw new TypeError(`"${s}" must map to an array of action strings`);r[s]=c}return r},Rt=t=>t==null||t===""?"":typeof t=="string"?t:JSON.stringify(t,null,2),Q=t=>{const e=G(6),{children:r,htmlFor:s,label:c}=t;let l;e[0]!==s||e[1]!==c?(l=n(Pt,{htmlFor:s,children:c}),e[0]=s,e[1]=c,e[2]=l):l=e[2];let o;return e[3]!==r||e[4]!==l?(o=M("div",{className:"flex flex-col gap-1",children:[l,r]}),e[3]=r,e[4]=l,e[5]=o):o=e[5],o},se=({busy:t,canSubmit:e,children:r,destructive:s=!1,error:c,onClose:l,onSubmit:o,submitLabel:a,testId:i,title:m})=>{const d=W();return M(Jt,{label:m,onClose:l,panelTestId:`${i}-panel`,testId:`${i}-overlay`,variant:"dialog",children:[n("h2",{className:"text-sm font-semibold text-foreground",children:m}),r,c!==null&&n("p",{className:"text-sm text-destructive","data-testid":`${i}-error`,role:"alert",children:c}),M("div",{className:"flex justify-end gap-2 pt-1",children:[n(j,{"data-testid":`${i}-cancel`,onClick:l,size:"sm",type:"button",variant:"outline",children:d("Cancel")}),n(j,{"data-testid":`${i}-submit`,disabled:t||!e,onClick:o,size:"sm",type:"button",variant:s?"destructive":"default",children:t?d("Saving…"):a})]})]})},$t=t=>{const e=G(79),{mode:r,onClose:s,onDone:c,org:l}=t,o=le(),a=W(),{busy:i,error:m,run:d}=ie();let p;e[0]!==l?(p=l?S(l.name):"",e[0]=l,e[1]=p):p=e[1];const[u,g]=P(p);let C;e[2]!==l?(C=l?S(l.slug):"",e[2]=l,e[3]=C):C=e[3];const[b,v]=P(C);let $;e[4]!==l?($=l?S(l.logo):"",e[4]=l,e[5]=$):$=e[5];const[f,w]=P($),[h,x]=P("");let y;e[6]!==r||e[7]!==l?.metadata?(y=r==="edit"?Rt(l?.metadata):"",e[6]=r,e[7]=l?.metadata,e[8]=y):y=e[8];const[I,z]=P(y);let O;e[9]!==o||e[10]!==f||e[11]!==I||e[12]!==r||e[13]!==u||e[14]!==s||e[15]!==c||e[16]!==l?.id||e[17]!==h||e[18]!==d||e[19]!==b?(O=()=>{d(async()=>{const E=I.trim()===""?void 0:Ft(I);r==="create"?await o.createAuthOrganization({logo:f.trim()===""?void 0:f.trim(),metadata:E,name:u.trim(),ownerId:h.trim()===""?void 0:h.trim(),slug:b.trim()===""?void 0:b.trim()}):await o.updateAuthOrganization({logo:f.trim()===""?void 0:f.trim(),metadata:E,name:u.trim()===""?void 0:u.trim(),organizationId:S(l?.id),slug:b.trim()===""?void 0:b.trim()}),c(),s()})},e[9]=o,e[10]=f,e[11]=I,e[12]=r,e[13]=u,e[14]=s,e[15]=c,e[16]=l?.id,e[17]=h,e[18]=d,e[19]=b,e[20]=O):O=e[20];const N=O;let k;e[21]!==r||e[22]!==u?(k=u.trim()!==""||r==="edit",e[21]=r,e[22]=u,e[23]=k):k=e[23];let D;e[24]!==r||e[25]!==a?(D=a(r==="create"?"Create":"Save"),e[24]=r,e[25]=a,e[26]=D):D=e[26];let _;e[27]!==r||e[28]!==a?(_=a(r==="create"?"New organization":"Edit organization"),e[27]=r,e[28]=a,e[29]=_):_=e[29];let J;e[30]!==a?(J=a("name"),e[30]=a,e[31]=J):J=e[31];let q;e[32]===Symbol.for("react.memo_cache_sentinel")?(q=E=>{g(E.target.value)},e[32]=q):q=e[32];let U;e[33]!==u?(U=n(V,{"data-testid":"org-form-name",id:"org-form-name",onChange:q,value:u}),e[33]=u,e[34]=U):U=e[34];let L;e[35]!==U||e[36]!==J?(L=n(Q,{htmlFor:"org-form-name",label:J,children:U}),e[35]=U,e[36]=J,e[37]=L):L=e[37];let B;e[38]!==a?(B=a("Slug (optional — derived from name)"),e[38]=a,e[39]=B):B=e[39];let K;e[40]===Symbol.for("react.memo_cache_sentinel")?(K=E=>{v(E.target.value)},e[40]=K):K=e[40];let F;e[41]!==b?(F=n(V,{"data-testid":"org-form-slug",id:"org-form-slug",onChange:K,value:b}),e[41]=b,e[42]=F):F=e[42];let R;e[43]!==B||e[44]!==F?(R=n(Q,{htmlFor:"org-form-slug",label:B,children:F}),e[43]=B,e[44]=F,e[45]=R):R=e[45];let H;e[46]!==a?(H=a("Logo URL (optional)"),e[46]=a,e[47]=H):H=e[47];let re;e[48]===Symbol.for("react.memo_cache_sentinel")?(re=E=>{w(E.target.value)},e[48]=re):re=e[48];let X;e[49]!==f?(X=n(V,{"data-testid":"org-form-logo",id:"org-form-logo",onChange:re,value:f}),e[49]=f,e[50]=X):X=e[50];let Y;e[51]!==H||e[52]!==X?(Y=n(Q,{htmlFor:"org-form-logo",label:H,children:X}),e[51]=H,e[52]=X,e[53]=Y):Y=e[53];let Z;e[54]!==r||e[55]!==h||e[56]!==a?(Z=r==="create"&&n(Q,{htmlFor:"org-form-owner",label:a("Owner user id (optional)"),children:n(V,{"data-testid":"org-form-owner",id:"org-form-owner",onChange:E=>{x(E.target.value)},value:h})}),e[54]=r,e[55]=h,e[56]=a,e[57]=Z):Z=e[57];let ee;e[58]!==a?(ee=a("Metadata (JSON, optional)"),e[58]=a,e[59]=ee):ee=e[59];let oe;e[60]===Symbol.for("react.memo_cache_sentinel")?(oe=E=>{z(E.target.value)},e[60]=oe):oe=e[60];let te;e[61]!==I?(te=n(_t,{"data-testid":"org-form-metadata",id:"org-form-metadata",onChange:oe,value:I}),e[61]=I,e[62]=te):te=e[62];let A;e[63]!==ee||e[64]!==te?(A=n(Q,{htmlFor:"org-form-metadata",label:ee,children:te}),e[63]=ee,e[64]=te,e[65]=A):A=e[65];let ne;return e[66]!==i||e[67]!==m||e[68]!==s||e[69]!==N||e[70]!==L||e[71]!==R||e[72]!==Y||e[73]!==Z||e[74]!==A||e[75]!==k||e[76]!==D||e[77]!==_?(ne=M(se,{busy:i,canSubmit:k,error:m,onClose:s,onSubmit:N,submitLabel:D,testId:"org-form",title:_,children:[L,R,Y,Z,A]}),e[66]=i,e[67]=m,e[68]=s,e[69]=N,e[70]=L,e[71]=R,e[72]=Y,e[73]=Z,e[74]=A,e[75]=k,e[76]=D,e[77]=_,e[78]=ne):ne=e[78],ne},Bt=t=>{const e=G(40),{onClose:r,onDone:s,organizationId:c}=t,l=le(),o=W(),{busy:a,error:i,run:m}=ie(),[d,p]=P(""),[u,g]=P("");let C;e[0]!==l||e[1]!==r||e[2]!==s||e[3]!==c||e[4]!==u||e[5]!==m||e[6]!==d?(C=()=>{m(async()=>{await l.addAuthOrgMember({organizationId:c,role:u.trim()===""?void 0:u.trim(),userId:d.trim()}),s(),r()})},e[0]=l,e[1]=r,e[2]=s,e[3]=c,e[4]=u,e[5]=m,e[6]=d,e[7]=C):C=e[7];const b=C;let v;e[8]!==d?(v=d.trim(),e[8]=d,e[9]=v):v=e[9];const $=v!=="";let f;e[10]!==o?(f=o("Add member"),e[10]=o,e[11]=f):f=e[11];let w;e[12]!==o?(w=o("Add member"),e[12]=o,e[13]=w):w=e[13];let h;e[14]!==o?(h=o("User id"),e[14]=o,e[15]=h):h=e[15];let x;e[16]===Symbol.for("react.memo_cache_sentinel")?(x=_=>{p(_.target.value)},e[16]=x):x=e[16];let y;e[17]!==d?(y=n(V,{"data-testid":"org-add-member-user",id:"org-add-member-user",onChange:x,value:d}),e[17]=d,e[18]=y):y=e[18];let I;e[19]!==h||e[20]!==y?(I=n(Q,{htmlFor:"org-add-member-user",label:h,children:y}),e[19]=h,e[20]=y,e[21]=I):I=e[21];let z;e[22]!==o?(z=o("Role (optional)"),e[22]=o,e[23]=z):z=e[23];let O;e[24]===Symbol.for("react.memo_cache_sentinel")?(O=_=>{g(_.target.value)},e[24]=O):O=e[24];let N;e[25]!==u?(N=n(V,{"data-testid":"org-add-member-role",id:"org-add-member-role",onChange:O,value:u}),e[25]=u,e[26]=N):N=e[26];let k;e[27]!==z||e[28]!==N?(k=n(Q,{htmlFor:"org-add-member-role",label:z,children:N}),e[27]=z,e[28]=N,e[29]=k):k=e[29];let D;return e[30]!==a||e[31]!==i||e[32]!==r||e[33]!==b||e[34]!==k||e[35]!==$||e[36]!==f||e[37]!==w||e[38]!==I?(D=M(se,{busy:a,canSubmit:$,error:i,onClose:r,onSubmit:b,submitLabel:f,testId:"org-add-member",title:w,children:[I,k]}),e[30]=a,e[31]=i,e[32]=r,e[33]=b,e[34]=k,e[35]=$,e[36]=f,e[37]=w,e[38]=I,e[39]=D):D=e[39],D},Ht=t=>{const e=G(40),{onClose:r,onDone:s,organizationId:c}=t,l=le(),o=W(),{busy:a,error:i,run:m}=ie(),[d,p]=P(""),[u,g]=P("");let C;e[0]!==l||e[1]!==d||e[2]!==r||e[3]!==s||e[4]!==c||e[5]!==u||e[6]!==m?(C=()=>{m(async()=>{await l.inviteAuthOrgMember({email:d.trim(),organizationId:c,role:u.trim()===""?void 0:u.trim()}),s(),r()})},e[0]=l,e[1]=d,e[2]=r,e[3]=s,e[4]=c,e[5]=u,e[6]=m,e[7]=C):C=e[7];const b=C;let v;e[8]!==d?(v=d.trim(),e[8]=d,e[9]=v):v=e[9];const $=v!=="";let f;e[10]!==o?(f=o("Send invitation"),e[10]=o,e[11]=f):f=e[11];let w;e[12]!==o?(w=o("Invite member"),e[12]=o,e[13]=w):w=e[13];let h;e[14]!==o?(h=o("email"),e[14]=o,e[15]=h):h=e[15];let x;e[16]===Symbol.for("react.memo_cache_sentinel")?(x=_=>{p(_.target.value)},e[16]=x):x=e[16];let y;e[17]!==d?(y=n(V,{"data-testid":"org-invite-member-email",id:"org-invite-member-email",onChange:x,type:"email",value:d}),e[17]=d,e[18]=y):y=e[18];let I;e[19]!==h||e[20]!==y?(I=n(Q,{htmlFor:"org-invite-member-email",label:h,children:y}),e[19]=h,e[20]=y,e[21]=I):I=e[21];let z;e[22]!==o?(z=o("Role (optional)"),e[22]=o,e[23]=z):z=e[23];let O;e[24]===Symbol.for("react.memo_cache_sentinel")?(O=_=>{g(_.target.value)},e[24]=O):O=e[24];let N;e[25]!==u?(N=n(V,{"data-testid":"org-invite-member-role",id:"org-invite-member-role",onChange:O,value:u}),e[25]=u,e[26]=N):N=e[26];let k;e[27]!==z||e[28]!==N?(k=n(Q,{htmlFor:"org-invite-member-role",label:z,children:N}),e[27]=z,e[28]=N,e[29]=k):k=e[29];let D;return e[30]!==a||e[31]!==i||e[32]!==r||e[33]!==b||e[34]!==k||e[35]!==$||e[36]!==f||e[37]!==w||e[38]!==I?(D=M(se,{busy:a,canSubmit:$,error:i,onClose:r,onSubmit:b,submitLabel:f,testId:"org-invite-member",title:w,children:[I,k]}),e[30]=a,e[31]=i,e[32]=r,e[33]=b,e[34]=k,e[35]=$,e[36]=f,e[37]=w,e[38]=I,e[39]=D):D=e[39],D},qt=t=>{const e=G(32),{member:r,onClose:s,onDone:c}=t,l=le(),o=W(),{busy:a,error:i,run:m}=ie();let d;e[0]!==r.role?(d=S(r.role),e[0]=r.role,e[1]=d):d=e[1];const[p,u]=P(d);let g;e[2]!==l||e[3]!==r.id||e[4]!==s||e[5]!==c||e[6]!==p||e[7]!==m?(g=()=>{m(async()=>{await l.setAuthOrgMemberRole({memberId:S(r.id),role:p.trim()}),c(),s()})},e[2]=l,e[3]=r.id,e[4]=s,e[5]=c,e[6]=p,e[7]=m,e[8]=g):g=e[8];const C=g;let b;e[9]!==p?(b=p.trim(),e[9]=p,e[10]=b):b=e[10];const v=b!=="";let $;e[11]!==o?($=o("Save"),e[11]=o,e[12]=$):$=e[12];let f;e[13]!==o?(f=o("Change member role"),e[13]=o,e[14]=f):f=e[14];let w;e[15]!==o?(w=o("Role"),e[15]=o,e[16]=w):w=e[16];let h;e[17]===Symbol.for("react.memo_cache_sentinel")?(h=z=>{u(z.target.value)},e[17]=h):h=e[17];let x;e[18]!==p?(x=n(V,{"data-testid":"org-member-role-value",id:"org-member-role-value",onChange:h,value:p}),e[18]=p,e[19]=x):x=e[19];let y;e[20]!==w||e[21]!==x?(y=n(Q,{htmlFor:"org-member-role-value",label:w,children:x}),e[20]=w,e[21]=x,e[22]=y):y=e[22];let I;return e[23]!==a||e[24]!==i||e[25]!==s||e[26]!==C||e[27]!==y||e[28]!==v||e[29]!==$||e[30]!==f?(I=n(se,{busy:a,canSubmit:v,error:i,onClose:s,onSubmit:C,submitLabel:$,testId:"org-member-role",title:f,children:y}),e[23]=a,e[24]=i,e[25]=s,e[26]=C,e[27]=y,e[28]=v,e[29]=$,e[30]=f,e[31]=I):I=e[31],I},xt=t=>{const e=G(36),{mode:r,onClose:s,onDone:c,organizationId:l,team:o}=t,a=le(),i=W(),{busy:m,error:d,run:p}=ie();let u;e[0]!==o?(u=o?S(o.name):"",e[0]=o,e[1]=u):u=e[1];const[g,C]=P(u);let b;e[2]!==a||e[3]!==r||e[4]!==g||e[5]!==s||e[6]!==c||e[7]!==l||e[8]!==p||e[9]!==o?.id?(b=()=>{p(async()=>{await(r==="create"?a.createAuthOrgTeam({name:g.trim(),organizationId:l}):a.updateAuthOrgTeam({name:g.trim(),teamId:S(o?.id)})),c(),s()})},e[2]=a,e[3]=r,e[4]=g,e[5]=s,e[6]=c,e[7]=l,e[8]=p,e[9]=o?.id,e[10]=b):b=e[10];const v=b;let $;e[11]!==g?($=g.trim(),e[11]=g,e[12]=$):$=e[12];const f=$!=="";let w;e[13]!==r||e[14]!==i?(w=i(r==="create"?"Create":"Save"),e[13]=r,e[14]=i,e[15]=w):w=e[15];let h;e[16]!==r||e[17]!==i?(h=i(r==="create"?"New team":"Rename team"),e[16]=r,e[17]=i,e[18]=h):h=e[18];let x;e[19]!==i?(x=i("name"),e[19]=i,e[20]=x):x=e[20];let y;e[21]===Symbol.for("react.memo_cache_sentinel")?(y=N=>{C(N.target.value)},e[21]=y):y=e[21];let I;e[22]!==g?(I=n(V,{"data-testid":"org-team-form-name",id:"org-team-form-name",onChange:y,value:g}),e[22]=g,e[23]=I):I=e[23];let z;e[24]!==x||e[25]!==I?(z=n(Q,{htmlFor:"org-team-form-name",label:x,children:I}),e[24]=x,e[25]=I,e[26]=z):z=e[26];let O;return e[27]!==m||e[28]!==d||e[29]!==s||e[30]!==v||e[31]!==z||e[32]!==f||e[33]!==w||e[34]!==h?(O=n(se,{busy:m,canSubmit:f,error:d,onClose:s,onSubmit:v,submitLabel:w,testId:"org-team-form",title:h,children:z}),e[27]=m,e[28]=d,e[29]=s,e[30]=v,e[31]=z,e[32]=f,e[33]=w,e[34]=h,e[35]=O):O=e[35],O},Kt=t=>{const e=G(30),{onClose:r,onDone:s,teamId:c}=t,l=le(),o=W(),{busy:a,error:i,run:m}=ie(),[d,p]=P("");let u;e[0]!==l||e[1]!==r||e[2]!==s||e[3]!==m||e[4]!==c||e[5]!==d?(u=()=>{m(async()=>{await l.addAuthOrgTeamMember({teamId:c,userId:d.trim()}),s(),r()})},e[0]=l,e[1]=r,e[2]=s,e[3]=m,e[4]=c,e[5]=d,e[6]=u):u=e[6];const g=u;let C;e[7]!==d?(C=d.trim(),e[7]=d,e[8]=C):C=e[8];const b=C!=="";let v;e[9]!==o?(v=o("Add member"),e[9]=o,e[10]=v):v=e[10];let $;e[11]!==o?($=o("Add team member"),e[11]=o,e[12]=$):$=e[12];let f;e[13]!==o?(f=o("User id"),e[13]=o,e[14]=f):f=e[14];let w;e[15]===Symbol.for("react.memo_cache_sentinel")?(w=I=>{p(I.target.value)},e[15]=w):w=e[15];let h;e[16]!==d?(h=n(V,{"data-testid":"org-team-add-member-user",id:"org-team-add-member-user",onChange:w,value:d}),e[16]=d,e[17]=h):h=e[17];let x;e[18]!==f||e[19]!==h?(x=n(Q,{htmlFor:"org-team-add-member-user",label:f,children:h}),e[18]=f,e[19]=h,e[20]=x):x=e[20];let y;return e[21]!==a||e[22]!==i||e[23]!==r||e[24]!==g||e[25]!==b||e[26]!==v||e[27]!==$||e[28]!==x?(y=n(se,{busy:a,canSubmit:b,error:i,onClose:r,onSubmit:g,submitLabel:v,testId:"org-team-add-member",title:$,children:x}),e[21]=a,e[22]=i,e[23]=r,e[24]=g,e[25]=b,e[26]=v,e[27]=$,e[28]=x,e[29]=y):y=e[29],y},zt=t=>{const e=G(47),{mode:r,onClose:s,onDone:c,organizationId:l,role:o}=t,a=le(),i=W(),{busy:m,error:d,run:p}=ie();let u;e[0]!==o?(u=o?S(o.role):"",e[0]=o,e[1]=u):u=e[1];const[g,C]=P(u);let b;e[2]!==r||e[3]!==o?.permission?(b=r==="edit"?Rt(o?.permission):"",e[2]=r,e[3]=o?.permission,e[4]=b):b=e[4];const[v,$]=P(b);let f;e[5]!==a||e[6]!==r||e[7]!==g||e[8]!==s||e[9]!==c||e[10]!==l||e[11]!==v||e[12]!==o?.id||e[13]!==p?(f=()=>{p(async()=>{const _=Ut(v);await(r==="create"?a.createAuthOrgRole({organizationId:l,permission:_,role:g.trim()}):a.updateAuthOrgRole({permission:_,roleId:S(o?.id)})),c(),s()})},e[5]=a,e[6]=r,e[7]=g,e[8]=s,e[9]=c,e[10]=l,e[11]=v,e[12]=o?.id,e[13]=p,e[14]=f):f=e[14];const w=f;let h;e[15]!==r||e[16]!==g||e[17]!==v?(h=v.trim()!==""&&(r==="edit"||g.trim()!==""),e[15]=r,e[16]=g,e[17]=v,e[18]=h):h=e[18];let x;e[19]!==r||e[20]!==i?(x=i(r==="create"?"Create":"Save"),e[19]=r,e[20]=i,e[21]=x):x=e[21];let y;e[22]!==r||e[23]!==i?(y=i(r==="create"?"New role":"Edit role"),e[22]=r,e[23]=i,e[24]=y):y=e[24];let I;e[25]!==r||e[26]!==g||e[27]!==i?(I=r==="create"&&n(Q,{htmlFor:"org-role-form-name",label:i("Role name"),children:n(V,{"data-testid":"org-role-form-name",id:"org-role-form-name",onChange:_=>{C(_.target.value)},value:g})}),e[25]=r,e[26]=g,e[27]=i,e[28]=I):I=e[28];let z;e[29]!==i?(z=i('Permission (JSON, e.g. {"project":["create","update"]})'),e[29]=i,e[30]=z):z=e[30];let O;e[31]===Symbol.for("react.memo_cache_sentinel")?(O=_=>{$(_.target.value)},e[31]=O):O=e[31];let N;e[32]!==v?(N=n(_t,{"data-testid":"org-role-form-permission",id:"org-role-form-permission",onChange:O,value:v}),e[32]=v,e[33]=N):N=e[33];let k;e[34]!==N||e[35]!==z?(k=n(Q,{htmlFor:"org-role-form-permission",label:z,children:N}),e[34]=N,e[35]=z,e[36]=k):k=e[36];let D;return e[37]!==m||e[38]!==d||e[39]!==s||e[40]!==w||e[41]!==k||e[42]!==h||e[43]!==x||e[44]!==y||e[45]!==I?(D=M(se,{busy:m,canSubmit:h,error:d,onClose:s,onSubmit:w,submitLabel:x,testId:"org-role-form",title:y,children:[I,k]}),e[37]=m,e[38]=d,e[39]=s,e[40]=w,e[41]=k,e[42]=h,e[43]=x,e[44]=y,e[45]=I,e[46]=D):D=e[46],D},Tt=t=>{const e=G(18),{action:r,message:s,onClose:c,onDone:l,testId:o,title:a}=t,i=W(),{busy:m,error:d,run:p}=ie();let u;e[0]!==r||e[1]!==c||e[2]!==l||e[3]!==p?(u=()=>{p(async()=>{await r(),l(),c()})},e[0]=r,e[1]=c,e[2]=l,e[3]=p,e[4]=u):u=e[4];const g=u;let C;e[5]!==i?(C=i("Delete"),e[5]=i,e[6]=C):C=e[6];let b;e[7]!==s?(b=n("p",{className:"text-sm text-muted-foreground",children:s}),e[7]=s,e[8]=b):b=e[8];let v;return e[9]!==m||e[10]!==d||e[11]!==c||e[12]!==g||e[13]!==C||e[14]!==b||e[15]!==o||e[16]!==a?(v=n(se,{busy:m,canSubmit:!0,destructive:!0,error:d,onClose:c,onSubmit:g,submitLabel:C,testId:o,title:a,children:b}),e[9]=m,e[10]=d,e[11]=c,e[12]=g,e[13]=C,e[14]=b,e[15]=o,e[16]=a,e[17]=v):v=e[17],v},tt=t=>{const e=G(13),{action:r,children:s,heading:c,testId:l}=t;let o;e[0]!==c?(o=n("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:c}),e[0]=c,e[1]=o):o=e[1];let a;e[2]!==r?(a=r!==void 0&&n("div",{className:"flex items-center gap-2",children:r}),e[2]=r,e[3]=a):a=e[3];let i;e[4]!==o||e[5]!==a?(i=M("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[o,a]}),e[4]=o,e[5]=a,e[6]=i):i=e[6];let m;e[7]!==s?(m=n(St,{className:"px-0",children:s}),e[7]=s,e[8]=m):m=e[8];let d;return e[9]!==i||e[10]!==m||e[11]!==l?(d=M(kt,{className:"overflow-hidden py-0","data-testid":l,children:[i,m]}),e[9]=i,e[10]=m,e[11]=l,e[12]=d):d=e[12],d},rt=t=>{const e=G(23),{columns:r,rowActions:s,rowPrefix:c,rows:l}=t,o=W();let a;e[0]!==r?(a=r.map(Gt),e[0]=r,e[1]=a):a=e[1];let i;e[2]!==o?(i=o("Actions"),e[2]=o,e[3]=i):i=e[3];let m;e[4]!==i?(m=n(me,{"aria-label":i}),e[4]=i,e[5]=m):m=e[5];let d;e[6]!==a||e[7]!==m?(d=n(Nt,{children:M(bt,{children:[a,m]})}),e[6]=a,e[7]=m,e[8]=d):d=e[8];let p;if(e[9]!==r||e[10]!==s||e[11]!==c||e[12]!==l){let C;e[14]!==r||e[15]!==s||e[16]!==c?(C=b=>{const v=S(b.id);return M(bt,{"data-testid":`${c}-${v}`,children:[r.map($=>n(de,{className:$.className,children:$.render(b)},$.head)),n(de,{children:n("div",{className:"flex justify-end gap-1",children:s(b)})})]},v)},e[14]=r,e[15]=s,e[16]=c,e[17]=C):C=e[17],p=l.map(C),e[9]=r,e[10]=s,e[11]=c,e[12]=l,e[13]=p}else p=e[13];let u;e[18]!==p?(u=n(At,{children:p}),e[18]=p,e[19]=u):u=e[19];let g;return e[20]!==d||e[21]!==u?(g=M(Ot,{children:[d,u]}),e[20]=d,e[21]=u,e[22]=g):g=e[22],g},Qt=t=>{const e=G(219),{organizationId:r,rolesEnabled:s,teamsEnabled:c}=t,l=le(),o=W(),[a,i]=P(null),[m,d]=P(null),[p,u]=P(!1),[g,C]=P(null);let b;e[0]!==r?(b=["lunora-auth-org-members",r],e[0]=r,e[1]=b):b=e[1];let v;e[2]!==l||e[3]!==r?(v=()=>l.listAuthOrgMembers({limit:200,organizationId:r}),e[2]=l,e[3]=r,e[4]=v):v=e[4];const $=Ze(b,v);let f;e[5]!==r?(f=["lunora-auth-org-invitations",r],e[5]=r,e[6]=f):f=e[6];let w;e[7]!==l||e[8]!==r?(w=()=>l.listAuthOrgInvitations({limit:200,organizationId:r}),e[7]=l,e[8]=r,e[9]=w):w=e[9];const h=Ze(f,w);let x;e[10]!==r?(x=["lunora-auth-org-teams",r],e[10]=r,e[11]=x):x=e[11];let y;e[12]!==l||e[13]!==r?(y=()=>l.listAuthOrgTeams({limit:200,organizationId:r}),e[12]=l,e[13]=r,e[14]=y):y=e[14];let I;e[15]!==c?(I={enabled:c},e[15]=c,e[16]=I):I=e[16];const z=Ze(x,y,I);let O;e[17]!==r?(O=["lunora-auth-org-roles",r],e[17]=r,e[18]=O):O=e[18];let N;e[19]!==l||e[20]!==r?(N=()=>l.listAuthOrgRoles({limit:200,organizationId:r}),e[19]=l,e[20]=r,e[21]=N):N=e[21];let k;e[22]!==s?(k={enabled:s},e[22]=s,e[23]=k):k=e[23];const D=Ze(O,N,k);let _;e[24]!==m?(_=["lunora-auth-org-team-members",m],e[24]=m,e[25]=_):_=e[25];let J;e[26]!==l||e[27]!==m?(J=()=>l.listAuthOrgTeamMembers({limit:200,teamId:m??""}),e[26]=l,e[27]=m,e[28]=J):J=e[28];const q=m!==null;let U;e[29]!==q?(U={enabled:q},e[29]=q,e[30]=U):U=e[30];const L=Ze(_,J,U);let B;e[31]!==$.data?.rows?(B=$.data?.rows??[],e[31]=$.data?.rows,e[32]=B):B=e[32];const K=B;let F;e[33]!==h.data?.rows?(F=h.data?.rows??[],e[33]=h.data?.rows,e[34]=F):F=e[34];const R=F;let H;e[35]!==z.data?.rows?(H=z.data?.rows??[],e[35]=z.data?.rows,e[36]=H):H=e[36];const re=H;let X;e[37]!==D.data?.rows?(X=D.data?.rows??[],e[37]=D.data?.rows,e[38]=X):X=e[38];const Y=X;let Z;e[39]!==m||e[40]!==L?(Z=m===null?[]:L.data?.rows??[],e[39]=m,e[40]=L,e[41]=Z):Z=e[41];const ee=Z,oe=$.error??h.error??z.error??D.error??L.error;let te;e[42]!==h||e[43]!==$||e[44]!==s||e[45]!==D||e[46]!==m||e[47]!==L||e[48]!==c||e[49]!==z?(te=()=>{$.refetch(),h.refetch(),c&&z.refetch(),s&&D.refetch(),m!==null&&L.refetch()},e[42]=h,e[43]=$,e[44]=s,e[45]=D,e[46]=m,e[47]=L,e[48]=c,e[49]=z,e[50]=te):te=e[50];const A=te;Dt(A,!0);let ne;e[51]===Symbol.for("react.memo_cache_sentinel")?(ne=()=>{i(null)},e[51]=ne):ne=e[51];const E=ne;let ot;e[52]!==A?(ot=T=>{Et((async()=>{u(!0),C(null);try{await T(),A(),u(!1)}catch(gt){C(Lt(gt)),u(!1)}})())},e[52]=A,e[53]=ot):ot=e[53];const ae=ot;let nt;e[54]!==l||e[55]!==o?(nt=T=>{const gt=S(T.id);i({action:async()=>{await l.removeAuthOrgTeam({teamId:gt}),d(Ct=>Ct===gt?null:Ct)},kind:"confirm",message:o("Delete this team and its memberships? This cannot be undone."),testId:"org-team-delete",title:o("Delete team")})},e[54]=l,e[55]=o,e[56]=nt):nt=e[56];const ft=nt;let ce;e[57]!==o?(ce=o("userId"),e[57]=o,e[58]=ce):ce=e[58];let ue;e[59]!==ce?(ue={head:ce,render:Vt},e[59]=ce,e[60]=ue):ue=e[60];let ge;e[61]!==o?(ge=o("role"),e[61]=o,e[62]=ge):ge=e[62];let he;e[63]!==ge?(he={head:ge,render:Wt},e[63]=ge,e[64]=he):he=e[64];let at;e[65]!==ue||e[66]!==he?(at=[ue,he],e[65]=ue,e[66]=he,e[67]=at):at=e[67];const pt=at;let be;e[68]!==o?(be=o("email"),e[68]=o,e[69]=be):be=e[69];let fe;e[70]!==be?(fe={head:be,render:Xt},e[70]=be,e[71]=fe):fe=e[71];let pe;e[72]!==o?(pe=o("role"),e[72]=o,e[73]=pe):pe=e[73];let ve;e[74]!==pe?(ve={head:pe,render:Yt},e[74]=pe,e[75]=ve):ve=e[75];let ye;e[76]!==o?(ye=o("status"),e[76]=o,e[77]=ye):ye=e[77];let Ie;e[78]!==ye?(Ie={head:ye,render:Zt},e[78]=ye,e[79]=Ie):Ie=e[79];let lt;e[80]!==fe||e[81]!==ve||e[82]!==Ie?(lt=[fe,ve,Ie],e[80]=fe,e[81]=ve,e[82]=Ie,e[83]=lt):lt=e[83];const vt=lt;let we;e[84]!==o?(we=o("id"),e[84]=o,e[85]=we):we=e[85];let Ce;e[86]!==we?(Ce={className:"font-mono text-xs",head:we,render:er},e[86]=we,e[87]=Ce):Ce=e[87];let $e;e[88]!==o?($e=o("name"),e[88]=o,e[89]=$e):$e=e[89];let xe;e[90]!==$e?(xe={head:$e,render:tr},e[90]=$e,e[91]=xe):xe=e[91];let it;e[92]!==Ce||e[93]!==xe?(it=[Ce,xe],e[92]=Ce,e[93]=xe,e[94]=it):it=e[94];const yt=it;let ze;e[95]!==o?(ze=o("userId"),e[95]=o,e[96]=ze):ze=e[96];let st;e[97]!==ze?(st=[{head:ze,render:rr}],e[97]=ze,e[98]=st):st=e[98];const It=st;let Se;e[99]!==o?(Se=o("role"),e[99]=o,e[100]=Se):Se=e[100];let ke;e[101]!==Se?(ke={head:Se,render:or},e[101]=Se,e[102]=ke):ke=e[102];let Ne;e[103]!==o?(Ne=o("Permission"),e[103]=o,e[104]=Ne):Ne=e[104];let Ae;e[105]!==Ne?(Ae={className:"font-mono text-xs whitespace-pre-wrap",head:Ne,render:nr},e[105]=Ne,e[106]=Ae):Ae=e[106];let mt;e[107]!==ke||e[108]!==Ae?(mt=[ke,Ae],e[107]=ke,e[108]=Ae,e[109]=mt):mt=e[109];const wt=mt;let Oe;e[110]!==oe?(Oe=oe!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-detail-error",role:"alert",children:oe}),e[110]=oe,e[111]=Oe):Oe=e[111];let De;e[112]!==g?(De=g!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-action-error",role:"alert",children:g}),e[112]=g,e[113]=De):De=e[113];let dt;e[114]===Symbol.for("react.memo_cache_sentinel")?(dt=()=>{i({kind:"add-member"})},e[114]=dt):dt=e[114];let _e;e[115]!==o?(_e=o("Add member"),e[115]=o,e[116]=_e):_e=e[116];let Fe;e[117]!==_e?(Fe=n(j,{"data-testid":"org-open-add-member",onClick:dt,size:"xs",type:"button",variant:"outline",children:_e}),e[117]=_e,e[118]=Fe):Fe=e[118];let ct;e[119]===Symbol.for("react.memo_cache_sentinel")?(ct=()=>{i({kind:"invite-member"})},e[119]=ct):ct=e[119];let Re;e[120]!==o?(Re=o("Invite member"),e[120]=o,e[121]=Re):Re=e[121];let Te;e[122]!==Re?(Te=n(j,{"data-testid":"org-open-invite-member",onClick:ct,size:"xs",type:"button",variant:"outline",children:Re}),e[122]=Re,e[123]=Te):Te=e[123];let Me;e[124]!==Fe||e[125]!==Te?(Me=M(ht,{children:[Fe,Te]}),e[124]=Fe,e[125]=Te,e[126]=Me):Me=e[126];let Ee;e[127]!==o?(Ee=o("Members"),e[127]=o,e[128]=Ee):Ee=e[128];let Le;e[129]!==p||e[130]!==l||e[131]!==pt||e[132]!==K||e[133]!==ae||e[134]!==o?(Le=K.length===0?n("div",{className:"p-3",children:n(et,{testId:"org-members-empty",title:o("No members.")})}):n(rt,{columns:pt,rowActions:T=>M(ht,{children:[n(j,{"data-testid":`org-member-role-${S(T.id)}`,onClick:()=>{i({kind:"member-role",member:T})},size:"xs",type:"button",variant:"ghost",children:o("Change role")}),n(j,{"data-testid":`org-remove-member-${S(T.id)}`,disabled:p,onClick:()=>{ae(()=>l.removeAuthOrgMember({memberId:S(T.id)}))},size:"xs",type:"button",variant:"ghost",children:o("Remove")})]}),rowPrefix:"org-member",rows:K}),e[129]=p,e[130]=l,e[131]=pt,e[132]=K,e[133]=ae,e[134]=o,e[135]=Le):Le=e[135];let je;e[136]!==Me||e[137]!==Ee||e[138]!==Le?(je=n(tt,{action:Me,heading:Ee,testId:"org-members",children:Le}),e[136]=Me,e[137]=Ee,e[138]=Le,e[139]=je):je=e[139];let Pe;e[140]!==p||e[141]!==l||e[142]!==vt||e[143]!==R||e[144]!==ae||e[145]!==o?(Pe=R.length>0&&n(tt,{heading:o("Invitations"),testId:"org-invitations",children:n(rt,{columns:vt,rowActions:T=>n(j,{"data-testid":`org-cancel-invitation-${S(T.id)}`,disabled:p,onClick:()=>{ae(()=>l.cancelAuthOrgInvitation({invitationId:S(T.id)}))},size:"xs",type:"button",variant:"ghost",children:o("Cancel")}),rowPrefix:"org-invitation",rows:R})}),e[140]=p,e[141]=l,e[142]=vt,e[143]=R,e[144]=ae,e[145]=o,e[146]=Pe):Pe=e[146];let Je;e[147]!==ft||e[148]!==m||e[149]!==o||e[150]!==yt||e[151]!==re||e[152]!==c?(Je=c&&n(tt,{action:n(j,{"data-testid":"org-open-create-team",onClick:()=>{i({kind:"team-create"})},size:"xs",type:"button",variant:"outline",children:o("New team")}),heading:o("Teams"),testId:"org-teams",children:re.length===0?n("div",{className:"p-3",children:n(et,{testId:"org-teams-empty",title:o("No teams.")})}):n(rt,{columns:yt,rowActions:T=>M(ht,{children:[n(j,{"aria-pressed":m===S(T.id),"data-testid":`org-team-select-${S(T.id)}`,onClick:()=>{d(S(T.id))},size:"xs",type:"button",variant:"ghost",children:o("Members")}),n(j,{"data-testid":`org-team-rename-${S(T.id)}`,onClick:()=>{i({kind:"team-rename",team:T})},size:"xs",type:"button",variant:"ghost",children:o("Rename")}),n(j,{"data-testid":`org-team-delete-${S(T.id)}`,onClick:()=>{ft(T)},size:"xs",type:"button",variant:"ghost",children:o("Delete")})]}),rowPrefix:"org-team",rows:re})}),e[147]=ft,e[148]=m,e[149]=o,e[150]=yt,e[151]=re,e[152]=c,e[153]=Je):Je=e[153];let Ue;e[154]!==p||e[155]!==l||e[156]!==ae||e[157]!==m||e[158]!==o||e[159]!==It||e[160]!==ee||e[161]!==c?(Ue=c&&m!==null&&n(tt,{action:n(j,{"data-testid":"org-open-add-team-member",onClick:()=>{i({kind:"team-add-member",teamId:m})},size:"xs",type:"button",variant:"outline",children:o("Add member")}),heading:o("Team members"),testId:"org-team-members",children:ee.length===0?n("div",{className:"p-3",children:n(et,{testId:"org-team-members-empty",title:o("No team members.")})}):n(rt,{columns:It,rowActions:T=>n(j,{"data-testid":`org-team-remove-member-${S(T.id)}`,disabled:p,onClick:()=>{ae(()=>l.removeAuthOrgTeamMember({teamMemberId:S(T.id)}))},size:"xs",type:"button",variant:"ghost",children:o("Remove")}),rowPrefix:"org-team-member",rows:ee})}),e[154]=p,e[155]=l,e[156]=ae,e[157]=m,e[158]=o,e[159]=It,e[160]=ee,e[161]=c,e[162]=Ue):Ue=e[162];let Be;e[163]!==l||e[164]!==wt||e[165]!==Y||e[166]!==s||e[167]!==o?(Be=s&&n(tt,{action:n(j,{"data-testid":"org-open-create-role",onClick:()=>{i({kind:"role-create"})},size:"xs",type:"button",variant:"outline",children:o("New role")}),heading:o("Roles"),testId:"org-roles",children:Y.length===0?n("div",{className:"p-3",children:n(et,{testId:"org-roles-empty",title:o("No custom roles.")})}):n(rt,{columns:wt,rowActions:T=>M(ht,{children:[n(j,{"data-testid":`org-role-edit-${S(T.id)}`,onClick:()=>{i({kind:"role-edit",role:T})},size:"xs",type:"button",variant:"ghost",children:o("Edit")}),n(j,{"data-testid":`org-role-delete-${S(T.id)}`,onClick:()=>{i({action:()=>l.deleteAuthOrgRole({roleId:S(T.id)}),kind:"confirm",message:o("Delete this custom role? Members keeping it will lose its grants."),testId:"org-role-delete",title:o("Delete role")})},size:"xs",type:"button",variant:"ghost",children:o("Delete")})]}),rowPrefix:"org-role",rows:Y})}),e[163]=l,e[164]=wt,e[165]=Y,e[166]=s,e[167]=o,e[168]=Be):Be=e[168];let He;e[169]!==a?.kind||e[170]!==r||e[171]!==A?(He=a?.kind==="add-member"&&n(Bt,{onClose:E,onDone:A,organizationId:r}),e[169]=a?.kind,e[170]=r,e[171]=A,e[172]=He):He=e[172];let qe;e[173]!==a?.kind||e[174]!==r||e[175]!==A?(qe=a?.kind==="invite-member"&&n(Ht,{onClose:E,onDone:A,organizationId:r}),e[173]=a?.kind,e[174]=r,e[175]=A,e[176]=qe):qe=e[176];let Ke;e[177]!==a||e[178]!==A?(Ke=a?.kind==="member-role"&&n(qt,{member:a.member,onClose:E,onDone:A}),e[177]=a,e[178]=A,e[179]=Ke):Ke=e[179];let Qe;e[180]!==a?.kind||e[181]!==r||e[182]!==A?(Qe=a?.kind==="team-create"&&n(xt,{mode:"create",onClose:E,onDone:A,organizationId:r}),e[180]=a?.kind,e[181]=r,e[182]=A,e[183]=Qe):Qe=e[183];let Ge;e[184]!==a||e[185]!==r||e[186]!==A?(Ge=a?.kind==="team-rename"&&n(xt,{mode:"edit",onClose:E,onDone:A,organizationId:r,team:a.team}),e[184]=a,e[185]=r,e[186]=A,e[187]=Ge):Ge=e[187];let Ve;e[188]!==a||e[189]!==A?(Ve=a?.kind==="team-add-member"&&n(Kt,{onClose:E,onDone:A,teamId:a.teamId}),e[188]=a,e[189]=A,e[190]=Ve):Ve=e[190];let We;e[191]!==a?.kind||e[192]!==r||e[193]!==A?(We=a?.kind==="role-create"&&n(zt,{mode:"create",onClose:E,onDone:A,organizationId:r}),e[191]=a?.kind,e[192]=r,e[193]=A,e[194]=We):We=e[194];let Xe;e[195]!==a||e[196]!==r||e[197]!==A?(Xe=a?.kind==="role-edit"&&n(zt,{mode:"edit",onClose:E,onDone:A,organizationId:r,role:a.role}),e[195]=a,e[196]=r,e[197]=A,e[198]=Xe):Xe=e[198];let Ye;e[199]!==a||e[200]!==A?(Ye=a?.kind==="confirm"&&n(Tt,{action:a.action,message:a.message,onClose:E,onDone:A,testId:a.testId,title:a.title}),e[199]=a,e[200]=A,e[201]=Ye):Ye=e[201];let ut;return e[202]!==Oe||e[203]!==De||e[204]!==je||e[205]!==Pe||e[206]!==Je||e[207]!==Ue||e[208]!==Be||e[209]!==He||e[210]!==qe||e[211]!==Ke||e[212]!==Qe||e[213]!==Ge||e[214]!==Ve||e[215]!==We||e[216]!==Xe||e[217]!==Ye?(ut=M("div",{className:"flex flex-col gap-4","data-testid":"org-detail",children:[Oe,De,je,Pe,Je,Ue,Be,He,qe,Ke,Qe,Ge,Ve,We,Xe,Ye]}),e[202]=Oe,e[203]=De,e[204]=je,e[205]=Pe,e[206]=Je,e[207]=Ue,e[208]=Be,e[209]=He,e[210]=qe,e[211]=Ke,e[212]=Qe,e[213]=Ge,e[214]=Ve,e[215]=We,e[216]=Xe,e[217]=Ye,e[218]=ut):ut=e[218],ut};function Gt(t){return n(me,{children:t.head},t.head)}function Vt(t){return n("span",{className:"font-mono text-xs",children:S(t.userId)})}function Wt(t){return S(t.role)}function Xt(t){return S(t.email)}function Yt(t){return S(t.role)}function Zt(t){return S(t.status)}function er(t){return S(t.id)}function tr(t){return S(t.name)}function rr(t){return n("span",{className:"font-mono text-xs",children:S(t.userId)})}function or(t){return S(t.role)}function nr(t){return S(t.permission)}const $r=()=>{const t=G(62),e=le(),r=W(),{config:s,ready:c}=Mt(),l=s.capabilities.organization,[o,a]=P(null),[i,m]=P(null);let d;t[0]===Symbol.for("react.memo_cache_sentinel")?(d=["lunora-auth-orgs"],t[0]=d):d=t[0];let p;t[1]!==e?(p=()=>e.listAuthOrganizations({limit:100}),t[1]=e,t[2]=p):p=t[2];let u;t[3]!==l?(u={enabled:l},t[3]=l,t[4]=u):u=t[4];const g=Ze(d,p,u),C=g.data?.rows??null;let b;t[5]!==g?(b=()=>{g.refetch()},t[5]=g,t[6]=b):b=t[6],Dt(b,l);let v;t[7]===Symbol.for("react.memo_cache_sentinel")?(v=()=>{m(null)},t[7]=v):v=t[7];const $=v;let f;t[8]!==g?(f=()=>{g.refetch()},t[8]=g,t[9]=f):f=t[9];const w=f;let h;t[10]===Symbol.for("react.memo_cache_sentinel")?(h=F=>{a(F)},t[10]=h):h=t[10];const x=h;if(c&&!l){let F;t[11]!==r?(F=r("Enable the organization() plugin in your auth config to manage organizations here."),t[11]=r,t[12]=F):F=t[12];let R;t[13]!==r?(R=r("Organizations are not enabled."),t[13]=r,t[14]=R):R=t[14];let H;return t[15]!==F||t[16]!==R?(H=n(et,{description:F,testId:"org-disabled",title:R}),t[15]=F,t[16]=R,t[17]=H):H=t[17],H}let y;t[18]!==r?(y=r("Organizations"),t[18]=r,t[19]=y):y=t[19];let I;t[20]!==y?(I=n("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:y}),t[20]=y,t[21]=I):I=t[21];let z;t[22]===Symbol.for("react.memo_cache_sentinel")?(z=()=>{m({kind:"create"})},t[22]=z):z=t[22];let O;t[23]!==r?(O=r("New organization"),t[23]=r,t[24]=O):O=t[24];let N;t[25]!==O?(N=n(j,{"data-testid":"org-new",onClick:z,size:"sm",type:"button",children:O}),t[25]=O,t[26]=N):N=t[26];let k;t[27]!==N||t[28]!==I?(k=M("div",{className:"flex items-center justify-between",children:[I,N]}),t[27]=N,t[28]=I,t[29]=k):k=t[29];let D;t[30]!==g.error?(D=g.error!==null&&n("p",{className:"text-sm text-destructive","data-testid":"org-error",role:"alert",children:g.error}),t[30]=g.error,t[31]=D):D=t[31];let _;t[32]!==C||t[33]!==r?(_=C!==null&&C.length===0&&n(et,{testId:"org-empty",title:r("No organizations.")}),t[32]=C,t[33]=r,t[34]=_):_=t[34];let J;t[35]!==C||t[36]!==o||t[37]!==r?(J=C!==null&&C.length>0&&n(kt,{className:"overflow-hidden py-0",children:n(St,{className:"px-0",children:M(Ot,{"data-testid":"org-table",children:[n(Nt,{children:M(bt,{children:[n(me,{children:r("id")}),n(me,{children:r("name")}),n(me,{children:r("slug")}),n(me,{children:r("created")}),n(me,{"aria-label":r("Actions")})]})}),n(At,{children:C.map(F=>{const R=S(F.id);return M(bt,{"data-testid":`org-row-${R}`,children:[n(de,{className:"font-mono text-xs",children:R}),n(de,{children:S(F.name)}),n(de,{children:S(F.slug)}),n(de,{className:"text-muted-foreground tabular-nums",children:jt(F.createdAt)}),n(de,{children:M("div",{className:"flex justify-end gap-1",children:[n(j,{"aria-pressed":o===R,"data-testid":`org-select-${R}`,onClick:()=>{x(R)},size:"xs",type:"button",variant:"ghost",children:r("Manage")}),n(j,{"data-testid":`org-edit-${R}`,onClick:()=>{m({kind:"edit",org:F})},size:"xs",type:"button",variant:"ghost",children:r("Edit")}),n(j,{"data-testid":`org-delete-${R}`,onClick:()=>{m({kind:"delete",org:F})},size:"xs",type:"button",variant:"ghost",children:r("Delete")})]})})]},R)})})]})})}),t[35]=C,t[36]=o,t[37]=r,t[38]=J):J=t[38];let q;t[39]!==s.organization||t[40]!==o?(q=o!==null&&n(Qt,{organizationId:o,rolesEnabled:s.organization.roles,teamsEnabled:s.organization.teams}),t[39]=s.organization,t[40]=o,t[41]=q):q=t[41];let U;t[42]!==i?.kind||t[43]!==w?(U=i?.kind==="create"&&n($t,{mode:"create",onClose:$,onDone:w}),t[42]=i?.kind,t[43]=w,t[44]=U):U=t[44];let L;t[45]!==i||t[46]!==w?(L=i?.kind==="edit"&&n($t,{mode:"edit",onClose:$,onDone:w,org:i.org}),t[45]=i,t[46]=w,t[47]=L):L=t[47];let B;t[48]!==e||t[49]!==i||t[50]!==w||t[51]!==r?(B=i?.kind==="delete"&&n(Tt,{action:async()=>{const F=S(i.org.id);await e.deleteAuthOrganization({organizationId:F}),a(R=>R===F?null:R)},message:r("Delete this organization? Its members, invitations, teams, and custom roles are removed. This cannot be undone."),onClose:$,onDone:w,testId:"org-delete",title:r("Delete organization")}),t[48]=e,t[49]=i,t[50]=w,t[51]=r,t[52]=B):B=t[52];let K;return t[53]!==k||t[54]!==D||t[55]!==_||t[56]!==J||t[57]!==q||t[58]!==U||t[59]!==L||t[60]!==B?(K=M("div",{className:"flex flex-col gap-4","data-testid":"lunora-organizations",children:[k,D,_,J,q,U,L,B]}),t[53]=k,t[54]=D,t[55]=_,t[56]=J,t[57]=q,t[58]=U,t[59]=L,t[60]=B,t[61]=K):K=t[61],K};export{$r as OrganizationsPanel};
@@ -1 +1 @@
1
- import{E as B}from"../packem_shared/error-alert-B59DnrDI.js";import{g as N}from"../packem_shared/badge-BbuuAio7.js";import{c as y,u as w}from"../packem_shared/card-CIDGUN6K.js";import{E as S}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as A,d as D,m as b,p,f as I,u as n}from"../packem_shared/table-DdJBrClo.js";import{K as v}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{useAutoRefresh as O}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{S as C}from"../packem_shared/home-panel-B-8BCffw.js";import{useT as M}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as g}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{i as E}from"../packem_shared/internal-AtZ4bTal.js";import{jsx as e,jsxs as o}from"react/jsx-runtime";const F=["subscriptions","events"],G={},P=new Set(["active","trialing"]),H=new Set(["past_due","unpaid"]),s=(a,t)=>{if(a[t]!==void 0)return a[t];const m=a.__doc__;if(typeof m=="string")try{const d=JSON.parse(m);if(d!==null&&typeof d=="object"&&!Array.isArray(d))return d[t]}catch{}},i=a=>typeof a=="string"?a:typeof a=="number"||typeof a=="bigint"||typeof a=="boolean"?String(a):"",J=a=>P.has(a)?"default":H.has(a)?"destructive":"outline",re=({limit:a=100})=>{const t=M(),m=C(),{data:d}=v(g.listTables,G,{live:!0}),T=d!==void 0,_=Array.isArray(d)&&F.every(r=>d.some(c=>c.name===r)),f=m.payments&&_,l=v(g.readTablePage,{filters:[],limit:a,offset:0,orderBy:[],search:"",table:"subscriptions"},{enabled:f}),u=v(g.readTablePage,{filters:[],limit:25,offset:0,orderBy:[],search:"",table:"events"},{enabled:f});O(()=>{f&&(l.refetch(),u.refetch())},!0);const h=l.data?.rows??[],$=u.data?.rows??[],j=l.error??u.error,R=l.error===null?u.errorSource:l.errorSource,x=h.filter(r=>P.has(i(s(r,"state")))).length,k=$.toSorted((r,c)=>Number(s(c,"processedAt")??0)-Number(s(r,"processedAt")??0));return T&&!f?e("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:e(S,{description:t("No @lunora/payment tables found in this deployment. Declare the store tables (subscriptions, events, …) in lunora/schema.ts and wire `payment` on createShardDO() to sync customers and subscriptions."),testId:"payments-unconfigured",title:t("No payments configured")})}):o("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:[e("div",{className:"flex items-center gap-2","data-testid":"payments-summary",children:o(y,{className:"justify-between gap-0 py-0",children:[o("div",{className:"flex flex-col gap-2.5 p-4",children:[e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:t("Subscriptions")}),o("div",{className:"flex items-center gap-2",children:[e("span",{className:"text-2xl font-semibold tabular-nums text-foreground",children:x}),e(N,{variant:"default",children:t("{count} active",{count:x})})]})]}),e("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px] text-muted-foreground",children:t("{total} total",{total:h.length})})]})}),j===null?void 0:e(B,{error:R}),h.length===0&&!l.isLoading?e(S,{testId:"payments-empty",title:t("No subscriptions yet")}):e(y,{className:"overflow-hidden py-0",children:e(w,{className:"px-0",children:o(A,{children:[e(D,{children:o(b,{children:[e(p,{children:t("Provider")}),e(p,{children:t("Reference")}),e(p,{children:t("Plan")}),e(p,{children:t("State")}),e(p,{children:t("Renews")})]})}),e(I,{children:h.map(r=>{const c=i(s(r,"state"));return o(b,{"data-testid":"payment-subscription-row",children:[e(n,{children:i(s(r,"provider"))}),e(n,{children:i(s(r,"referenceId"))}),e(n,{children:i(s(r,"priceId"))}),e(n,{children:e(N,{variant:J(c),children:c})}),e(n,{children:E(s(r,"currentPeriodEnd"))})]},i(s(r,"providerSubscriptionId")))})})]})})}),o(y,{className:"overflow-hidden py-0",children:[e("header",{className:"border-b border-border px-4 py-3",children:e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:t("Recent webhook events")})}),e(w,{className:"px-0",children:e(A,{children:e(I,{children:k.map(r=>o(b,{"data-testid":"payment-event-row",children:[e(n,{children:i(s(r,"provider"))}),e(n,{className:"font-medium",children:i(s(r,"type"))}),e(n,{className:"text-muted-foreground",children:i(s(r,"providerEventId"))}),e(n,{children:E(s(r,"processedAt"))})]},i(s(r,"providerEventId"))))})})})]})]})};export{re as PaymentsPanel};
1
+ import{E as B}from"../packem_shared/error-alert-B59DnrDI.js";import{g as N}from"../packem_shared/badge-BbuuAio7.js";import{c as y,u as w}from"../packem_shared/card-CIDGUN6K.js";import{E as S}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as A,d as D,m as b,p,f as I,u as n}from"../packem_shared/table-DdJBrClo.js";import{K as v}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{useAutoRefresh as O}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{S as C}from"../packem_shared/home-panel-Cm88Nvqh.js";import{useT as M}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as g}from"../packem_shared/ADMIN_FUNCTIONS-CpgIo9pj.js";import{i as E}from"../packem_shared/internal-AtZ4bTal.js";import{jsx as e,jsxs as o}from"react/jsx-runtime";const F=["subscriptions","events"],G={},P=new Set(["active","trialing"]),H=new Set(["past_due","unpaid"]),s=(a,t)=>{if(a[t]!==void 0)return a[t];const m=a.__doc__;if(typeof m=="string")try{const d=JSON.parse(m);if(d!==null&&typeof d=="object"&&!Array.isArray(d))return d[t]}catch{}},i=a=>typeof a=="string"?a:typeof a=="number"||typeof a=="bigint"||typeof a=="boolean"?String(a):"",J=a=>P.has(a)?"default":H.has(a)?"destructive":"outline",re=({limit:a=100})=>{const t=M(),m=C(),{data:d}=v(g.listTables,G,{live:!0}),T=d!==void 0,_=Array.isArray(d)&&F.every(r=>d.some(c=>c.name===r)),f=m.payments&&_,l=v(g.readTablePage,{filters:[],limit:a,offset:0,orderBy:[],search:"",table:"subscriptions"},{enabled:f}),u=v(g.readTablePage,{filters:[],limit:25,offset:0,orderBy:[],search:"",table:"events"},{enabled:f});O(()=>{f&&(l.refetch(),u.refetch())},!0);const h=l.data?.rows??[],$=u.data?.rows??[],j=l.error??u.error,R=l.error===null?u.errorSource:l.errorSource,x=h.filter(r=>P.has(i(s(r,"state")))).length,k=$.toSorted((r,c)=>Number(s(c,"processedAt")??0)-Number(s(r,"processedAt")??0));return T&&!f?e("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:e(S,{description:t("No @lunora/payment tables found in this deployment. Declare the store tables (subscriptions, events, …) in lunora/schema.ts and wire `payment` on createShardDO() to sync customers and subscriptions."),testId:"payments-unconfigured",title:t("No payments configured")})}):o("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:[e("div",{className:"flex items-center gap-2","data-testid":"payments-summary",children:o(y,{className:"justify-between gap-0 py-0",children:[o("div",{className:"flex flex-col gap-2.5 p-4",children:[e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:t("Subscriptions")}),o("div",{className:"flex items-center gap-2",children:[e("span",{className:"text-2xl font-semibold tabular-nums text-foreground",children:x}),e(N,{variant:"default",children:t("{count} active",{count:x})})]})]}),e("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px] text-muted-foreground",children:t("{total} total",{total:h.length})})]})}),j===null?void 0:e(B,{error:R}),h.length===0&&!l.isLoading?e(S,{testId:"payments-empty",title:t("No subscriptions yet")}):e(y,{className:"overflow-hidden py-0",children:e(w,{className:"px-0",children:o(A,{children:[e(D,{children:o(b,{children:[e(p,{children:t("Provider")}),e(p,{children:t("Reference")}),e(p,{children:t("Plan")}),e(p,{children:t("State")}),e(p,{children:t("Renews")})]})}),e(I,{children:h.map(r=>{const c=i(s(r,"state"));return o(b,{"data-testid":"payment-subscription-row",children:[e(n,{children:i(s(r,"provider"))}),e(n,{children:i(s(r,"referenceId"))}),e(n,{children:i(s(r,"priceId"))}),e(n,{children:e(N,{variant:J(c),children:c})}),e(n,{children:E(s(r,"currentPeriodEnd"))})]},i(s(r,"providerSubscriptionId")))})})]})})}),o(y,{className:"overflow-hidden py-0",children:[e("header",{className:"border-b border-border px-4 py-3",children:e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:t("Recent webhook events")})}),e(w,{className:"px-0",children:e(A,{children:e(I,{children:k.map(r=>o(b,{"data-testid":"payment-event-row",children:[e(n,{children:i(s(r,"provider"))}),e(n,{className:"font-medium",children:i(s(r,"type"))}),e(n,{className:"text-muted-foreground",children:i(s(r,"providerEventId"))}),e(n,{children:E(s(r,"processedAt"))})]},i(s(r,"providerEventId"))))})})})]})]})};export{re as PaymentsPanel};
@@ -1 +1 @@
1
- import{useState as u,useRef as te,useEffect as J}from"react";import{c as G,n as ae,f as re,m as le,u as H}from"../packem_shared/card-CIDGUN6K.js";import{useT as z}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{c as ie}from"react/compiler-runtime";import{E as se}from"../packem_shared/error-alert-B59DnrDI.js";import{L as oe}from"../packem_shared/live-status-CGW2JHf_.js";import{g as T}from"../packem_shared/badge-BbuuAio7.js";import{u as P}from"../packem_shared/button-BkCrNcAs.js";import{E as Y}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as ne,d as de,m as U,p as M,f as ce,u as O}from"../packem_shared/table-DdJBrClo.js";import{K as j}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{ADMIN_FUNCTIONS as R}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{jsx as e,jsxs as i}from"react/jsx-runtime";import{useLunora as B}from"@lunora/react";import{ShardInput as pe}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as E}from"../packem_shared/input-JHu63lTv.js";import{p as C}from"../packem_shared/label-6uP1obNF.js";import{l as me}from"../packem_shared/textarea-Bu2-jKAs.js";import{c as fe,a as ue,e as he,f as q}from"../packem_shared/internal-AtZ4bTal.js";const W=["read","insert","update","delete"],xe=(a,t)=>({delete:a("Delete"),insert:a("Insert"),read:a("Read"),update:a("Update")})[t],ye=a=>{const t=new Set;for(const o of a?.advisories??[])if(o.name==="rls_uncovered_table"){const{table:s}=o.metadata;typeof s=="string"&&s!==""&&t.add(s)}return t},ge=(a,t,o)=>{const s=new Map,r=l=>{const d=s.get(l);if(d!==void 0)return d;const n={cells:{delete:{},insert:{},read:{},update:{}},maskedColumns:[],table:l,uncovered:o.has(l)};return s.set(l,n),n};for(const l of a)r(l.table).cells[l.on]={procedure:l.procedure};for(const l of t){const d=r(l.table);d.maskedColumns.includes(l.column)||d.maskedColumns.push(l.column)}for(const l of o)r(l);return[...s.values()].toSorted((l,d)=>l.table.localeCompare(d.table))},be=a=>{const t=ie(17);let o;t[0]!==a?(o=a===void 0?{}:a,t[0]=a,t[1]=o):o=t[1];const{onProbe:s}=o,r=z();let l,d;t[2]===Symbol.for("react.memo_cache_sentinel")?(l={},d={live:!0},t[2]=l,t[3]=d):(l=t[2],d=t[3]);const n=j(R.rlsPolicies,l,d);let y;t[4]===Symbol.for("react.memo_cache_sentinel")?(y={},t[4]=y):y=t[4];const f=j(R.maskPolicies,y);let h;t[5]===Symbol.for("react.memo_cache_sentinel")?(h={},t[5]=h):h=t[5];const v=j(R.getAdvisories,h);let N;if(t[6]!==v.data||t[7]!==f.data||t[8]!==s||t[9]!==n||t[10]!==r){let b=null;n.data!==void 0&&(b=Array.isArray(n.data.policies)?n.data.policies:[]);const _=Array.isArray(f.data?.columns)?f.data.columns:[],A=v.data??null,{error:x,errorSource:m,liveError:S}=n,I=b===null?[]:ge(b,_,ye(A));let $;t[12]!==S?($=e("div",{className:"flex items-center justify-end",children:e(oe,{message:S,prefix:"pm"})}),t[12]=S,t[13]=$):$=t[13];let g;t[14]!==x||t[15]!==m?(g=x!==null&&e(se,{error:m,testId:"pm-error"}),t[14]=x,t[15]=m,t[16]=g):g=t[16],N=i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-matrix",children:[$,g,b!==null&&I.length===0?e(Y,{description:r("Add a `definePolicy` and wire it through `.use(rls(...))` to populate this matrix."),testId:"pm-empty",title:r("No policy")}):i(ne,{"data-testid":"pm-table",children:[e(de,{children:i(U,{children:[e(M,{children:r("Table")}),W.map(p=>e(M,{children:xe(r,p)},p)),e(M,{children:r("Masked columns")})]})}),e(ce,{children:I.map(p=>i(U,{"data-testid":`pm-row-${p.table}`,children:[e(O,{className:"font-mono text-xs",children:i("span",{className:"flex items-center gap-1.5",children:[p.table,p.uncovered&&e(T,{"data-testid":`pm-uncovered-${p.table}`,title:r("Uncovered — reachable without a policy"),variant:"destructive",children:r("Uncovered — reachable without a policy")})]})}),W.map(w=>{const F=p.cells[w];return e(O,{"data-testid":`pm-cell-${p.table}-${w}`,children:F.procedure===void 0?e("span",{className:"text-xs text-muted-foreground",children:r("No policy")}):i("span",{className:"flex flex-col gap-1",children:[e(T,{variant:"secondary",children:r("Covered by {procedure}",{procedure:F.procedure})}),s!==void 0&&e(P,{className:"h-auto justify-start p-0 text-[11px]","data-testid":`pm-probe-${p.table}-${w}`,onClick:()=>{s(p.table,w,F.procedure??"")},size:"xs",type:"button",variant:"ghost",children:r("Probe this")})]})},w)}),e(O,{children:p.maskedColumns.length===0?e("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"}):e("span",{className:"flex flex-wrap gap-1",children:p.maskedColumns.map(ve)})})]},p.table))})]})]}),t[6]=v.data,t[7]=f.data,t[8]=s,t[9]=n,t[10]=r,t[11]=N}else N=t[11];return N};function ve(a){return e(T,{variant:"outline",children:a},a)}const Ne=ue(R.runAs),we=()=>{const a=B();return async({args:t,functionPath:o,shardKey:s="",userId:r})=>{const l=Ne;try{return{kind:"allowed",value:await a.query(l,{args:t,functionPath:o,userId:r},fe(s))}}catch(d){return{kind:"denied",message:d instanceof Error?d.message:String(d)}}}},ke=a=>a===void 0?"undefined":JSON.stringify(a,null,2),Pe=({functions:a,prefill:t,runAsIdentity:o=!1}={})=>{const s=B(),r=z(),l=we(),[d,n]=u(null),[y,f]=u(null),h=a??d??[],[v,N]=u(""),[b,_]=u("{}"),[A,x]=u(""),[m,S]=u(""),[I,$]=u(!1),[g,p]=u(null),[w,F]=u(null),D=te(-1);J(()=>{if(a!==void 0)return;let c=!1;return s.listFunctions().then(k=>(c||n(k),k)).catch(k=>{c||f(he(k))}),()=>{c=!0}},[s,a]),J(()=>{if(t===void 0||D.current===t.nonce)return;D.current=t.nonce;const c=t.functionPath;queueMicrotask(()=>{N(c),p(null)})},[t]);const L=v===""?h[0]?.path??"":v,Q=async()=>{if(L==="")return;let c;try{c=b.trim()===""?{}:JSON.parse(b)}catch(k){F(r("Invalid JSON args: {message}",{message:k.message})),p(null);return}F(null),$(!0);try{const k=await l({args:c,functionPath:L,shardKey:A.trim(),userId:m.trim()});p(k)}finally{$(!1)}},V=()=>{q(Q())},X=c=>{N(c.target.value)},Z=c=>{_(c.target.value)},ee=c=>{S(c.target.value)};return i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-playground",children:[y!==null&&e("p",{className:"text-sm text-destructive","data-testid":"pp-discover-error",role:"alert",children:y}),!o&&e(Y,{description:r("Dev only: runs the selected function as this user over the admin gate so you can test auth and RLS."),testId:"pp-gate",title:r("Set `runAsIdentity` to forge an identity and probe access.")}),i("div",{className:"flex flex-col gap-3 rounded-md border border-border p-3",children:[i("div",{className:"flex flex-col gap-1.5",children:[e(C,{htmlFor:"pp-function",children:r("Function")}),e("select",{"aria-label":r("Function"),className:"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","data-testid":"pp-function",id:"pp-function",onChange:X,value:L,children:h.map(c=>i("option",{value:c.path,children:[c.path," (",c.kind,")"]},c.path))})]}),i("div",{className:"flex flex-col gap-1.5",children:[e(C,{htmlFor:"pp-args",children:r("Arguments")}),e(me,{"aria-label":r("Arguments"),className:"font-mono text-xs","data-testid":"pp-args",id:"pp-args",onChange:Z,value:b})]}),e(pe,{onChange:x,testId:"pp-shard",value:A}),i("div",{className:"flex flex-col gap-1.5",children:[e(C,{htmlFor:"pp-user",children:r("Run as (userId)")}),e(E,{"aria-label":r("Identity (userId) to run as"),className:"font-mono text-xs","data-testid":"pp-user",id:"pp-user",onChange:ee,placeholder:r("Leave empty to run as admin"),value:m})]}),i("div",{className:"flex items-center gap-2",children:[e(P,{"data-testid":"pp-run",disabled:!o||I||L==="",onClick:V,type:"button",children:r(I?"Probing…":"Run probe")}),m.trim()!==""&&e(T,{"data-testid":"pp-as-badge",variant:"secondary",children:r("as {userId}",{userId:m.trim()})})]})]}),w!==null&&e("p",{className:"text-sm text-destructive","data-testid":"pp-args-error",role:"alert",children:w}),g!==null&&g.kind==="allowed"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-allowed",children:[e(T,{variant:"secondary",children:r("Allowed")}),e("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"pp-result",children:ke(g.value)})]}),g!==null&&g.kind==="denied"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-denied",children:[e(T,{variant:"destructive",children:r("Denied")}),e("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs text-destructive","data-testid":"pp-denied",role:"alert",children:g.message})]})]})},Ce="/__lunora/policy-scaffold",Se={"already-wired":"That procedure already has an rls(...) policy wired in.","file-exists":"A policy file with that name already exists — pick another name or edit it by hand.","invalid-identifier":"Name, table, and policy-set must be plain identifiers (letters, digits, _ or $).","unknown-procedure":"No exported procedure was found at that file path.","unsupported-procedure-shape":"That procedure uses the bare query({…}) form — convert it to the builder form (c.use(…).query(…)) before wiring RLS."},Ie=async a=>{const t=await fetch(Ce,{body:JSON.stringify(a),headers:{"Content-Type":"application/json"},method:"POST"}),o=await t.json();if(o.needsManualEdit===!0)return{kind:"needs-manual-edit",message:o.message??"This change must be made by hand."};if(t.ok)return{diagnostics:o.diagnostics??[],kind:"ok",label:o.fileName??o.exportName??""};const s=o.error;return{kind:"error",message:s===void 0?`policy scaffold failed (${String(t.status)})`:Se[s]??s}},K={exportName:"",filePath:"",policyName:"",policies:"",tableName:""},$e=()=>{const a=z(),[t,o]=u(null),[s,r]=u(!1),[l,d]=u(null),[n,y]=u(K),f=x=>{const m=x.target.name,{value:S}=x.target;y(I=>({...I,[m]:S}))},h=()=>{o(null),y(K)},v=async x=>{r(!0),d(null);try{const m=await Ie(x);d(m),m.kind==="ok"&&h()}catch(m){d({kind:"error",message:m instanceof Error?m.message:String(m)})}finally{r(!1)}},N=()=>{q(v({kind:"scaffoldPolicy",name:n.policyName.trim(),table:n.tableName.trim()}))},b=()=>{q(v({exportName:n.exportName.trim(),filePath:n.filePath.trim(),kind:"wireRls",policies:n.policies.trim()}))},_=()=>{d(null),o("scaffold")},A=()=>{d(null),o("wire")};return i(G,{"data-testid":"policy-scaffolder",size:"sm",children:[i(ae,{children:[e(re,{children:a("Scaffold access rules")}),e(le,{children:a("Writes a new deny-by-default policy file under lunora/, or wires one into a procedure, then reruns codegen. Local dev only.")})]}),i(H,{children:[i("div",{className:"flex flex-wrap gap-2",children:[e(P,{"data-testid":"policy-scaffolder-new",onClick:_,size:"xs",type:"button",variant:t==="scaffold"?"default":"outline",children:a("New policy file")}),e(P,{"data-testid":"policy-scaffolder-wire",onClick:A,size:"xs",type:"button",variant:t==="wire"?"default":"outline",children:a("Wire into a procedure")})]}),t==="scaffold"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-new-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[e(C,{htmlFor:"policy-scaffolder-name",children:a("Policy name")}),e(E,{"data-testid":"policy-scaffolder-name",id:"policy-scaffolder-name",name:"policyName",onChange:f,value:n.policyName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[e(C,{htmlFor:"policy-scaffolder-table",children:a("Table name")}),e(E,{"data-testid":"policy-scaffolder-table",id:"policy-scaffolder-table",name:"tableName",onChange:f,value:n.tableName})]}),e(P,{"data-testid":"policy-scaffolder-create",disabled:s||n.policyName.trim()===""||n.tableName.trim()==="",onClick:N,size:"xs",type:"button",children:a(s?"Creating…":"Create policy file")}),e(P,{onClick:h,size:"xs",type:"button",variant:"ghost",children:a("Cancel")})]}),t==="wire"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-wire-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[e(C,{htmlFor:"policy-scaffolder-file",children:a("Procedure file path")}),e(E,{"data-testid":"policy-scaffolder-file",id:"policy-scaffolder-file",name:"filePath",onChange:f,value:n.filePath})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[e(C,{htmlFor:"policy-scaffolder-export",children:a("Exported procedure")}),e(E,{"data-testid":"policy-scaffolder-export",id:"policy-scaffolder-export",name:"exportName",onChange:f,value:n.exportName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[e(C,{htmlFor:"policy-scaffolder-policies",children:a("Policy set identifier")}),e(E,{"data-testid":"policy-scaffolder-policies",id:"policy-scaffolder-policies",name:"policies",onChange:f,value:n.policies})]}),e(P,{"data-testid":"policy-scaffolder-apply",disabled:s||n.filePath.trim()===""||n.exportName.trim()===""||n.policies.trim()==="",onClick:b,size:"xs",type:"button",children:a(s?"Wiring…":"Wire RLS")}),e(P,{onClick:h,size:"xs",type:"button",variant:"ghost",children:a("Cancel")})]}),l?.kind==="error"&&e("p",{className:"mt-3 text-sm text-destructive","data-testid":"policy-scaffolder-error",role:"alert",children:l.message}),l?.kind==="needs-manual-edit"&&e("p",{className:"mt-3 text-sm text-amber-600 dark:text-amber-500","data-testid":"policy-scaffolder-manual",role:"alert",children:a("This change must be made by hand — the scaffolder only adds new, deny-by-default rules.")}),l?.kind==="ok"&&i("div",{className:"mt-3 flex flex-col gap-1","data-testid":"policy-scaffolder-ok",children:[e("p",{className:"text-sm text-emerald-600 dark:text-emerald-500",children:a("Scaffolded {label} and reran codegen. Fill in the `when` predicates before relying on it.",{label:l.label})}),l.diagnostics.length>0&&e("ul",{className:"flex flex-col gap-0.5","data-testid":"policy-scaffolder-diagnostics",children:l.diagnostics.map(x=>e("li",{className:"font-mono text-[11px] text-destructive",children:x},x))})]})]})]})},Ye=({functions:a,runAsIdentity:t=!1,schemaEditable:o=!1}={})=>{const s=z(),[r,l]=u(void 0),d=(n,y,f)=>{f!==""&&l(h=>({functionPath:f,nonce:(h?.nonce??0)+1}))};return i("div",{className:"flex flex-col gap-8","data-testid":"lunora-permissions",children:[i("section",{className:"flex flex-col gap-3",children:[e("header",{className:"border-b border-border px-4 py-3",children:e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:s("Permissions")})}),e(be,{onProbe:d})]}),e("section",{className:"flex flex-col gap-3",children:i(G,{className:"gap-0 py-0",children:[e("header",{className:"border-b border-border px-4 py-3",children:e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:s("Probe")})}),i(H,{className:"px-4 py-4",children:[e("p",{className:"mb-3 text-sm text-muted-foreground",children:s("Pick a function and an identity, then run it to see the access outcome.")}),e(Pe,{functions:a,prefill:r,runAsIdentity:t})]})]})}),o&&e("section",{className:"flex flex-col gap-2",children:e($e,{})})]})};export{Ye as PermissionsPanel};
1
+ import{useState as u,useRef as te,useEffect as J}from"react";import{c as G,n as ae,f as re,m as le,u as H}from"../packem_shared/card-CIDGUN6K.js";import{useT as z}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{c as ie}from"react/compiler-runtime";import{E as se}from"../packem_shared/error-alert-B59DnrDI.js";import{L as oe}from"../packem_shared/live-status-CGW2JHf_.js";import{g as T}from"../packem_shared/badge-BbuuAio7.js";import{u as P}from"../packem_shared/button-BkCrNcAs.js";import{E as Y}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as ne,d as de,m as U,p as M,f as ce,u as O}from"../packem_shared/table-DdJBrClo.js";import{K as j}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{ADMIN_FUNCTIONS as R}from"../packem_shared/ADMIN_FUNCTIONS-CpgIo9pj.js";import{jsx as e,jsxs as i}from"react/jsx-runtime";import{useLunora as B}from"@lunora/react";import{ShardInput as pe}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as E}from"../packem_shared/input-JHu63lTv.js";import{p as C}from"../packem_shared/label-6uP1obNF.js";import{l as me}from"../packem_shared/textarea-Bu2-jKAs.js";import{c as fe,a as ue,e as he,f as q}from"../packem_shared/internal-AtZ4bTal.js";const W=["read","insert","update","delete"],xe=(a,t)=>({delete:a("Delete"),insert:a("Insert"),read:a("Read"),update:a("Update")})[t],ye=a=>{const t=new Set;for(const o of a?.advisories??[])if(o.name==="rls_uncovered_table"){const{table:s}=o.metadata;typeof s=="string"&&s!==""&&t.add(s)}return t},ge=(a,t,o)=>{const s=new Map,r=l=>{const d=s.get(l);if(d!==void 0)return d;const n={cells:{delete:{},insert:{},read:{},update:{}},maskedColumns:[],table:l,uncovered:o.has(l)};return s.set(l,n),n};for(const l of a)r(l.table).cells[l.on]={procedure:l.procedure};for(const l of t){const d=r(l.table);d.maskedColumns.includes(l.column)||d.maskedColumns.push(l.column)}for(const l of o)r(l);return[...s.values()].toSorted((l,d)=>l.table.localeCompare(d.table))},be=a=>{const t=ie(17);let o;t[0]!==a?(o=a===void 0?{}:a,t[0]=a,t[1]=o):o=t[1];const{onProbe:s}=o,r=z();let l,d;t[2]===Symbol.for("react.memo_cache_sentinel")?(l={},d={live:!0},t[2]=l,t[3]=d):(l=t[2],d=t[3]);const n=j(R.rlsPolicies,l,d);let y;t[4]===Symbol.for("react.memo_cache_sentinel")?(y={},t[4]=y):y=t[4];const f=j(R.maskPolicies,y);let h;t[5]===Symbol.for("react.memo_cache_sentinel")?(h={},t[5]=h):h=t[5];const v=j(R.getAdvisories,h);let N;if(t[6]!==v.data||t[7]!==f.data||t[8]!==s||t[9]!==n||t[10]!==r){let b=null;n.data!==void 0&&(b=Array.isArray(n.data.policies)?n.data.policies:[]);const _=Array.isArray(f.data?.columns)?f.data.columns:[],A=v.data??null,{error:x,errorSource:m,liveError:S}=n,I=b===null?[]:ge(b,_,ye(A));let $;t[12]!==S?($=e("div",{className:"flex items-center justify-end",children:e(oe,{message:S,prefix:"pm"})}),t[12]=S,t[13]=$):$=t[13];let g;t[14]!==x||t[15]!==m?(g=x!==null&&e(se,{error:m,testId:"pm-error"}),t[14]=x,t[15]=m,t[16]=g):g=t[16],N=i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-matrix",children:[$,g,b!==null&&I.length===0?e(Y,{description:r("Add a `definePolicy` and wire it through `.use(rls(...))` to populate this matrix."),testId:"pm-empty",title:r("No policy")}):i(ne,{"data-testid":"pm-table",children:[e(de,{children:i(U,{children:[e(M,{children:r("Table")}),W.map(p=>e(M,{children:xe(r,p)},p)),e(M,{children:r("Masked columns")})]})}),e(ce,{children:I.map(p=>i(U,{"data-testid":`pm-row-${p.table}`,children:[e(O,{className:"font-mono text-xs",children:i("span",{className:"flex items-center gap-1.5",children:[p.table,p.uncovered&&e(T,{"data-testid":`pm-uncovered-${p.table}`,title:r("Uncovered — reachable without a policy"),variant:"destructive",children:r("Uncovered — reachable without a policy")})]})}),W.map(w=>{const F=p.cells[w];return e(O,{"data-testid":`pm-cell-${p.table}-${w}`,children:F.procedure===void 0?e("span",{className:"text-xs text-muted-foreground",children:r("No policy")}):i("span",{className:"flex flex-col gap-1",children:[e(T,{variant:"secondary",children:r("Covered by {procedure}",{procedure:F.procedure})}),s!==void 0&&e(P,{className:"h-auto justify-start p-0 text-[11px]","data-testid":`pm-probe-${p.table}-${w}`,onClick:()=>{s(p.table,w,F.procedure??"")},size:"xs",type:"button",variant:"ghost",children:r("Probe this")})]})},w)}),e(O,{children:p.maskedColumns.length===0?e("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"}):e("span",{className:"flex flex-wrap gap-1",children:p.maskedColumns.map(ve)})})]},p.table))})]})]}),t[6]=v.data,t[7]=f.data,t[8]=s,t[9]=n,t[10]=r,t[11]=N}else N=t[11];return N};function ve(a){return e(T,{variant:"outline",children:a},a)}const Ne=ue(R.runAs),we=()=>{const a=B();return async({args:t,functionPath:o,shardKey:s="",userId:r})=>{const l=Ne;try{return{kind:"allowed",value:await a.query(l,{args:t,functionPath:o,userId:r},fe(s))}}catch(d){return{kind:"denied",message:d instanceof Error?d.message:String(d)}}}},ke=a=>a===void 0?"undefined":JSON.stringify(a,null,2),Pe=({functions:a,prefill:t,runAsIdentity:o=!1}={})=>{const s=B(),r=z(),l=we(),[d,n]=u(null),[y,f]=u(null),h=a??d??[],[v,N]=u(""),[b,_]=u("{}"),[A,x]=u(""),[m,S]=u(""),[I,$]=u(!1),[g,p]=u(null),[w,F]=u(null),D=te(-1);J(()=>{if(a!==void 0)return;let c=!1;return s.listFunctions().then(k=>(c||n(k),k)).catch(k=>{c||f(he(k))}),()=>{c=!0}},[s,a]),J(()=>{if(t===void 0||D.current===t.nonce)return;D.current=t.nonce;const c=t.functionPath;queueMicrotask(()=>{N(c),p(null)})},[t]);const L=v===""?h[0]?.path??"":v,Q=async()=>{if(L==="")return;let c;try{c=b.trim()===""?{}:JSON.parse(b)}catch(k){F(r("Invalid JSON args: {message}",{message:k.message})),p(null);return}F(null),$(!0);try{const k=await l({args:c,functionPath:L,shardKey:A.trim(),userId:m.trim()});p(k)}finally{$(!1)}},V=()=>{q(Q())},X=c=>{N(c.target.value)},Z=c=>{_(c.target.value)},ee=c=>{S(c.target.value)};return i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-playground",children:[y!==null&&e("p",{className:"text-sm text-destructive","data-testid":"pp-discover-error",role:"alert",children:y}),!o&&e(Y,{description:r("Dev only: runs the selected function as this user over the admin gate so you can test auth and RLS."),testId:"pp-gate",title:r("Set `runAsIdentity` to forge an identity and probe access.")}),i("div",{className:"flex flex-col gap-3 rounded-md border border-border p-3",children:[i("div",{className:"flex flex-col gap-1.5",children:[e(C,{htmlFor:"pp-function",children:r("Function")}),e("select",{"aria-label":r("Function"),className:"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","data-testid":"pp-function",id:"pp-function",onChange:X,value:L,children:h.map(c=>i("option",{value:c.path,children:[c.path," (",c.kind,")"]},c.path))})]}),i("div",{className:"flex flex-col gap-1.5",children:[e(C,{htmlFor:"pp-args",children:r("Arguments")}),e(me,{"aria-label":r("Arguments"),className:"font-mono text-xs","data-testid":"pp-args",id:"pp-args",onChange:Z,value:b})]}),e(pe,{onChange:x,testId:"pp-shard",value:A}),i("div",{className:"flex flex-col gap-1.5",children:[e(C,{htmlFor:"pp-user",children:r("Run as (userId)")}),e(E,{"aria-label":r("Identity (userId) to run as"),className:"font-mono text-xs","data-testid":"pp-user",id:"pp-user",onChange:ee,placeholder:r("Leave empty to run as admin"),value:m})]}),i("div",{className:"flex items-center gap-2",children:[e(P,{"data-testid":"pp-run",disabled:!o||I||L==="",onClick:V,type:"button",children:r(I?"Probing…":"Run probe")}),m.trim()!==""&&e(T,{"data-testid":"pp-as-badge",variant:"secondary",children:r("as {userId}",{userId:m.trim()})})]})]}),w!==null&&e("p",{className:"text-sm text-destructive","data-testid":"pp-args-error",role:"alert",children:w}),g!==null&&g.kind==="allowed"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-allowed",children:[e(T,{variant:"secondary",children:r("Allowed")}),e("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"pp-result",children:ke(g.value)})]}),g!==null&&g.kind==="denied"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-denied",children:[e(T,{variant:"destructive",children:r("Denied")}),e("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs text-destructive","data-testid":"pp-denied",role:"alert",children:g.message})]})]})},Ce="/__lunora/policy-scaffold",Se={"already-wired":"That procedure already has an rls(...) policy wired in.","file-exists":"A policy file with that name already exists — pick another name or edit it by hand.","invalid-identifier":"Name, table, and policy-set must be plain identifiers (letters, digits, _ or $).","unknown-procedure":"No exported procedure was found at that file path.","unsupported-procedure-shape":"That procedure uses the bare query({…}) form — convert it to the builder form (c.use(…).query(…)) before wiring RLS."},Ie=async a=>{const t=await fetch(Ce,{body:JSON.stringify(a),headers:{"Content-Type":"application/json"},method:"POST"}),o=await t.json();if(o.needsManualEdit===!0)return{kind:"needs-manual-edit",message:o.message??"This change must be made by hand."};if(t.ok)return{diagnostics:o.diagnostics??[],kind:"ok",label:o.fileName??o.exportName??""};const s=o.error;return{kind:"error",message:s===void 0?`policy scaffold failed (${String(t.status)})`:Se[s]??s}},K={exportName:"",filePath:"",policyName:"",policies:"",tableName:""},$e=()=>{const a=z(),[t,o]=u(null),[s,r]=u(!1),[l,d]=u(null),[n,y]=u(K),f=x=>{const m=x.target.name,{value:S}=x.target;y(I=>({...I,[m]:S}))},h=()=>{o(null),y(K)},v=async x=>{r(!0),d(null);try{const m=await Ie(x);d(m),m.kind==="ok"&&h()}catch(m){d({kind:"error",message:m instanceof Error?m.message:String(m)})}finally{r(!1)}},N=()=>{q(v({kind:"scaffoldPolicy",name:n.policyName.trim(),table:n.tableName.trim()}))},b=()=>{q(v({exportName:n.exportName.trim(),filePath:n.filePath.trim(),kind:"wireRls",policies:n.policies.trim()}))},_=()=>{d(null),o("scaffold")},A=()=>{d(null),o("wire")};return i(G,{"data-testid":"policy-scaffolder",size:"sm",children:[i(ae,{children:[e(re,{children:a("Scaffold access rules")}),e(le,{children:a("Writes a new deny-by-default policy file under lunora/, or wires one into a procedure, then reruns codegen. Local dev only.")})]}),i(H,{children:[i("div",{className:"flex flex-wrap gap-2",children:[e(P,{"data-testid":"policy-scaffolder-new",onClick:_,size:"xs",type:"button",variant:t==="scaffold"?"default":"outline",children:a("New policy file")}),e(P,{"data-testid":"policy-scaffolder-wire",onClick:A,size:"xs",type:"button",variant:t==="wire"?"default":"outline",children:a("Wire into a procedure")})]}),t==="scaffold"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-new-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[e(C,{htmlFor:"policy-scaffolder-name",children:a("Policy name")}),e(E,{"data-testid":"policy-scaffolder-name",id:"policy-scaffolder-name",name:"policyName",onChange:f,value:n.policyName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[e(C,{htmlFor:"policy-scaffolder-table",children:a("Table name")}),e(E,{"data-testid":"policy-scaffolder-table",id:"policy-scaffolder-table",name:"tableName",onChange:f,value:n.tableName})]}),e(P,{"data-testid":"policy-scaffolder-create",disabled:s||n.policyName.trim()===""||n.tableName.trim()==="",onClick:N,size:"xs",type:"button",children:a(s?"Creating…":"Create policy file")}),e(P,{onClick:h,size:"xs",type:"button",variant:"ghost",children:a("Cancel")})]}),t==="wire"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-wire-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[e(C,{htmlFor:"policy-scaffolder-file",children:a("Procedure file path")}),e(E,{"data-testid":"policy-scaffolder-file",id:"policy-scaffolder-file",name:"filePath",onChange:f,value:n.filePath})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[e(C,{htmlFor:"policy-scaffolder-export",children:a("Exported procedure")}),e(E,{"data-testid":"policy-scaffolder-export",id:"policy-scaffolder-export",name:"exportName",onChange:f,value:n.exportName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[e(C,{htmlFor:"policy-scaffolder-policies",children:a("Policy set identifier")}),e(E,{"data-testid":"policy-scaffolder-policies",id:"policy-scaffolder-policies",name:"policies",onChange:f,value:n.policies})]}),e(P,{"data-testid":"policy-scaffolder-apply",disabled:s||n.filePath.trim()===""||n.exportName.trim()===""||n.policies.trim()==="",onClick:b,size:"xs",type:"button",children:a(s?"Wiring…":"Wire RLS")}),e(P,{onClick:h,size:"xs",type:"button",variant:"ghost",children:a("Cancel")})]}),l?.kind==="error"&&e("p",{className:"mt-3 text-sm text-destructive","data-testid":"policy-scaffolder-error",role:"alert",children:l.message}),l?.kind==="needs-manual-edit"&&e("p",{className:"mt-3 text-sm text-amber-600 dark:text-amber-500","data-testid":"policy-scaffolder-manual",role:"alert",children:a("This change must be made by hand — the scaffolder only adds new, deny-by-default rules.")}),l?.kind==="ok"&&i("div",{className:"mt-3 flex flex-col gap-1","data-testid":"policy-scaffolder-ok",children:[e("p",{className:"text-sm text-emerald-600 dark:text-emerald-500",children:a("Scaffolded {label} and reran codegen. Fill in the `when` predicates before relying on it.",{label:l.label})}),l.diagnostics.length>0&&e("ul",{className:"flex flex-col gap-0.5","data-testid":"policy-scaffolder-diagnostics",children:l.diagnostics.map(x=>e("li",{className:"font-mono text-[11px] text-destructive",children:x},x))})]})]})]})},Ye=({functions:a,runAsIdentity:t=!1,schemaEditable:o=!1}={})=>{const s=z(),[r,l]=u(void 0),d=(n,y,f)=>{f!==""&&l(h=>({functionPath:f,nonce:(h?.nonce??0)+1}))};return i("div",{className:"flex flex-col gap-8","data-testid":"lunora-permissions",children:[i("section",{className:"flex flex-col gap-3",children:[e("header",{className:"border-b border-border px-4 py-3",children:e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:s("Permissions")})}),e(be,{onProbe:d})]}),e("section",{className:"flex flex-col gap-3",children:i(G,{className:"gap-0 py-0",children:[e("header",{className:"border-b border-border px-4 py-3",children:e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:s("Probe")})}),i(H,{className:"px-4 py-4",children:[e("p",{className:"mb-3 text-sm text-muted-foreground",children:s("Pick a function and an identity, then run it to see the access outcome.")}),e(Pe,{functions:a,prefill:r,runAsIdentity:t})]})]})}),o&&e("section",{className:"flex flex-col gap-2",children:e($e,{})})]})};export{Ye as PermissionsPanel};