drizzle-cube 0.5.4 → 0.5.5
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.
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.js +4 -4
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.js +4 -4
- package/dist/adapters/{handler-CNn3q29F.cjs → handler-C1Qs8JMY.cjs} +3 -3
- package/dist/adapters/{handler-_TKfigrZ.js → handler-CoaNnZyf.js} +122 -1
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +4 -4
- package/dist/adapters/{locale-Dl_3R6hP.cjs → locale-CTuvUGBs.cjs} +1 -1
- package/dist/adapters/{locale-BQQrZYhz.js → locale-wMBdZ3Ks.js} +1 -1
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.js +8 -3
- package/dist/adapters/mcp-transport-B_HoB1HQ.js +579 -0
- package/dist/adapters/mcp-transport-bQzyrBPI.cjs +40 -0
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +4 -4
- package/dist/adapters/utils-CIRA5_JO.cjs +128 -0
- package/dist/adapters/{utils-DG8ti3FT.js → utils-hC7Z8V39.js} +19 -5
- package/dist/adapters/utils.cjs +1 -1
- package/dist/adapters/utils.d.ts +6 -1
- package/dist/adapters/utils.js +1 -1
- package/dist/client/charts/chartConfigs.d.ts +34 -0
- package/dist/client/charts.js +12 -12
- package/dist/client/chunks/{DashboardEditModal-BBcB0E2g.js → DashboardEditModal-DayTXEH0.js} +10 -10
- package/dist/client/chunks/{DashboardEditModal-BBcB0E2g.js.map → DashboardEditModal-DayTXEH0.js.map} +1 -1
- package/dist/client/chunks/{FieldSearchModal-CisOov-_.js → FieldSearchModal-B7Mr8UNT.js} +4 -4
- package/dist/client/chunks/{FieldSearchModal-CisOov-_.js.map → FieldSearchModal-B7Mr8UNT.js.map} +1 -1
- package/dist/client/chunks/KpiDelta-C-hZ1x01.js +2 -0
- package/dist/client/chunks/KpiNumber-Beo8CK0a.js +2 -0
- package/dist/client/chunks/KpiText-ytYiRTRO.js +2 -0
- package/dist/client/chunks/{RetentionCombinedChart-DiyZwiPv.js → RetentionCombinedChart-D3dRmoos.js} +3 -3
- package/dist/client/chunks/{RetentionCombinedChart-DiyZwiPv.js.map → RetentionCombinedChart-D3dRmoos.js.map} +1 -1
- package/dist/client/chunks/{RetentionHeatmap-usGF7BCo.js → RetentionHeatmap-DHPnn0qH.js} +2 -2
- package/dist/client/chunks/{RetentionHeatmap-usGF7BCo.js.map → RetentionHeatmap-DHPnn0qH.js.map} +1 -1
- package/dist/client/chunks/SchemaVisualization-DbYZBTyi.js +2 -0
- package/dist/client/chunks/SchemaVisualizationLazy-BGo-1S3q.js +2 -0
- package/dist/client/chunks/{af-ZA-xDmO5F0s.js → af-ZA-BtTNqvHF.js} +8 -3
- package/dist/client/chunks/af-ZA-BtTNqvHF.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-0o1W-k3K.js → analysis-builder-lcGl099d.js} +245 -255
- package/dist/client/chunks/analysis-builder-lcGl099d.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-shared-Cz4KAlIC.js → analysis-builder-shared-6BRZcEnu.js} +391 -459
- package/dist/client/chunks/analysis-builder-shared-6BRZcEnu.js.map +1 -0
- package/dist/client/chunks/{chart-activity-grid-VFFm85hC.js → chart-activity-grid-BnY-jaoa.js} +10 -5
- package/dist/client/chunks/chart-activity-grid-BnY-jaoa.js.map +1 -0
- package/dist/client/chunks/{chart-area-CwwIHTmK.js → chart-area-G3OvLLK4.js} +2 -2
- package/dist/client/chunks/{chart-area-CwwIHTmK.js.map → chart-area-G3OvLLK4.js.map} +1 -1
- package/dist/client/chunks/{chart-bar-Bmny922L.js → chart-bar-MLIWiLrc.js} +3 -3
- package/dist/client/chunks/{chart-bar-Bmny922L.js.map → chart-bar-MLIWiLrc.js.map} +1 -1
- package/dist/client/chunks/{chart-box-plot-DM7GwtCV.js → chart-box-plot-c2XqKTWq.js} +2 -2
- package/dist/client/chunks/{chart-box-plot-DM7GwtCV.js.map → chart-box-plot-c2XqKTWq.js.map} +1 -1
- package/dist/client/chunks/{chart-bubble-DJOq4IpT.js → chart-bubble-CAGvnYb1.js} +2 -2
- package/dist/client/chunks/{chart-bubble-DJOq4IpT.js.map → chart-bubble-CAGvnYb1.js.map} +1 -1
- package/dist/client/chunks/{chart-candlestick-C2nzVCv1.js → chart-candlestick-oSPk-KQp.js} +2 -2
- package/dist/client/chunks/{chart-candlestick-C2nzVCv1.js.map → chart-candlestick-oSPk-KQp.js.map} +1 -1
- package/dist/client/chunks/{chart-config-activity-grid-C-EkgYoa.js → chart-config-activity-grid-Dssynumw.js} +8 -1
- package/dist/client/chunks/chart-config-activity-grid-Dssynumw.js.map +1 -0
- package/dist/client/chunks/{chart-config-area-CMZpbIah.js → chart-config-area-40fbx2Ah.js} +8 -1
- package/dist/client/chunks/chart-config-area-40fbx2Ah.js.map +1 -0
- package/dist/client/chunks/{chart-config-bar-B8_V4YLg.js → chart-config-bar-CUWHwOPN.js} +8 -1
- package/dist/client/chunks/chart-config-bar-CUWHwOPN.js.map +1 -0
- package/dist/client/chunks/{chart-config-box-plot-Dwj7sEbU.js → chart-config-box-plot-D3Y0ien3.js} +8 -1
- package/dist/client/chunks/chart-config-box-plot-D3Y0ien3.js.map +1 -0
- package/dist/client/chunks/{chart-config-bubble-B0w0ZVp4.js → chart-config-bubble-BXSTKLn-.js} +8 -1
- package/dist/client/chunks/chart-config-bubble-BXSTKLn-.js.map +1 -0
- package/dist/client/chunks/{chart-config-candlestick-Bvo3zeIn.js → chart-config-candlestick-DEuD2Av0.js} +8 -1
- package/dist/client/chunks/chart-config-candlestick-DEuD2Av0.js.map +1 -0
- package/dist/client/chunks/{chart-config-gauge-C5ZiyZy7.js → chart-config-gauge-CCva3FfA.js} +5 -1
- package/dist/client/chunks/chart-config-gauge-CCva3FfA.js.map +1 -0
- package/dist/client/chunks/{chart-config-heat-map-Cv8qNnVP.js → chart-config-heat-map-Db4Z8UUn.js} +8 -1
- package/dist/client/chunks/chart-config-heat-map-Db4Z8UUn.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-delta-BraHQc2E.js → chart-config-kpi-delta-BfLf3iyi.js} +8 -1
- package/dist/client/chunks/chart-config-kpi-delta-BfLf3iyi.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-number-CeCkx7mC.js → chart-config-kpi-number-DWKFc9PX.js} +5 -1
- package/dist/client/chunks/chart-config-kpi-number-DWKFc9PX.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-text-CImM3SvH.js → chart-config-kpi-text-Dr4OG6cY.js} +5 -1
- package/dist/client/chunks/chart-config-kpi-text-Dr4OG6cY.js.map +1 -0
- package/dist/client/chunks/{chart-config-line-BVKapAQK.js → chart-config-line-DGYYdDw9.js} +8 -1
- package/dist/client/chunks/chart-config-line-DGYYdDw9.js.map +1 -0
- package/dist/client/chunks/{chart-config-measure-profile-KTVV1gO3.js → chart-config-measure-profile-sB3n_Azv.js} +5 -1
- package/dist/client/chunks/chart-config-measure-profile-sB3n_Azv.js.map +1 -0
- package/dist/client/chunks/{chart-config-pie-BZxVl25X.js → chart-config-pie-kte7OXa9.js} +8 -1
- package/dist/client/chunks/chart-config-pie-kte7OXa9.js.map +1 -0
- package/dist/client/chunks/{chart-config-radar-B7FByX3t.js → chart-config-radar-C9IxP5tc.js} +8 -1
- package/dist/client/chunks/chart-config-radar-C9IxP5tc.js.map +1 -0
- package/dist/client/chunks/{chart-config-radial-bar-UfW_3yyX.js → chart-config-radial-bar-C3WJ8Uhm.js} +8 -1
- package/dist/client/chunks/chart-config-radial-bar-C3WJ8Uhm.js.map +1 -0
- package/dist/client/chunks/{chart-config-scatter-BVVJuOnt.js → chart-config-scatter-BVN_29G5.js} +8 -1
- package/dist/client/chunks/chart-config-scatter-BVN_29G5.js.map +1 -0
- package/dist/client/chunks/{chart-config-tree-map-IHp97OyV.js → chart-config-tree-map-meeJEDi8.js} +8 -1
- package/dist/client/chunks/chart-config-tree-map-meeJEDi8.js.map +1 -0
- package/dist/client/chunks/{chart-config-waterfall-BdqG1V-x.js → chart-config-waterfall-CaPeWZMl.js} +8 -1
- package/dist/client/chunks/chart-config-waterfall-CaPeWZMl.js.map +1 -0
- package/dist/client/chunks/{chart-data-table-zZtwLf55.js → chart-data-table-BRXHT2H-.js} +65 -65
- package/dist/client/chunks/{chart-data-table-zZtwLf55.js.map → chart-data-table-BRXHT2H-.js.map} +1 -1
- package/dist/client/chunks/{chart-funnel-COTJy8BP.js → chart-funnel-aQ7G_CqU.js} +2 -2
- package/dist/client/chunks/{chart-funnel-COTJy8BP.js.map → chart-funnel-aQ7G_CqU.js.map} +1 -1
- package/dist/client/chunks/{chart-gauge-C8lIneI0.js → chart-gauge-DqbDKr9E.js} +2 -2
- package/dist/client/chunks/{chart-gauge-C8lIneI0.js.map → chart-gauge-DqbDKr9E.js.map} +1 -1
- package/dist/client/chunks/{chart-heat-map-BJXt3RMt.js → chart-heat-map--6QnhUM8.js} +2 -2
- package/dist/client/chunks/{chart-heat-map-BJXt3RMt.js.map → chart-heat-map--6QnhUM8.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-delta-DHkNqufb.js → chart-kpi-delta-DOSpRjfs.js} +3 -3
- package/dist/client/chunks/{chart-kpi-delta-DHkNqufb.js.map → chart-kpi-delta-DOSpRjfs.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-number-BrXw7m-S.js → chart-kpi-number-BcMjeKm8.js} +5 -5
- package/dist/client/chunks/{chart-kpi-number-BrXw7m-S.js.map → chart-kpi-number-BcMjeKm8.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-text-D0plngLV.js → chart-kpi-text-BI9isc2i.js} +3 -3
- package/dist/client/chunks/{chart-kpi-text-D0plngLV.js.map → chart-kpi-text-BI9isc2i.js.map} +1 -1
- package/dist/client/chunks/{chart-line-DKvW32U-.js → chart-line-C0IHQteu.js} +3 -3
- package/dist/client/chunks/{chart-line-DKvW32U-.js.map → chart-line-C0IHQteu.js.map} +1 -1
- package/dist/client/chunks/{chart-markdown-CJU2hUq3.js → chart-markdown-BmgSMqPg.js} +2 -2
- package/dist/client/chunks/{chart-markdown-CJU2hUq3.js.map → chart-markdown-BmgSMqPg.js.map} +1 -1
- package/dist/client/chunks/{chart-measure-profile-DNT_tbh4.js → chart-measure-profile-DEyLW1fd.js} +3 -3
- package/dist/client/chunks/{chart-measure-profile-DNT_tbh4.js.map → chart-measure-profile-DEyLW1fd.js.map} +1 -1
- package/dist/client/chunks/{chart-pie-CzYnncO-.js → chart-pie-DSIekr7p.js} +3 -3
- package/dist/client/chunks/{chart-pie-CzYnncO-.js.map → chart-pie-DSIekr7p.js.map} +1 -1
- package/dist/client/chunks/{chart-radar-8iAt3QZl.js → chart-radar-SGl62hK8.js} +3 -3
- package/dist/client/chunks/{chart-radar-8iAt3QZl.js.map → chart-radar-SGl62hK8.js.map} +1 -1
- package/dist/client/chunks/{chart-radial-bar-CJbG7RIe.js → chart-radial-bar-C42EykOa.js} +3 -3
- package/dist/client/chunks/{chart-radial-bar-CJbG7RIe.js.map → chart-radial-bar-C42EykOa.js.map} +1 -1
- package/dist/client/chunks/{chart-sankey-C-wLBUmb.js → chart-sankey-DguImp0W.js} +2 -2
- package/dist/client/chunks/{chart-sankey-C-wLBUmb.js.map → chart-sankey-DguImp0W.js.map} +1 -1
- package/dist/client/chunks/{chart-scatter-NMjD1lbW.js → chart-scatter-Doeox4OP.js} +3 -3
- package/dist/client/chunks/{chart-scatter-NMjD1lbW.js.map → chart-scatter-Doeox4OP.js.map} +1 -1
- package/dist/client/chunks/{chart-sunburst-HtJ-LJ7n.js → chart-sunburst-F3tgCpL-.js} +3 -3
- package/dist/client/chunks/{chart-sunburst-HtJ-LJ7n.js.map → chart-sunburst-F3tgCpL-.js.map} +1 -1
- package/dist/client/chunks/{chart-tree-map-CetaLMt8.js → chart-tree-map-DvuSCIc8.js} +3 -3
- package/dist/client/chunks/{chart-tree-map-CetaLMt8.js.map → chart-tree-map-DvuSCIc8.js.map} +1 -1
- package/dist/client/chunks/{chart-waterfall-ontNp1Sd.js → chart-waterfall-Be5duXlO.js} +3 -3
- package/dist/client/chunks/{chart-waterfall-ontNp1Sd.js.map → chart-waterfall-Be5duXlO.js.map} +1 -1
- package/dist/client/chunks/{charts-core-B5UXUg6_.js → charts-core-XlOwoP_r.js} +2 -2
- package/dist/client/chunks/{charts-core-B5UXUg6_.js.map → charts-core-XlOwoP_r.js.map} +1 -1
- package/dist/client/chunks/{nl-NL-DDf0OdfW.js → nl-NL-BLDeSy_P.js} +8 -3
- package/dist/client/chunks/nl-NL-BLDeSy_P.js.map +1 -0
- package/dist/client/chunks/{schema-visualization-cnB2xZxn.js → schema-visualization-CM5ikSWB.js} +4 -4
- package/dist/client/chunks/{schema-visualization-cnB2xZxn.js.map → schema-visualization-CM5ikSWB.js.map} +1 -1
- package/dist/client/chunks/{useDebounce-BOBSvhHy.js → useDebounce-NEZQbfxN.js} +4 -4
- package/dist/client/chunks/{useDebounce-BOBSvhHy.js.map → useDebounce-NEZQbfxN.js.map} +1 -1
- package/dist/client/chunks/{useExplainAI-B_Pi4eXW.js → useExplainAI-DivfI0dW.js} +4 -4
- package/dist/client/chunks/{useExplainAI-B_Pi4eXW.js.map → useExplainAI-DivfI0dW.js.map} +1 -1
- package/dist/client/chunks/{utils-BIuqPQuJ.js → utils-Ctl_cVNR.js} +2 -2
- package/dist/client/chunks/{utils-BIuqPQuJ.js.map → utils-Ctl_cVNR.js.map} +1 -1
- package/dist/client/chunks/{vendor-BxLCTfvm.js → vendor-BcLQ6iVZ.js} +2 -2
- package/dist/client/chunks/{vendor-BxLCTfvm.js.map → vendor-BcLQ6iVZ.js.map} +1 -1
- package/dist/client/components/AnalysisBuilder/types.d.ts +2 -2
- package/dist/client/components.js +3 -3
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons.js +1 -1
- package/dist/client/index.js +14 -14
- package/dist/client/providers.js +1 -1
- package/dist/client/schema.js +1 -1
- package/dist/client/shared/chartDefaults.d.ts +5 -10
- package/dist/client/utils.js +5 -5
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +5 -5
- package/dist/server/index.cjs +4 -4
- package/dist/server/index.js +128 -2
- package/package.json +2 -2
- package/dist/adapters/mcp-transport-CkyawtUT.cjs +0 -40
- package/dist/adapters/mcp-transport-DSbd6M_u.js +0 -586
- package/dist/adapters/utils-DrWvXf0G.cjs +0 -128
- package/dist/client/chunks/KpiDelta-D09hA_UJ.js +0 -2
- package/dist/client/chunks/KpiNumber-B7F9F9fC.js +0 -2
- package/dist/client/chunks/KpiText-C3ZXOF8b.js +0 -2
- package/dist/client/chunks/SchemaVisualization-DP4k1fPp.js +0 -2
- package/dist/client/chunks/SchemaVisualizationLazy-Brqv_PY9.js +0 -2
- package/dist/client/chunks/af-ZA-xDmO5F0s.js.map +0 -1
- package/dist/client/chunks/analysis-builder-0o1W-k3K.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-Cz4KAlIC.js.map +0 -1
- package/dist/client/chunks/chart-activity-grid-VFFm85hC.js.map +0 -1
- package/dist/client/chunks/chart-config-activity-grid-C-EkgYoa.js.map +0 -1
- package/dist/client/chunks/chart-config-area-CMZpbIah.js.map +0 -1
- package/dist/client/chunks/chart-config-bar-B8_V4YLg.js.map +0 -1
- package/dist/client/chunks/chart-config-box-plot-Dwj7sEbU.js.map +0 -1
- package/dist/client/chunks/chart-config-bubble-B0w0ZVp4.js.map +0 -1
- package/dist/client/chunks/chart-config-candlestick-Bvo3zeIn.js.map +0 -1
- package/dist/client/chunks/chart-config-gauge-C5ZiyZy7.js.map +0 -1
- package/dist/client/chunks/chart-config-heat-map-Cv8qNnVP.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-delta-BraHQc2E.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-number-CeCkx7mC.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-text-CImM3SvH.js.map +0 -1
- package/dist/client/chunks/chart-config-line-BVKapAQK.js.map +0 -1
- package/dist/client/chunks/chart-config-measure-profile-KTVV1gO3.js.map +0 -1
- package/dist/client/chunks/chart-config-pie-BZxVl25X.js.map +0 -1
- package/dist/client/chunks/chart-config-radar-B7FByX3t.js.map +0 -1
- package/dist/client/chunks/chart-config-radial-bar-UfW_3yyX.js.map +0 -1
- package/dist/client/chunks/chart-config-scatter-BVVJuOnt.js.map +0 -1
- package/dist/client/chunks/chart-config-tree-map-IHp97OyV.js.map +0 -1
- package/dist/client/chunks/chart-config-waterfall-BdqG1V-x.js.map +0 -1
- package/dist/client/chunks/nl-NL-DDf0OdfW.js.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../utils-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../utils-CIRA5_JO.cjs`),t=require(`../locale-CTuvUGBs.cjs`),n=require(`../mcp-transport-bQzyrBPI.cjs`);let r=require(`express`);r=e.w(r,1);let i=require(`cors`);i=e.w(i,1);function a(a){let{cubes:o,drizzle:s,schema:c,extractSecurityContext:l,engineType:u,cors:d,basePath:f=`/cubejs-api/v1`,jsonLimit:p=`10mb`,cache:m,mcp:h={enabled:!0},agent:g}=a;if(!o||o.length===0)throw Error(`At least one cube must be provided in the cubes array`);let _=(0,r.Router)(),v=async(e,n)=>t.r(await l(e,n),t.n(t=>e.get(t)));if(d){let e={...d,allowedHeaders:t.t(d.allowedHeaders)};_.use((0,i.default)(e))}_.use(r.default.json({limit:p})),_.use(r.default.urlencoded({extended:!0,limit:p}));let y=new t.i({drizzle:s,schema:c,engineType:u,cache:m,rlsSetup:a.rlsSetup});if(o.forEach(e=>{y.registerCube(e)}),_.post(`${f}/load`,async(t,n)=>{try{let r=t.body.query||t.body,i=await v(t,n),a=y.validateQuery(r);if(!a.isValid)return n.status(400).json(e.i(`Query validation failed: ${a.errors.join(`, `)}`,400));let o=t.headers[`x-cache-control`]===`no-cache`,s=await y.executeMultiCubeQuery(r,i,{skipCache:o});n.json(e.r(r,s,y))}catch(t){console.error(`Query execution error:`,t),n.status(500).json(e.i(t instanceof Error?t.message:`Query execution failed`,500))}}),_.get(`${f}/load`,async(t,n)=>{try{let r=t.query.query;if(!r)return n.status(400).json(e.i(`Query parameter is required`,400));let i;try{i=JSON.parse(r)}catch{return n.status(400).json(e.i(`Invalid JSON in query parameter`,400))}let a=await v(t,n),o=y.validateQuery(i);if(!o.isValid)return n.status(400).json(e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=t.headers[`x-cache-control`]===`no-cache`,c=await y.executeMultiCubeQuery(i,a,{skipCache:s});n.json(e.r(i,c,y))}catch(t){console.error(`Query execution error:`,t),n.status(500).json(e.i(t instanceof Error?t.message:`Query execution failed`,500))}}),_.post(`${f}/batch`,async(t,n)=>{try{let{queries:r}=t.body;if(!r||!Array.isArray(r))return n.status(400).json(e.i(`Request body must contain a "queries" array`,400));if(r.length===0)return n.status(400).json(e.i(`Queries array cannot be empty`,400));let i=await e.u(r,await v(t,n),y,{skipCache:t.headers[`x-cache-control`]===`no-cache`});n.json(i)}catch(t){console.error(`Batch execution error:`,t),n.status(500).json(e.i(t instanceof Error?t.message:`Batch execution failed`,500))}}),_.get(`${f}/meta`,(t,n)=>{try{let t=y.getMetadata();n.json(e.a(t))}catch(t){console.error(`Metadata error:`,t),n.status(500).json(e.i(t instanceof Error?t.message:`Failed to fetch metadata`,500))}}),_.post(`${f}/sql`,async(t,n)=>{try{let r=t.body,i=await v(t,n),a=y.validateQuery(r);if(!a.isValid)return n.status(400).json(e.i(`Query validation failed: ${a.errors.join(`, `)}`,400));let o=r.measures?.[0]||r.dimensions?.[0];if(!o)return n.status(400).json(e.i(`No measures or dimensions specified`,400));let s=o.split(`.`)[0],c=await y.generateSQL(s,r,i);n.json(e.o(r,c))}catch(t){console.error(`SQL generation error:`,String(t).replace(/\n|\r/g,``)),n.status(500).json(e.i(t instanceof Error?t.message:`SQL generation failed`,500))}}),_.get(`${f}/sql`,async(t,n)=>{try{let r=t.query.query;if(!r)return n.status(400).json(e.i(`Query parameter is required`,400));let i=JSON.parse(r),a=await v(t,n),o=y.validateQuery(i);if(!o.isValid)return n.status(400).json(e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=i.measures?.[0]||i.dimensions?.[0];if(!s)return n.status(400).json(e.i(`No measures or dimensions specified`,400));let c=s.split(`.`)[0],l=await y.generateSQL(c,i,a);n.json(e.o(i,l))}catch(t){console.error(`SQL generation error:`,String(t).replace(/\n|\r/g,``)),n.status(500).json(e.i(t instanceof Error?t.message:`SQL generation failed`,500))}}),_.post(`${f}/dry-run`,async(t,n)=>{try{let r=await e.f(t.body.query||t.body,await v(t,n),y);n.json(r)}catch(e){console.error(`Dry-run error:`,e),n.status(400).json({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}),_.get(`${f}/dry-run`,async(t,n)=>{try{let r=t.query.query;if(!r)return n.status(400).json({error:`Query parameter is required`,valid:!1});let i=await e.f(JSON.parse(r),await v(t,n),y);n.json(i)}catch(e){console.error(`Dry-run error:`,e),n.status(400).json({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}),_.post(`${f}/explain`,async(e,t)=>{try{let n=e.body.query||e.body,r=e.body.options||{},i=await v(e,t),a=y.validateQuery(n);if(!a.isValid)return t.status(400).json({error:`Query validation failed: ${a.errors.join(`, `)}`});let o=await y.explainQuery(n,i,r);t.json(o)}catch(e){console.error(`Explain error:`,e),t.status(500).json({error:e instanceof Error?e.message:`Explain query failed`})}}),g&&_.post(`${f}/agent/chat`,async(e,t)=>{try{let{handleAgentChat:n}=await Promise.resolve().then(()=>require(`../handler-C1Qs8JMY.cjs`)),{message:r,sessionId:i,history:a}=e.body;if(!r||typeof r!=`string`)return t.status(400).json({error:`message is required and must be a string`});let o=(g.apiKey||``).trim();if(g.allowClientApiKey){let t=e.headers[`x-agent-api-key`];t&&(o=t.trim())}if(!o)return t.status(401).json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`});let s=g.allowClientApiKey?e.headers[`x-agent-provider`]:void 0,c=g.allowClientApiKey?e.headers[`x-agent-model`]:void 0,l=g.allowClientApiKey?e.headers[`x-agent-provider-endpoint`]:void 0,u=await v(e,t),d=g.buildSystemContext?.(u);t.writeHead(200,{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});try{let e=n({message:r,sessionId:i,history:a,semanticLayer:y,securityContext:u,agentConfig:g,apiKey:o,systemContext:d,providerOverride:s,modelOverride:c,baseURLOverride:l});for await(let n of e)t.write(`data: ${JSON.stringify(n)}\n\n`)}catch(e){let n={type:`error`,data:{message:e instanceof Error?e.message:`Stream failed`}};t.write(`data: ${JSON.stringify(n)}\n\n`)}finally{t.end()}}catch(e){console.error(`Agent chat error:`,e),t.headersSent||t.status(500).json({error:e instanceof Error?e.message:`Agent chat failed`})}}),h.enabled!==!1){let e=n.o(y,h.resources),t=n.y(h.prompts),r=n.v(h.instructions),i=h.basePath??`/mcp`;_.post(`${i}`,async(i,a)=>{if(h.resourceMetadataUrl&&!n.u(i.headers.authorization))return a.setHeader(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),a.status(401).json({error:`Bearer token required`});let o=n.S(i.headers.origin,h.allowedOrigins?{allowedOrigins:h.allowedOrigins}:{});if(!o.valid)return a.status(403).json(n.i(null,-32600,o.reason));let s=i.headers.accept;if(!n.x(s))return a.status(400).json(n.i(null,-32600,`Accept header must include both application/json and text/event-stream`));let c=n.h(i.headers);if(!c.ok)return a.status(426).json({error:`Unsupported MCP protocol version`,supported:c.supported});let l=n.g(i.body);if(!l)return a.status(400).json(n.i(null,-32600,`Invalid JSON-RPC 2.0 request`));let u=n.C(s),d=l.method===`initialize`;try{let o=await n.l(l.method,l.params,{semanticLayer:y,extractSecurityContext:(e,t)=>v(e,t),rawRequest:i,rawResponse:a,negotiatedProtocol:c.negotiated,resources:e,prompts:t,instructions:r,appEnabled:!!h.app,appConfig:typeof h.app==`object`?h.app:void 0,serverName:h.serverName});if(n.m(l))return a.status(202).end();let s=d&&o&&typeof o==`object`&&`sessionId`in o?o.sessionId:void 0;s&&a.setHeader(n.r,s);let f=n.a(l.id??null,o);if(u){let e=n._();return a.status(200),a.setHeader(`Content-Type`,`text/event-stream`),a.setHeader(`Cache-Control`,`no-cache`),a.setHeader(`Connection`,`keep-alive`),a.write(`id: ${e}\n\n`),a.write(n.b(f,e)),a.end()}return a.json(f)}catch(e){if(n.m(l))return console.error(`MCP notification processing error:`,String(e).replace(/\n|\r/g,``)),a.status(202).end();console.error(`MCP RPC error:`,String(e).replace(/\n|\r/g,``));let t=e?.code??-32603,r=e?.data,i=e.message||`MCP request failed`,o=n.i(l.id??null,t,i,r);if(u){let e=n._();return a.status(200),a.setHeader(`Content-Type`,`text/event-stream`),a.setHeader(`Cache-Control`,`no-cache`),a.setHeader(`Connection`,`keep-alive`),a.write(`id: ${e}\n\n`),a.write(n.b(o,e)),a.end()}return a.status(200).json(o)}}),_.get(`${i}`,async(e,t)=>{if(h.resourceMetadataUrl&&!n.u(e.headers.authorization))return t.setHeader(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),t.status(401).json({error:`Bearer token required`});let r=n._();t.status(200),t.setHeader(`Content-Type`,`text/event-stream`),t.setHeader(`Cache-Control`,`no-cache`),t.setHeader(`Connection`,`keep-alive`),t.write(n.b({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},r,15e3));let i=setInterval(()=>{t.write(`: keep-alive
|
|
2
2
|
|
|
3
3
|
`)},15e3);e.on(`close`,()=>{clearInterval(i)})}),_.delete(`${i}`,(e,t)=>h.resourceMetadataUrl&&!n.u(e.headers.authorization)?(t.setHeader(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),t.status(401).json({error:`Bearer token required`})):t.status(405).json({error:`Session termination not supported`}))}return _.use((t,n,r,i)=>{console.error(`Express adapter error:`,t),r.headersSent||r.status(500).json(e.i(t,500))}),_}function o(e,t){let n=a(t);return e.use(`/`,n),e}function s(e){return o((0,r.default)(),e)}exports.createCubeApp=s,exports.createCubeRouter=a,exports.mountCubeRoutes=o;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as e, f as t, i as n, o as r, r as i, u as a } from "../utils-
|
|
2
|
-
import { i as o, n as s, r as c, t as l } from "../locale-
|
|
3
|
-
import { C as u, S as d, _ as f, a as p, b as m, c as h, g, h as _, i as v, l as y, m as b, o as x, r as S, u as C, v as w, x as T, y as E } from "../mcp-transport-
|
|
1
|
+
import { a as e, f as t, i as n, o as r, r as i, u as a } from "../utils-hC7Z8V39.js";
|
|
2
|
+
import { i as o, n as s, r as c, t as l } from "../locale-wMBdZ3Ks.js";
|
|
3
|
+
import { C as u, S as d, _ as f, a as p, b as m, c as h, g, h as _, i as v, l as y, m as b, o as x, r as S, u as C, v as w, x as T, y as E } from "../mcp-transport-B_HoB1HQ.js";
|
|
4
4
|
import D, { Router as O } from "express";
|
|
5
5
|
import k from "cors";
|
|
6
6
|
//#region src/adapters/express/index.ts
|
|
@@ -131,7 +131,7 @@ function A(A) {
|
|
|
131
131
|
}
|
|
132
132
|
}), V && H.post(`${L}/agent/chat`, async (e, t) => {
|
|
133
133
|
try {
|
|
134
|
-
let { handleAgentChat: n } = await import("../handler-
|
|
134
|
+
let { handleAgentChat: n } = await import("../handler-CoaNnZyf.js"), { message: r, sessionId: i, history: a } = e.body;
|
|
135
135
|
if (!r || typeof r != "string") return t.status(400).json({ error: "message is required and must be a string" });
|
|
136
136
|
let o = (V.apiKey || "").trim();
|
|
137
137
|
if (V.allowClientApiKey) {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../utils-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../utils-CIRA5_JO.cjs`),t=require(`../locale-CTuvUGBs.cjs`),n=require(`../mcp-transport-bQzyrBPI.cjs`);var r=function(r,i,a){let{cubes:o,drizzle:s,schema:c,extractSecurityContext:l,engineType:u,cors:d,basePath:f=`/cubejs-api/v1`,bodyLimit:p=10485760,cache:m,mcp:h={enabled:!0},agent:g}=i;if(!o||o.length===0)return a(Error(`At least one cube must be provided in the cubes array`));let _=async e=>t.r(await l(e),t.n(t=>e.headers[t.toLowerCase()]));if(d){let e={...d,allowedHeaders:t.t(d.allowedHeaders)};r.register(import(`@fastify/cors`),e)}r.addHook(`onRequest`,async(e,t)=>{e.method===`POST`&&(e.body=void 0)});let v=new t.i({drizzle:s,schema:c,engineType:u,cache:m,rlsSetup:i.rlsSetup});if(o.forEach(e=>{v.registerCube(e)}),r.post(`${f}/load`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(t,n)=>{try{let r=t.body,i=r.query||r,a=await _(t),o=v.validateQuery(i);if(!o.isValid)return n.status(400).send(e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=t.headers[`x-cache-control`]===`no-cache`;return e.r(i,await v.executeMultiCubeQuery(i,a,{skipCache:s}),v)}catch(r){return t.log.error(r,`Query execution error`),n.status(500).send(e.i(r instanceof Error?r.message:`Query execution failed`,500))}}),r.get(`${f}/load`,{schema:{querystring:{type:`object`,properties:{query:{type:`string`}},required:[`query`]}}},async(t,n)=>{try{let{query:r}=t.query,i;try{i=JSON.parse(r)}catch{return n.status(400).send(e.i(`Invalid JSON in query parameter`,400))}let a=await _(t),o=v.validateQuery(i);if(!o.isValid)return n.status(400).send(e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=t.headers[`x-cache-control`]===`no-cache`,c=await v.executeMultiCubeQuery(i,a,{skipCache:s});return e.r(i,c,v)}catch(r){return t.log.error(r,`Query execution error`),n.status(500).send(e.i(r instanceof Error?r.message:`Query execution failed`,500))}}),r.post(`${f}/batch`,{bodyLimit:p,schema:{body:{type:`object`,required:[`queries`],properties:{queries:{type:`array`,items:{type:`object`}}}}}},async(t,n)=>{try{let{queries:r}=t.body;return!r||!Array.isArray(r)?n.status(400).send(e.i(`Request body must contain a "queries" array`,400)):r.length===0?n.status(400).send(e.i(`Queries array cannot be empty`,400)):await e.u(r,await _(t),v,{skipCache:t.headers[`x-cache-control`]===`no-cache`})}catch(r){return t.log.error(r,`Batch execution error`),n.status(500).send(e.i(r instanceof Error?r.message:`Batch execution failed`,500))}}),r.get(`${f}/meta`,async(t,n)=>{try{return e.a(v.getMetadata())}catch(r){return t.log.error(r,`Metadata error`),n.status(500).send(e.i(r instanceof Error?r.message:`Failed to fetch metadata`,500))}}),r.post(`${f}/sql`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(t,n)=>{try{let r=t.body,i=await _(t),a=v.validateQuery(r);if(!a.isValid)return n.status(400).send(e.i(`Query validation failed: ${a.errors.join(`, `)}`,400));let o=r.measures?.[0]||r.dimensions?.[0];if(!o)return n.status(400).send(e.i(`No measures or dimensions specified`,400));let s=o.split(`.`)[0];return e.o(r,await v.generateSQL(s,r,i))}catch(r){return t.log.error({err:String(r).replace(/\n|\r/g,``)},`SQL generation error`),n.status(500).send(e.i(r instanceof Error?r.message:`SQL generation failed`,500))}}),r.get(`${f}/sql`,{schema:{querystring:{type:`object`,properties:{query:{type:`string`}},required:[`query`]}}},async(t,n)=>{try{let{query:r}=t.query,i=JSON.parse(r),a=await _(t),o=v.validateQuery(i);if(!o.isValid)return n.status(400).send(e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=i.measures?.[0]||i.dimensions?.[0];if(!s)return n.status(400).send(e.i(`No measures or dimensions specified`,400));let c=s.split(`.`)[0];return e.o(i,await v.generateSQL(c,i,a))}catch(r){return t.log.error({err:String(r).replace(/\n|\r/g,``)},`SQL generation error`),n.status(500).send(e.i(r instanceof Error?r.message:`SQL generation failed`,500))}}),r.post(`${f}/dry-run`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(t,n)=>{try{let n=t.body;return await e.f(n.query||n,await _(t),v)}catch(e){return t.log.error(e,`Dry-run error`),n.status(400).send({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}),r.get(`${f}/dry-run`,{schema:{querystring:{type:`object`,properties:{query:{type:`string`}},required:[`query`]}}},async(t,n)=>{try{let{query:n}=t.query;return await e.f(JSON.parse(n),await _(t),v)}catch(e){return t.log.error(e,`Dry-run error`),n.status(400).send({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}),r.post(`${f}/explain`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(e,t)=>{try{let n=e.body,r=n.query||n,i=n.options||{},a=await _(e),o=v.validateQuery(r);return o.isValid?await v.explainQuery(r,a,i):t.status(400).send({error:`Query validation failed: ${o.errors.join(`, `)}`})}catch(n){return e.log.error(n,`Explain error`),t.status(500).send({error:n instanceof Error?n.message:`Explain query failed`})}}),g&&r.post(`${f}/agent/chat`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(e,t)=>{try{let{handleAgentChat:n}=await Promise.resolve().then(()=>require(`../handler-C1Qs8JMY.cjs`)),{message:r,sessionId:i,history:a}=e.body;if(!r||typeof r!=`string`)return t.status(400).send({error:`message is required and must be a string`});let o=(g.apiKey||``).trim();if(g.allowClientApiKey){let t=e.headers[`x-agent-api-key`];t&&(o=t.trim())}if(!o)return t.status(401).send({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`});let s=g.allowClientApiKey?e.headers[`x-agent-provider`]:void 0,c=g.allowClientApiKey?e.headers[`x-agent-model`]:void 0,l=g.allowClientApiKey?e.headers[`x-agent-provider-endpoint`]:void 0,u=await _(e),d=g.buildSystemContext?.(u);t.raw.writeHead(200,{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});try{let e=n({message:r,sessionId:i,history:a,semanticLayer:v,securityContext:u,agentConfig:g,apiKey:o,systemContext:d,providerOverride:s,modelOverride:c,baseURLOverride:l});for await(let n of e)t.raw.write(`data: ${JSON.stringify(n)}\n\n`)}catch(e){let n={type:`error`,data:{message:e instanceof Error?e.message:`Stream failed`}};t.raw.write(`data: ${JSON.stringify(n)}\n\n`)}finally{t.raw.end()}}catch(n){if(e.log.error(n,`Agent chat error`),!t.raw.headersSent)return t.status(500).send({error:n instanceof Error?n.message:`Agent chat failed`})}}),h.enabled!==!1){let e=n.o(v,h.resources),t=n.y(h.prompts),i=n.v(h.instructions),a=h.basePath??`/mcp`;r.post(`${a}`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(r,a)=>{if(h.resourceMetadataUrl&&!n.u(r.headers.authorization))return a.header(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),a.status(401).send({error:`Bearer token required`});let o=n.S(r.headers.origin,h.allowedOrigins?{allowedOrigins:h.allowedOrigins}:{});if(!o.valid)return a.status(403).send(n.i(null,-32600,o.reason));let s=r.headers.accept;if(!n.x(s))return a.status(400).send(n.i(null,-32600,`Accept header must include both application/json and text/event-stream`));let c=n.h(r.headers);if(!c.ok)return a.status(426).send({error:`Unsupported MCP protocol version`,supported:c.supported});let l=n.g(r.body);if(!l)return a.status(400).send(n.i(null,-32600,`Invalid JSON-RPC 2.0 request`));let u=n.C(s),d=l.method===`initialize`;try{let o=await n.l(l.method,l.params,{semanticLayer:v,extractSecurityContext:(e,t)=>_(e),rawRequest:r,rawResponse:a,negotiatedProtocol:c.negotiated,resources:e,prompts:t,instructions:i,appEnabled:!!h.app,appConfig:typeof h.app==`object`?h.app:void 0,serverName:h.serverName});if(n.m(l))return a.status(202).send();let s=d&&o&&typeof o==`object`&&`sessionId`in o?o.sessionId:void 0;s&&a.header(n.r,s);let f=n.a(l.id??null,o);if(u){let e=n._();a.header(`Content-Type`,`text/event-stream`).header(`Cache-Control`,`no-cache`).header(`Connection`,`keep-alive`).send(`id: ${e}\n\n${n.b(f,e)}`);return}return a.send(f)}catch(e){if(n.m(l))return r.log.error({err:String(e).replace(/\n|\r/g,``)},`MCP notification processing error`),a.status(202).send();r.log.error({err:String(e).replace(/\n|\r/g,``)},`MCP RPC error`);let t=e?.code??-32603,i=e?.data,o=e.message||`MCP request failed`,s=n.i(l.id??null,t,o,i);if(u){let e=n._();a.header(`Content-Type`,`text/event-stream`).header(`Cache-Control`,`no-cache`).header(`Connection`,`keep-alive`).send(`id: ${e}\n\n${n.b(s,e)}`);return}return a.send(s)}}),r.get(`${a}`,async(e,t)=>{if(h.resourceMetadataUrl&&!n.u(e.headers.authorization))return t.header(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),t.status(401).send({error:`Bearer token required`});let r=n._();t.raw.writeHead(200,{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`}),t.raw.write(n.b({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},r,15e3));let i=setInterval(()=>{t.raw.write(`: keep-alive
|
|
2
2
|
|
|
3
3
|
`)},15e3);e.raw.on(`close`,()=>{clearInterval(i)})}),r.delete(`${a}`,async(e,t)=>h.resourceMetadataUrl&&!n.u(e.headers.authorization)?(t.header(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),t.status(401).send({error:`Bearer token required`})):t.status(405).send({error:`Session termination not supported`}))}r.setErrorHandler(async(t,n,r)=>(n.log.error(t,`Fastify cube adapter error`),r.statusCode<400&&r.status(500),e.i(t instanceof Error?t:String(t),r.statusCode))),a()};async function i(e,t){await e.register(r,t)}function a(e){let t=require(`fastify`)({logger:!0});return t.register(r,e),t}exports.createCubeApp=a,exports.cubePlugin=r,exports.registerCubeRoutes=i;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as e, f as t, i as n, o as r, r as i, u as a, w as o } from "../utils-
|
|
2
|
-
import { i as s, n as c, r as l, t as u } from "../locale-
|
|
3
|
-
import { C as d, S as f, _ as p, a as m, b as h, c as g, g as _, h as v, i as y, l as b, m as x, o as S, r as C, u as w, v as T, x as E, y as D } from "../mcp-transport-
|
|
1
|
+
import { a as e, f as t, i as n, o as r, r as i, u as a, w as o } from "../utils-hC7Z8V39.js";
|
|
2
|
+
import { i as s, n as c, r as l, t as u } from "../locale-wMBdZ3Ks.js";
|
|
3
|
+
import { C as d, S as f, _ as p, a as m, b as h, c as g, g as _, h as v, i as y, l as b, m as x, o as S, r as C, u as w, v as T, x as E, y as D } from "../mcp-transport-B_HoB1HQ.js";
|
|
4
4
|
//#region src/adapters/fastify/index.ts
|
|
5
5
|
var O = function(o, O, k) {
|
|
6
6
|
let { cubes: A, drizzle: j, schema: M, extractSecurityContext: N, engineType: P, cors: F, basePath: I = "/cubejs-api/v1", bodyLimit: L = 10485760, cache: R, mcp: z = { enabled: !0 }, agent: B } = O;
|
|
@@ -165,7 +165,7 @@ var O = function(o, O, k) {
|
|
|
165
165
|
} }
|
|
166
166
|
}, async (e, t) => {
|
|
167
167
|
try {
|
|
168
|
-
let { handleAgentChat: n } = await import("../handler-
|
|
168
|
+
let { handleAgentChat: n } = await import("../handler-CoaNnZyf.js"), { message: r, sessionId: i, history: a } = e.body;
|
|
169
169
|
if (!r || typeof r != "string") return t.status(400).send({ error: "message is required and must be a string" });
|
|
170
170
|
let o = (B.apiKey || "").trim();
|
|
171
171
|
if (B.allowClientApiKey) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const e=require(`./utils-
|
|
1
|
+
const e=require(`./utils-CIRA5_JO.cjs`);function t(e){if(e.length===0)return`No cubes are currently available.`;let t=[`## Available Cubes`,``];for(let n of e){if(t.push(`### ${n.name}`),n.description&&t.push(n.description),n.measures&&n.measures.length>0){t.push(``),t.push(`**Measures:**`);for(let e of n.measures){let r=e.description?` - ${e.description}`:``;t.push(`- \`${n.name}.${e.name}\` (${e.type})${r}`)}}if(n.dimensions&&n.dimensions.length>0){t.push(``),t.push(`**Dimensions:**`);for(let e of n.dimensions){let r=e.description?` - ${e.description}`:``;t.push(`- \`${n.name}.${e.name}\` (${e.type})${r}`)}}if(n.relationships&&n.relationships.length>0){t.push(``),t.push(`**Joins:**`);for(let e of n.relationships)t.push(`- → \`${e.targetCube}\` (${e.relationship})`)}n.meta?.eventStream&&(t.push(``),t.push(`**Event Stream:** Yes (supports funnel, flow, retention queries)`),n.meta.eventStream.bindingKey&&t.push(`- Binding key: \`${n.name}.${n.meta.eventStream.bindingKey}\``),n.meta.eventStream.timeDimension&&t.push(`- Time dimension: \`${n.name}.${n.meta.eventStream.timeDimension}\``)),t.push(``)}return t.join(`
|
|
2
2
|
`)}function n(e){return e.messages.map(e=>e.content.text).join(`
|
|
3
3
|
|
|
4
4
|
`)}function r(r){return[`# Drizzle Cube Analytics Agent`,``,`You are an analytics agent that helps users explore and visualize data.`,`You have access to a semantic layer with cubes (data models) that you can query.`,``,`## Your Workflow`,``,`For EACH insight, follow this cycle — do NOT batch all queries first:`,``,"1. **Discover** available cubes using `discover_cubes` (once at the start)",`2. **For each analysis point**, repeat this cycle:`," a. `execute_query` — get the data"," b. `add_markdown` — explain the results and insight"," c. `add_portlet` — visualize the results",``,`Call all three (query → markdown → portlet) in a single turn before moving on to the next analysis.`,`Do NOT run multiple queries first and add charts later — the user sees results in real-time.`,``,`## Important Guidelines`,``,`- ALWAYS discover cubes first before attempting queries`,"- Field names MUST be EXACTLY `CubeName.fieldName` — two parts separated by a single dot. Examples: `PullRequests.count`, `Teams.name`, `Employees.department`."," WRONG patterns that WILL FAIL: `Teams.Teams.name` (double-prefixed), `PullRequests.PullRequests.count` (double-prefixed), `PullRequests` (bare cube), `Teams_count` (underscore). Use the EXACT field names from discover results — copy them verbatim, do not prefix them again.",`- Order keys MUST be one of the measures or dimensions already listed in that query. You CANNOT order by a field that is not in measures or dimensions — add it to measures first, or remove it from order.`,"- After EVERY `execute_query`, IMMEDIATELY call `add_markdown` and `add_portlet` in the SAME turn — never defer visualizations to a later turn",`- Choose appropriate chart types: bar for categories, line for trends, table for detailed data`,`- If a query fails, explain the error and try an alternative approach`,``,`## Output Format Rules`,``,`### CRITICAL: Always think before acting`,`- EVERY single turn MUST begin with a text message (1-2 sentences) BEFORE any tool calls. This is your #1 rule — never violate it.`,`- This applies to EVERY turn, including turns where you are adding visualizations or explanations to the notebook.`,`- Even when adding multiple charts in sequence, each turn must start with a brief status like "Now I'll chart the productivity breakdown." or "Next, let me show the department comparison."`,`- Example good turn: "Let me see what data is available." → discover_cubes`,`- Example good turn: "I'll add a chart showing the top employees." → add_markdown → add_portlet`,`- Example bad turn: (no text) → add_portlet ← NEVER do this`,``,`### Text vs Notebook`,"- ALL analysis, findings, methodology, and insights MUST go through `add_markdown` tool calls — never in your text responses",`- Your text responses must be 1-2 short sentences (under 50 words) summarizing what you are about to do next — status updates only`,`- Never use markdown formatting (headers, bullets, bold, code blocks) in text responses — plain sentences only`,`- Write text responses as a friendly analyst would — use plain business language the user understands`,`- NEVER mention internal terms like "cube", "query syntax", "field names", "measures", "dimensions", "portlet", "prefix format", or tool names in text responses`,`- Instead of "Let me correct the query syntax and retry" → "Let me fix that and try again"`,`- Instead of "I'll query the PullRequests cube" → "I'll look at the pull request data"`,`- Instead of "Adding a portlet with the results" → "Here's a chart of the results"`,``,`### Notebook content rules`,"- Before each `add_portlet`, ALWAYS call `add_markdown` first to explain WHY you are adding this visualization and what it shows","- Before calling `add_portlet`, verify the query is valid: all fields in `order` must also appear in `measures` or `dimensions`",'- Never put data tables in markdown blocks — use `add_portlet` with chartType "table" instead',"- Think out loud in the notebook: use `add_markdown` to share your reasoning at each step so users can follow along",`- NEVER use emojis in text responses or markdown content — no 📊, 📈, ✅, 🔍, etc. Write in plain, professional language.`,``,`## Chart Selection Guide`,``,`Choose the chart type that best communicates the answer to the user's question. Think about what the data represents and what insight the user needs — do NOT default to the first option in this table. Consider the number of data points, whether values are categorical or temporal, and whether the user is comparing, trending, or summarizing.`,``,`| Intent / Data Shape | Chart Type |`,`|---|---|`,"| Compare discrete categories or rankings | `bar` |","| Trend over time (one or few series) | `line` |","| Trend over time showing volume/magnitude | `area` |","| Part-of-whole breakdown | `pie` (≤7 slices) |","| Correlation between two measures | `scatter` |","| Correlation with size/color third dimension | `bubble` |","| Intensity across two categorical dimensions | `heatmap` |","| Multi-variable comparison across categories | `radar` |","| Distribution/spread of values | `boxPlot` |","| Detailed row-level data or many columns | `table` |","| Single headline number — ONLY when user explicitly asks for a KPI card or single number | `kpiNumber` |","| Headline metric with period-over-period change — ONLY when user asks about change in a single metric | `kpiDelta` |",``,`Analysis-mode-specific chart types (require the corresponding analysis mode):`,``,`| Analysis Mode | Chart Type | Description |`,`|---|---|---|`,"| Funnel | `funnel` | Sequential step conversion bars with conversion rates |","| Flow | `sankey` | Flow diagram showing paths between states/steps |","| Flow | `sunburst` | Radial rings showing forward paths from a starting event |","| Retention | `retentionHeatmap` | Cohort × period retention matrix |","| Retention | `retentionCombined` | Retention with line chart, heatmap, or combined modes |",``,'**Chart selection priorities:** Default to `bar` for categories, `line` for time series, `table` for exploratory data. Use `kpiNumber`/`kpiDelta` only as a last resort — they are appropriate only when the user explicitly asks for a single headline number or KPI card. If the query returns multiple rows or the user asks a general question like "show me revenue", prefer `bar` or `table` over `kpiNumber`.',``,`## Chart Axis Configuration Rules`,``,"**Bar charts MUST have an xAxis.** Put a dimension in `chartConfig.xAxis` so bars have category labels. If your query has no dimensions, add one or use `table` instead.",``,"**Never duplicate xAxis in series.** Putting the same dimension in both `xAxis` and `series` creates a sparse, broken-looking chart. The `series` field is ONLY for splitting bars into grouped/stacked sub-series by a SECOND dimension.",``,`Correct bar chart examples:`,'- Categories only: `xAxis: ["Cube.category"], yAxis: ["Cube.count"]` — no series needed','- Grouped bars: `xAxis: ["Cube.category"], yAxis: ["Cube.count"], series: ["Cube.status"]` — series is a DIFFERENT dimension','- Multiple measures: `xAxis: ["Cube.category"], yAxis: ["Cube.count", "Cube.total"]` — each measure becomes a bar group',``,`Wrong:`,'- `xAxis: [], yAxis: ["Cube.avg1", "Cube.avg2"]` — missing xAxis, bars have no labels','- `xAxis: ["Cube.size"], series: ["Cube.size"]` — same field in both, creates sparse chart',``,"**Dual Y-axis for multi-measure charts.** When a `bar`, `line`, or `area` chart has 2+ measures with different scales (e.g. revenue in thousands vs conversion rate as a percentage), use `chartConfig.yAxisAssignment` to put them on separate axes:","```json",`{`,` "xAxis": ["Sales.month"],`,` "yAxis": ["Sales.revenue", "Sales.conversionRate"],`,` "yAxisAssignment": { "Sales.revenue": "left", "Sales.conversionRate": "right" }`,`}`,"```",`Only use dual axis when measures have genuinely different scales. If both measures share the same unit/scale, keep them on the same (left) axis — omit yAxisAssignment entirely.`,``,`## Analysis Mode Decision Tree`,``,`The default mode is **query** (standard measures/dimensions). Switch to a special mode only when the user's question matches:`,``,`- **Funnel mode** — "What is the conversion rate from step A → B → C?"`," - Requires: an event-stream cube with `capabilities.funnel = true` from `discover_cubes`"," - Execute: `execute_query` with `funnel` param:",' `{ bindingKey: "Events.userId", timeDimension: "Events.timestamp", steps: [{ name: "Signup", filter: { member: "Events.eventName", operator: "equals", values: ["signup"] }}, { name: "Purchase", filter: { member: "Events.eventName", operator: "equals", values: ["purchase"] }}] }`',' - Visualize: `add_portlet` with `chartType: "funnel"` and `query` as JSON string containing `{ "funnel": { ... } }`',``,`- **Flow mode** — "What paths do users take after signup?"`," - Requires: `capabilities.flow = true` from `discover_cubes`"," - Execute: `execute_query` with `flow` param:",' `{ bindingKey: "Events.userId", timeDimension: "Events.timestamp", eventDimension: "Events.eventName", startingStep: { name: "Signup", filter: { member: "Events.eventName", operator: "equals", values: ["signup"] }}, stepsBefore: 0, stepsAfter: 3 }`',' - Visualize: `add_portlet` with `chartType: "sankey"` (or `"sunburst"`) and `query` as JSON string containing `{ "flow": { ... } }`',``,`- **Retention mode** — "What % of users come back after 7 days?"`," - Requires: `capabilities.retention = true` from `discover_cubes`"," - Execute: `execute_query` with `retention` param:",' `{ timeDimension: "Events.timestamp", bindingKey: "Events.userId", dateRange: { start: "2024-01-01", end: "2024-03-31" }, granularity: "week", periods: 8, retentionType: "classic" }`',' - Visualize: `add_portlet` with `chartType: "retentionCombined"` (or `"retentionHeatmap"`) and `query` as JSON string containing `{ "retention": { ... } }`',``,"Before using funnel/flow/retention, check the `capabilities` object returned by `discover_cubes`. If the required capability is `false`, explain to the user that the data model does not support that analysis mode.",``,`Event-stream cubes are marked in the Available Cubes section below with **Event Stream: Yes** and list their binding key and time dimension.`,``,`---`,``,n(e.v),``,`---`,``,n(e.y),``,`---`,``,n(e._),``,`---`,``,`## Save as Dashboard`,``,"ONLY call `save_as_dashboard` when the user EXPLICITLY asks to save, export, or convert the notebook into a dashboard. NEVER save a dashboard on your own initiative — wait for the user to request it.",``,`### Layout Rules`,`- Dashboard grid is 12 columns wide`,`- KPI cards: w=3, h=3 — place at the top in a row of 4`,`- Overview charts (bar, line, area): w=6, h=4`,`- Wide charts (heatmap, table): w=12, h=5`,`- Section headers (markdown): w=12, h=1`,``,`### Section Headers`,'Use `chartType: "markdown"` portlets as section headers to organize the dashboard:',"```json",`{`,` "id": "header-overview",`,` "title": "Overview",`,` "chartType": "markdown",`,` "displayConfig": {`,` "content": "## Overview",`,` "hideHeader": true,`,` "transparentBackground": true,`,` "autoHeight": true`,` },`,` "w": 12, "h": 1, "x": 0, "y": 0`,`}`,"```",``,`### Dashboard Filters`,"- ALWAYS include a universal date filter with `isUniversalTime: true`",`- Add dimension filters for key fields used across portlets (e.g., department, status, region)`,`- Use human-readable labels (e.g., "Department" not "Employees.departmentName")`,"- Map filters to portlets using `dashboardFilterMapping` — list the filter IDs that apply",`- When promoting a hardcoded filter to a dashboard filter, REMOVE that filter from the portlet query`,``,`### Analysis Types`,'- Standard query portlets: `analysisType: "query"` (default)','- Funnel portlets: `analysisType: "funnel"`, query contains `{ "funnel": {...} }`, chartType `"funnel"`','- Flow portlets: `analysisType: "flow"`, query contains `{ "flow": {...} }`, chartType `"sankey"` or `"sunburst"`','- Retention portlets: `analysisType: "retention"`, query contains `{ "retention": {...} }`, chartType `"retentionHeatmap"` or `"retentionCombined"`',``,`### CRITICAL: Only use portlets from the notebook`,"- ONLY include portlets that you already added to the notebook via `add_portlet` during this conversation",`- Do NOT invent new queries or charts that were not part of the analysis — the dashboard is a direct conversion of the notebook`,`- Reuse the exact same queries, chart types, and chart configs from the notebook portlets`,`- Arrange the existing portlets in a sensible layout (KPIs at top, charts in middle, tables at bottom)`,`- You may add section header markdown portlets to organize the layout, but do not add new data portlets`,``,`---`,``,t(r)].join(`
|
|
5
|
-
`)}var i={bar:{label:`chart.bar.label`,description:`chart.bar.description`,useCase:`chart.bar.useCase`,clickableElements:{bar:!0},dropZones:[{key:`xAxis`,label:`chart.dropZone.xAxis.label`,description:`chart.dropZone.xAxis.description`,mandatory:!1,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.bar.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.dropZone.yAxis.label`,description:`chart.configText.measures_for_bar_heights`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.bar.dropZone.yAxis.empty`,enableDualAxis:!0},{key:`series`,label:`chart.dropZone.series.label`,description:`chart.dropZone.series.description`,mandatory:!1,acceptTypes:[`dimension`],emptyText:`chart.bar.dropZone.series.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`stackType`,label:`chart.option.stacking.label`,type:`select`,defaultValue:`none`,options:[{value:`none`,label:`chart.option.accentBorder.none`},{value:`normal`,label:`chart.option.stacking.stacked`},{value:`percent`,label:`chart.option.stacking.percent`}],description:`chart.configText.how_to_stack_multiple_bar_series`},{key:`target`,label:`chart.option.target.label`,type:`string`,placeholder:`e.g., 100 or 50,75 for spread`,description:`chart.option.target.description`},{key:`leftYAxisFormat`,label:`chart.option.leftYAxisFormat.label`,type:`axisFormat`,description:`chart.option.leftYAxisFormat.description`},{key:`rightYAxisFormat`,label:`chart.option.rightYAxisFormat.label`,type:`axisFormat`,description:`chart.option.rightYAxisFormat.description`}]},line:{label:`chart.line.label`,description:`chart.line.description`,useCase:`chart.line.useCase`,clickableElements:{point:!0},dropZones:[{key:`xAxis`,label:`chart.configText.x_axis_time_categories`,description:`chart.configText.time_dimensions_or_dimensions_for_x_axis`,mandatory:!0,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.line.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.dropZone.yAxis.label`,description:`chart.configText.measures_for_line_values`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.line.dropZone.yAxis.empty`,enableDualAxis:!0},{key:`series`,label:`chart.configText.series_multiple_lines`,description:`chart.configText.dimensions_to_create_separate_lines`,mandatory:!1,acceptTypes:[`dimension`],emptyText:`chart.line.dropZone.series.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`connectNulls`,label:`chart.option.connectNulls.label`,type:`boolean`,defaultValue:!1,description:`chart.option.connectNulls.description`},{key:`target`,label:`chart.option.target.label`,type:`string`,placeholder:`e.g., 100 or 50,75 for spread`,description:`chart.option.target.description`},{key:`priorPeriodStyle`,label:`chart.option.priorPeriodStyle.label`,type:`select`,defaultValue:`dashed`,options:[{value:`dashed`,label:`chart.option.priorPeriodStyle.dashed`},{value:`dotted`,label:`chart.option.priorPeriodStyle.dotted`},{value:`solid`,label:`chart.option.priorPeriodStyle.solid`}],description:`chart.option.priorPeriodStyle.description`},{key:`priorPeriodOpacity`,label:`chart.option.priorPeriodOpacity.label`,type:`number`,defaultValue:.5,min:.1,max:1,step:.1,description:`chart.option.priorPeriodOpacity.description`},{key:`leftYAxisFormat`,label:`chart.option.leftYAxisFormat.label`,type:`axisFormat`,description:`chart.option.leftYAxisFormat.description`},{key:`rightYAxisFormat`,label:`chart.option.rightYAxisFormat.label`,type:`axisFormat`,description:`chart.option.rightYAxisFormat.description`}]},area:{label:`chart.area.label`,description:`chart.area.description`,useCase:`chart.area.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.x_axis_time_categories`,description:`chart.configText.time_dimensions_or_dimensions_for_x_axis`,mandatory:!0,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.area.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.dropZone.yAxis.label`,description:`chart.configText.measures_for_area_values`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.area.dropZone.yAxis.empty`,enableDualAxis:!0},{key:`series`,label:`chart.configText.series_stack_areas`,description:`chart.configText.dimensions_to_create_stacked_areas`,mandatory:!1,acceptTypes:[`dimension`],emptyText:`chart.area.dropZone.series.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`stackType`,label:`chart.option.stacking.label`,type:`select`,defaultValue:`none`,options:[{value:`none`,label:`chart.option.accentBorder.none`},{value:`normal`,label:`chart.option.stacking.stacked`},{value:`percent`,label:`chart.option.stacking.percent`}],description:`chart.configText.how_to_stack_multiple_area_series`},{key:`connectNulls`,label:`chart.option.connectNulls.label`,type:`boolean`,defaultValue:!1,description:`chart.option.connectNulls.description`},{key:`target`,label:`chart.option.target.label`,type:`string`,placeholder:`e.g., 100 or 50,75 for spread`,description:`chart.option.target.description`},{key:`leftYAxisFormat`,label:`chart.option.leftYAxisFormat.label`,type:`axisFormat`,description:`chart.option.leftYAxisFormat.description`},{key:`rightYAxisFormat`,label:`chart.option.rightYAxisFormat.label`,type:`axisFormat`,description:`chart.option.rightYAxisFormat.description`}]},pie:{label:`chart.pie.label`,description:`chart.pie.description`,useCase:`chart.pie.useCase`,clickableElements:{slice:!0},dropZones:[{key:`xAxis`,label:`chart.configText.categories`,description:`chart.configText.dimension_for_pie_slices`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.pie.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.values`,description:`chart.configText.measure_for_slice_sizes`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.pie.dropZone.yAxis.empty`}],displayOptions:[`showLegend`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`innerRadius`,label:`chart.option.innerRadius.label`,type:`select`,description:`chart.configText.hollow_center_size_0_percent_solid_pie_higher_donut_style`,defaultValue:`0%`,options:[{value:`0%`,label:`chart.configText.none_pie`},{value:`20%`,label:`chart.configText.20_percent`},{value:`40%`,label:`chart.configText.40_percent`},{value:`60%`,label:`chart.configText.60_percent`},{value:`80%`,label:`chart.configText.80_percent`}]},{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.option.valueFormat.description`}]},scatter:{label:`chart.scatter.label`,description:`chart.scatter.description`,useCase:`chart.scatter.useCase`,dropZones:[{key:`xAxis`,label:`chart.runtime.axisFormat.xAxis`,description:`chart.configText.measure_or_dimension_for_x_position`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`,`timeDimension`,`measure`],emptyText:`chart.scatter.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.y_axis`,description:`chart.configText.measure_for_y_position`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.scatter.dropZone.yAxis.empty`},{key:`series`,label:`chart.configText.series_color_groups`,description:`chart.configText.dimension_to_color_points_by_category`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.scatter.dropZone.series.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`xAxisFormat`,label:`chart.option.xAxisFormat.label`,type:`axisFormat`,description:`chart.option.xAxisFormat.description`},{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.option.yAxisFormat.description`}]},bubble:{label:`chart.bubble.label`,description:`chart.bubble.description`,useCase:`chart.bubble.useCase`,dropZones:[{key:`xAxis`,label:`chart.runtime.axisFormat.xAxis`,description:`chart.configText.horizontal_axis_position`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`,`timeDimension`,`measure`],emptyText:`chart.bubble.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.y_axis`,description:`chart.configText.vertical_axis_position`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.bubble.dropZone.yAxis.empty`},{key:`sizeField`,label:`chart.configText.bubble_radius`,description:`chart.configText.size_of_bubbles_based_on_this_measure`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.bubble.dropZone.sizeField.empty`},{key:`series`,label:`chart.configText.bubble_labels`,description:`chart.configText.field_to_use_for_bubble_labels_and_identification`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.bubble.dropZone.series.empty`},{key:`colorField`,label:`chart.configText.bubble_colour`,description:`chart.configText.color_bubbles_by_this_field_optional`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`,`measure`],emptyText:`chart.bubble.dropZone.colorField.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`minBubbleSize`,`maxBubbleSize`,`bubbleOpacity`,`hideHeader`],displayOptionsConfig:[{key:`xAxisFormat`,label:`chart.option.xAxisFormat.label`,type:`axisFormat`,description:`chart.option.xAxisFormat.description`},{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_y_axis_and_values`}]},radar:{label:`chart.radar.label`,description:`chart.radar.description`,useCase:`chart.radar.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.axes_categories`,description:`chart.configText.dimensions_for_radar_axes`,mandatory:!0,acceptTypes:[`dimension`],emptyText:`chart.radar.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.values`,description:`chart.configText.measures_for_radar_values`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.radar.dropZone.yAxis.empty`},{key:`series`,label:`chart.configText.series_multiple_shapes`,description:`chart.configText.dimensions_to_create_multiple_radar_shapes`,mandatory:!1,acceptTypes:[`dimension`],emptyText:`chart.radar.dropZone.series.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.option.valueFormat.description`}]},radialBar:{label:`chart.radialBar.label`,description:`chart.radialBar.description`,useCase:`chart.radialBar.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.categories`,description:`chart.configText.dimensions_for_radial_segments`,mandatory:!0,acceptTypes:[`dimension`],emptyText:`chart.radialBar.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.values`,description:`chart.configText.measures_for_radial_bar_lengths`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.radialBar.dropZone.yAxis.empty`}],displayOptions:[`showLegend`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.option.valueFormat.description`}]},treemap:{label:`chart.treemap.label`,description:`chart.treemap.description`,useCase:`chart.treemap.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.categories`,description:`chart.configText.dimensions_for_treemap_rectangles`,mandatory:!0,acceptTypes:[`dimension`],emptyText:`chart.treemap.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.size`,description:`chart.configText.measure_for_rectangle_sizes`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.treemap.dropZone.yAxis.empty`},{key:`series`,label:`chart.configText.color_groups`,description:`chart.configText.dimension_to_color_rectangles_by_category`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.treemap.dropZone.series.empty`}],displayOptions:[`showLegend`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_size_values`}],clickableElements:{cell:!0}},table:{label:`chart.table.label`,description:`chart.table.description`,useCase:`chart.table.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.columns`,description:`chart.configText.all_fields_to_display_as_columns`,mandatory:!1,acceptTypes:[`dimension`,`timeDimension`,`measure`],emptyText:`chart.table.dropZone.xAxis.empty`}],displayOptions:[`hideHeader`],displayOptionsConfig:[{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_numeric_values`}]},activityGrid:{label:`chart.activityGrid.label`,description:`chart.activityGrid.description`,useCase:`chart.activityGrid.useCase`,dropZones:[{key:`dateField`,label:`chart.configText.time_dimension`,description:`chart.configText.time_field_that_determines_grid_structure_granularity_affects_layout`,mandatory:!0,maxItems:1,acceptTypes:[`timeDimension`],emptyText:`chart.activityGrid.dropZone.dateField.empty`},{key:`valueField`,label:`chart.configText.activity_measure`,description:`chart.configText.measure_used_for_activity_intensity_color_coding`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.activityGrid.dropZone.valueField.empty`}],displayOptions:[`showLabels`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`fitToWidth`,label:`chart.option.fitToWidth.label`,type:`boolean`,defaultValue:!1,description:`chart.option.fitToWidth.description`}],validate:e=>{let{dateField:t,valueField:n}=e;return!t||Array.isArray(t)&&t.length===0?{isValid:!1,message:`chart.activityGrid.validation.timeDimensionRequired`}:!n||Array.isArray(n)&&n.length===0?{isValid:!1,message:`chart.activityGrid.validation.measureRequired`}:{isValid:!0}},clickableElements:{cell:!0}},kpiNumber:{label:`chart.kpiNumber.label`,description:`chart.kpiNumber.description`,useCase:`chart.kpiNumber.useCase`,dropZones:[{key:`yAxis`,label:`chart.configText.value`,description:`chart.configText.measure_to_display_as_kpi_number`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.kpiNumber.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`target`,label:`chart.runtime.tooltip.targetValue`,type:`string`,placeholder:`e.g., 100`,description:`chart.configText.target_value_to_compare_against_first_value_used_if_multiple_provided`},{key:`prefix`,label:`chart.option.prefix.label`,type:`string`,placeholder:`e.g., $, €, #`,description:`chart.option.prefix.description`},{key:`suffix`,label:`chart.option.suffix.label`,type:`string`,placeholder:`e.g., %, units, items`,description:`chart.option.suffix.description`},{key:`decimals`,label:`chart.option.decimals.label`,type:`number`,defaultValue:0,min:0,max:10,step:1,description:`chart.option.decimals.description`},{key:`valueColorIndex`,label:`chart.configText.value_color`,type:`paletteColor`,defaultValue:0,description:`chart.configText.color_from_the_dashboard_palette_for_the_kpi_value_text`},{key:`useLastCompletePeriod`,label:`chart.option.useLastCompletePeriod.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.exclude_current_incomplete_period_from_aggregation_e_g_partial_week_mont`},{key:`skipLastPeriod`,label:`chart.option.skipLastPeriod.label`,type:`boolean`,defaultValue:!1,description:`chart.option.skipLastPeriod.description`}],displayOptions:[`hideHeader`]},kpiDelta:{label:`chart.kpiDelta.label`,description:`chart.kpiDelta.description`,useCase:`chart.kpiDelta.useCase`,dropZones:[{key:`yAxis`,label:`chart.configText.value`,description:`chart.configText.measure_to_track_changes_for`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.kpiDelta.dropZone.yAxis.empty`},{key:`xAxis`,label:`chart.configText.dimension_optional`,description:`chart.configText.dimension_for_ordering_data_typically_time`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.kpiDelta.dropZone.xAxis.empty`}],displayOptionsConfig:[{key:`prefix`,label:`chart.option.prefix.label`,type:`string`,placeholder:`e.g., $, €, #`,description:`chart.option.prefix.description`},{key:`suffix`,label:`chart.option.suffix.label`,type:`string`,placeholder:`e.g., %, units, items`,description:`chart.option.suffix.description`},{key:`decimals`,label:`chart.option.decimals.label`,type:`number`,defaultValue:1,min:0,max:10,step:1,description:`chart.option.decimals.description`},{key:`positiveColorIndex`,label:`chart.configText.positive_change_color`,type:`paletteColor`,defaultValue:2,description:`chart.configText.color_for_positive_changes_increases`},{key:`negativeColorIndex`,label:`chart.configText.negative_change_color`,type:`paletteColor`,defaultValue:3,description:`chart.configText.color_for_negative_changes_decreases`},{key:`showHistogram`,label:`chart.option.showHistogram.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showHistogram.description`},{key:`useLastCompletePeriod`,label:`chart.option.useLastCompletePeriod.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.exclude_current_incomplete_period_from_delta_calculation_e_g_partial_wee`},{key:`skipLastPeriod`,label:`chart.option.skipLastPeriod.label`,type:`boolean`,defaultValue:!1,description:`chart.option.skipLastPeriod.description`}],displayOptions:[`hideHeader`],validate:e=>!e.yAxis||Array.isArray(e.yAxis)&&e.yAxis.length===0?{isValid:!1,message:`chart.kpiDelta.validation.measureRequired`}:{isValid:!0}},kpiText:{label:`chart.kpiText.label`,description:`chart.kpiText.description`,useCase:`chart.kpiText.useCase`,dropZones:[{key:`yAxis`,label:`chart.configText.value`,description:`chart.configText.measure_to_display_in_the_kpi_text_template`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.kpiText.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`template`,label:`chart.configText.text_template`,type:`string`,placeholder:"e.g., Total Revenue: ${value}",description:`chart.configText.template_for_displaying_the_text_use_value_to_insert_the_measure_value`},{key:`decimals`,label:`chart.option.decimals.label`,type:`number`,defaultValue:0,min:0,max:10,step:1,description:`chart.configText.number_of_decimal_places_to_display_for_numeric_values`},{key:`valueColorIndex`,label:`chart.configText.value_color`,type:`paletteColor`,defaultValue:0,description:`chart.configText.color_from_the_dashboard_palette_for_the_kpi_value_text`}],displayOptions:[`hideHeader`]},markdown:{label:`chart.markdown.label`,description:`chart.markdown.description`,useCase:`chart.markdown.useCase`,skipQuery:!0,dropZones:[],displayOptionsConfig:[{key:`content`,label:`chart.configText.markdown_content`,type:`string`,placeholder:`# Welcome
|
|
5
|
+
`)}var i={bar:{label:`chart.bar.label`,description:`chart.bar.description`,useCase:`chart.bar.useCase`,clickableElements:{bar:!0},isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.dropZone.xAxis.label`,description:`chart.dropZone.xAxis.description`,mandatory:!1,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.bar.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.dropZone.yAxis.label`,description:`chart.configText.measures_for_bar_heights`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.bar.dropZone.yAxis.empty`,enableDualAxis:!0},{key:`series`,label:`chart.dropZone.series.label`,description:`chart.dropZone.series.description`,mandatory:!1,acceptTypes:[`dimension`],emptyText:`chart.bar.dropZone.series.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`stackType`,label:`chart.option.stacking.label`,type:`select`,defaultValue:`none`,options:[{value:`none`,label:`chart.option.accentBorder.none`},{value:`normal`,label:`chart.option.stacking.stacked`},{value:`percent`,label:`chart.option.stacking.percent`}],description:`chart.configText.how_to_stack_multiple_bar_series`},{key:`target`,label:`chart.option.target.label`,type:`string`,placeholder:`e.g., 100 or 50,75 for spread`,description:`chart.option.target.description`},{key:`leftYAxisFormat`,label:`chart.option.leftYAxisFormat.label`,type:`axisFormat`,description:`chart.option.leftYAxisFormat.description`},{key:`rightYAxisFormat`,label:`chart.option.rightYAxisFormat.label`,type:`axisFormat`,description:`chart.option.rightYAxisFormat.description`}]},line:{label:`chart.line.label`,description:`chart.line.description`,useCase:`chart.line.useCase`,clickableElements:{point:!0},isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.configText.x_axis_time_categories`,description:`chart.configText.time_dimensions_or_dimensions_for_x_axis`,mandatory:!0,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.line.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.dropZone.yAxis.label`,description:`chart.configText.measures_for_line_values`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.line.dropZone.yAxis.empty`,enableDualAxis:!0},{key:`series`,label:`chart.configText.series_multiple_lines`,description:`chart.configText.dimensions_to_create_separate_lines`,mandatory:!1,acceptTypes:[`dimension`],emptyText:`chart.line.dropZone.series.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`connectNulls`,label:`chart.option.connectNulls.label`,type:`boolean`,defaultValue:!1,description:`chart.option.connectNulls.description`},{key:`target`,label:`chart.option.target.label`,type:`string`,placeholder:`e.g., 100 or 50,75 for spread`,description:`chart.option.target.description`},{key:`priorPeriodStyle`,label:`chart.option.priorPeriodStyle.label`,type:`select`,defaultValue:`dashed`,options:[{value:`dashed`,label:`chart.option.priorPeriodStyle.dashed`},{value:`dotted`,label:`chart.option.priorPeriodStyle.dotted`},{value:`solid`,label:`chart.option.priorPeriodStyle.solid`}],description:`chart.option.priorPeriodStyle.description`},{key:`priorPeriodOpacity`,label:`chart.option.priorPeriodOpacity.label`,type:`number`,defaultValue:.5,min:.1,max:1,step:.1,description:`chart.option.priorPeriodOpacity.description`},{key:`leftYAxisFormat`,label:`chart.option.leftYAxisFormat.label`,type:`axisFormat`,description:`chart.option.leftYAxisFormat.description`},{key:`rightYAxisFormat`,label:`chart.option.rightYAxisFormat.label`,type:`axisFormat`,description:`chart.option.rightYAxisFormat.description`}]},area:{label:`chart.area.label`,description:`chart.area.description`,useCase:`chart.area.useCase`,isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.configText.x_axis_time_categories`,description:`chart.configText.time_dimensions_or_dimensions_for_x_axis`,mandatory:!0,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.area.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.dropZone.yAxis.label`,description:`chart.configText.measures_for_area_values`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.area.dropZone.yAxis.empty`,enableDualAxis:!0},{key:`series`,label:`chart.configText.series_stack_areas`,description:`chart.configText.dimensions_to_create_stacked_areas`,mandatory:!1,acceptTypes:[`dimension`],emptyText:`chart.area.dropZone.series.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`stackType`,label:`chart.option.stacking.label`,type:`select`,defaultValue:`none`,options:[{value:`none`,label:`chart.option.accentBorder.none`},{value:`normal`,label:`chart.option.stacking.stacked`},{value:`percent`,label:`chart.option.stacking.percent`}],description:`chart.configText.how_to_stack_multiple_area_series`},{key:`connectNulls`,label:`chart.option.connectNulls.label`,type:`boolean`,defaultValue:!1,description:`chart.option.connectNulls.description`},{key:`target`,label:`chart.option.target.label`,type:`string`,placeholder:`e.g., 100 or 50,75 for spread`,description:`chart.option.target.description`},{key:`leftYAxisFormat`,label:`chart.option.leftYAxisFormat.label`,type:`axisFormat`,description:`chart.option.leftYAxisFormat.description`},{key:`rightYAxisFormat`,label:`chart.option.rightYAxisFormat.label`,type:`axisFormat`,description:`chart.option.rightYAxisFormat.description`}]},pie:{label:`chart.pie.label`,description:`chart.pie.description`,useCase:`chart.pie.useCase`,clickableElements:{slice:!0},isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.configText.categories`,description:`chart.configText.dimension_for_pie_slices`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.pie.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.values`,description:`chart.configText.measure_for_slice_sizes`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.pie.dropZone.yAxis.empty`}],displayOptions:[`showLegend`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`innerRadius`,label:`chart.option.innerRadius.label`,type:`select`,description:`chart.configText.hollow_center_size_0_percent_solid_pie_higher_donut_style`,defaultValue:`0%`,options:[{value:`0%`,label:`chart.configText.none_pie`},{value:`20%`,label:`chart.configText.20_percent`},{value:`40%`,label:`chart.configText.40_percent`},{value:`60%`,label:`chart.configText.60_percent`},{value:`80%`,label:`chart.configText.80_percent`}]},{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.option.valueFormat.description`}]},scatter:{label:`chart.scatter.label`,description:`chart.scatter.description`,useCase:`chart.scatter.useCase`,isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:e<2&&t<1?{available:!1,reason:`chart.availability.scatter`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.runtime.axisFormat.xAxis`,description:`chart.configText.measure_or_dimension_for_x_position`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`,`timeDimension`,`measure`],emptyText:`chart.scatter.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.y_axis`,description:`chart.configText.measure_for_y_position`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.scatter.dropZone.yAxis.empty`},{key:`series`,label:`chart.configText.series_color_groups`,description:`chart.configText.dimension_to_color_points_by_category`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.scatter.dropZone.series.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`xAxisFormat`,label:`chart.option.xAxisFormat.label`,type:`axisFormat`,description:`chart.option.xAxisFormat.description`},{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.option.yAxisFormat.description`}]},bubble:{label:`chart.bubble.label`,description:`chart.bubble.description`,useCase:`chart.bubble.useCase`,isAvailable:({measureCount:e,dimensionCount:t})=>e<2?{available:!1,reason:`chart.availability.requiresTwoMeasures`}:t<1?{available:!1,reason:`chart.availability.bubble`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.runtime.axisFormat.xAxis`,description:`chart.configText.horizontal_axis_position`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`,`timeDimension`,`measure`],emptyText:`chart.bubble.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.y_axis`,description:`chart.configText.vertical_axis_position`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.bubble.dropZone.yAxis.empty`},{key:`sizeField`,label:`chart.configText.bubble_radius`,description:`chart.configText.size_of_bubbles_based_on_this_measure`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.bubble.dropZone.sizeField.empty`},{key:`series`,label:`chart.configText.bubble_labels`,description:`chart.configText.field_to_use_for_bubble_labels_and_identification`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.bubble.dropZone.series.empty`},{key:`colorField`,label:`chart.configText.bubble_colour`,description:`chart.configText.color_bubbles_by_this_field_optional`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`,`measure`],emptyText:`chart.bubble.dropZone.colorField.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`minBubbleSize`,`maxBubbleSize`,`bubbleOpacity`,`hideHeader`],displayOptionsConfig:[{key:`xAxisFormat`,label:`chart.option.xAxisFormat.label`,type:`axisFormat`,description:`chart.option.xAxisFormat.description`},{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_y_axis_and_values`}]},radar:{label:`chart.radar.label`,description:`chart.radar.description`,useCase:`chart.radar.useCase`,isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.configText.axes_categories`,description:`chart.configText.dimensions_for_radar_axes`,mandatory:!0,acceptTypes:[`dimension`],emptyText:`chart.radar.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.values`,description:`chart.configText.measures_for_radar_values`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.radar.dropZone.yAxis.empty`},{key:`series`,label:`chart.configText.series_multiple_shapes`,description:`chart.configText.dimensions_to_create_multiple_radar_shapes`,mandatory:!1,acceptTypes:[`dimension`],emptyText:`chart.radar.dropZone.series.empty`}],displayOptions:[`showLegend`,`showGrid`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.option.valueFormat.description`}]},radialBar:{label:`chart.radialBar.label`,description:`chart.radialBar.description`,useCase:`chart.radialBar.useCase`,isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.configText.categories`,description:`chart.configText.dimensions_for_radial_segments`,mandatory:!0,acceptTypes:[`dimension`],emptyText:`chart.radialBar.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.values`,description:`chart.configText.measures_for_radial_bar_lengths`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.radialBar.dropZone.yAxis.empty`}],displayOptions:[`showLegend`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.option.valueFormat.description`}]},treemap:{label:`chart.treemap.label`,description:`chart.treemap.description`,useCase:`chart.treemap.useCase`,isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.configText.categories`,description:`chart.configText.dimensions_for_treemap_rectangles`,mandatory:!0,acceptTypes:[`dimension`],emptyText:`chart.treemap.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.size`,description:`chart.configText.measure_for_rectangle_sizes`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.treemap.dropZone.yAxis.empty`},{key:`series`,label:`chart.configText.color_groups`,description:`chart.configText.dimension_to_color_rectangles_by_category`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.treemap.dropZone.series.empty`}],displayOptions:[`showLegend`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_size_values`}],clickableElements:{cell:!0}},table:{label:`chart.table.label`,description:`chart.table.description`,useCase:`chart.table.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.columns`,description:`chart.configText.all_fields_to_display_as_columns`,mandatory:!1,acceptTypes:[`dimension`,`timeDimension`,`measure`],emptyText:`chart.table.dropZone.xAxis.empty`}],displayOptions:[`hideHeader`],displayOptionsConfig:[{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_numeric_values`}]},activityGrid:{label:`chart.activityGrid.label`,description:`chart.activityGrid.description`,useCase:`chart.activityGrid.useCase`,isAvailable:({measureCount:e,timeDimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresTimeDimension`}:{available:!0},dropZones:[{key:`dateField`,label:`chart.configText.time_dimension`,description:`chart.configText.time_field_that_determines_grid_structure_granularity_affects_layout`,mandatory:!0,maxItems:1,acceptTypes:[`timeDimension`],emptyText:`chart.activityGrid.dropZone.dateField.empty`},{key:`valueField`,label:`chart.configText.activity_measure`,description:`chart.configText.measure_used_for_activity_intensity_color_coding`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.activityGrid.dropZone.valueField.empty`}],displayOptions:[`showLabels`,`showTooltip`,`hideHeader`],displayOptionsConfig:[{key:`fitToWidth`,label:`chart.option.fitToWidth.label`,type:`boolean`,defaultValue:!1,description:`chart.option.fitToWidth.description`}],validate:e=>{let{dateField:t,valueField:n}=e;return!t||Array.isArray(t)&&t.length===0?{isValid:!1,message:`chart.activityGrid.validation.timeDimensionRequired`}:!n||Array.isArray(n)&&n.length===0?{isValid:!1,message:`chart.activityGrid.validation.measureRequired`}:{isValid:!0}},clickableElements:{cell:!0}},kpiNumber:{label:`chart.kpiNumber.label`,description:`chart.kpiNumber.description`,useCase:`chart.kpiNumber.useCase`,isAvailable:({measureCount:e})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:{available:!0},dropZones:[{key:`yAxis`,label:`chart.configText.value`,description:`chart.configText.measure_to_display_as_kpi_number`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.kpiNumber.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`target`,label:`chart.runtime.tooltip.targetValue`,type:`string`,placeholder:`e.g., 100`,description:`chart.configText.target_value_to_compare_against_first_value_used_if_multiple_provided`},{key:`prefix`,label:`chart.option.prefix.label`,type:`string`,placeholder:`e.g., $, €, #`,description:`chart.option.prefix.description`},{key:`suffix`,label:`chart.option.suffix.label`,type:`string`,placeholder:`e.g., %, units, items`,description:`chart.option.suffix.description`},{key:`decimals`,label:`chart.option.decimals.label`,type:`number`,defaultValue:0,min:0,max:10,step:1,description:`chart.option.decimals.description`},{key:`valueColorIndex`,label:`chart.configText.value_color`,type:`paletteColor`,defaultValue:0,description:`chart.configText.color_from_the_dashboard_palette_for_the_kpi_value_text`},{key:`useLastCompletePeriod`,label:`chart.option.useLastCompletePeriod.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.exclude_current_incomplete_period_from_aggregation_e_g_partial_week_mont`},{key:`skipLastPeriod`,label:`chart.option.skipLastPeriod.label`,type:`boolean`,defaultValue:!1,description:`chart.option.skipLastPeriod.description`}],displayOptions:[`hideHeader`]},kpiDelta:{label:`chart.kpiDelta.label`,description:`chart.kpiDelta.description`,useCase:`chart.kpiDelta.useCase`,isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},dropZones:[{key:`yAxis`,label:`chart.configText.value`,description:`chart.configText.measure_to_track_changes_for`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.kpiDelta.dropZone.yAxis.empty`},{key:`xAxis`,label:`chart.configText.dimension_optional`,description:`chart.configText.dimension_for_ordering_data_typically_time`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.kpiDelta.dropZone.xAxis.empty`}],displayOptionsConfig:[{key:`prefix`,label:`chart.option.prefix.label`,type:`string`,placeholder:`e.g., $, €, #`,description:`chart.option.prefix.description`},{key:`suffix`,label:`chart.option.suffix.label`,type:`string`,placeholder:`e.g., %, units, items`,description:`chart.option.suffix.description`},{key:`decimals`,label:`chart.option.decimals.label`,type:`number`,defaultValue:1,min:0,max:10,step:1,description:`chart.option.decimals.description`},{key:`positiveColorIndex`,label:`chart.configText.positive_change_color`,type:`paletteColor`,defaultValue:2,description:`chart.configText.color_for_positive_changes_increases`},{key:`negativeColorIndex`,label:`chart.configText.negative_change_color`,type:`paletteColor`,defaultValue:3,description:`chart.configText.color_for_negative_changes_decreases`},{key:`showHistogram`,label:`chart.option.showHistogram.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showHistogram.description`},{key:`useLastCompletePeriod`,label:`chart.option.useLastCompletePeriod.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.exclude_current_incomplete_period_from_delta_calculation_e_g_partial_wee`},{key:`skipLastPeriod`,label:`chart.option.skipLastPeriod.label`,type:`boolean`,defaultValue:!1,description:`chart.option.skipLastPeriod.description`}],displayOptions:[`hideHeader`],validate:e=>!e.yAxis||Array.isArray(e.yAxis)&&e.yAxis.length===0?{isValid:!1,message:`chart.kpiDelta.validation.measureRequired`}:{isValid:!0}},kpiText:{label:`chart.kpiText.label`,description:`chart.kpiText.description`,useCase:`chart.kpiText.useCase`,isAvailable:({measureCount:e})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:{available:!0},dropZones:[{key:`yAxis`,label:`chart.configText.value`,description:`chart.configText.measure_to_display_in_the_kpi_text_template`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.kpiText.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`template`,label:`chart.configText.text_template`,type:`string`,placeholder:"e.g., Total Revenue: ${value}",description:`chart.configText.template_for_displaying_the_text_use_value_to_insert_the_measure_value`},{key:`decimals`,label:`chart.option.decimals.label`,type:`number`,defaultValue:0,min:0,max:10,step:1,description:`chart.configText.number_of_decimal_places_to_display_for_numeric_values`},{key:`valueColorIndex`,label:`chart.configText.value_color`,type:`paletteColor`,defaultValue:0,description:`chart.configText.color_from_the_dashboard_palette_for_the_kpi_value_text`}],displayOptions:[`hideHeader`]},markdown:{label:`chart.markdown.label`,description:`chart.markdown.description`,useCase:`chart.markdown.useCase`,skipQuery:!0,dropZones:[],displayOptionsConfig:[{key:`content`,label:`chart.configText.markdown_content`,type:`string`,placeholder:`# Welcome
|
|
6
6
|
|
|
7
7
|
Add your **markdown** content here:
|
|
8
8
|
|
|
@@ -12,7 +12,7 @@ Add your **markdown** content here:
|
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
Use --- for horizontal rules.`,description:`chart.configText.enter_markdown_text_supports_headers_bold_text_italic_text_links_text_ur`},{key:`accentColorIndex`,label:`chart.configText.accent_color`,type:`paletteColor`,defaultValue:0,description:`chart.configText.color_from_the_dashboard_palette_for_headers_bullets_and_links`},{key:`fontSize`,label:`chart.option.fontSize.label`,type:`select`,defaultValue:`medium`,options:[{value:`small`,label:`chart.option.fontSize.small`},{value:`medium`,label:`chart.option.fontSize.medium`},{value:`large`,label:`chart.option.fontSize.large`}],description:`chart.configText.overall_text_size_for_the_markdown_content`},{key:`alignment`,label:`chart.option.alignment.label`,type:`select`,defaultValue:`left`,options:[{value:`left`,label:`chart.option.accentBorder.left`},{value:`center`,label:`chart.option.alignment.center`},{value:`right`,label:`chart.option.alignment.right`}],description:`chart.configText.horizontal_alignment_of_the_markdown_content`},{key:`hideHeader`,label:`chart.option.hideHeader.label`,type:`boolean`,defaultValue:!0,description:`chart.option.hideHeader.description`},{key:`transparentBackground`,label:`chart.option.transparentBackground.label`,type:`boolean`,defaultValue:!1,description:`chart.option.transparentBackground.description`},{key:`autoHeight`,label:`chart.option.autoHeight.label`,type:`boolean`,defaultValue:!0,description:`chart.option.autoHeight.description`},{key:`accentBorder`,label:`chart.option.accentBorder.label`,type:`select`,defaultValue:`none`,options:[{value:`none`,label:`chart.option.accentBorder.none`},{value:`left`,label:`chart.option.accentBorder.left`},{value:`top`,label:`chart.option.accentBorder.top`},{value:`bottom`,label:`chart.option.accentBorder.bottom`}],description:`chart.configText.add_an_accent_colored_border_on_one_side_of_the_content`}]},funnel:{label:`chart.funnel.label`,description:`chart.funnel.description`,useCase:`chart.funnel.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.step_name`,description:`chart.configText.step_names_auto_populated_from_funnel_steps`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.funnel.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.step_count`,description:`chart.configText.count_at_each_step_auto_calculated`,mandatory:!1,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.funnel.dropZone.yAxis.empty`}],displayOptions:[`hideHeader`],displayOptionsConfig:[{key:`funnelStyle`,label:`chart.option.funnelStyle.label`,type:`buttonGroup`,defaultValue:`bars`,options:[{value:`bars`,label:`chart.option.funnelStyle.bars`},{value:`funnel`,label:`chart.option.funnelStyle.funnel`}],description:`chart.configText.visualization_style`},{key:`funnelOrientation`,label:`chart.option.funnelOrientation.label`,type:`buttonGroup`,defaultValue:`horizontal`,options:[{value:`horizontal`,label:`chart.option.funnelOrientation.horizontal`},{value:`vertical`,label:`chart.option.funnelOrientation.vertical`}]},{key:`hideSummaryFooter`,label:`chart.option.hideSummaryFooter.label`,type:`boolean`,defaultValue:!1,description:`chart.option.hideSummaryFooter.description`},{key:`showFunnelConversion`,label:`chart.option.showConversion.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showConversion.description`},{key:`showFunnelAvgTime`,label:`chart.option.showAvgTime.label`,type:`boolean`,defaultValue:!1,description:`chart.option.showAvgTime.description`},{key:`showFunnelMedianTime`,label:`chart.option.showMedianTime.label`,type:`boolean`,defaultValue:!1,description:`chart.option.showMedianTime.description`},{key:`showFunnelP90Time`,label:`chart.option.showP90Time.label`,type:`boolean`,defaultValue:!1,description:`chart.option.showP90Time.description`}]},sankey:{label:`chart.sankey.label`,description:`chart.sankey.description`,useCase:`chart.sankey.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.event_type`,description:`chart.configText.event_dimension_that_categorizes_flow_nodes`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.sankey.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.flow_count`,description:`chart.configText.count_of_entities_following_each_path`,mandatory:!1,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.sankey.dropZone.yAxis.empty`}],displayOptions:[`hideHeader`],displayOptionsConfig:[{key:`linkOpacity`,label:`chart.option.linkOpacity.label`,type:`buttonGroup`,defaultValue:`0.5`,options:[{value:`0.3`,label:`chart.option.linkOpacity.light`},{value:`0.5`,label:`chart.option.fontSize.medium`},{value:`0.7`,label:`chart.option.linkOpacity.dark`}],description:`chart.configText.opacity_of_flow_links`},{key:`showNodeLabels`,label:`chart.option.showNodeLabels.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showNodeLabels.description`},{key:`hideSummaryFooter`,label:`chart.option.hideSummaryFooter.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.hide_the_statistics_footer_below_the_chart`}]},sunburst:{label:`chart.sunburst.label`,description:`chart.sunburst.description`,useCase:`chart.sunburst.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.event_type`,description:`chart.configText.event_dimension_that_categorizes_flow_nodes`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.sunburst.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.flow_count`,description:`chart.configText.count_of_entities_following_each_path`,mandatory:!1,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.sunburst.dropZone.yAxis.empty`}],displayOptions:[`hideHeader`],displayOptionsConfig:[{key:`innerRadius`,label:`chart.option.innerRadius.label`,type:`number`,defaultValue:40,min:0,max:100,step:10,description:`chart.configText.size_of_the_center_hole_0_for_full_circle`},{key:`hideSummaryFooter`,label:`chart.option.hideSummaryFooter.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.hide_the_statistics_footer_below_the_chart`}]},heatmap:{label:`chart.heatmap.label`,description:`chart.heatmap.description`,useCase:`chart.heatmap.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.columns_x_axis`,description:`chart.configText.dimension_for_column_categories`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.heatmap.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.rows_y_axis`,description:`chart.configText.dimension_for_row_categories`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.heatmap.dropZone.yAxis.empty`},{key:`valueField`,label:`chart.configText.value_color_intensity`,description:`chart.configText.measure_that_determines_cell_color`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.heatmap.dropZone.valueField.empty`}],displayOptions:[`showLegend`,`showTooltip`],displayOptionsConfig:[{key:`showLabels`,label:`chart.option.showLabels.label`,type:`boolean`,defaultValue:!1,description:`chart.option.showLabels.description`},{key:`cellShape`,label:`chart.option.cellShape.label`,type:`select`,defaultValue:`rect`,options:[{value:`rect`,label:`chart.option.cellShape.rectangle`},{value:`circle`,label:`chart.option.cellShape.circle`}]},{key:`xAxisFormat`,label:`chart.option.xAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_x_axis_labels`},{key:`yAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_y_axis_labels`},{key:`valueFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_cell_values_and_legend`}],validate:e=>e.xAxis?.length?e.yAxis?.length?e.valueField?.length?{isValid:!0}:{isValid:!1,message:`chart.heatmap.validation.valueRequired`}:{isValid:!1,message:`chart.heatmap.validation.yAxisRequired`}:{isValid:!1,message:`chart.heatmap.validation.xAxisRequired`}},retentionHeatmap:{label:`chart.retentionHeatmap.label`,dropZones:[],displayOptionsConfig:[{key:`showLegend`,label:`chart.option.showLegend.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.show_the_color_intensity_legend`},{key:`showTooltip`,label:`chart.option.showTooltip.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showTooltip.description`}],description:`chart.retentionHeatmap.description`,useCase:`chart.retentionHeatmap.useCase`},retentionCombined:{label:`chart.retentionCombined.label`,dropZones:[],displayOptionsConfig:[{key:`retentionDisplayMode`,label:`chart.option.retentionDisplayMode.label`,type:`select`,defaultValue:`line`,options:[{value:`line`,label:`chart.option.retentionDisplayMode.lineChart`},{value:`heatmap`,label:`chart.option.retentionDisplayMode.heatmapTable`},{value:`combined`,label:`chart.option.retentionDisplayMode.combined`}],description:`chart.configText.choose_how_to_visualize_retention_data`},{key:`showLegend`,label:`chart.option.showLegend.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.show_the_legend_for_breakdown_segments`},{key:`showGrid`,label:`chart.option.showGrid.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showGrid.description`},{key:`showTooltip`,label:`chart.option.showTooltip.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showTooltip.description`}],description:`chart.retentionCombined.description`,useCase:`chart.retentionCombined.useCase`},boxPlot:{label:`chart.boxPlot.label`,description:`chart.boxPlot.description`,useCase:`chart.boxPlot.useCase`,displayOptions:[`hideHeader`],dropZones:[{key:`xAxis`,label:`chart.configText.x_axis_groups`,description:`chart.configText.dimension_to_group_boxes_by_e_g_symbol_platform`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.boxPlot.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.y_axis_measures`,description:`chart.configText.drop_1_measure_for_auto_mode_3_for_avg_stddev_median_mode_or_5_for_min_q`,mandatory:!0,maxItems:5,acceptTypes:[`measure`],emptyText:`chart.boxPlot.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_the_value_axis`}]},waterfall:{label:`chart.waterfall.label`,description:`chart.waterfall.description`,useCase:`chart.waterfall.useCase`,clickableElements:{bar:!0},displayOptions:[`showTooltip`,`hideHeader`],dropZones:[{key:`xAxis`,label:`chart.dropZone.xAxis.label`,description:`chart.configText.dimension_labels_for_each_bar_segment_e_g_symbol_transaction_type`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.waterfall.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.y_axis_value`,description:`chart.configText.single_measure_whose_values_are_summed_cumulatively`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.waterfall.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`showTotal`,label:`chart.option.showTotal.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showTotal.description`},{key:`showConnectorLine`,label:`chart.option.showConnectorLine.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showConnectorLine.description`},{key:`showDataLabels`,label:`chart.option.showDataLabels.label`,type:`boolean`,defaultValue:!1,description:`chart.configText.display_the_value_above_each_bar_segment`},{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_the_y_axis`}]},candlestick:{label:`chart.candlestick.label`,description:`chart.candlestick.description`,useCase:`chart.candlestick.useCase`,clickableElements:{bar:!0},displayOptions:[`hideHeader`],dropZones:[{key:`xAxis`,label:`chart.configText.x_axis_time_category`,description:`chart.configText.time_dimension_or_category_for_each_candle_e_g_date_symbol`,mandatory:!0,maxItems:1,acceptTypes:[`timeDimension`,`dimension`],emptyText:`chart.candlestick.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.ohlc_measures_open_close_high_low`,description:`chart.configText.drop_2_4_measures_in_order_open_close_high_low_ohlc_mode_for_range_mode_`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.candlestick.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`rangeMode`,label:`chart.option.rangeMode.label`,type:`select`,defaultValue:`ohlc`,options:[{value:`ohlc`,label:`chart.option.rangeMode.ohlc`},{value:`range`,label:`chart.option.rangeMode.range`}],description:`chart.option.rangeMode.description`},{key:`bullColor`,label:`chart.option.bullColor.label`,type:`color`,defaultValue:`#22c55e`,description:`chart.option.bullColor.description`},{key:`bearColor`,label:`chart.option.bearColor.label`,type:`color`,defaultValue:`#ef4444`,description:`chart.option.bearColor.description`},{key:`showWicks`,label:`chart.option.showWicks.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showWicks.description`},{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_the_price_axis`}]},measureProfile:{label:`chart.measureProfile.label`,description:`chart.measureProfile.description`,useCase:`chart.measureProfile.useCase`,displayOptions:[`showLegend`,`showTooltip`,`hideHeader`],dropZones:[{key:`yAxis`,label:`chart.configText.measures_x_axis_order`,description:`chart.configText.add_2_or_more_measures_they_become_the_x_axis_categories_in_the_order_li`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.measureProfile.dropZone.yAxis.empty`},{key:`series`,label:`chart.configText.series_split_into_multiple_lines`,description:`chart.configText.dimension_to_split_data_into_separate_profile_lines_e_g_symbol_platform`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.measureProfile.dropZone.series.empty`}],displayOptionsConfig:[{key:`showReferenceLineAtZero`,label:`chart.option.showReferenceLineAtZero.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showReferenceLineAtZero.description`},{key:`showDataLabels`,label:`chart.option.showDataLabels.label`,type:`boolean`,defaultValue:!1,description:`chart.configText.display_value_at_each_data_point`},{key:`showLegend`,label:`chart.option.showLegend.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.show_series_legend_only_visible_with_a_series_dimension`},{key:`lineType`,label:`chart.option.lineType.label`,type:`select`,defaultValue:`monotone`,options:[{value:`monotone`,label:`chart.option.lineType.smooth`},{value:`linear`,label:`chart.option.lineType.linear`},{value:`step`,label:`chart.option.lineType.step`}],description:`chart.option.lineType.description`},{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_the_y_axis`}]},gauge:{label:`chart.gauge.label`,description:`chart.gauge.description`,useCase:`chart.gauge.useCase`,clickableElements:{},displayOptions:[`hideHeader`],dropZones:[{key:`yAxis`,label:`chart.configText.value_measure`,description:`chart.configText.current_value_to_display_on_the_gauge_e_g_current_equity_margin_used`,mandatory:!0,maxItems:2,acceptTypes:[`measure`],emptyText:`chart.gauge.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`minValue`,label:`chart.option.minValue.label`,type:`number`,defaultValue:0,description:`chart.option.minValue.description`},{key:`maxValue`,label:`chart.option.maxValue.label`,type:`number`,description:`chart.option.maxValue.description`},{key:`thresholds`,label:`chart.configText.threshold_bands`,type:`string`,placeholder:`[{"value":0.33,"color":"#22c55e"},{"value":0.66,"color":"#f59e0b"},{"value":1,"color":"#ef4444"}]`,description:`chart.configText.array_of_value_0_1_fraction_color_bands_shown_as_outer_arc_markers`},{key:`showCenterLabel`,label:`chart.option.showCentreLabel.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showCentreLabel.description`},{key:`showPercentage`,label:`chart.option.showPercentage.label`,type:`boolean`,defaultValue:!1,description:`chart.option.showPercentage.description`},{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_the_displayed_value_and_axis_labels`}]}};function a(t,n,r){let a=i[t];if(!a||a.skipQuery)return{isValid:!0,errors:[]};let o=[];for(let r of a.dropZones){if(!r.mandatory)continue;let i=n?.[r.key];if(!(Array.isArray(i)?i.length>0:i)){let n=r.acceptTypes?.join(`/`)??`fields`;o.push(e.C(`server.validation.chart.dropZoneRequired`,{key:r.key,chartType:t,label:r.label,acceptDesc:n}))}}if(t===`bar`){let t=n?.xAxis;if(!(Array.isArray(t)?t.length>0:t)){let t=r.dimensions??[],n=r.timeDimensions??[];t.length>0||n.length>0?o.push(e.C(`server.validation.chart.barXAxisRequired`)):o.push(e.C(`server.validation.chart.barNeedsDimension`))}}if(n?.xAxis&&n?.series){let t=new Set(Array.isArray(n.xAxis)?n.xAxis:[n.xAxis]),r=(Array.isArray(n.series)?n.series:[n.series]).filter(e=>t.has(e));r.length>0&&o.push(e.C(`server.validation.chart.seriesDuplicatesXAxis`,{duplicates:r.join(`, `)}))}return{isValid:o.length===0,errors:o}}function o(e,t,n){let r=i[e];if(!r)return t??{};let a={...t},o=n.measures??[],s=n.dimensions??[],c=(n.timeDimensions??[]).map(e=>e.dimension);for(let e of r.dropZones){let t=a[e.key];if(Array.isArray(t)?t.length>0:t)continue;let n=e.acceptTypes??[];if(e.key===`sizeField`||e.key===`colorField`){if(n.includes(`measure`)){let t=new Set;for(let n of r.dropZones){if(n.key===e.key)continue;let r=a[n.key];Array.isArray(r)?r.forEach(e=>t.add(e)):typeof r==`string`&&t.add(r)}let n=o.filter(e=>!t.has(e));n.length>0&&(a[e.key]=n[0])}continue}let i=[];if(n.includes(`dimension`)&&i.push(...s),n.includes(`timeDimension`)&&i.push(...c),n.includes(`measure`)&&i.push(...o),i.length===0)continue;let l=i;if(e.key===`series`){let e=new Set(Array.isArray(a.xAxis)?a.xAxis:a.xAxis?[a.xAxis]:[]);if(l=i.filter(t=>!e.has(t)),l.length===0)continue}let u=e.maxItems??1/0,d=l.slice(0,u);d.length>0&&(a[e.key]=d)}return a}function s(e){let t=[`
|
|
15
|
+
Use --- for horizontal rules.`,description:`chart.configText.enter_markdown_text_supports_headers_bold_text_italic_text_links_text_ur`},{key:`accentColorIndex`,label:`chart.configText.accent_color`,type:`paletteColor`,defaultValue:0,description:`chart.configText.color_from_the_dashboard_palette_for_headers_bullets_and_links`},{key:`fontSize`,label:`chart.option.fontSize.label`,type:`select`,defaultValue:`medium`,options:[{value:`small`,label:`chart.option.fontSize.small`},{value:`medium`,label:`chart.option.fontSize.medium`},{value:`large`,label:`chart.option.fontSize.large`}],description:`chart.configText.overall_text_size_for_the_markdown_content`},{key:`alignment`,label:`chart.option.alignment.label`,type:`select`,defaultValue:`left`,options:[{value:`left`,label:`chart.option.accentBorder.left`},{value:`center`,label:`chart.option.alignment.center`},{value:`right`,label:`chart.option.alignment.right`}],description:`chart.configText.horizontal_alignment_of_the_markdown_content`},{key:`hideHeader`,label:`chart.option.hideHeader.label`,type:`boolean`,defaultValue:!0,description:`chart.option.hideHeader.description`},{key:`transparentBackground`,label:`chart.option.transparentBackground.label`,type:`boolean`,defaultValue:!1,description:`chart.option.transparentBackground.description`},{key:`autoHeight`,label:`chart.option.autoHeight.label`,type:`boolean`,defaultValue:!0,description:`chart.option.autoHeight.description`},{key:`accentBorder`,label:`chart.option.accentBorder.label`,type:`select`,defaultValue:`none`,options:[{value:`none`,label:`chart.option.accentBorder.none`},{value:`left`,label:`chart.option.accentBorder.left`},{value:`top`,label:`chart.option.accentBorder.top`},{value:`bottom`,label:`chart.option.accentBorder.bottom`}],description:`chart.configText.add_an_accent_colored_border_on_one_side_of_the_content`}]},funnel:{label:`chart.funnel.label`,description:`chart.funnel.description`,useCase:`chart.funnel.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.step_name`,description:`chart.configText.step_names_auto_populated_from_funnel_steps`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.funnel.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.step_count`,description:`chart.configText.count_at_each_step_auto_calculated`,mandatory:!1,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.funnel.dropZone.yAxis.empty`}],displayOptions:[`hideHeader`],displayOptionsConfig:[{key:`funnelStyle`,label:`chart.option.funnelStyle.label`,type:`buttonGroup`,defaultValue:`bars`,options:[{value:`bars`,label:`chart.option.funnelStyle.bars`},{value:`funnel`,label:`chart.option.funnelStyle.funnel`}],description:`chart.configText.visualization_style`},{key:`funnelOrientation`,label:`chart.option.funnelOrientation.label`,type:`buttonGroup`,defaultValue:`horizontal`,options:[{value:`horizontal`,label:`chart.option.funnelOrientation.horizontal`},{value:`vertical`,label:`chart.option.funnelOrientation.vertical`}]},{key:`hideSummaryFooter`,label:`chart.option.hideSummaryFooter.label`,type:`boolean`,defaultValue:!1,description:`chart.option.hideSummaryFooter.description`},{key:`showFunnelConversion`,label:`chart.option.showConversion.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showConversion.description`},{key:`showFunnelAvgTime`,label:`chart.option.showAvgTime.label`,type:`boolean`,defaultValue:!1,description:`chart.option.showAvgTime.description`},{key:`showFunnelMedianTime`,label:`chart.option.showMedianTime.label`,type:`boolean`,defaultValue:!1,description:`chart.option.showMedianTime.description`},{key:`showFunnelP90Time`,label:`chart.option.showP90Time.label`,type:`boolean`,defaultValue:!1,description:`chart.option.showP90Time.description`}]},sankey:{label:`chart.sankey.label`,description:`chart.sankey.description`,useCase:`chart.sankey.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.event_type`,description:`chart.configText.event_dimension_that_categorizes_flow_nodes`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.sankey.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.flow_count`,description:`chart.configText.count_of_entities_following_each_path`,mandatory:!1,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.sankey.dropZone.yAxis.empty`}],displayOptions:[`hideHeader`],displayOptionsConfig:[{key:`linkOpacity`,label:`chart.option.linkOpacity.label`,type:`buttonGroup`,defaultValue:`0.5`,options:[{value:`0.3`,label:`chart.option.linkOpacity.light`},{value:`0.5`,label:`chart.option.fontSize.medium`},{value:`0.7`,label:`chart.option.linkOpacity.dark`}],description:`chart.configText.opacity_of_flow_links`},{key:`showNodeLabels`,label:`chart.option.showNodeLabels.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showNodeLabels.description`},{key:`hideSummaryFooter`,label:`chart.option.hideSummaryFooter.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.hide_the_statistics_footer_below_the_chart`}]},sunburst:{label:`chart.sunburst.label`,description:`chart.sunburst.description`,useCase:`chart.sunburst.useCase`,dropZones:[{key:`xAxis`,label:`chart.configText.event_type`,description:`chart.configText.event_dimension_that_categorizes_flow_nodes`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.sunburst.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.flow_count`,description:`chart.configText.count_of_entities_following_each_path`,mandatory:!1,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.sunburst.dropZone.yAxis.empty`}],displayOptions:[`hideHeader`],displayOptionsConfig:[{key:`innerRadius`,label:`chart.option.innerRadius.label`,type:`number`,defaultValue:40,min:0,max:100,step:10,description:`chart.configText.size_of_the_center_hole_0_for_full_circle`},{key:`hideSummaryFooter`,label:`chart.option.hideSummaryFooter.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.hide_the_statistics_footer_below_the_chart`}]},heatmap:{label:`chart.heatmap.label`,description:`chart.heatmap.description`,useCase:`chart.heatmap.useCase`,isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<2?{available:!1,reason:`chart.availability.requiresTwoDimensions`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.configText.columns_x_axis`,description:`chart.configText.dimension_for_column_categories`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.heatmap.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.rows_y_axis`,description:`chart.configText.dimension_for_row_categories`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.heatmap.dropZone.yAxis.empty`},{key:`valueField`,label:`chart.configText.value_color_intensity`,description:`chart.configText.measure_that_determines_cell_color`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.heatmap.dropZone.valueField.empty`}],displayOptions:[`showLegend`,`showTooltip`],displayOptionsConfig:[{key:`showLabels`,label:`chart.option.showLabels.label`,type:`boolean`,defaultValue:!1,description:`chart.option.showLabels.description`},{key:`cellShape`,label:`chart.option.cellShape.label`,type:`select`,defaultValue:`rect`,options:[{value:`rect`,label:`chart.option.cellShape.rectangle`},{value:`circle`,label:`chart.option.cellShape.circle`}]},{key:`xAxisFormat`,label:`chart.option.xAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_x_axis_labels`},{key:`yAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_y_axis_labels`},{key:`valueFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_cell_values_and_legend`}],validate:e=>e.xAxis?.length?e.yAxis?.length?e.valueField?.length?{isValid:!0}:{isValid:!1,message:`chart.heatmap.validation.valueRequired`}:{isValid:!1,message:`chart.heatmap.validation.yAxisRequired`}:{isValid:!1,message:`chart.heatmap.validation.xAxisRequired`}},retentionHeatmap:{label:`chart.retentionHeatmap.label`,dropZones:[],displayOptionsConfig:[{key:`showLegend`,label:`chart.option.showLegend.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.show_the_color_intensity_legend`},{key:`showTooltip`,label:`chart.option.showTooltip.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showTooltip.description`}],description:`chart.retentionHeatmap.description`,useCase:`chart.retentionHeatmap.useCase`},retentionCombined:{label:`chart.retentionCombined.label`,dropZones:[],displayOptionsConfig:[{key:`retentionDisplayMode`,label:`chart.option.retentionDisplayMode.label`,type:`select`,defaultValue:`line`,options:[{value:`line`,label:`chart.option.retentionDisplayMode.lineChart`},{value:`heatmap`,label:`chart.option.retentionDisplayMode.heatmapTable`},{value:`combined`,label:`chart.option.retentionDisplayMode.combined`}],description:`chart.configText.choose_how_to_visualize_retention_data`},{key:`showLegend`,label:`chart.option.showLegend.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.show_the_legend_for_breakdown_segments`},{key:`showGrid`,label:`chart.option.showGrid.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showGrid.description`},{key:`showTooltip`,label:`chart.option.showTooltip.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showTooltip.description`}],description:`chart.retentionCombined.description`,useCase:`chart.retentionCombined.useCase`},boxPlot:{label:`chart.boxPlot.label`,description:`chart.boxPlot.description`,useCase:`chart.boxPlot.useCase`,isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},displayOptions:[`hideHeader`],dropZones:[{key:`xAxis`,label:`chart.configText.x_axis_groups`,description:`chart.configText.dimension_to_group_boxes_by_e_g_symbol_platform`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.boxPlot.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.y_axis_measures`,description:`chart.configText.drop_1_measure_for_auto_mode_3_for_avg_stddev_median_mode_or_5_for_min_q`,mandatory:!0,maxItems:5,acceptTypes:[`measure`],emptyText:`chart.boxPlot.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_the_value_axis`}]},waterfall:{label:`chart.waterfall.label`,description:`chart.waterfall.description`,useCase:`chart.waterfall.useCase`,clickableElements:{bar:!0},isAvailable:({measureCount:e,dimensionCount:t})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},displayOptions:[`showTooltip`,`hideHeader`],dropZones:[{key:`xAxis`,label:`chart.dropZone.xAxis.label`,description:`chart.configText.dimension_labels_for_each_bar_segment_e_g_symbol_transaction_type`,mandatory:!0,maxItems:1,acceptTypes:[`dimension`,`timeDimension`],emptyText:`chart.waterfall.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.y_axis_value`,description:`chart.configText.single_measure_whose_values_are_summed_cumulatively`,mandatory:!0,maxItems:1,acceptTypes:[`measure`],emptyText:`chart.waterfall.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`showTotal`,label:`chart.option.showTotal.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showTotal.description`},{key:`showConnectorLine`,label:`chart.option.showConnectorLine.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showConnectorLine.description`},{key:`showDataLabels`,label:`chart.option.showDataLabels.label`,type:`boolean`,defaultValue:!1,description:`chart.configText.display_the_value_above_each_bar_segment`},{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_the_y_axis`}]},candlestick:{label:`chart.candlestick.label`,description:`chart.candlestick.description`,useCase:`chart.candlestick.useCase`,clickableElements:{bar:!0},displayOptions:[`hideHeader`],isAvailable:({measureCount:e,dimensionCount:t})=>e<2?{available:!1,reason:`chart.availability.requiresTwoMeasures`}:t<1?{available:!1,reason:`chart.availability.requiresDimension`}:{available:!0},dropZones:[{key:`xAxis`,label:`chart.configText.x_axis_time_category`,description:`chart.configText.time_dimension_or_category_for_each_candle_e_g_date_symbol`,mandatory:!0,maxItems:1,acceptTypes:[`timeDimension`,`dimension`],emptyText:`chart.candlestick.dropZone.xAxis.empty`},{key:`yAxis`,label:`chart.configText.ohlc_measures_open_close_high_low`,description:`chart.configText.drop_2_4_measures_in_order_open_close_high_low_ohlc_mode_for_range_mode_`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.candlestick.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`rangeMode`,label:`chart.option.rangeMode.label`,type:`select`,defaultValue:`ohlc`,options:[{value:`ohlc`,label:`chart.option.rangeMode.ohlc`},{value:`range`,label:`chart.option.rangeMode.range`}],description:`chart.option.rangeMode.description`},{key:`bullColor`,label:`chart.option.bullColor.label`,type:`color`,defaultValue:`#22c55e`,description:`chart.option.bullColor.description`},{key:`bearColor`,label:`chart.option.bearColor.label`,type:`color`,defaultValue:`#ef4444`,description:`chart.option.bearColor.description`},{key:`showWicks`,label:`chart.option.showWicks.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showWicks.description`},{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_the_price_axis`}]},measureProfile:{label:`chart.measureProfile.label`,description:`chart.measureProfile.description`,useCase:`chart.measureProfile.useCase`,displayOptions:[`showLegend`,`showTooltip`,`hideHeader`],isAvailable:({measureCount:e})=>e<2?{available:!1,reason:`chart.availability.requiresTwoMeasures`}:{available:!0},dropZones:[{key:`yAxis`,label:`chart.configText.measures_x_axis_order`,description:`chart.configText.add_2_or_more_measures_they_become_the_x_axis_categories_in_the_order_li`,mandatory:!0,acceptTypes:[`measure`],emptyText:`chart.measureProfile.dropZone.yAxis.empty`},{key:`series`,label:`chart.configText.series_split_into_multiple_lines`,description:`chart.configText.dimension_to_split_data_into_separate_profile_lines_e_g_symbol_platform`,mandatory:!1,maxItems:1,acceptTypes:[`dimension`],emptyText:`chart.measureProfile.dropZone.series.empty`}],displayOptionsConfig:[{key:`showReferenceLineAtZero`,label:`chart.option.showReferenceLineAtZero.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showReferenceLineAtZero.description`},{key:`showDataLabels`,label:`chart.option.showDataLabels.label`,type:`boolean`,defaultValue:!1,description:`chart.configText.display_value_at_each_data_point`},{key:`showLegend`,label:`chart.option.showLegend.label`,type:`boolean`,defaultValue:!0,description:`chart.configText.show_series_legend_only_visible_with_a_series_dimension`},{key:`lineType`,label:`chart.option.lineType.label`,type:`select`,defaultValue:`monotone`,options:[{value:`monotone`,label:`chart.option.lineType.smooth`},{value:`linear`,label:`chart.option.lineType.linear`},{value:`step`,label:`chart.option.lineType.step`}],description:`chart.option.lineType.description`},{key:`leftYAxisFormat`,label:`chart.option.yAxisFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_the_y_axis`}]},gauge:{label:`chart.gauge.label`,description:`chart.gauge.description`,useCase:`chart.gauge.useCase`,clickableElements:{},displayOptions:[`hideHeader`],isAvailable:({measureCount:e})=>e<1?{available:!1,reason:`chart.availability.requiresMeasure`}:{available:!0},dropZones:[{key:`yAxis`,label:`chart.configText.value_measure`,description:`chart.configText.current_value_to_display_on_the_gauge_e_g_current_equity_margin_used`,mandatory:!0,maxItems:2,acceptTypes:[`measure`],emptyText:`chart.gauge.dropZone.yAxis.empty`}],displayOptionsConfig:[{key:`minValue`,label:`chart.option.minValue.label`,type:`number`,defaultValue:0,description:`chart.option.minValue.description`},{key:`maxValue`,label:`chart.option.maxValue.label`,type:`number`,description:`chart.option.maxValue.description`},{key:`thresholds`,label:`chart.configText.threshold_bands`,type:`string`,placeholder:`[{"value":0.33,"color":"#22c55e"},{"value":0.66,"color":"#f59e0b"},{"value":1,"color":"#ef4444"}]`,description:`chart.configText.array_of_value_0_1_fraction_color_bands_shown_as_outer_arc_markers`},{key:`showCenterLabel`,label:`chart.option.showCentreLabel.label`,type:`boolean`,defaultValue:!0,description:`chart.option.showCentreLabel.description`},{key:`showPercentage`,label:`chart.option.showPercentage.label`,type:`boolean`,defaultValue:!1,description:`chart.option.showPercentage.description`},{key:`leftYAxisFormat`,label:`chart.option.valueFormat.label`,type:`axisFormat`,description:`chart.configText.number_formatting_for_the_displayed_value_and_axis_labels`}]}};function a(t,n,r){let a=i[t];if(!a||a.skipQuery)return{isValid:!0,errors:[]};let o=[];for(let r of a.dropZones){if(!r.mandatory)continue;let i=n?.[r.key];if(!(Array.isArray(i)?i.length>0:i)){let n=r.acceptTypes?.join(`/`)??`fields`;o.push(e.C(`server.validation.chart.dropZoneRequired`,{key:r.key,chartType:t,label:r.label,acceptDesc:n}))}}if(t===`bar`){let t=n?.xAxis;if(!(Array.isArray(t)?t.length>0:t)){let t=r.dimensions??[],n=r.timeDimensions??[];t.length>0||n.length>0?o.push(e.C(`server.validation.chart.barXAxisRequired`)):o.push(e.C(`server.validation.chart.barNeedsDimension`))}}if(n?.xAxis&&n?.series){let t=new Set(Array.isArray(n.xAxis)?n.xAxis:[n.xAxis]),r=(Array.isArray(n.series)?n.series:[n.series]).filter(e=>t.has(e));r.length>0&&o.push(e.C(`server.validation.chart.seriesDuplicatesXAxis`,{duplicates:r.join(`, `)}))}return{isValid:o.length===0,errors:o}}function o(e,t,n){let r=i[e];if(!r)return t??{};let a={...t},o=n.measures??[],s=n.dimensions??[],c=(n.timeDimensions??[]).map(e=>e.dimension);for(let e of r.dropZones){let t=a[e.key];if(Array.isArray(t)?t.length>0:t)continue;let n=e.acceptTypes??[];if(e.key===`sizeField`||e.key===`colorField`){if(n.includes(`measure`)){let t=new Set;for(let n of r.dropZones){if(n.key===e.key)continue;let r=a[n.key];Array.isArray(r)?r.forEach(e=>t.add(e)):typeof r==`string`&&t.add(r)}let n=o.filter(e=>!t.has(e));n.length>0&&(a[e.key]=n[0])}continue}let i=[];if(n.includes(`dimension`)&&i.push(...s),n.includes(`timeDimension`)&&i.push(...c),n.includes(`measure`)&&i.push(...o),i.length===0)continue;let l=i;if(e.key===`series`){let e=new Set(Array.isArray(a.xAxis)?a.xAxis:a.xAxis?[a.xAxis]:[]);if(l=i.filter(t=>!e.has(t)),l.length===0)continue}let u=e.maxItems??1/0,d=l.slice(0,u);d.length>0&&(a[e.key]=d)}return a}function s(e){let t=[`
|
|
16
16
|
Chart config requirements by type:`];for(let n of e){let e=i[n];if(!e)continue;let r=[e.description??``,e.useCase??``].filter(Boolean).join(`. `),a=r?` — ${r}.`:``,o=e.dropZones.filter(e=>e.mandatory);if(o.length===0&&!e.skipQuery){t.push(` ${n}${a} chartConfig auto-inferred from query.`);continue}if(e.skipQuery){t.push(` ${n}${a} No query needed.`);continue}let s=o.map(e=>{let t=e.acceptTypes?.join(`/`)??`any`,n=e.maxItems?` (max ${e.maxItems})`:``;return`${e.key}=[${t}]${n}`});t.push(` ${n}${a} Requires ${s.join(`, `)}.`)}return t.join(`
|
|
17
17
|
`)}var c=[`bar`,`line`,`area`,`pie`,`scatter`,`radar`,`bubble`,`table`,`kpiNumber`,`kpiDelta`,`funnel`,`heatmap`,`sankey`,`sunburst`,`retentionHeatmap`,`retentionCombined`,`boxPlot`,`markdown`];function l(){return[{name:`discover_cubes`,description:`Search for available data cubes by topic or intent. Call this FIRST to understand what data is available. Returns cube names, measures, dimensions, and relationships.`,parameters:{type:`object`,properties:{topic:{type:`string`,description:`Keyword to search (e.g., "sales", "employees")`},intent:{type:`string`,description:`Natural language goal (e.g., "analyze productivity trends")`},limit:{type:`number`,description:`Max results (default: 10)`},minScore:{type:`number`,description:`Min relevance 0-1 (default: 0.1)`}}}},{name:`get_cube_metadata`,description:`Get full metadata for all registered cubes including all measures, dimensions, types, and relationships. Use this for detailed schema information.`,parameters:{type:`object`,properties:{}}},{name:`execute_query`,description:`Execute a semantic query and return data results. Supports standard queries (measures/dimensions) and analysis modes (funnel/flow/retention). Only provide ONE mode per call.`,parameters:{type:`object`,properties:e.S}},{name:`add_portlet`,description:`Add a chart visualization to the notebook.
|
|
18
18
|
`+s(c)+`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as e, S as t, _ as n, d as r, g as i, p as a, v as o, y as s } from "./utils-
|
|
1
|
+
import { C as e, S as t, _ as n, d as r, g as i, p as a, v as o, y as s } from "./utils-hC7Z8V39.js";
|
|
2
2
|
//#region src/server/agent/system-prompt.ts
|
|
3
3
|
function c(e) {
|
|
4
4
|
if (e.length === 0) return "No cubes are currently available.";
|
|
@@ -243,6 +243,13 @@ var d = {
|
|
|
243
243
|
description: "chart.bar.description",
|
|
244
244
|
useCase: "chart.bar.useCase",
|
|
245
245
|
clickableElements: { bar: !0 },
|
|
246
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
247
|
+
available: !1,
|
|
248
|
+
reason: "chart.availability.requiresMeasure"
|
|
249
|
+
} : t < 1 ? {
|
|
250
|
+
available: !1,
|
|
251
|
+
reason: "chart.availability.requiresDimension"
|
|
252
|
+
} : { available: !0 },
|
|
246
253
|
dropZones: [
|
|
247
254
|
{
|
|
248
255
|
key: "xAxis",
|
|
@@ -324,6 +331,13 @@ var d = {
|
|
|
324
331
|
description: "chart.line.description",
|
|
325
332
|
useCase: "chart.line.useCase",
|
|
326
333
|
clickableElements: { point: !0 },
|
|
334
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
335
|
+
available: !1,
|
|
336
|
+
reason: "chart.availability.requiresMeasure"
|
|
337
|
+
} : t < 1 ? {
|
|
338
|
+
available: !1,
|
|
339
|
+
reason: "chart.availability.requiresDimension"
|
|
340
|
+
} : { available: !0 },
|
|
327
341
|
dropZones: [
|
|
328
342
|
{
|
|
329
343
|
key: "xAxis",
|
|
@@ -421,6 +435,13 @@ var d = {
|
|
|
421
435
|
label: "chart.area.label",
|
|
422
436
|
description: "chart.area.description",
|
|
423
437
|
useCase: "chart.area.useCase",
|
|
438
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
439
|
+
available: !1,
|
|
440
|
+
reason: "chart.availability.requiresMeasure"
|
|
441
|
+
} : t < 1 ? {
|
|
442
|
+
available: !1,
|
|
443
|
+
reason: "chart.availability.requiresDimension"
|
|
444
|
+
} : { available: !0 },
|
|
424
445
|
dropZones: [
|
|
425
446
|
{
|
|
426
447
|
key: "xAxis",
|
|
@@ -509,6 +530,13 @@ var d = {
|
|
|
509
530
|
description: "chart.pie.description",
|
|
510
531
|
useCase: "chart.pie.useCase",
|
|
511
532
|
clickableElements: { slice: !0 },
|
|
533
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
534
|
+
available: !1,
|
|
535
|
+
reason: "chart.availability.requiresMeasure"
|
|
536
|
+
} : t < 1 ? {
|
|
537
|
+
available: !1,
|
|
538
|
+
reason: "chart.availability.requiresDimension"
|
|
539
|
+
} : { available: !0 },
|
|
512
540
|
dropZones: [{
|
|
513
541
|
key: "xAxis",
|
|
514
542
|
label: "chart.configText.categories",
|
|
@@ -570,6 +598,13 @@ var d = {
|
|
|
570
598
|
label: "chart.scatter.label",
|
|
571
599
|
description: "chart.scatter.description",
|
|
572
600
|
useCase: "chart.scatter.useCase",
|
|
601
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
602
|
+
available: !1,
|
|
603
|
+
reason: "chart.availability.requiresMeasure"
|
|
604
|
+
} : e < 2 && t < 1 ? {
|
|
605
|
+
available: !1,
|
|
606
|
+
reason: "chart.availability.scatter"
|
|
607
|
+
} : { available: !0 },
|
|
573
608
|
dropZones: [
|
|
574
609
|
{
|
|
575
610
|
key: "xAxis",
|
|
@@ -625,6 +660,13 @@ var d = {
|
|
|
625
660
|
label: "chart.bubble.label",
|
|
626
661
|
description: "chart.bubble.description",
|
|
627
662
|
useCase: "chart.bubble.useCase",
|
|
663
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 2 ? {
|
|
664
|
+
available: !1,
|
|
665
|
+
reason: "chart.availability.requiresTwoMeasures"
|
|
666
|
+
} : t < 1 ? {
|
|
667
|
+
available: !1,
|
|
668
|
+
reason: "chart.availability.bubble"
|
|
669
|
+
} : { available: !0 },
|
|
628
670
|
dropZones: [
|
|
629
671
|
{
|
|
630
672
|
key: "xAxis",
|
|
@@ -701,6 +743,13 @@ var d = {
|
|
|
701
743
|
label: "chart.radar.label",
|
|
702
744
|
description: "chart.radar.description",
|
|
703
745
|
useCase: "chart.radar.useCase",
|
|
746
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
747
|
+
available: !1,
|
|
748
|
+
reason: "chart.availability.requiresMeasure"
|
|
749
|
+
} : t < 1 ? {
|
|
750
|
+
available: !1,
|
|
751
|
+
reason: "chart.availability.requiresDimension"
|
|
752
|
+
} : { available: !0 },
|
|
704
753
|
dropZones: [
|
|
705
754
|
{
|
|
706
755
|
key: "xAxis",
|
|
@@ -744,6 +793,13 @@ var d = {
|
|
|
744
793
|
label: "chart.radialBar.label",
|
|
745
794
|
description: "chart.radialBar.description",
|
|
746
795
|
useCase: "chart.radialBar.useCase",
|
|
796
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
797
|
+
available: !1,
|
|
798
|
+
reason: "chart.availability.requiresMeasure"
|
|
799
|
+
} : t < 1 ? {
|
|
800
|
+
available: !1,
|
|
801
|
+
reason: "chart.availability.requiresDimension"
|
|
802
|
+
} : { available: !0 },
|
|
747
803
|
dropZones: [{
|
|
748
804
|
key: "xAxis",
|
|
749
805
|
label: "chart.configText.categories",
|
|
@@ -776,6 +832,13 @@ var d = {
|
|
|
776
832
|
label: "chart.treemap.label",
|
|
777
833
|
description: "chart.treemap.description",
|
|
778
834
|
useCase: "chart.treemap.useCase",
|
|
835
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
836
|
+
available: !1,
|
|
837
|
+
reason: "chart.availability.requiresMeasure"
|
|
838
|
+
} : t < 1 ? {
|
|
839
|
+
available: !1,
|
|
840
|
+
reason: "chart.availability.requiresDimension"
|
|
841
|
+
} : { available: !0 },
|
|
779
842
|
dropZones: [
|
|
780
843
|
{
|
|
781
844
|
key: "xAxis",
|
|
@@ -845,6 +908,13 @@ var d = {
|
|
|
845
908
|
label: "chart.activityGrid.label",
|
|
846
909
|
description: "chart.activityGrid.description",
|
|
847
910
|
useCase: "chart.activityGrid.useCase",
|
|
911
|
+
isAvailable: ({ measureCount: e, timeDimensionCount: t }) => e < 1 ? {
|
|
912
|
+
available: !1,
|
|
913
|
+
reason: "chart.availability.requiresMeasure"
|
|
914
|
+
} : t < 1 ? {
|
|
915
|
+
available: !1,
|
|
916
|
+
reason: "chart.availability.requiresTimeDimension"
|
|
917
|
+
} : { available: !0 },
|
|
848
918
|
dropZones: [{
|
|
849
919
|
key: "dateField",
|
|
850
920
|
label: "chart.configText.time_dimension",
|
|
@@ -890,6 +960,10 @@ var d = {
|
|
|
890
960
|
label: "chart.kpiNumber.label",
|
|
891
961
|
description: "chart.kpiNumber.description",
|
|
892
962
|
useCase: "chart.kpiNumber.useCase",
|
|
963
|
+
isAvailable: ({ measureCount: e }) => e < 1 ? {
|
|
964
|
+
available: !1,
|
|
965
|
+
reason: "chart.availability.requiresMeasure"
|
|
966
|
+
} : { available: !0 },
|
|
893
967
|
dropZones: [{
|
|
894
968
|
key: "yAxis",
|
|
895
969
|
label: "chart.configText.value",
|
|
@@ -959,6 +1033,13 @@ var d = {
|
|
|
959
1033
|
label: "chart.kpiDelta.label",
|
|
960
1034
|
description: "chart.kpiDelta.description",
|
|
961
1035
|
useCase: "chart.kpiDelta.useCase",
|
|
1036
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
1037
|
+
available: !1,
|
|
1038
|
+
reason: "chart.availability.requiresMeasure"
|
|
1039
|
+
} : t < 1 ? {
|
|
1040
|
+
available: !1,
|
|
1041
|
+
reason: "chart.availability.requiresDimension"
|
|
1042
|
+
} : { available: !0 },
|
|
962
1043
|
dropZones: [{
|
|
963
1044
|
key: "yAxis",
|
|
964
1045
|
label: "chart.configText.value",
|
|
@@ -1047,6 +1128,10 @@ var d = {
|
|
|
1047
1128
|
label: "chart.kpiText.label",
|
|
1048
1129
|
description: "chart.kpiText.description",
|
|
1049
1130
|
useCase: "chart.kpiText.useCase",
|
|
1131
|
+
isAvailable: ({ measureCount: e }) => e < 1 ? {
|
|
1132
|
+
available: !1,
|
|
1133
|
+
reason: "chart.availability.requiresMeasure"
|
|
1134
|
+
} : { available: !0 },
|
|
1050
1135
|
dropZones: [{
|
|
1051
1136
|
key: "yAxis",
|
|
1052
1137
|
label: "chart.configText.value",
|
|
@@ -1385,6 +1470,13 @@ var d = {
|
|
|
1385
1470
|
label: "chart.heatmap.label",
|
|
1386
1471
|
description: "chart.heatmap.description",
|
|
1387
1472
|
useCase: "chart.heatmap.useCase",
|
|
1473
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
1474
|
+
available: !1,
|
|
1475
|
+
reason: "chart.availability.requiresMeasure"
|
|
1476
|
+
} : t < 2 ? {
|
|
1477
|
+
available: !1,
|
|
1478
|
+
reason: "chart.availability.requiresTwoDimensions"
|
|
1479
|
+
} : { available: !0 },
|
|
1388
1480
|
dropZones: [
|
|
1389
1481
|
{
|
|
1390
1482
|
key: "xAxis",
|
|
@@ -1539,6 +1631,13 @@ var d = {
|
|
|
1539
1631
|
label: "chart.boxPlot.label",
|
|
1540
1632
|
description: "chart.boxPlot.description",
|
|
1541
1633
|
useCase: "chart.boxPlot.useCase",
|
|
1634
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
1635
|
+
available: !1,
|
|
1636
|
+
reason: "chart.availability.requiresMeasure"
|
|
1637
|
+
} : t < 1 ? {
|
|
1638
|
+
available: !1,
|
|
1639
|
+
reason: "chart.availability.requiresDimension"
|
|
1640
|
+
} : { available: !0 },
|
|
1542
1641
|
displayOptions: ["hideHeader"],
|
|
1543
1642
|
dropZones: [{
|
|
1544
1643
|
key: "xAxis",
|
|
@@ -1569,6 +1668,13 @@ var d = {
|
|
|
1569
1668
|
description: "chart.waterfall.description",
|
|
1570
1669
|
useCase: "chart.waterfall.useCase",
|
|
1571
1670
|
clickableElements: { bar: !0 },
|
|
1671
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 1 ? {
|
|
1672
|
+
available: !1,
|
|
1673
|
+
reason: "chart.availability.requiresMeasure"
|
|
1674
|
+
} : t < 1 ? {
|
|
1675
|
+
available: !1,
|
|
1676
|
+
reason: "chart.availability.requiresDimension"
|
|
1677
|
+
} : { available: !0 },
|
|
1572
1678
|
displayOptions: ["showTooltip", "hideHeader"],
|
|
1573
1679
|
dropZones: [{
|
|
1574
1680
|
key: "xAxis",
|
|
@@ -1623,6 +1729,13 @@ var d = {
|
|
|
1623
1729
|
useCase: "chart.candlestick.useCase",
|
|
1624
1730
|
clickableElements: { bar: !0 },
|
|
1625
1731
|
displayOptions: ["hideHeader"],
|
|
1732
|
+
isAvailable: ({ measureCount: e, dimensionCount: t }) => e < 2 ? {
|
|
1733
|
+
available: !1,
|
|
1734
|
+
reason: "chart.availability.requiresTwoMeasures"
|
|
1735
|
+
} : t < 1 ? {
|
|
1736
|
+
available: !1,
|
|
1737
|
+
reason: "chart.availability.requiresDimension"
|
|
1738
|
+
} : { available: !0 },
|
|
1626
1739
|
dropZones: [{
|
|
1627
1740
|
key: "xAxis",
|
|
1628
1741
|
label: "chart.configText.x_axis_time_category",
|
|
@@ -1692,6 +1805,10 @@ var d = {
|
|
|
1692
1805
|
"showTooltip",
|
|
1693
1806
|
"hideHeader"
|
|
1694
1807
|
],
|
|
1808
|
+
isAvailable: ({ measureCount: e }) => e < 2 ? {
|
|
1809
|
+
available: !1,
|
|
1810
|
+
reason: "chart.availability.requiresTwoMeasures"
|
|
1811
|
+
} : { available: !0 },
|
|
1695
1812
|
dropZones: [{
|
|
1696
1813
|
key: "yAxis",
|
|
1697
1814
|
label: "chart.configText.measures_x_axis_order",
|
|
@@ -1765,6 +1882,10 @@ var d = {
|
|
|
1765
1882
|
useCase: "chart.gauge.useCase",
|
|
1766
1883
|
clickableElements: {},
|
|
1767
1884
|
displayOptions: ["hideHeader"],
|
|
1885
|
+
isAvailable: ({ measureCount: e }) => e < 1 ? {
|
|
1886
|
+
available: !1,
|
|
1887
|
+
reason: "chart.availability.requiresMeasure"
|
|
1888
|
+
} : { available: !0 },
|
|
1768
1889
|
dropZones: [{
|
|
1769
1890
|
key: "yAxis",
|
|
1770
1891
|
label: "chart.configText.value_measure",
|