@lunora/studio 1.0.0-alpha.135 → 1.0.0-alpha.136

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 (58) hide show
  1. package/dist/standalone/{chunk-LGM5B7IV.js → chunk-2I2F6IEF.js} +1 -1
  2. package/dist/standalone/{chunk-JHJ4VQJB.js → chunk-2KR32476.js} +1 -1
  3. package/dist/standalone/{chunk-UPYNKN2G.js → chunk-35O3VETX.js} +1 -1
  4. package/dist/standalone/{chunk-MHBVUAWF.js → chunk-4U5PYZLE.js} +1 -1
  5. package/dist/standalone/{chunk-TUXRYJ26.js → chunk-54TELYX4.js} +1 -1
  6. package/dist/standalone/{chunk-GAXZZIJE.js → chunk-5BEXGGHV.js} +1 -1
  7. package/dist/standalone/{chunk-FSCZSVPV.js → chunk-5U6757U7.js} +1 -1
  8. package/dist/standalone/{chunk-DE6POIQ2.js → chunk-6DAH3SMG.js} +1 -1
  9. package/dist/standalone/{chunk-QZUS7GVR.js → chunk-6XME7G3Q.js} +1 -1
  10. package/dist/standalone/{chunk-7X3N3TQN.js → chunk-AFH3KSFW.js} +1 -1
  11. package/dist/standalone/{chunk-5S63ETLB.js → chunk-ATES7QMQ.js} +1 -1
  12. package/dist/standalone/{chunk-BAASE6PA.js → chunk-AVBOVXQK.js} +1 -1
  13. package/dist/standalone/{chunk-KHWQELWZ.js → chunk-B3QSXX4O.js} +1 -1
  14. package/dist/standalone/{chunk-MJX6Q5N6.js → chunk-BA6TK2PS.js} +1 -1
  15. package/dist/standalone/{chunk-2NQ3JRTM.js → chunk-BGOEMFLU.js} +1 -1
  16. package/dist/standalone/{chunk-KL7QDVVV.js → chunk-BNNRPK47.js} +1 -1
  17. package/dist/standalone/{chunk-IVDNA54D.js → chunk-BSACLUQK.js} +1 -1
  18. package/dist/standalone/{chunk-MFYEBV3R.js → chunk-CG5OTGTR.js} +3 -3
  19. package/dist/standalone/{chunk-AP3T6TP2.js → chunk-DBMUPDVJ.js} +1 -1
  20. package/dist/standalone/{chunk-I2FUDP7S.js → chunk-EHQU74ST.js} +1 -1
  21. package/dist/standalone/{chunk-ITL5GOK7.js → chunk-ENLQ6CZE.js} +1 -1
  22. package/dist/standalone/{chunk-6ZRH5O74.js → chunk-EQFBG7TB.js} +1 -1
  23. package/dist/standalone/{chunk-E3BPTAXF.js → chunk-EYENA7HZ.js} +1 -1
  24. package/dist/standalone/{chunk-DII7FPS7.js → chunk-FUVCG23X.js} +1 -1
  25. package/dist/standalone/{chunk-QOU6Q22Y.js → chunk-GD4GUF75.js} +1 -1
  26. package/dist/standalone/{chunk-SGMQIMU3.js → chunk-HOQ2PFO6.js} +1 -1
  27. package/dist/standalone/{chunk-H3D2XBAL.js → chunk-INFALEU6.js} +1 -1
  28. package/dist/standalone/{chunk-5WDEYCJ4.js → chunk-IS2BTYON.js} +1 -1
  29. package/dist/standalone/{chunk-GAQ2T46Y.js → chunk-K6O3UDLX.js} +1 -1
  30. package/dist/standalone/{chunk-5C4ZMHGY.js → chunk-KZ5V7F4W.js} +1 -1
  31. package/dist/standalone/{chunk-TVG5BYAK.js → chunk-L6DNHL3L.js} +1 -1
  32. package/dist/standalone/{chunk-RHGFDMSL.js → chunk-LJFIXPDF.js} +1 -1
  33. package/dist/standalone/{chunk-MTC33GGY.js → chunk-LVZKEWNM.js} +1 -1
  34. package/dist/standalone/{chunk-GJTBRYA4.js → chunk-M3PFFLSD.js} +1 -1
  35. package/dist/standalone/{chunk-PXC3DSUP.js → chunk-MIGH67EO.js} +1 -1
  36. package/dist/standalone/{chunk-Q362UBI2.js → chunk-MOVUB3HI.js} +1 -1
  37. package/dist/standalone/{chunk-7AXUF7HR.js → chunk-MSXT3KG5.js} +1 -1
  38. package/dist/standalone/{chunk-R6CF2I7Q.js → chunk-N5OS5NUG.js} +1 -1
  39. package/dist/standalone/{chunk-CQKEZTBS.js → chunk-NGQTRDBQ.js} +1 -1
  40. package/dist/standalone/{chunk-YECFX6GE.js → chunk-NNJW6LZK.js} +1 -1
  41. package/dist/standalone/{chunk-SC5YVIWL.js → chunk-OQOBY6X3.js} +1 -1
  42. package/dist/standalone/{chunk-O2TSJOL7.js → chunk-QO645HJU.js} +1 -1
  43. package/dist/standalone/{chunk-UTFFEPHH.js → chunk-R7S3ICRW.js} +1 -1
  44. package/dist/standalone/{chunk-PQOBUQFH.js → chunk-TRS5ABTX.js} +1 -1
  45. package/dist/standalone/{chunk-RNRWKCZF.js → chunk-U6RNLNVU.js} +1 -1
  46. package/dist/standalone/{chunk-VSD5ZZR4.js → chunk-UUO257GV.js} +1 -1
  47. package/dist/standalone/{chunk-BNHW7NX7.js → chunk-W7ETXRN4.js} +1 -1
  48. package/dist/standalone/{chunk-KPGRLF2I.js → chunk-WSNONR2E.js} +1 -1
  49. package/dist/standalone/{chunk-KCCH7XKE.js → chunk-XLU6W4LI.js} +1 -1
  50. package/dist/standalone/{chunk-5562GWBH.js → chunk-XVJIEJ5R.js} +1 -1
  51. package/dist/standalone/{chunk-75K6NLB2.js → chunk-XYD65F6K.js} +1 -1
  52. package/dist/standalone/{chunk-NFI2PX7C.js → chunk-XZBLPJZN.js} +1 -1
  53. package/dist/standalone/{chunk-3CFCEW22.js → chunk-YN4VXWMW.js} +1 -1
  54. package/dist/standalone/{chunk-NGJMA42X.js → chunk-YNZQSHFG.js} +1 -1
  55. package/dist/standalone/{chunk-XS5S4LTA.js → chunk-ZJK2XCP3.js} +1 -1
  56. package/dist/standalone/{chunk-P2POR5VH.js → chunk-ZZBE7O77.js} +1 -1
  57. package/dist/standalone/studio.js +1 -1
  58. package/package.json +3 -3
@@ -1 +1 @@
1
- import{a as O}from"./chunk-METRMDIQ.js";import{a as C}from"./chunk-NXXGISFB.js";import{b as v}from"./chunk-SPDZUX4P.js";import"./chunk-7PIHTTND.js";import{a as k}from"./chunk-FSCZSVPV.js";import"./chunk-PZ4QDWTI.js";import"./chunk-DII7FPS7.js";import"./chunk-F7JOSNAT.js";import{a as S}from"./chunk-DZGOHOOE.js";import{c as b}from"./chunk-MHBVUAWF.js";import"./chunk-MFYEBV3R.js";import"./chunk-RCZTUWG3.js";import{a as c}from"./chunk-UANVABQG.js";import{a as w,b as T,c as A,d as f,e as s,f as l}from"./chunk-L4EZAHCD.js";import{a as y,e as N}from"./chunk-IYWVSMAY.js";import{d as p}from"./chunk-6ZPTNC34.js";import"./chunk-3KLX63D7.js";import{a as n,d as x,e as R,g as V}from"./chunk-R5ZTCHCE.js";var F=x(R(),1);var e=x(V(),1);var $=n(a=>{let t=a.trim();if(t.length===0)return{context:void 0,error:null};try{let 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."}}},"H"),q='{ "targetingKey": "user-123", "plan": "premium" }',D=n(a=>a.type==="object"?JSON.stringify(a.value):String(a.value),"R"),Y=n(({initialShardKey:a=""})=>{let t=p(),[o,j]=(0,F.useState)(""),{context:g,error:m}=$(o),I=g===void 0?{}:{context:g},{data:i,error:J,errorSource:K,liveError:E}=b(S.listFlags,I,{live:!0,shardKey:a}),u=i!==void 0,L=i?.configured??!1,h=Array.isArray(i?.flags)?[...i.flags].toSorted((r,B)=>r.key.localeCompare(B.key)):[],d;return u&&!L?d=(0,e.jsx)(c,{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")}):u&&h.length===0?d=(0,e.jsx)(c,{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=(0,e.jsx)(y,{className:"overflow-hidden py-0",children:(0,e.jsx)(N,{className:"px-0",children:(0,e.jsxs)(w,{"data-testid":"flags-table",children:[(0,e.jsx)(T,{children:(0,e.jsxs)(f,{children:[(0,e.jsx)(s,{children:t("Key")}),(0,e.jsx)(s,{children:t("Type")}),(0,e.jsx)(s,{children:t("Value")}),(0,e.jsx)(s,{children:t("Reason")}),(0,e.jsx)(s,{children:t("Variant")})]})}),(0,e.jsx)(A,{children:h.map(r=>(0,e.jsxs)(f,{"data-testid":`flags-row-${r.key}`,children:[(0,e.jsx)(l,{className:"font-mono text-xs",children:r.key}),(0,e.jsx)(l,{className:"font-mono text-xs text-muted-foreground",children:r.type}),(0,e.jsx)(l,{className:"font-mono text-xs",children:D(r)}),(0,e.jsx)(l,{children:r.errorCode===void 0?(0,e.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:r.reason??"\u2014"}):(0,e.jsx)(v,{"data-testid":`flags-error-${r.key}`,variant:"destructive",children:r.errorCode})}),(0,e.jsx)(l,{className:"font-mono text-xs text-muted-foreground",children:r.variant??"\u2014"})]},r.key))})]})})}),(0,e.jsxs)("div",{className:"flex flex-col gap-6","data-testid":"lunora-flags-panel",children:[J!==null&&(0,e.jsx)(k,{error:K,testId:"flags-error"}),(0,e.jsx)("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.')}),(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,e.jsx)(C,{htmlFor:"flags-targeting-context",children:t("Targeting context (JSON)")}),(0,e.jsx)(O,{className:"font-mono text-xs","data-testid":"flags-context-input",id:"flags-targeting-context",onChange:n(r=>{j(r.target.value)},"onChange"),placeholder:q,rows:3,value:o}),m!==null&&(0,e.jsx)("p",{className:"text-xs text-destructive","data-testid":"flags-context-error",role:"alert",children:t(m)}),E!==void 0&&(0,e.jsx)("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]})},"W");export{Y as default};
1
+ import{a as O}from"./chunk-METRMDIQ.js";import{a as C}from"./chunk-NXXGISFB.js";import{b as v}from"./chunk-SPDZUX4P.js";import"./chunk-7PIHTTND.js";import{a as k}from"./chunk-5U6757U7.js";import"./chunk-PZ4QDWTI.js";import"./chunk-FUVCG23X.js";import"./chunk-F7JOSNAT.js";import{a as S}from"./chunk-DZGOHOOE.js";import{c as b}from"./chunk-4U5PYZLE.js";import"./chunk-CG5OTGTR.js";import"./chunk-RCZTUWG3.js";import{a as c}from"./chunk-UANVABQG.js";import{a as w,b as T,c as A,d as f,e as s,f as l}from"./chunk-L4EZAHCD.js";import{a as y,e as N}from"./chunk-IYWVSMAY.js";import{d as p}from"./chunk-6ZPTNC34.js";import"./chunk-3KLX63D7.js";import{a as n,d as x,e as R,g as V}from"./chunk-R5ZTCHCE.js";var F=x(R(),1);var e=x(V(),1);var $=n(a=>{let t=a.trim();if(t.length===0)return{context:void 0,error:null};try{let 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."}}},"H"),q='{ "targetingKey": "user-123", "plan": "premium" }',D=n(a=>a.type==="object"?JSON.stringify(a.value):String(a.value),"R"),Y=n(({initialShardKey:a=""})=>{let t=p(),[o,j]=(0,F.useState)(""),{context:g,error:m}=$(o),I=g===void 0?{}:{context:g},{data:i,error:J,errorSource:K,liveError:E}=b(S.listFlags,I,{live:!0,shardKey:a}),u=i!==void 0,L=i?.configured??!1,h=Array.isArray(i?.flags)?[...i.flags].toSorted((r,B)=>r.key.localeCompare(B.key)):[],d;return u&&!L?d=(0,e.jsx)(c,{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")}):u&&h.length===0?d=(0,e.jsx)(c,{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=(0,e.jsx)(y,{className:"overflow-hidden py-0",children:(0,e.jsx)(N,{className:"px-0",children:(0,e.jsxs)(w,{"data-testid":"flags-table",children:[(0,e.jsx)(T,{children:(0,e.jsxs)(f,{children:[(0,e.jsx)(s,{children:t("Key")}),(0,e.jsx)(s,{children:t("Type")}),(0,e.jsx)(s,{children:t("Value")}),(0,e.jsx)(s,{children:t("Reason")}),(0,e.jsx)(s,{children:t("Variant")})]})}),(0,e.jsx)(A,{children:h.map(r=>(0,e.jsxs)(f,{"data-testid":`flags-row-${r.key}`,children:[(0,e.jsx)(l,{className:"font-mono text-xs",children:r.key}),(0,e.jsx)(l,{className:"font-mono text-xs text-muted-foreground",children:r.type}),(0,e.jsx)(l,{className:"font-mono text-xs",children:D(r)}),(0,e.jsx)(l,{children:r.errorCode===void 0?(0,e.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:r.reason??"\u2014"}):(0,e.jsx)(v,{"data-testid":`flags-error-${r.key}`,variant:"destructive",children:r.errorCode})}),(0,e.jsx)(l,{className:"font-mono text-xs text-muted-foreground",children:r.variant??"\u2014"})]},r.key))})]})})}),(0,e.jsxs)("div",{className:"flex flex-col gap-6","data-testid":"lunora-flags-panel",children:[J!==null&&(0,e.jsx)(k,{error:K,testId:"flags-error"}),(0,e.jsx)("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.')}),(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,e.jsx)(C,{htmlFor:"flags-targeting-context",children:t("Targeting context (JSON)")}),(0,e.jsx)(O,{className:"font-mono text-xs","data-testid":"flags-context-input",id:"flags-targeting-context",onChange:n(r=>{j(r.target.value)},"onChange"),placeholder:q,rows:3,value:o}),m!==null&&(0,e.jsx)("p",{className:"text-xs text-destructive","data-testid":"flags-context-error",role:"alert",children:t(m)}),E!==void 0&&(0,e.jsx)("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]})},"W");export{Y as default};