drizzle-cube 0.8.2 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/dist/adapters/ActivityGridChart.config-Bu5lf3M0.js +2 -0
  2. package/dist/adapters/ActivityGridChart.config-NSLCFzvM.cjs +1 -0
  3. package/dist/adapters/AreaChart.config-Bv7qJYd0.cjs +1 -0
  4. package/dist/adapters/AreaChart.config-DexPQDQp.js +2 -0
  5. package/dist/adapters/BarChart.config-Br0vyPO0.js +2 -0
  6. package/dist/adapters/BarChart.config-Dc1FHoux.cjs +1 -0
  7. package/dist/adapters/BoxPlotChart.config-C_j-wp0l.cjs +1 -0
  8. package/dist/adapters/BoxPlotChart.config-Dz9P8ck_.js +2 -0
  9. package/dist/adapters/BubbleChart.config-e6hABmpk.js +2 -0
  10. package/dist/adapters/BubbleChart.config-ro80CWd_.cjs +1 -0
  11. package/dist/adapters/CandlestickChart.config-Btzcen-6.cjs +1 -0
  12. package/dist/adapters/CandlestickChart.config-BzAPnbp4.js +2 -0
  13. package/dist/adapters/DataTable.config-RNGMSueS.cjs +1 -0
  14. package/dist/adapters/DataTable.config-enzxzWhP.js +2 -0
  15. package/dist/adapters/DotStripChart.config-C3FEV6Ys.js +2 -0
  16. package/dist/adapters/DotStripChart.config-DhODtwbu.cjs +1 -0
  17. package/dist/adapters/FunnelChart.config-CX1DFABr.cjs +1 -0
  18. package/dist/adapters/FunnelChart.config-DXg1N0FP.js +2 -0
  19. package/dist/adapters/GaugeChart.config-Dl2DrFSl.cjs +1 -0
  20. package/dist/adapters/GaugeChart.config-oiPzrfGx.js +2 -0
  21. package/dist/adapters/HeatMapChart.config-B9SrePWx.js +2 -0
  22. package/dist/adapters/HeatMapChart.config-CTwcA2aU.cjs +1 -0
  23. package/dist/adapters/KpiDelta.config-CgZQueiY.js +2 -0
  24. package/dist/adapters/KpiDelta.config-eybdn0eH.cjs +1 -0
  25. package/dist/adapters/KpiNumber.config-Ce2piJuC.js +2 -0
  26. package/dist/adapters/KpiNumber.config-h_KXh89X.cjs +1 -0
  27. package/dist/adapters/KpiText.config-CLk6a0TW.cjs +1 -0
  28. package/dist/adapters/KpiText.config-_g2gpg2d.js +2 -0
  29. package/dist/adapters/LineChart.config-C3MQKW5U.cjs +1 -0
  30. package/dist/adapters/LineChart.config-CA4b1Xt-.js +2 -0
  31. package/dist/adapters/MarkdownChart.config-B4lCc0_v.js +2 -0
  32. package/dist/adapters/MarkdownChart.config-waq3gxEs.cjs +1 -0
  33. package/dist/adapters/MeasureProfileChart.config-B1LrfeP-.js +2 -0
  34. package/dist/adapters/MeasureProfileChart.config-Djka_dSU.cjs +1 -0
  35. package/dist/adapters/PieChart.config-BfSLFe9d.js +2 -0
  36. package/dist/adapters/PieChart.config-D5ixLlYJ.cjs +1 -0
  37. package/dist/adapters/ProportionBarChart.config-CRWy5aME.cjs +1 -0
  38. package/dist/adapters/ProportionBarChart.config-nyP6m6i0.js +2 -0
  39. package/dist/adapters/RadarChart.config-B7C-0wYa.cjs +1 -0
  40. package/dist/adapters/RadarChart.config-COzBFXrA.js +2 -0
  41. package/dist/adapters/RadialBarChart.config-C50IqzNQ.js +2 -0
  42. package/dist/adapters/RadialBarChart.config-LTSl-xoA.cjs +1 -0
  43. package/dist/adapters/RecordsTable.config-BHWD9CBE.js +2 -0
  44. package/dist/adapters/RecordsTable.config-DnY_PByk.cjs +1 -0
  45. package/dist/adapters/RetentionCombinedChart.config-CObWpIId.cjs +1 -0
  46. package/dist/adapters/RetentionCombinedChart.config-DxPk1BaI.js +2 -0
  47. package/dist/adapters/RetentionHeatmap.config-CHZiVXVo.cjs +1 -0
  48. package/dist/adapters/RetentionHeatmap.config-Ckoiq5Jo.js +2 -0
  49. package/dist/adapters/SankeyChart.config-CVoAarnp.cjs +1 -0
  50. package/dist/adapters/SankeyChart.config-D2R8E5Ss.js +2 -0
  51. package/dist/adapters/ScatterChart.config-BE_J_t4r.js +2 -0
  52. package/dist/adapters/ScatterChart.config-DsVSbcSc.cjs +1 -0
  53. package/dist/adapters/SunburstChart.config-BLtPPPli.cjs +1 -0
  54. package/dist/adapters/SunburstChart.config-DrnmHxNQ.js +2 -0
  55. package/dist/adapters/TreeMapChart.config-4p3cVWIy.js +2 -0
  56. package/dist/adapters/TreeMapChart.config-DkRO8LYG.cjs +1 -0
  57. package/dist/adapters/WaterfallChart.config-CKi4zg3x.cjs +1 -0
  58. package/dist/adapters/WaterfallChart.config-DuUXmAyw.js +2 -0
  59. package/dist/adapters/core/index.cjs +1 -1
  60. package/dist/adapters/core/index.js +1 -1
  61. package/dist/adapters/{core-l3KMTu9u.js → core-BBtbwMwR.js} +1 -1
  62. package/dist/adapters/{core-CrJu6vJY.cjs → core-DnUv8WiY.cjs} +1 -1
  63. package/dist/adapters/express/index.cjs +1 -1
  64. package/dist/adapters/express/index.js +3 -3
  65. package/dist/adapters/fastify/index.cjs +1 -1
  66. package/dist/adapters/fastify/index.js +3 -3
  67. package/dist/adapters/{handler-DESp4wPg.js → handler-_xh4X1OO.js} +30 -30
  68. package/dist/adapters/{handler-CRGZ8gd2.cjs → handler-l75Hbzv3.cjs} +2 -2
  69. package/dist/adapters/hono/index.cjs +1 -1
  70. package/dist/adapters/hono/index.js +3 -3
  71. package/dist/adapters/mcp-tools.cjs +1 -1
  72. package/dist/adapters/mcp-tools.js +1 -1
  73. package/dist/adapters/{mcp-transport-BqdBHmXL.js → mcp-transport-BOfhj01O.js} +1 -1
  74. package/dist/adapters/{mcp-transport-D8xZJLPD.cjs → mcp-transport-Dl5bn6h4.cjs} +1 -1
  75. package/dist/adapters/nextjs/index.cjs +1 -1
  76. package/dist/adapters/nextjs/index.js +3 -3
  77. package/dist/cjs/client/components/PortletGroupCard.d.ts +3 -1
  78. package/dist/cjs/client/components/RowManagedLayout.d.ts +5 -2
  79. package/dist/cjs/client/components/dashboardPortletCard/cardStyles.d.ts +7 -3
  80. package/dist/cjs/client/components/rowManagedLayout/sections.d.ts +46 -0
  81. package/dist/client/charts.js +1 -1
  82. package/dist/client/chunks/{DashboardEditModal-BliiIHcI.js → DashboardEditModal-B-0eV6vd.js} +870 -777
  83. package/dist/client/chunks/DashboardEditModal-B-0eV6vd.js.map +1 -0
  84. package/dist/client/chunks/{analysis-builder-C0gJ3kDD.js → analysis-builder-DnDw164v.js} +4 -4
  85. package/dist/client/chunks/{analysis-builder-C0gJ3kDD.js.map → analysis-builder-DnDw164v.js.map} +1 -1
  86. package/dist/client/chunks/{analysis-builder-shared-dqcpl_WL.js → analysis-builder-shared-D7eA0iW7.js} +2 -2
  87. package/dist/client/chunks/{analysis-builder-shared-dqcpl_WL.js.map → analysis-builder-shared-D7eA0iW7.js.map} +1 -1
  88. package/dist/client/chunks/{chart-markdown-yxN_xBP9.js → chart-markdown-BhLRzK_W.js} +2 -2
  89. package/dist/client/chunks/chart-markdown-BhLRzK_W.js.map +1 -0
  90. package/dist/client/chunks/{charts-loader-tCSbqT7H.js → charts-loader-D_yEsIpH.js} +2 -2
  91. package/dist/client/chunks/{charts-loader-tCSbqT7H.js.map → charts-loader-D_yEsIpH.js.map} +1 -1
  92. package/dist/client/components/PortletGroupCard.d.ts +3 -1
  93. package/dist/client/components/RowManagedLayout.d.ts +5 -2
  94. package/dist/client/components/dashboardPortletCard/cardStyles.d.ts +7 -3
  95. package/dist/client/components/rowManagedLayout/sections.d.ts +46 -0
  96. package/dist/client/components.js +1 -1
  97. package/dist/client/index.js +4 -4
  98. package/dist/client/styles.css +1 -1
  99. package/dist/client-bundle-stats.html +1 -1
  100. package/dist/mcp-app/mcp-app.html +1 -1
  101. package/package.json +1 -1
  102. package/dist/adapters/ActivityGridChart.config-Bc7mPqcf.cjs +0 -1
  103. package/dist/adapters/ActivityGridChart.config-Dd2YDeaM.js +0 -2
  104. package/dist/adapters/AreaChart.config-BqNusnpg.js +0 -2
  105. package/dist/adapters/AreaChart.config-dI84V34B.cjs +0 -1
  106. package/dist/adapters/BarChart.config-B9MQjgLJ.cjs +0 -1
  107. package/dist/adapters/BarChart.config-Cq_qcxBA.js +0 -2
  108. package/dist/adapters/BoxPlotChart.config-XmtRN2xq.cjs +0 -1
  109. package/dist/adapters/BoxPlotChart.config-Zc-JGV-W.js +0 -2
  110. package/dist/adapters/BubbleChart.config-CU_18uxb.js +0 -2
  111. package/dist/adapters/BubbleChart.config-CbhOzA6-.cjs +0 -1
  112. package/dist/adapters/CandlestickChart.config-Bwo3uaa-.js +0 -2
  113. package/dist/adapters/CandlestickChart.config-CmRBlWFv.cjs +0 -1
  114. package/dist/adapters/DataTable.config-7JNSj6qQ.js +0 -2
  115. package/dist/adapters/DataTable.config-DNxm1sYk.cjs +0 -1
  116. package/dist/adapters/DotStripChart.config-B7Dl-T1h.js +0 -2
  117. package/dist/adapters/DotStripChart.config-Co4g1fpZ.cjs +0 -1
  118. package/dist/adapters/FunnelChart.config-D1TpuGtL.cjs +0 -1
  119. package/dist/adapters/FunnelChart.config-vuZScOHQ.js +0 -2
  120. package/dist/adapters/GaugeChart.config-BMgUHKhC.cjs +0 -1
  121. package/dist/adapters/GaugeChart.config-zdpFydo6.js +0 -2
  122. package/dist/adapters/HeatMapChart.config-4XMab1zq.js +0 -2
  123. package/dist/adapters/HeatMapChart.config-C-Ns6QBq.cjs +0 -1
  124. package/dist/adapters/KpiDelta.config-BGdqsHcc.js +0 -2
  125. package/dist/adapters/KpiDelta.config-DuNxrGIi.cjs +0 -1
  126. package/dist/adapters/KpiNumber.config-CkPWpcSz.js +0 -2
  127. package/dist/adapters/KpiNumber.config-DMGmuA3i.cjs +0 -1
  128. package/dist/adapters/KpiText.config-Bvtuv8vE.js +0 -2
  129. package/dist/adapters/KpiText.config-DOMLO16U.cjs +0 -1
  130. package/dist/adapters/LineChart.config-CJmTSmZ1.js +0 -2
  131. package/dist/adapters/LineChart.config-CrkGu0aa.cjs +0 -1
  132. package/dist/adapters/MarkdownChart.config-BgY5Xc97.cjs +0 -1
  133. package/dist/adapters/MarkdownChart.config-Cm6G4Yuh.js +0 -2
  134. package/dist/adapters/MeasureProfileChart.config-BYwDo_ox.cjs +0 -1
  135. package/dist/adapters/MeasureProfileChart.config-Dt7npubZ.js +0 -2
  136. package/dist/adapters/PieChart.config-BRbPctBN.cjs +0 -1
  137. package/dist/adapters/PieChart.config-HZofeody.js +0 -2
  138. package/dist/adapters/ProportionBarChart.config-B_rTtGZr.cjs +0 -1
  139. package/dist/adapters/ProportionBarChart.config-ChCSoM0L.js +0 -2
  140. package/dist/adapters/RadarChart.config-B9OdMEib.js +0 -2
  141. package/dist/adapters/RadarChart.config-BOgPD2Kz.cjs +0 -1
  142. package/dist/adapters/RadialBarChart.config-CeP7jEbq.js +0 -2
  143. package/dist/adapters/RadialBarChart.config-sivA1Jmo.cjs +0 -1
  144. package/dist/adapters/RecordsTable.config-BInSgo-G.js +0 -2
  145. package/dist/adapters/RecordsTable.config-CVmxLdjz.cjs +0 -1
  146. package/dist/adapters/RetentionCombinedChart.config-8ry7gh6X.cjs +0 -1
  147. package/dist/adapters/RetentionCombinedChart.config-Bxtxnlcf.js +0 -2
  148. package/dist/adapters/RetentionHeatmap.config-DCtOD8dO.js +0 -2
  149. package/dist/adapters/RetentionHeatmap.config-i-LgmmIT.cjs +0 -1
  150. package/dist/adapters/SankeyChart.config-DfpeHfNT.cjs +0 -1
  151. package/dist/adapters/SankeyChart.config-hfM0ACm1.js +0 -2
  152. package/dist/adapters/ScatterChart.config-BD2vfOZ6.js +0 -2
  153. package/dist/adapters/ScatterChart.config-CdpvRueF.cjs +0 -1
  154. package/dist/adapters/SunburstChart.config-Boyt88L_.cjs +0 -1
  155. package/dist/adapters/SunburstChart.config-BvrofzMv.js +0 -2
  156. package/dist/adapters/TreeMapChart.config-DBrqwtqT.js +0 -2
  157. package/dist/adapters/TreeMapChart.config-KcRLlZAG.cjs +0 -1
  158. package/dist/adapters/WaterfallChart.config-CuCGaIl5.cjs +0 -1
  159. package/dist/adapters/WaterfallChart.config-DZ8H0V2L.js +0 -2
  160. package/dist/client/chunks/DashboardEditModal-BliiIHcI.js.map +0 -1
  161. package/dist/client/chunks/chart-markdown-yxN_xBP9.js.map +0 -1
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils-C1JpSDOX.cjs"),t=require("../compiler-DG6dLFQU.cjs"),n=require("../mcp-transport-D8xZJLPD.cjs"),r=require("../core-CrJu6vJY.cjs");let i=require("next/server");function a(e,t){let r=new TextEncoder,a=n._(),o=new ReadableStream({start(e){e.enqueue(r.encode(n.x({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},a,15e3)))}}),s=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});return t(e,s),new i.NextResponse(o,{status:200,headers:s})}function o(e){if(e.semanticLayer)return e.semanticLayer;let{cubes:n,drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s}=e;if(!n||n.length===0)throw Error(`At least one cube must be provided in the cubes array`);let c=new t.t({drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s});return n.forEach(e=>{c.registerCube(e)}),c}function s(e){return{extractSecurityContext:async(t,n)=>{let i=await e.extractSecurityContext(t,n),a=r.s(e=>t.headers.get(e));return r.c(i,a)},cors:e.cors?{...e.cors,allowedHeaders:r.o(e.cors.allowedHeaders)}:void 0}}function c(e,t){let n=e.headers.get(`origin`),r={};return t.origin&&(typeof t.origin==`string`?r[`Access-Control-Allow-Origin`]=t.origin:Array.isArray(t.origin)?n&&t.origin.includes(n)&&(r[`Access-Control-Allow-Origin`]=n):typeof t.origin==`function`&&n&&t.origin(n)&&(r[`Access-Control-Allow-Origin`]=n)),t.methods&&(r[`Access-Control-Allow-Methods`]=t.methods.join(`, `)),t.allowedHeaders&&(r[`Access-Control-Allow-Headers`]=t.allowedHeaders.join(`, `)),t.credentials&&(r[`Access-Control-Allow-Credentials`]=`true`),r}function l(e){let t=o(e),n=r.t({semanticLayer:t,onError:e=>{process.env.NODE_ENV!==`test`&&console.error(`Next.js handler error:`,e)},mcp:e.mcp}),i=e.cors?{...e.cors,allowedHeaders:r.o(e.cors.allowedHeaders)}:void 0;return{httpHandler:n,corsHeaders:e=>i?c(e,i):{},baseContext:(t,n)=>()=>e.extractSecurityContext(t,n)}}function u(e,t){let n={};return{getHeader:t=>e.headers.get(t)??void 0,getBody:async()=>{try{return await e.json()}catch{return null}},getQueryParam:t=>e.nextUrl.searchParams.get(t)??void 0,send:(e,r)=>i.NextResponse.json(r,{status:e,headers:{...t,...n}}),setHeader:(e,t)=>{n[e]=t},sendEmpty:e=>new i.NextResponse(null,{status:e,headers:{...t,...n}}),sendSse:(e,r)=>new i.NextResponse(r,{status:e,headers:{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`,...t,...n}})}}function d(e){return async function(t){let n=c(t,{...e,allowedHeaders:r.o(e.allowedHeaders)});return new Response(null,{status:200,headers:n})}}function f(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){let s=u(t,r(t));return t.method===`POST`?n.handleLoadPost(s,a(t,o)):t.method===`GET`?n.handleLoadGet(s,a(t,o)):i.NextResponse.json(e.i(`Method not allowed`,405),{status:405})}}function p(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,i){return t.handleMetaGet(u(e,n(e)),r(e,i))}}function m(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){let s=u(t,r(t));return t.method===`POST`?n.handleSqlPost(s,a(t,o)):t.method===`GET`?n.handleSqlGet(s,a(t,o)):i.NextResponse.json(e.i(`Method not allowed`,405),{status:405})}}function h(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,a){let o=u(e,n(e));return e.method===`POST`?t.handleDryRunPost(o,r(e,a)):e.method===`GET`?t.handleDryRunGet(o,r(e,a)):i.NextResponse.json({error:`Method not allowed`,valid:!1},{status:405})}}function g(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){return t.method===`POST`?n.handleBatchPost(u(t,r(t)),a(t,o)):i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405})}}function _(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,a){return e.method===`POST`?t.handleExplainPost(u(e,n(e)),r(e,a)):i.NextResponse.json({error:`Method not allowed`},{status:405})}}function v(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json(),l=await n(t,o),u=await e.p(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js discover handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Discovery failed`,500),{status:500})}}}function y(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.naturalLanguage)return i.NextResponse.json(e.i(`naturalLanguage field is required`,400),{status:400});let l=await n(t,o),u=await e.d(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js suggest handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query suggestion failed`,500),{status:500})}}}function b(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.query)return i.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await n(t,o),u=await e.f(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js validate handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query validation failed`,500),{status:500})}}}function x(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.query)return i.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await n(t,o),u=await e.m(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP load handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function S(t){let{httpHandler:r,corsHeaders:o,baseContext:s}=l(t),{mcp:c={enabled:!0}}=t,d=(e,t)=>{Object.entries(o(e)).forEach(([e,n])=>t.set(e,n))};return async function(t,l){if(c.resourceMetadataUrl&&!n.l(t.headers.get(`authorization`)))return i.NextResponse.json({error:`Bearer token required`},{status:401,headers:{"WWW-Authenticate":n.s(c.resourceMetadataUrl)}});if(t.method===`DELETE`||t.method===`GET`){let e=n.C(t.headers.get(`origin`),n.h(c));if(!e.valid)return i.NextResponse.json({error:e.reason},{status:403})}return t.method===`DELETE`?i.NextResponse.json({error:`Session termination not supported`},{status:405}):t.method===`GET`?a(t,d):t.method===`POST`?r.handleMcpPost(u(t,o(t)),s(t,l)):i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405})}}function C(e){let{cors:t}=s(e),{agent:n}=e;if(!n)throw Error(`agent config is required for createAgentChatHandler`);let a=o(e);return async function(o,s){try{if(o.method!==`POST`)return i.NextResponse.json({error:`Method not allowed - use POST`},{status:405});let{handleAgentChat:l}=await Promise.resolve().then(()=>require("../handler-CRGZ8gd2.cjs")),{message:u,sessionId:d,history:f}=await o.json();if(!u||typeof u!=`string`)return i.NextResponse.json({error:`message is required and must be a string`},{status:400});let p=(n.apiKey||``).trim();if(n.allowClientApiKey){let e=o.headers.get(`x-agent-api-key`);e&&(p=e.trim())}if(!p)return i.NextResponse.json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`},{status:401});let m=n.allowClientApiKey&&o.headers.get(`x-agent-provider`)||void 0,h=n.allowClientApiKey&&o.headers.get(`x-agent-model`)||void 0,g=n.allowClientApiKey&&o.headers.get(`x-agent-provider-endpoint`)||void 0,_=r.r(await e.extractSecurityContext(o,s),e=>o.headers.get(e)??void 0),v=n.buildSystemContext?.(_),y=new TextEncoder,b=new ReadableStream({async start(e){try{let t=l({message:u,sessionId:d,history:f,semanticLayer:a,securityContext:_,agentConfig:n,apiKey:p,systemContext:v,providerOverride:m,modelOverride:h,baseURLOverride:g});for await(let n of t){let t=`data: ${JSON.stringify(n)}\n\n`;e.enqueue(y.encode(t))}}catch(t){let n={type:`error`,data:{message:t instanceof Error?t.message:`Stream failed`}};e.enqueue(y.encode(`data: ${JSON.stringify(n)}\n\n`))}finally{e.close()}}}),x=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(t){let e=c(o,t);Object.entries(e).forEach(([e,t])=>x.set(e,t))}return new Response(b,{status:200,headers:x})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js agent chat handler error:`,e),i.NextResponse.json({error:e instanceof Error?e.message:`Agent chat failed`},{status:500})}}}function w(e){let{mcp:t={enabled:!0}}=e,n=o(e),r={...e,semanticLayer:n},i={load:f(r),meta:p(r),sql:m(r),dryRun:h(r),batch:g(r),explain:_(r)};return t.enabled!==!1&&(i.mcpRpc=S(r)),e.agent&&(i.agentChat=C(r)),i}exports.createAgentChatHandler=C,exports.createBatchHandler=g,exports.createCubeHandlers=w,exports.createDiscoverHandler=v,exports.createDryRunHandler=h,exports.createExplainHandler=_,exports.createLoadHandler=f,exports.createMcpLoadHandler=x,exports.createMcpRpcHandler=S,exports.createMetaHandler=p,exports.createOptionsHandler=d,exports.createSqlHandler=m,exports.createSuggestHandler=y,exports.createValidateHandler=b;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils-C1JpSDOX.cjs"),t=require("../compiler-DG6dLFQU.cjs"),n=require("../mcp-transport-Dl5bn6h4.cjs"),r=require("../core-DnUv8WiY.cjs");let i=require("next/server");function a(e,t){let r=new TextEncoder,a=n._(),o=new ReadableStream({start(e){e.enqueue(r.encode(n.x({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},a,15e3)))}}),s=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});return t(e,s),new i.NextResponse(o,{status:200,headers:s})}function o(e){if(e.semanticLayer)return e.semanticLayer;let{cubes:n,drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s}=e;if(!n||n.length===0)throw Error(`At least one cube must be provided in the cubes array`);let c=new t.t({drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s});return n.forEach(e=>{c.registerCube(e)}),c}function s(e){return{extractSecurityContext:async(t,n)=>{let i=await e.extractSecurityContext(t,n),a=r.s(e=>t.headers.get(e));return r.c(i,a)},cors:e.cors?{...e.cors,allowedHeaders:r.o(e.cors.allowedHeaders)}:void 0}}function c(e,t){let n=e.headers.get(`origin`),r={};return t.origin&&(typeof t.origin==`string`?r[`Access-Control-Allow-Origin`]=t.origin:Array.isArray(t.origin)?n&&t.origin.includes(n)&&(r[`Access-Control-Allow-Origin`]=n):typeof t.origin==`function`&&n&&t.origin(n)&&(r[`Access-Control-Allow-Origin`]=n)),t.methods&&(r[`Access-Control-Allow-Methods`]=t.methods.join(`, `)),t.allowedHeaders&&(r[`Access-Control-Allow-Headers`]=t.allowedHeaders.join(`, `)),t.credentials&&(r[`Access-Control-Allow-Credentials`]=`true`),r}function l(e){let t=o(e),n=r.t({semanticLayer:t,onError:e=>{process.env.NODE_ENV!==`test`&&console.error(`Next.js handler error:`,e)},mcp:e.mcp}),i=e.cors?{...e.cors,allowedHeaders:r.o(e.cors.allowedHeaders)}:void 0;return{httpHandler:n,corsHeaders:e=>i?c(e,i):{},baseContext:(t,n)=>()=>e.extractSecurityContext(t,n)}}function u(e,t){let n={};return{getHeader:t=>e.headers.get(t)??void 0,getBody:async()=>{try{return await e.json()}catch{return null}},getQueryParam:t=>e.nextUrl.searchParams.get(t)??void 0,send:(e,r)=>i.NextResponse.json(r,{status:e,headers:{...t,...n}}),setHeader:(e,t)=>{n[e]=t},sendEmpty:e=>new i.NextResponse(null,{status:e,headers:{...t,...n}}),sendSse:(e,r)=>new i.NextResponse(r,{status:e,headers:{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`,...t,...n}})}}function d(e){return async function(t){let n=c(t,{...e,allowedHeaders:r.o(e.allowedHeaders)});return new Response(null,{status:200,headers:n})}}function f(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){let s=u(t,r(t));return t.method===`POST`?n.handleLoadPost(s,a(t,o)):t.method===`GET`?n.handleLoadGet(s,a(t,o)):i.NextResponse.json(e.i(`Method not allowed`,405),{status:405})}}function p(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,i){return t.handleMetaGet(u(e,n(e)),r(e,i))}}function m(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){let s=u(t,r(t));return t.method===`POST`?n.handleSqlPost(s,a(t,o)):t.method===`GET`?n.handleSqlGet(s,a(t,o)):i.NextResponse.json(e.i(`Method not allowed`,405),{status:405})}}function h(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,a){let o=u(e,n(e));return e.method===`POST`?t.handleDryRunPost(o,r(e,a)):e.method===`GET`?t.handleDryRunGet(o,r(e,a)):i.NextResponse.json({error:`Method not allowed`,valid:!1},{status:405})}}function g(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){return t.method===`POST`?n.handleBatchPost(u(t,r(t)),a(t,o)):i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405})}}function _(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,a){return e.method===`POST`?t.handleExplainPost(u(e,n(e)),r(e,a)):i.NextResponse.json({error:`Method not allowed`},{status:405})}}function v(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json(),l=await n(t,o),u=await e.p(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js discover handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Discovery failed`,500),{status:500})}}}function y(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.naturalLanguage)return i.NextResponse.json(e.i(`naturalLanguage field is required`,400),{status:400});let l=await n(t,o),u=await e.d(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js suggest handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query suggestion failed`,500),{status:500})}}}function b(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.query)return i.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await n(t,o),u=await e.f(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js validate handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query validation failed`,500),{status:500})}}}function x(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.query)return i.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await n(t,o),u=await e.m(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP load handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function S(t){let{httpHandler:r,corsHeaders:o,baseContext:s}=l(t),{mcp:c={enabled:!0}}=t,d=(e,t)=>{Object.entries(o(e)).forEach(([e,n])=>t.set(e,n))};return async function(t,l){if(c.resourceMetadataUrl&&!n.l(t.headers.get(`authorization`)))return i.NextResponse.json({error:`Bearer token required`},{status:401,headers:{"WWW-Authenticate":n.s(c.resourceMetadataUrl)}});if(t.method===`DELETE`||t.method===`GET`){let e=n.C(t.headers.get(`origin`),n.h(c));if(!e.valid)return i.NextResponse.json({error:e.reason},{status:403})}return t.method===`DELETE`?i.NextResponse.json({error:`Session termination not supported`},{status:405}):t.method===`GET`?a(t,d):t.method===`POST`?r.handleMcpPost(u(t,o(t)),s(t,l)):i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405})}}function C(e){let{cors:t}=s(e),{agent:n}=e;if(!n)throw Error(`agent config is required for createAgentChatHandler`);let a=o(e);return async function(o,s){try{if(o.method!==`POST`)return i.NextResponse.json({error:`Method not allowed - use POST`},{status:405});let{handleAgentChat:l}=await Promise.resolve().then(()=>require("../handler-l75Hbzv3.cjs")),{message:u,sessionId:d,history:f}=await o.json();if(!u||typeof u!=`string`)return i.NextResponse.json({error:`message is required and must be a string`},{status:400});let p=(n.apiKey||``).trim();if(n.allowClientApiKey){let e=o.headers.get(`x-agent-api-key`);e&&(p=e.trim())}if(!p)return i.NextResponse.json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`},{status:401});let m=n.allowClientApiKey&&o.headers.get(`x-agent-provider`)||void 0,h=n.allowClientApiKey&&o.headers.get(`x-agent-model`)||void 0,g=n.allowClientApiKey&&o.headers.get(`x-agent-provider-endpoint`)||void 0,_=r.r(await e.extractSecurityContext(o,s),e=>o.headers.get(e)??void 0),v=n.buildSystemContext?.(_),y=new TextEncoder,b=new ReadableStream({async start(e){try{let t=l({message:u,sessionId:d,history:f,semanticLayer:a,securityContext:_,agentConfig:n,apiKey:p,systemContext:v,providerOverride:m,modelOverride:h,baseURLOverride:g});for await(let n of t){let t=`data: ${JSON.stringify(n)}\n\n`;e.enqueue(y.encode(t))}}catch(t){let n={type:`error`,data:{message:t instanceof Error?t.message:`Stream failed`}};e.enqueue(y.encode(`data: ${JSON.stringify(n)}\n\n`))}finally{e.close()}}}),x=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(t){let e=c(o,t);Object.entries(e).forEach(([e,t])=>x.set(e,t))}return new Response(b,{status:200,headers:x})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js agent chat handler error:`,e),i.NextResponse.json({error:e instanceof Error?e.message:`Agent chat failed`},{status:500})}}}function w(e){let{mcp:t={enabled:!0}}=e,n=o(e),r={...e,semanticLayer:n},i={load:f(r),meta:p(r),sql:m(r),dryRun:h(r),batch:g(r),explain:_(r)};return t.enabled!==!1&&(i.mcpRpc=S(r)),e.agent&&(i.agentChat=C(r)),i}exports.createAgentChatHandler=C,exports.createBatchHandler=g,exports.createCubeHandlers=w,exports.createDiscoverHandler=v,exports.createDryRunHandler=h,exports.createExplainHandler=_,exports.createLoadHandler=f,exports.createMcpLoadHandler=x,exports.createMcpRpcHandler=S,exports.createMetaHandler=p,exports.createOptionsHandler=d,exports.createSqlHandler=m,exports.createSuggestHandler=y,exports.createValidateHandler=b;
@@ -1,7 +1,7 @@
1
1
  import { d as e, f as t, i as n, m as r, p as i } from "../utils-BhlkVCzZ.js";
2
2
  import { t as a } from "../compiler-BFLAXV7W.js";
3
- import { C as o, _ as s, h as c, l, s as u, x as d } from "../mcp-transport-BqdBHmXL.js";
4
- import { c as f, o as p, r as m, s as h, t as g } from "../core-l3KMTu9u.js";
3
+ import { C as o, _ as s, h as c, l, s as u, x as d } from "../mcp-transport-BOfhj01O.js";
4
+ import { c as f, o as p, r as m, s as h, t as g } from "../core-BBtbwMwR.js";
5
5
  import { NextResponse as _ } from "next/server";
6
6
  //#region src/adapters/nextjs/mcp-handler.ts
7
7
  function v(e, t) {
@@ -243,7 +243,7 @@ function I(e) {
243
243
  return async function(i, a) {
244
244
  try {
245
245
  if (i.method !== "POST") return _.json({ error: "Method not allowed - use POST" }, { status: 405 });
246
- let { handleAgentChat: o } = await import("../handler-DESp4wPg.js"), { message: s, sessionId: c, history: l } = await i.json();
246
+ let { handleAgentChat: o } = await import("../handler-_xh4X1OO.js"), { message: s, sessionId: c, history: l } = await i.json();
247
247
  if (!s || typeof s != "string") return _.json({ error: "message is required and must be a string" }, { status: 400 });
248
248
  let u = (n.apiKey || "").trim();
249
249
  if (n.allowClientApiKey) {
@@ -14,5 +14,7 @@ export interface PortletGroupCardProps {
14
14
  onChildDragEnd: () => void;
15
15
  /** Snap bands rendered inside each child; supplied by the row layout. */
16
16
  renderSnapBands?: (portletId: string) => ReactNode;
17
+ /** Set inside a section card, which draws the only frame for the whole band. */
18
+ frameless?: boolean;
17
19
  }
18
- export default function PortletGroupCard({ group, portlets, canEdit, renderChild, onRename, onUngroup, onDelete, onChildDragStart, onChildDragEnd, renderSnapBands }: PortletGroupCardProps): import("react").JSX.Element;
20
+ export default function PortletGroupCard({ group, portlets, canEdit, renderChild, onRename, onUngroup, onDelete, onChildDragStart, onChildDragEnd, renderSnapBands, frameless }: PortletGroupCardProps): import("react").JSX.Element;
@@ -1,6 +1,7 @@
1
1
  import { HTMLAttributes, ReactNode, MouseEvent, DragEvent } from 'react';
2
2
  import { DashboardGridSettings, PortletConfig, PortletGroup, RowLayout } from '../types.js';
3
3
  import { SnapEdge } from '../hooks/dashboard/groupUtils.js';
4
+ import { PortletCardVariant } from './dashboardPortletCard/cardStyles.js';
4
5
  interface RowManagedLayoutProps {
5
6
  rows: RowLayout[];
6
7
  portlets: PortletConfig[];
@@ -23,9 +24,11 @@ interface RowManagedLayoutProps {
23
24
  draggingPortletId?: string | null;
24
25
  /** Id of the group currently being dragged, so its members ignore their bands. */
25
26
  draggingGroupId?: string | null;
26
- renderPortlet: (portlet: PortletConfig, containerProps?: HTMLAttributes<HTMLDivElement>, headerProps?: HTMLAttributes<HTMLDivElement>) => ReactNode;
27
+ renderPortlet: (portlet: PortletConfig, containerProps?: HTMLAttributes<HTMLDivElement>, headerProps?: HTMLAttributes<HTMLDivElement>, variant?: PortletCardVariant) => ReactNode;
27
28
  /** Renders a group column. Omitted in contexts that have no groups. */
28
- renderGroup?: (group: PortletGroup, renderSnapBands: (portletId: string) => ReactNode) => ReactNode;
29
+ renderGroup?: (group: PortletGroup, renderSnapBands: (portletId: string) => ReactNode,
30
+ /** Set inside a section, where the section card draws the only frame. */
31
+ frameless?: boolean) => ReactNode;
29
32
  }
30
33
  export default function RowManagedLayout({ rows, portlets, groups, gridSettings, gridWidth, canEdit, isDragging, onRowResize, onColumnResize, onPortletDragStart, onPortletDragEnd, onRowDrop, onNewRowDrop, onSnapDrop, draggingPortletId, draggingGroupId, renderPortlet, renderGroup }: RowManagedLayoutProps): import("react").JSX.Element;
31
34
  export {};
@@ -1,7 +1,11 @@
1
1
  import { CSSProperties } from 'react';
2
2
  import { ChartType, ChartDisplayConfig } from '../../types.js';
3
- /** How much chrome a card draws. Group children are frameless and headerless. */
4
- export type PortletCardVariant = 'standalone' | 'groupChild';
3
+ /**
4
+ * How much chrome a card draws. Group children are frameless and headerless;
5
+ * section children are frameless but otherwise behave like standalone cards,
6
+ * because the section card around them supplies the only frame.
7
+ */
8
+ export type PortletCardVariant = 'standalone' | 'groupChild' | 'sectionChild';
5
9
  export interface PortletDisplayModes {
6
10
  isMarkdownAutoHeight: boolean;
7
11
  isTransparentContent: boolean;
@@ -28,7 +32,7 @@ export declare function buildContainerClassName(params: {
28
32
  extraClassName?: string;
29
33
  variant?: PortletCardVariant;
30
34
  }): string;
31
- export declare function buildHeaderClassName(isEditMode: boolean, extraClassName?: string): string;
35
+ export declare function buildHeaderClassName(isEditMode: boolean, extraClassName?: string, variant?: PortletCardVariant): string;
32
36
  export declare function buildContainerStyle(params: {
33
37
  isTransparent: boolean;
34
38
  isInSelectionMode: boolean;
@@ -0,0 +1,46 @@
1
+ import { PortletConfig, RowLayout } from '../../types.js';
2
+ /** A markdown portlet that sizes itself to its content - the shape of a header. */
3
+ export declare function isAutoHeightMarkdownPortlet(portlet: PortletConfig): boolean;
4
+ /**
5
+ * A row sizes itself to its content only when every column is a markdown
6
+ * portlet asking for it. A group column has an explicit height, so it never
7
+ * auto-heights.
8
+ */
9
+ export declare function isAutoHeightRow(row: RowLayout, portletMap: Map<string, PortletConfig>): boolean;
10
+ /**
11
+ * A section header is a lone full-width auto-height markdown row.
12
+ *
13
+ * The width test matters: a single column is not automatically full width, and
14
+ * one narrower than `cols` renders as a partial-width card that shouldn't
15
+ * capture the rows below it. `normalizeRows` -> `adjustRowWidths` guarantees a
16
+ * row's columns sum to exactly `cols`, so a lone column does reach it.
17
+ */
18
+ export declare function isSectionHeaderRow(row: RowLayout, portletMap: Map<string, PortletConfig>, cols: number): boolean;
19
+ /**
20
+ * True when the header already draws its own line along its bottom edge -
21
+ * either the `accentBorder: 'bottom'` display option, or markdown content
22
+ * ending in a horizontal rule.
23
+ *
24
+ * Such a header separates itself from the section body, so the section must not
25
+ * draw its own divider underneath as well: two parallel lines a few pixels
26
+ * apart is the thing this whole feature exists to avoid.
27
+ */
28
+ export declare function headerHasBottomRule(portlet: PortletConfig): boolean;
29
+ export type RowBand =
30
+ /** A row that belongs to no section, drawn exactly as it always has been. */
31
+ {
32
+ kind: 'loose';
33
+ rowIndex: number;
34
+ } | {
35
+ kind: 'section';
36
+ headerRowIndex: number;
37
+ bodyRowIndices: number[];
38
+ };
39
+ /**
40
+ * Split `rows` into bands top-down. Rows before the first header stay loose,
41
+ * and a header with nothing beneath it stays loose too - a trailing markdown
42
+ * note is a note, not an empty section card.
43
+ */
44
+ export declare function computeRowBands(rows: RowLayout[], portletMap: Map<string, PortletConfig>, cols: number): RowBand[];
45
+ /** True when at least one section would be drawn - lets callers skip the wrapper entirely. */
46
+ export declare function hasSection(bands: RowBand[]): boolean;
@@ -1,7 +1,7 @@
1
1
  import { dt as e, ft as t, gt as n, ht as r, lt as i, mt as a, pt as o, t as s, ut as c } from "./chunks/chart-data-table-Cou9qOab.js";
2
2
  import { d as l, l as u, s as d, u as f } from "./chunks/chart-activity-grid-CJzxC18G.js";
3
3
  import { t as p } from "./chunks/chart-funnel-B0775aaT.js";
4
- import { a as m, i as h, n as g, o as _, r as v, s as y, t as b } from "./chunks/charts-loader-tCSbqT7H.js";
4
+ import { a as m, i as h, n as g, o as _, r as v, s as y, t as b } from "./chunks/charts-loader-D_yEsIpH.js";
5
5
  import { t as x } from "./chunks/chart-area-C66dgy84.js";
6
6
  import { i as S } from "./chunks/utils-CToHkuhU.js";
7
7
  import { t as C } from "./chunks/chart-bar-D9kiSOCT.js";