drizzle-cube 0.6.7 → 0.7.1
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/ActivityGridChart.config-D6hhj345.cjs +1 -0
- package/dist/adapters/ActivityGridChart.config-QZKs_NYg.js +2 -0
- package/dist/adapters/AreaChart.config-B5XM6G22.js +2 -0
- package/dist/adapters/AreaChart.config-NP34BH5y.cjs +1 -0
- package/dist/adapters/BarChart.config-Bqlmr81N.js +2 -0
- package/dist/adapters/BarChart.config-C3bw-cAP.cjs +1 -0
- package/dist/adapters/BoxPlotChart.config-BOAvoj6x.cjs +1 -0
- package/dist/adapters/BoxPlotChart.config-CTXiycYY.js +2 -0
- package/dist/adapters/BubbleChart.config-CGFIkl4H.cjs +1 -0
- package/dist/adapters/BubbleChart.config-Njxx4Eq1.js +2 -0
- package/dist/adapters/CandlestickChart.config-BZ_yWaSo.cjs +1 -0
- package/dist/adapters/CandlestickChart.config-D4Svhmef.js +2 -0
- package/dist/adapters/DataTable.config-B-bT9puT.js +2 -0
- package/dist/adapters/DataTable.config-BHtt1cPM.cjs +1 -0
- package/dist/adapters/FunnelChart.config-C1e07O7B.cjs +1 -0
- package/dist/adapters/FunnelChart.config-CVEy0tV9.js +2 -0
- package/dist/adapters/GaugeChart.config-5PLNlQlu.js +2 -0
- package/dist/adapters/GaugeChart.config-Cdv6knjZ.cjs +1 -0
- package/dist/adapters/HeatMapChart.config-MGTfYpWJ.js +2 -0
- package/dist/adapters/HeatMapChart.config-jfBEi1ZI.cjs +1 -0
- package/dist/adapters/KpiDelta.config-D2IUsEYz.cjs +1 -0
- package/dist/adapters/KpiDelta.config-DT_MmAHw.js +2 -0
- package/dist/adapters/KpiNumber.config-ChgbKmx8.cjs +1 -0
- package/dist/adapters/KpiNumber.config-CvZ_FhyL.js +2 -0
- package/dist/adapters/KpiText.config-Bgkw8gr2.js +2 -0
- package/dist/adapters/KpiText.config-Bz9orqt6.cjs +1 -0
- package/dist/adapters/LineChart.config-BVew35dI.cjs +1 -0
- package/dist/adapters/LineChart.config-DSCCKXNg.js +2 -0
- package/dist/adapters/MarkdownChart.config-Bu6XUuhI.js +2 -0
- package/dist/adapters/MarkdownChart.config-E4aSVTf3.cjs +1 -0
- package/dist/adapters/MeasureProfileChart.config-BF249hc_.cjs +1 -0
- package/dist/adapters/MeasureProfileChart.config-lERVe38G.js +2 -0
- package/dist/adapters/PieChart.config-7Ujwp8R5.cjs +1 -0
- package/dist/adapters/PieChart.config-jQl2HIcA.js +2 -0
- package/dist/adapters/ProportionBarChart.config-o0w_Pnlt.js +2 -0
- package/dist/adapters/ProportionBarChart.config-phNohhhY.cjs +1 -0
- package/dist/adapters/RadarChart.config-BmrYBd9x.js +2 -0
- package/dist/adapters/RadarChart.config-Dlt3UflG.cjs +1 -0
- package/dist/adapters/RadialBarChart.config-CeEm8xRb.cjs +1 -0
- package/dist/adapters/RadialBarChart.config-Dishh6bC.js +2 -0
- package/dist/adapters/RetentionCombinedChart.config-BaD4ev85.cjs +1 -0
- package/dist/adapters/RetentionCombinedChart.config-m2FjBUi9.js +2 -0
- package/dist/adapters/RetentionHeatmap.config-DiMplGdk.js +2 -0
- package/dist/adapters/RetentionHeatmap.config-Dp6oYwQZ.cjs +1 -0
- package/dist/adapters/SankeyChart.config-C4Y6qzCS.cjs +1 -0
- package/dist/adapters/SankeyChart.config-CJHqgjQ1.js +2 -0
- package/dist/adapters/ScatterChart.config-C0QqvDrN.cjs +1 -0
- package/dist/adapters/ScatterChart.config-DywOsWPW.js +2 -0
- package/dist/adapters/SunburstChart.config-DE8RxpDR.cjs +1 -0
- package/dist/adapters/SunburstChart.config-DohowrO3.js +2 -0
- package/dist/adapters/TreeMapChart.config-D2gXz-zC.cjs +1 -0
- package/dist/adapters/TreeMapChart.config-HMlI29GG.js +2 -0
- package/dist/adapters/WaterfallChart.config-BO2WV2VB.js +2 -0
- package/dist/adapters/WaterfallChart.config-CzwGiheB.cjs +1 -0
- package/dist/adapters/{compiler-CGJQlQ6Q.cjs → compiler-BNjqYdmc.cjs} +1 -1
- package/dist/adapters/{compiler-mz2Uudwd.js → compiler-DiYxWAKg.js} +1 -1
- package/dist/adapters/core/index.cjs +1 -1
- package/dist/adapters/core/index.js +1 -1
- package/dist/adapters/{core-4WY4M7hp.js → core-BOPRmxPc.js} +2 -2
- package/dist/adapters/{core-FpI2NfHt.cjs → core-CzFfrJzu.cjs} +1 -1
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.js +5 -5
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.js +5 -5
- package/dist/adapters/{handler-PjEeNmXY.js → handler-DGud-C-w.js} +31 -32
- package/dist/adapters/{handler-g8k2CZG2.cjs → handler-m6WgA9xu.cjs} +3 -3
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +4 -4
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.js +2 -2
- package/dist/adapters/mcp-transport-B0b27YUB.cjs +40 -0
- package/dist/adapters/mcp-transport-BXyA4dTk.js +603 -0
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +5 -5
- package/dist/adapters/{openai-DHjN2OwG.js → openai-CGJM6Qun.js} +1 -1
- package/dist/adapters/{openai-DnWF0wCU.cjs → openai-CmdN7Sj1.cjs} +1 -1
- package/dist/adapters/{openai-CcY2fW3E.js → openai-Crp3X_zg.js} +1 -1
- package/dist/adapters/{openai-7xjDI7R2.cjs → openai-Dwt9bxOE.cjs} +1 -1
- package/dist/adapters/utils-BoOeig94.cjs +128 -0
- package/dist/adapters/{utils-G52pPkce.js → utils-DboNUT3A.js} +24 -2
- package/dist/adapters/utils.cjs +1 -1
- package/dist/adapters/utils.js +1 -1
- package/dist/cjs/client/charts/chartConfigs.d.ts +1 -1
- package/dist/cjs/client/components/DashboardPortletCard.d.ts +1 -1
- package/dist/cjs/client/components/PortletGroupCard.d.ts +18 -0
- package/dist/cjs/client/components/RowManagedLayout.d.ts +15 -3
- package/dist/cjs/client/components/charts/GaugeChart.d.ts +8 -0
- package/dist/cjs/client/components/charts/gaugeChartHelpers.d.ts +117 -12
- package/dist/cjs/client/components/dashboard/DashboardContext.d.ts +5 -1
- package/dist/cjs/client/components/dashboard/dashboardGridUtils.d.ts +2 -4
- package/dist/cjs/client/components/dashboardPortletCard/EditActionButtons.d.ts +34 -0
- package/dist/cjs/client/components/dashboardPortletCard/PortletCardHeader.d.ts +2 -12
- package/dist/cjs/client/components/dashboardPortletCard/PortletFloatingActions.d.ts +24 -0
- package/dist/cjs/client/components/dashboardPortletCard/cardStyles.d.ts +5 -0
- package/dist/cjs/client/components/dashboardPortletCard/propsEqual.d.ts +2 -0
- package/dist/cjs/client/components/mobileStackedLayout/memberDisplay.d.ts +21 -0
- package/dist/cjs/client/components.d.ts +1 -1
- package/dist/cjs/client/hooks/dashboard/groupGeometry.d.ts +23 -0
- package/dist/cjs/client/hooks/dashboard/groupUtils.d.ts +57 -0
- package/dist/cjs/client/hooks/dashboard/layoutUtils.d.ts +34 -3
- package/dist/cjs/client/hooks/dashboard/useDashboardController.d.ts +11 -3
- package/dist/cjs/client/hooks/dashboard/useRowLayoutEngine.d.ts +12 -2
- package/dist/cjs/client/hooks/useDashboardHook.d.ts +14 -1
- package/dist/cjs/client/index.d.ts +1 -1
- package/dist/cjs/client/stores/dashboardStore.d.ts +11 -1
- package/dist/cjs/client/types.d.ts +30 -1
- package/dist/client/charts/chartConfigs.d.ts +1 -1
- package/dist/client/charts.js +12 -12
- package/dist/client/chunks/{DashboardEditModal-BEG0d7wI.js → DashboardEditModal-BOfLdTgV.js} +3360 -2372
- package/dist/client/chunks/DashboardEditModal-BOfLdTgV.js.map +1 -0
- package/dist/client/chunks/{ProportionBarChart-xLX6XD4W.js → ProportionBarChart-DwoXU5VP.js} +3 -3
- package/dist/client/chunks/{ProportionBarChart-xLX6XD4W.js.map → ProportionBarChart-DwoXU5VP.js.map} +1 -1
- package/dist/client/chunks/{RetentionCombinedChart-DeFz5wJh.js → RetentionCombinedChart-BqlSV7yF.js} +3 -3
- package/dist/client/chunks/{RetentionCombinedChart-DeFz5wJh.js.map → RetentionCombinedChart-BqlSV7yF.js.map} +1 -1
- package/dist/client/chunks/{RetentionHeatmap-DkJOiNwz.js → RetentionHeatmap-VdVkBg8Q.js} +2 -2
- package/dist/client/chunks/{RetentionHeatmap-DkJOiNwz.js.map → RetentionHeatmap-VdVkBg8Q.js.map} +1 -1
- package/dist/client/chunks/{af-ZA-BTaChuqI.js → af-ZA-C0dGb_53.js} +7 -3
- package/dist/client/chunks/af-ZA-C0dGb_53.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-BWLL6ztg.js → analysis-builder-DXw60SEs.js} +9 -9
- package/dist/client/chunks/{analysis-builder-BWLL6ztg.js.map → analysis-builder-DXw60SEs.js.map} +1 -1
- package/dist/client/chunks/{analysis-builder-shared-Ba3JsRNw.js → analysis-builder-shared-CEvHIlmk.js} +9 -9
- package/dist/client/chunks/{analysis-builder-shared-Ba3JsRNw.js.map → analysis-builder-shared-CEvHIlmk.js.map} +1 -1
- package/dist/client/chunks/{chart-activity-grid-CyVDJSAI.js → chart-activity-grid-4jfS8khG.js} +27 -5
- package/dist/client/chunks/chart-activity-grid-4jfS8khG.js.map +1 -0
- package/dist/client/chunks/{chart-area-b5UAS6NZ.js → chart-area-Dol6s9no.js} +2 -2
- package/dist/client/chunks/{chart-area-b5UAS6NZ.js.map → chart-area-Dol6s9no.js.map} +1 -1
- package/dist/client/chunks/{chart-bar-aVNonvWw.js → chart-bar-5_niozi2.js} +3 -3
- package/dist/client/chunks/{chart-bar-aVNonvWw.js.map → chart-bar-5_niozi2.js.map} +1 -1
- package/dist/client/chunks/{chart-box-plot-Bx6M97VL.js → chart-box-plot-Dhp-VwhD.js} +2 -2
- package/dist/client/chunks/{chart-box-plot-Bx6M97VL.js.map → chart-box-plot-Dhp-VwhD.js.map} +1 -1
- package/dist/client/chunks/{chart-bubble-EWd4_ucG.js → chart-bubble-BM2BAMSo.js} +2 -2
- package/dist/client/chunks/{chart-bubble-EWd4_ucG.js.map → chart-bubble-BM2BAMSo.js.map} +1 -1
- package/dist/client/chunks/{chart-candlestick-CG5EX67b.js → chart-candlestick-BNwLIBfm.js} +2 -2
- package/dist/client/chunks/{chart-candlestick-CG5EX67b.js.map → chart-candlestick-BNwLIBfm.js.map} +1 -1
- package/dist/client/chunks/{chart-config-gauge-DNafFwfS.js → chart-config-gauge-CJktdjox.js} +3 -4
- package/dist/client/chunks/chart-config-gauge-CJktdjox.js.map +1 -0
- package/dist/client/chunks/{chart-data-table-D6Cu86m_.js → chart-data-table-DoDHQRe7.js} +4 -4
- package/dist/client/chunks/chart-data-table-DoDHQRe7.js.map +1 -0
- package/dist/client/chunks/{chart-funnel-CLRYMbFj.js → chart-funnel-Cd7da_sa.js} +2 -2
- package/dist/client/chunks/{chart-funnel-CLRYMbFj.js.map → chart-funnel-Cd7da_sa.js.map} +1 -1
- package/dist/client/chunks/{chart-gauge-BRqb8eNU.js → chart-gauge-DOpul-Oz.js} +169 -116
- package/dist/client/chunks/chart-gauge-DOpul-Oz.js.map +1 -0
- package/dist/client/chunks/{chart-heat-map-BCfr3nYJ.js → chart-heat-map-CeKbK655.js} +3 -3
- package/dist/client/chunks/{chart-heat-map-BCfr3nYJ.js.map → chart-heat-map-CeKbK655.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-delta-ISxzG6g_.js → chart-kpi-delta-Dq8qUOOT.js} +3 -3
- package/dist/client/chunks/{chart-kpi-delta-ISxzG6g_.js.map → chart-kpi-delta-Dq8qUOOT.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-number-OmRCPf7D.js → chart-kpi-number-DgiqTi9g.js} +5 -5
- package/dist/client/chunks/{chart-kpi-number-OmRCPf7D.js.map → chart-kpi-number-DgiqTi9g.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-text-BUm932QA.js → chart-kpi-text-CsZMVEnM.js} +3 -3
- package/dist/client/chunks/{chart-kpi-text-BUm932QA.js.map → chart-kpi-text-CsZMVEnM.js.map} +1 -1
- package/dist/client/chunks/{chart-line-BM_DrpQW.js → chart-line-DlwOB7C7.js} +3 -3
- package/dist/client/chunks/{chart-line-BM_DrpQW.js.map → chart-line-DlwOB7C7.js.map} +1 -1
- package/dist/client/chunks/{chart-markdown-BNrsZpqM.js → chart-markdown-DPE34SjC.js} +2 -2
- package/dist/client/chunks/{chart-markdown-BNrsZpqM.js.map → chart-markdown-DPE34SjC.js.map} +1 -1
- package/dist/client/chunks/{chart-measure-profile-DttUWxIu.js → chart-measure-profile-BpTz1fce.js} +3 -3
- package/dist/client/chunks/{chart-measure-profile-DttUWxIu.js.map → chart-measure-profile-BpTz1fce.js.map} +1 -1
- package/dist/client/chunks/{chart-pie-D7pxCMll.js → chart-pie-FGw66XAH.js} +3 -3
- package/dist/client/chunks/{chart-pie-D7pxCMll.js.map → chart-pie-FGw66XAH.js.map} +1 -1
- package/dist/client/chunks/{chart-radar-sUnyHn3a.js → chart-radar-D-eRDoiA.js} +3 -3
- package/dist/client/chunks/{chart-radar-sUnyHn3a.js.map → chart-radar-D-eRDoiA.js.map} +1 -1
- package/dist/client/chunks/{chart-radial-bar-Df9zbhst.js → chart-radial-bar-DgtkNTs3.js} +3 -3
- package/dist/client/chunks/{chart-radial-bar-Df9zbhst.js.map → chart-radial-bar-DgtkNTs3.js.map} +1 -1
- package/dist/client/chunks/{chart-sankey-d_iS5fjB.js → chart-sankey-D0hhb_EQ.js} +2 -2
- package/dist/client/chunks/{chart-sankey-d_iS5fjB.js.map → chart-sankey-D0hhb_EQ.js.map} +1 -1
- package/dist/client/chunks/{chart-scatter-DD5v7r4K.js → chart-scatter-D9EcAiMQ.js} +3 -3
- package/dist/client/chunks/{chart-scatter-DD5v7r4K.js.map → chart-scatter-D9EcAiMQ.js.map} +1 -1
- package/dist/client/chunks/{chart-sunburst-jL5f9PiB.js → chart-sunburst-DCYmJ5DU.js} +3 -3
- package/dist/client/chunks/{chart-sunburst-jL5f9PiB.js.map → chart-sunburst-DCYmJ5DU.js.map} +1 -1
- package/dist/client/chunks/{chart-tree-map-DK-pNvh4.js → chart-tree-map-D_ACSSiB.js} +3 -3
- package/dist/client/chunks/{chart-tree-map-DK-pNvh4.js.map → chart-tree-map-D_ACSSiB.js.map} +1 -1
- package/dist/client/chunks/{chart-waterfall-CBGewe2Z.js → chart-waterfall-CVUVNa1R.js} +3 -3
- package/dist/client/chunks/{chart-waterfall-CBGewe2Z.js.map → chart-waterfall-CVUVNa1R.js.map} +1 -1
- package/dist/client/chunks/{charts-core-BHjcM-rm.js → charts-core-BPD_hLaL.js} +2 -2
- package/dist/client/chunks/{charts-core-BHjcM-rm.js.map → charts-core-BPD_hLaL.js.map} +1 -1
- package/dist/client/chunks/charts-loader-CwMcOfwT.js +85 -0
- package/dist/client/chunks/{charts-loader-FXj1JiQZ.js.map → charts-loader-CwMcOfwT.js.map} +1 -1
- package/dist/client/chunks/{nl-NL-B1MNDJT-.js → nl-NL-DFLVORiD.js} +25 -3
- package/dist/client/chunks/nl-NL-DFLVORiD.js.map +1 -0
- package/dist/client/chunks/{schema-visualization-BXdd320w.js → schema-visualization-C6g_LCiA.js} +3 -3
- package/dist/client/chunks/{schema-visualization-BXdd320w.js.map → schema-visualization-C6g_LCiA.js.map} +1 -1
- package/dist/client/chunks/{useDirtyStateTracking-CFgSTyny.js → useDirtyStateTracking-ZfChDEd3.js} +4 -4
- package/dist/client/chunks/{useDirtyStateTracking-CFgSTyny.js.map → useDirtyStateTracking-ZfChDEd3.js.map} +1 -1
- package/dist/client/chunks/{useExplainAI-CisDjZNp.js → useExplainAI-im9e1rVb.js} +4 -4
- package/dist/client/chunks/{useExplainAI-CisDjZNp.js.map → useExplainAI-im9e1rVb.js.map} +1 -1
- package/dist/client/chunks/{vendor-D5xADz_A.js → vendor-Qa1s8oSX.js} +2 -2
- package/dist/client/chunks/{vendor-D5xADz_A.js.map → vendor-Qa1s8oSX.js.map} +1 -1
- package/dist/client/components/DashboardPortletCard.d.ts +1 -1
- package/dist/client/components/PortletGroupCard.d.ts +18 -0
- package/dist/client/components/RowManagedLayout.d.ts +15 -3
- package/dist/client/components/charts/GaugeChart.d.ts +8 -0
- package/dist/client/components/charts/gaugeChartHelpers.d.ts +117 -12
- package/dist/client/components/dashboard/DashboardContext.d.ts +5 -1
- package/dist/client/components/dashboard/dashboardGridUtils.d.ts +2 -4
- package/dist/client/components/dashboardPortletCard/EditActionButtons.d.ts +34 -0
- package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +2 -12
- package/dist/client/components/dashboardPortletCard/PortletFloatingActions.d.ts +24 -0
- package/dist/client/components/dashboardPortletCard/cardStyles.d.ts +5 -0
- package/dist/client/components/dashboardPortletCard/propsEqual.d.ts +2 -0
- package/dist/client/components/mobileStackedLayout/memberDisplay.d.ts +21 -0
- package/dist/client/components.d.ts +1 -1
- package/dist/client/components.js +1 -1
- package/dist/client/hooks/dashboard/groupGeometry.d.ts +23 -0
- package/dist/client/hooks/dashboard/groupUtils.d.ts +57 -0
- package/dist/client/hooks/dashboard/layoutUtils.d.ts +34 -3
- package/dist/client/hooks/dashboard/useDashboardController.d.ts +11 -3
- package/dist/client/hooks/dashboard/useRowLayoutEngine.d.ts +12 -2
- package/dist/client/hooks/useDashboardHook.d.ts +14 -1
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons.js +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +13 -13
- package/dist/client/providers.js +1 -1
- package/dist/client/schema.js +1 -1
- package/dist/client/stores/dashboardStore.d.ts +11 -1
- package/dist/client/styles.css +1 -1
- package/dist/client/types.d.ts +30 -1
- package/dist/client/utils.js +4 -4
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +87 -87
- package/dist/server/index.cjs +3 -3
- package/dist/server/index.js +26 -5
- package/package.json +1 -1
- package/dist/adapters/ActivityGridChart.config-CA4DWvoH.js +0 -2
- package/dist/adapters/ActivityGridChart.config-DC2PXV56.cjs +0 -1
- package/dist/adapters/AreaChart.config-BY4hUUJY.js +0 -2
- package/dist/adapters/AreaChart.config-CPwW53vL.cjs +0 -1
- package/dist/adapters/BarChart.config-Be-PGzp5.js +0 -2
- package/dist/adapters/BarChart.config-CfdsJtHY.cjs +0 -1
- package/dist/adapters/BoxPlotChart.config-BYwJZm4S.js +0 -2
- package/dist/adapters/BoxPlotChart.config-BoZN94lR.cjs +0 -1
- package/dist/adapters/BubbleChart.config-DX9aSqMD.js +0 -2
- package/dist/adapters/BubbleChart.config-ijpB_fme.cjs +0 -1
- package/dist/adapters/CandlestickChart.config-C3iEXUN1.js +0 -2
- package/dist/adapters/CandlestickChart.config-DIGeboSZ.cjs +0 -1
- package/dist/adapters/DataTable.config-BjFTY-Md.js +0 -2
- package/dist/adapters/DataTable.config-ClJZRtsp.cjs +0 -1
- package/dist/adapters/FunnelChart.config-DYDd9Y2z.cjs +0 -1
- package/dist/adapters/FunnelChart.config-cVxnY9hD.js +0 -2
- package/dist/adapters/GaugeChart.config-BxWKW2b5.js +0 -2
- package/dist/adapters/GaugeChart.config-DsmevM9y.cjs +0 -1
- package/dist/adapters/HeatMapChart.config-BhO-Wj54.js +0 -2
- package/dist/adapters/HeatMapChart.config-HWcgNRuG.cjs +0 -1
- package/dist/adapters/KpiDelta.config-D3JOnd5n.js +0 -2
- package/dist/adapters/KpiDelta.config-DmLmTPSH.cjs +0 -1
- package/dist/adapters/KpiNumber.config-CVghzBbF.cjs +0 -1
- package/dist/adapters/KpiNumber.config-aK-Ueuhk.js +0 -2
- package/dist/adapters/KpiText.config-DLl8NWit.js +0 -2
- package/dist/adapters/KpiText.config-DbWJ42vd.cjs +0 -1
- package/dist/adapters/LineChart.config-C3i3Tgro.cjs +0 -1
- package/dist/adapters/LineChart.config-El3XPCFT.js +0 -2
- package/dist/adapters/MarkdownChart.config-D39QzWHW.js +0 -2
- package/dist/adapters/MarkdownChart.config-e_9gUs93.cjs +0 -1
- package/dist/adapters/MeasureProfileChart.config-BWQ82qcV.js +0 -2
- package/dist/adapters/MeasureProfileChart.config-l9WITF80.cjs +0 -1
- package/dist/adapters/PieChart.config-CO3Gib0h.js +0 -2
- package/dist/adapters/PieChart.config-yqXTNkix.cjs +0 -1
- package/dist/adapters/ProportionBarChart.config-B7CtjFwg.cjs +0 -1
- package/dist/adapters/ProportionBarChart.config-tGjQou_c.js +0 -2
- package/dist/adapters/RadarChart.config-B2YZnD_e.js +0 -2
- package/dist/adapters/RadarChart.config-DwJmHK8y.cjs +0 -1
- package/dist/adapters/RadialBarChart.config-B9XP-cQ1.cjs +0 -1
- package/dist/adapters/RadialBarChart.config-y2riBDwJ.js +0 -2
- package/dist/adapters/RetentionCombinedChart.config-Fzxwm_WV.cjs +0 -1
- package/dist/adapters/RetentionCombinedChart.config-ohy-zQbu.js +0 -2
- package/dist/adapters/RetentionHeatmap.config-0ykBWgUp.js +0 -2
- package/dist/adapters/RetentionHeatmap.config-DF_4ARr0.cjs +0 -1
- package/dist/adapters/SankeyChart.config-ChdkKqAn.cjs +0 -1
- package/dist/adapters/SankeyChart.config-Cl8kxpKq.js +0 -2
- package/dist/adapters/ScatterChart.config-BIqh_Z8u.cjs +0 -1
- package/dist/adapters/ScatterChart.config-D4v0Z_w4.js +0 -2
- package/dist/adapters/SunburstChart.config-CGMw6hSr.cjs +0 -1
- package/dist/adapters/SunburstChart.config-CmK6DVYQ.js +0 -2
- package/dist/adapters/TreeMapChart.config-B6WC-TVm.js +0 -2
- package/dist/adapters/TreeMapChart.config-q-kBddZC.cjs +0 -1
- package/dist/adapters/WaterfallChart.config-BiOMGjjF.cjs +0 -1
- package/dist/adapters/WaterfallChart.config-C_K8zN09.js +0 -2
- package/dist/adapters/mcp-transport-OBc8jVG5.js +0 -603
- package/dist/adapters/mcp-transport-n1r1Kqzn.cjs +0 -40
- package/dist/adapters/utils-DJ0_72_G.cjs +0 -128
- package/dist/client/chunks/DashboardEditModal-BEG0d7wI.js.map +0 -1
- package/dist/client/chunks/af-ZA-BTaChuqI.js.map +0 -1
- package/dist/client/chunks/chart-activity-grid-CyVDJSAI.js.map +0 -1
- package/dist/client/chunks/chart-config-gauge-DNafFwfS.js.map +0 -1
- package/dist/client/chunks/chart-data-table-D6Cu86m_.js.map +0 -1
- package/dist/client/chunks/chart-gauge-BRqb8eNU.js.map +0 -1
- package/dist/client/chunks/charts-loader-FXj1JiQZ.js +0 -85
- package/dist/client/chunks/nl-NL-B1MNDJT-.js.map +0 -1
|
@@ -542,7 +542,7 @@ var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescr
|
|
|
542
542
|
"chart.configText.add_2_or_more_measures_they_become_the_x_axis_categories_in_the_order_li": "Add 2 or more measures — they become the X-axis categories in the order listed",
|
|
543
543
|
"chart.configText.add_an_accent_colored_border_on_one_side_of_the_content": "Add an accent-colored border on one side of the content",
|
|
544
544
|
"chart.configText.all_fields_to_display_as_columns": "All fields to display as columns",
|
|
545
|
-
"chart.
|
|
545
|
+
"chart.gauge.thresholds.description": "Each band runs from its value up to the next one. Values are on the gauge’s own scale.",
|
|
546
546
|
"chart.configText.axes_categories": "Axes (Categories)",
|
|
547
547
|
"chart.configText.bubble_colour": "Bubble Colour",
|
|
548
548
|
"chart.configText.bubble_labels": "Bubble Labels",
|
|
@@ -1439,11 +1439,29 @@ var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescr
|
|
|
1439
1439
|
"dashboard.deletePortletConfirm": "Are you sure you want to delete",
|
|
1440
1440
|
"dashboard.deletePortletSuffix": "? This action cannot be undone.",
|
|
1441
1441
|
"dashboard.thisPortlet": "this portlet",
|
|
1442
|
+
"dashboard.portlet.action.edit": "Edit portlet",
|
|
1443
|
+
"dashboard.portlet.action.duplicate": "Duplicate portlet",
|
|
1444
|
+
"dashboard.portlet.action.delete": "Delete portlet",
|
|
1445
|
+
"dashboard.portlet.action.refresh": "Refresh portlet",
|
|
1446
|
+
"dashboard.portlet.action.drag": "Drag portlet",
|
|
1447
|
+
"dashboard.portlet.action.filterConfig": "Configure dashboard filters",
|
|
1448
|
+
"dashboard.portlet.action.filterConfigActive": "Configure dashboard filters ({count} active)",
|
|
1449
|
+
"dashboard.group.rename": "Rename group",
|
|
1450
|
+
"dashboard.group.drag": "Drag group",
|
|
1451
|
+
"dashboard.group.titlePlaceholder": "Group title",
|
|
1452
|
+
"dashboard.group.ungroup": "Ungroup",
|
|
1453
|
+
"dashboard.group.delete": "Delete group",
|
|
1454
|
+
"dashboard.group.deleteTitle": "Delete Group",
|
|
1455
|
+
"dashboard.group.deleteConfirm": "Are you sure you want to delete this group and all {count} portlets inside it? This action cannot be undone.",
|
|
1442
1456
|
"dashboard.editModal.dashboardName": "Dashboard Name",
|
|
1443
1457
|
"dashboard.editModal.enterDashboardName": "Enter dashboard name...",
|
|
1444
1458
|
"dashboard.editModal.descriptionOptional": "Description (optional)",
|
|
1445
1459
|
"dashboard.editModal.enterDescription": "Enter description...",
|
|
1446
1460
|
"portlet.configRequired": "Configuration Required",
|
|
1461
|
+
"portlet.copyToClipboard": "Copy chart to clipboard",
|
|
1462
|
+
"portlet.copied": "Copied!",
|
|
1463
|
+
"portlet.downloadXlsx": "Download data as XLSX",
|
|
1464
|
+
"portlet.exporting": "Exporting...",
|
|
1447
1465
|
"portlet.configRequiredHint": "Please configure this chart",
|
|
1448
1466
|
"portlet.queryError": "Query Error",
|
|
1449
1467
|
"portlet.queryWithFilters": "Query (with filters applied)",
|
|
@@ -1567,7 +1585,11 @@ var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescr
|
|
|
1567
1585
|
"chart.option.proportionBarLabels.label": "Show labels",
|
|
1568
1586
|
"chart.runtime.summarySince": "since {period}",
|
|
1569
1587
|
"chart.option.showPoints.label": "Show data points",
|
|
1570
|
-
"chart.option.showPoints.description": "Draw a marker at every data point. Turn off for dense series, where the markers obscure the line"
|
|
1588
|
+
"chart.option.showPoints.description": "Draw a marker at every data point. Turn off for dense series, where the markers obscure the line",
|
|
1589
|
+
"chart.gauge.thresholds.from": "Band starts at",
|
|
1590
|
+
"chart.gauge.thresholds.colour": "Band colour",
|
|
1591
|
+
"chart.gauge.thresholds.add": "Add band",
|
|
1592
|
+
"chart.gauge.thresholds.remove": "Remove band"
|
|
1571
1593
|
};
|
|
1572
1594
|
function f(e, t) {
|
|
1573
1595
|
let n = d[e];
|
package/dist/adapters/utils.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-BoOeig94.cjs");exports.buildTransformedQuery=e.t,exports.calculateQueryComplexity=e.n,exports.formatCubeResponse=e.r,exports.formatErrorResponse=e.i,exports.formatMetaResponse=e.a,exports.formatSqlResponse=e.o,exports.formatSqlString=e.S,exports.generateRequestId=e.s,exports.getDatabaseType=e.c,exports.handleBatchRequest=e.l,exports.handleDiscover=e.p,exports.handleDryRun=e.u,exports.handleLoad=e.m,exports.handleSuggest=e.d,exports.handleValidate=e.f,exports.normalizeQueryFields=e.h;
|
package/dist/adapters/utils.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { S as e, a as t, c as n, d as r, f as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "./utils-
|
|
1
|
+
import { S as e, a as t, c as n, d as r, f as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "./utils-DboNUT3A.js";
|
|
2
2
|
export { m as buildTransformedQuery, l as calculateQueryComplexity, f as formatCubeResponse, o as formatErrorResponse, t as formatMetaResponse, u as formatSqlResponse, e as formatSqlString, p as generateRequestId, n as getDatabaseType, s as handleBatchRequest, d as handleDiscover, h as handleDryRun, c as handleLoad, r as handleSuggest, i as handleValidate, a as normalizeQueryFields };
|
|
@@ -28,7 +28,7 @@ export interface DisplayOptionConfig {
|
|
|
28
28
|
/** Display label for the option */
|
|
29
29
|
label: string;
|
|
30
30
|
/** Type of input control to render */
|
|
31
|
-
type: 'boolean' | 'string' | 'number' | 'select' | 'color' | 'paletteColor' | 'axisFormat' | 'stringArray' | 'buttonGroup';
|
|
31
|
+
type: 'boolean' | 'string' | 'number' | 'select' | 'color' | 'paletteColor' | 'axisFormat' | 'stringArray' | 'buttonGroup' | 'thresholdBands';
|
|
32
32
|
/** Default value for the option */
|
|
33
33
|
defaultValue?: any;
|
|
34
34
|
/** Placeholder text for string/number inputs */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { DashboardPortletCardProps } from './dashboardPortletCard/propsEqual.js';
|
|
3
|
-
declare const DashboardPortletCard: React.MemoExoticComponent<({ portlet, editable, layoutMode, dashboardFilters, configEagerLoad, loadingComponent, colorPalette, containerProps, headerProps, setPortletRef, setPortletComponentRef, callbacks, icons }: DashboardPortletCardProps) => React.JSX.Element>;
|
|
3
|
+
declare const DashboardPortletCard: React.MemoExoticComponent<({ portlet, editable, layoutMode, dashboardFilters, configEagerLoad, loadingComponent, colorPalette, containerProps, headerProps, variant, setPortletRef, setPortletComponentRef, callbacks, icons }: DashboardPortletCardProps) => React.JSX.Element>;
|
|
4
4
|
export default DashboardPortletCard;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DragEvent, HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import { PortletConfig, PortletGroup } from '../types.js';
|
|
3
|
+
export interface PortletGroupCardProps {
|
|
4
|
+
group: PortletGroup;
|
|
5
|
+
portlets: Map<string, PortletConfig>;
|
|
6
|
+
canEdit: boolean;
|
|
7
|
+
/** Renders one child portlet with group chrome (no border, no header). */
|
|
8
|
+
renderChild: (portlet: PortletConfig, wrapperProps: HTMLAttributes<HTMLDivElement>) => ReactNode;
|
|
9
|
+
onRename: (groupId: string, title: string) => void;
|
|
10
|
+
onUngroup: (groupId: string) => void;
|
|
11
|
+
onDelete: (groupId: string) => void;
|
|
12
|
+
/** Fired when a child starts being dragged out of, or around within, the group. */
|
|
13
|
+
onChildDragStart: (groupId: string, portletId: string, event: DragEvent<HTMLDivElement>) => void;
|
|
14
|
+
onChildDragEnd: () => void;
|
|
15
|
+
/** Snap bands rendered inside each child; supplied by the row layout. */
|
|
16
|
+
renderSnapBands?: (portletId: string) => ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export default function PortletGroupCard({ group, portlets, canEdit, renderChild, onRename, onUngroup, onDelete, onChildDragStart, onChildDragEnd, renderSnapBands }: PortletGroupCardProps): import("react").JSX.Element;
|
|
@@ -1,19 +1,31 @@
|
|
|
1
1
|
import { HTMLAttributes, ReactNode, MouseEvent, DragEvent } from 'react';
|
|
2
|
-
import { DashboardGridSettings, PortletConfig, RowLayout } from '../types.js';
|
|
2
|
+
import { DashboardGridSettings, PortletConfig, PortletGroup, RowLayout } from '../types.js';
|
|
3
|
+
import { SnapEdge } from '../hooks/dashboard/groupUtils.js';
|
|
3
4
|
interface RowManagedLayoutProps {
|
|
4
5
|
rows: RowLayout[];
|
|
5
6
|
portlets: PortletConfig[];
|
|
7
|
+
groups?: PortletGroup[];
|
|
6
8
|
gridSettings: DashboardGridSettings;
|
|
7
9
|
gridWidth: number;
|
|
8
10
|
canEdit: boolean;
|
|
9
11
|
isDragging: boolean;
|
|
10
12
|
onRowResize: (rowIndex: number, event: MouseEvent<HTMLDivElement>) => void;
|
|
11
13
|
onColumnResize: (rowIndex: number, columnIndex: number, event: MouseEvent<HTMLDivElement>) => void;
|
|
12
|
-
onPortletDragStart: (rowIndex: number, columnIndex: number, portletId: string, event: DragEvent<HTMLDivElement
|
|
14
|
+
onPortletDragStart: (rowIndex: number, columnIndex: number, portletId: string, event: DragEvent<HTMLDivElement>,
|
|
15
|
+
/** Set when the whole column is a group being moved, not a single portlet. */
|
|
16
|
+
groupId?: string) => void;
|
|
13
17
|
onPortletDragEnd: () => void;
|
|
14
18
|
onRowDrop: (rowIndex: number, insertIndex: number | null) => void;
|
|
15
19
|
onNewRowDrop: (insertIndex: number) => void;
|
|
20
|
+
/** Snap the dragged portlet against `edge` of `targetPortletId`. */
|
|
21
|
+
onSnapDrop?: (targetPortletId: string, edge: SnapEdge) => void;
|
|
22
|
+
/** Id of the portlet currently being dragged, so it can ignore its own bands. */
|
|
23
|
+
draggingPortletId?: string | null;
|
|
24
|
+
/** Id of the group currently being dragged, so its members ignore their bands. */
|
|
25
|
+
draggingGroupId?: string | null;
|
|
16
26
|
renderPortlet: (portlet: PortletConfig, containerProps?: HTMLAttributes<HTMLDivElement>, headerProps?: HTMLAttributes<HTMLDivElement>) => ReactNode;
|
|
27
|
+
/** Renders a group column. Omitted in contexts that have no groups. */
|
|
28
|
+
renderGroup?: (group: PortletGroup, renderSnapBands: (portletId: string) => ReactNode) => ReactNode;
|
|
17
29
|
}
|
|
18
|
-
export default function RowManagedLayout({ rows, portlets, gridSettings, gridWidth, canEdit, isDragging, onRowResize, onColumnResize, onPortletDragStart, onPortletDragEnd, onRowDrop, onNewRowDrop, renderPortlet }: RowManagedLayoutProps): import("react").JSX.Element;
|
|
30
|
+
export default function RowManagedLayout({ rows, portlets, groups, gridSettings, gridWidth, canEdit, isDragging, onRowResize, onColumnResize, onPortletDragStart, onPortletDragEnd, onRowDrop, onNewRowDrop, onSnapDrop, draggingPortletId, draggingGroupId, renderPortlet, renderGroup }: RowManagedLayoutProps): import("react").JSX.Element;
|
|
19
31
|
export {};
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { ChartProps } from '../../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Gauge chart: a 270° dial whose arc *is* the threshold banding — one thick,
|
|
5
|
+
* rounded segment per threshold with a small gap between them — read by a
|
|
6
|
+
* tapered needle, with numeric scale labels at the band boundaries and the
|
|
7
|
+
* measure label + value stacked below the centre.
|
|
8
|
+
*
|
|
9
|
+
* All geometry lives in `gaugeChartHelpers.ts`; this component only renders it.
|
|
10
|
+
*/
|
|
3
11
|
declare const GaugeChart: React.MemoExoticComponent<({ data, chartConfig, displayConfig, height, }: ChartProps) => React.JSX.Element>;
|
|
4
12
|
export default GaugeChart;
|
|
@@ -1,36 +1,141 @@
|
|
|
1
1
|
import { AxisFormatConfig, ThresholdBand } from '../../types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Co-located
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Co-located geometry/value maths for {@link GaugeChart}.
|
|
4
|
+
*
|
|
5
|
+
* Everything here is pure so the component stays declarative: it reads a
|
|
6
|
+
* layout, a list of band segments, a list of scale ticks and a needle path,
|
|
7
|
+
* then renders them.
|
|
8
|
+
*
|
|
9
|
+
* ## Angle convention
|
|
10
|
+
* d3-shape's: `0` points at 12 o'clock and positive angles run clockwise. The
|
|
11
|
+
* dial sweeps 270°, from `START_ANGLE` (-135°, lower-left) to `END_ANGLE`
|
|
12
|
+
* (+135°, lower-right).
|
|
13
|
+
*
|
|
14
|
+
* ## Threshold semantics
|
|
15
|
+
* A {@link ThresholdBand}'s `value` is the **lower bound** of its band, as a
|
|
16
|
+
* 0–1 fraction of the min→max range. So `[{0, red}, {0.5, amber}, {0.7, green}]`
|
|
17
|
+
* paints 0–50% red, 50–70% amber and 70–100% green. This matches
|
|
18
|
+
* {@link resolveColor}, and the invariant
|
|
19
|
+
* `bandContaining(f).color === resolveColor(f)` holds for every `f` in [0, 1).
|
|
6
20
|
*/
|
|
21
|
+
/** Dial start: -135°, lower-left. */
|
|
7
22
|
export declare const START_ANGLE: number;
|
|
23
|
+
/** Dial end: +135°, lower-right. */
|
|
8
24
|
export declare const END_ANGLE: number;
|
|
9
|
-
|
|
10
|
-
export declare const
|
|
25
|
+
/** Total dial sweep in radians (270°). */
|
|
26
|
+
export declare const ANGLE_SPAN: number;
|
|
27
|
+
/** Neutral band colour for the region below every configured threshold. */
|
|
28
|
+
export declare const DEFAULT_FILL = "var(--dc-accent)";
|
|
29
|
+
/** Angular gap rendered between adjacent band segments (radians, ~2.3°). */
|
|
30
|
+
export declare const BAND_GAP_RADIANS = 0.04;
|
|
31
|
+
/**
|
|
32
|
+
* Height of the 270° arc's bounding box as a multiple of its radius.
|
|
33
|
+
* The arc spans y from `-r` (top) to `+r·cos45°` (the two lower tips).
|
|
34
|
+
*/
|
|
35
|
+
export declare const ARC_BBOX_HEIGHT_RATIO: number;
|
|
36
|
+
/** Width of the 270° arc's bounding box as a multiple of its radius. */
|
|
37
|
+
export declare const ARC_BBOX_WIDTH_RATIO = 2;
|
|
11
38
|
export declare function parseNum(v: unknown): number | null;
|
|
12
39
|
export declare function clamp(v: number, lo: number, hi: number): number;
|
|
40
|
+
/** A finite `value`, or `fallback` when it is undefined / NaN / infinite. */
|
|
41
|
+
export declare function finiteOr(value: number | undefined | null, fallback: number): number;
|
|
42
|
+
/** Map a 0–1 fraction of the range onto its dial angle. */
|
|
43
|
+
export declare function fractionToAngle(fraction: number): number;
|
|
13
44
|
export declare function valueToAngle(value: number, min: number, max: number): number;
|
|
45
|
+
/** Cartesian point at `angle`/`radius` in the d3 angle convention. */
|
|
46
|
+
export declare function polarPoint(angle: number, radius: number): {
|
|
47
|
+
x: number;
|
|
48
|
+
y: number;
|
|
49
|
+
};
|
|
14
50
|
export declare function resolveColor(fraction: number, thresholds: ThresholdBand[]): string;
|
|
15
|
-
export declare function buildArcPath(innerRadius: number, outerRadius: number, startAngle: number, endAngle: number): string;
|
|
51
|
+
export declare function buildArcPath(innerRadius: number, outerRadius: number, startAngle: number, endAngle: number, cornerRadius?: number): string;
|
|
16
52
|
/** Parse the displayConfig.thresholds value (array or JSON string) into bands. */
|
|
17
53
|
export declare function parseThresholds(raw: unknown): ThresholdBand[];
|
|
54
|
+
/** Clamp threshold fractions into [0, 1] and sort them ascending. */
|
|
55
|
+
export declare function normalizeThresholds(thresholds: ThresholdBand[]): ThresholdBand[];
|
|
18
56
|
export interface ThresholdArcBand {
|
|
19
57
|
color: string;
|
|
20
|
-
|
|
21
|
-
|
|
58
|
+
/** Lower bound of the band, as a 0–1 fraction of the min→max range. */
|
|
59
|
+
startFraction: number;
|
|
60
|
+
/** Upper bound of the band, as a 0–1 fraction of the min→max range. */
|
|
61
|
+
endFraction: number;
|
|
62
|
+
/** Dial angle of {@link startFraction}. */
|
|
63
|
+
startAngle: number;
|
|
64
|
+
/** Dial angle of {@link endFraction}. */
|
|
65
|
+
endAngle: number;
|
|
22
66
|
}
|
|
23
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* Split the dial into coloured bands. The bands tile the whole 0–1 range with
|
|
69
|
+
* no holes: a leading neutral band covers anything below the first threshold,
|
|
70
|
+
* and the last threshold's band runs to 1. Zero-width bands (duplicate
|
|
71
|
+
* thresholds, or one pinned at 1) are dropped.
|
|
72
|
+
*
|
|
73
|
+
* With no thresholds configured the dial is a single neutral band, so the
|
|
74
|
+
* gauge still renders a full arc.
|
|
75
|
+
*/
|
|
24
76
|
export declare function buildThresholdBands(thresholds: ThresholdBand[]): ThresholdArcBand[];
|
|
77
|
+
export interface GaugeBandSegment {
|
|
78
|
+
color: string;
|
|
79
|
+
startAngle: number;
|
|
80
|
+
endAngle: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Turn logical bands into drawable segments by inserting a gap at every
|
|
84
|
+
* *internal* boundary (the dial's outer ends keep the full 270° sweep).
|
|
85
|
+
* Segments too narrow to render cleanly with rounded caps are dropped.
|
|
86
|
+
*/
|
|
87
|
+
export declare function buildBandSegments(bands: ThresholdArcBand[], gap?: number): GaugeBandSegment[];
|
|
88
|
+
export interface GaugeScaleTick {
|
|
89
|
+
fraction: number;
|
|
90
|
+
value: number;
|
|
91
|
+
angle: number;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Numeric scale ticks at the band boundaries (plus the dial's start and end).
|
|
95
|
+
* Ticks are thinned back-to-front so the max is always kept and no two labels
|
|
96
|
+
* collide.
|
|
97
|
+
*/
|
|
98
|
+
export declare function buildScaleTicks(bands: ThresholdArcBand[], minValue: number, maxValue: number): GaugeScaleTick[];
|
|
99
|
+
/** Triangular needle: wide at the hub, tapering to a point at `length`. */
|
|
100
|
+
export declare function buildNeedlePath(angle: number, length: number, halfWidth: number): string;
|
|
101
|
+
export interface GaugeLayout {
|
|
102
|
+
/** Dial centre in SVG coordinates. */
|
|
103
|
+
cx: number;
|
|
104
|
+
cy: number;
|
|
105
|
+
radius: number;
|
|
106
|
+
outerRadius: number;
|
|
107
|
+
innerRadius: number;
|
|
108
|
+
/** Corner radius that fully rounds a band segment's ends. */
|
|
109
|
+
bandCornerRadius: number;
|
|
110
|
+
/** Radius at which scale tick labels are centred (just inside the band). */
|
|
111
|
+
tickRadius: number;
|
|
112
|
+
needleLength: number;
|
|
113
|
+
needleHalfWidth: number;
|
|
114
|
+
hubRadius: number;
|
|
115
|
+
tickFontSize: number;
|
|
116
|
+
labelFontSize: number;
|
|
117
|
+
labelY: number;
|
|
118
|
+
valueFontSize: number;
|
|
119
|
+
valueY: number;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Size and position the dial so its 270° bounding box is centred in, and fits
|
|
123
|
+
* inside, a `width` x `height` box. Everything else is expressed as a ratio of
|
|
124
|
+
* the resulting radius so the gauge scales smoothly.
|
|
125
|
+
*/
|
|
126
|
+
export declare function computeGaugeLayout(width: number, height: number): GaugeLayout;
|
|
25
127
|
export interface GaugeGeometry {
|
|
26
128
|
effectiveMax: number;
|
|
27
129
|
clampedValue: number;
|
|
28
130
|
fraction: number;
|
|
29
131
|
fillColor: string;
|
|
30
|
-
fillAngle: number;
|
|
31
132
|
needleAngle: number;
|
|
32
133
|
}
|
|
33
|
-
/** Compute the gauge's clamped value, fraction,
|
|
134
|
+
/** Compute the gauge's clamped value, fraction, indicated colour and angle. */
|
|
34
135
|
export declare function computeGaugeGeometry(rawValue: number, minValue: number, maxValue: number, thresholds: ThresholdBand[]): GaugeGeometry;
|
|
35
|
-
/**
|
|
136
|
+
/**
|
|
137
|
+
* Format a gauge value. With a configured axis format this honours its unit,
|
|
138
|
+
* decimals and abbreviation (so a percent format renders `66.9%`); without one
|
|
139
|
+
* it falls back to the shared default numeric formatting (`66.94`).
|
|
140
|
+
*/
|
|
36
141
|
export declare function formatGaugeValue(value: number, yAxisFormat?: AxisFormatConfig): string;
|
|
@@ -3,7 +3,7 @@ import { LayoutItem, Layout } from 'react-grid-layout';
|
|
|
3
3
|
import { UseDashboardActions } from '../../hooks/useDashboardHook.js';
|
|
4
4
|
import { DashboardDisplayMode } from '../../hooks/useResponsiveDashboard.js';
|
|
5
5
|
import { ColorPalette } from '../../utils/colorPalettes.js';
|
|
6
|
-
import { DashboardConfig, PortletConfig, DashboardFilter, DashboardFilterMapping, CubeMeta, DashboardLayoutMode, DashboardGridSettings, RowLayout, FeaturesConfig } from '../../types.js';
|
|
6
|
+
import { DashboardConfig, PortletConfig, DashboardFilter, DashboardFilterMapping, CubeMeta, DashboardLayoutMode, DashboardGridSettings, RowLayout, PortletGroup, FeaturesConfig } from '../../types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Props accepted by DashboardProvider (the public composable entry point).
|
|
9
9
|
* Mirrors the former DashboardGridProps plus `hideToolbar` and `children`.
|
|
@@ -55,6 +55,7 @@ export interface DashboardContextValue {
|
|
|
55
55
|
isFilterConfigModalOpen: boolean;
|
|
56
56
|
filterConfigPortlet: PortletConfig | null;
|
|
57
57
|
deleteConfirmPortletId: string | null;
|
|
58
|
+
deleteConfirmGroupId: string | null;
|
|
58
59
|
draftRows: RowLayout[] | null;
|
|
59
60
|
isDraggingPortlet: boolean;
|
|
60
61
|
isInitialized: boolean;
|
|
@@ -62,8 +63,11 @@ export interface DashboardContextValue {
|
|
|
62
63
|
canChangeLayoutMode: boolean;
|
|
63
64
|
selectedFilter: DashboardFilter | null;
|
|
64
65
|
resolvedRows: RowLayout[];
|
|
66
|
+
resolvedGroups: PortletGroup[];
|
|
65
67
|
layoutMode: DashboardLayoutMode;
|
|
66
68
|
allowedModes: DashboardLayoutMode[];
|
|
69
|
+
/** Modes the toggle should offer; a subset of allowedModes. */
|
|
70
|
+
selectableModes: DashboardLayoutMode[];
|
|
67
71
|
actions: UseDashboardActions;
|
|
68
72
|
displayMode: DashboardDisplayMode;
|
|
69
73
|
scaleFactor: number;
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { CSSProperties } from 'react';
|
|
2
|
-
import { DashboardConfig, DashboardGridSettings
|
|
2
|
+
import { DashboardConfig, DashboardGridSettings } from '../../types.js';
|
|
3
3
|
export declare const DEFAULT_GRID_SETTINGS: DashboardGridSettings;
|
|
4
|
-
export
|
|
4
|
+
export { createRowId, equalizeRowColumns, equalizeColumns, adjustRowWidths, adjustInsertIndexForRemovedRow } from '../../hooks/dashboard/layoutUtils.js';
|
|
5
5
|
export declare const getGridSettings: (config: DashboardConfig) => DashboardGridSettings;
|
|
6
|
-
export declare const equalizeRowColumns: (portletIds: string[], gridSettings: DashboardGridSettings) => RowLayoutColumn[];
|
|
7
|
-
export declare const adjustRowWidths: (columns: RowLayoutColumn[], gridSettings: DashboardGridSettings) => RowLayoutColumn[];
|
|
8
6
|
/**
|
|
9
7
|
* Finds the nearest scrollable ancestor of an element.
|
|
10
8
|
* Used to detect scroll container for lazy loading IntersectionObserver.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { default as React, CSSProperties, ComponentType } from 'react';
|
|
2
|
+
import { PortletConfig } from '../../types.js';
|
|
3
|
+
export declare const ICON_STYLE: CSSProperties;
|
|
4
|
+
export interface CardIcons {
|
|
5
|
+
RefreshIcon: ComponentType<{
|
|
6
|
+
className?: string;
|
|
7
|
+
style?: CSSProperties;
|
|
8
|
+
}>;
|
|
9
|
+
EditIcon: ComponentType<{
|
|
10
|
+
className?: string;
|
|
11
|
+
style?: CSSProperties;
|
|
12
|
+
}>;
|
|
13
|
+
DeleteIcon: ComponentType<{
|
|
14
|
+
className?: string;
|
|
15
|
+
style?: CSSProperties;
|
|
16
|
+
}>;
|
|
17
|
+
CopyIcon: ComponentType<{
|
|
18
|
+
className?: string;
|
|
19
|
+
style?: CSSProperties;
|
|
20
|
+
}>;
|
|
21
|
+
FilterIcon: ComponentType<{
|
|
22
|
+
className?: string;
|
|
23
|
+
style?: CSSProperties;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
export interface EditActionButtonsProps {
|
|
27
|
+
portlet: PortletConfig;
|
|
28
|
+
icons: CardIcons;
|
|
29
|
+
onOpenFilterConfig: () => void;
|
|
30
|
+
onDuplicate: () => void;
|
|
31
|
+
onEdit: () => void;
|
|
32
|
+
onDelete: () => void;
|
|
33
|
+
}
|
|
34
|
+
export default function EditActionButtons({ portlet, icons, onOpenFilterConfig, onDuplicate, onEdit, onDelete }: EditActionButtonsProps): React.JSX.Element;
|
|
@@ -1,17 +1,7 @@
|
|
|
1
|
-
import { default as React, CSSProperties
|
|
1
|
+
import { default as React, CSSProperties } from 'react';
|
|
2
2
|
import { PortletConfig } from '../../types.js';
|
|
3
3
|
import { PortletDebugDataEntry } from '../../stores/dashboardStore.js';
|
|
4
|
-
|
|
5
|
-
className?: string;
|
|
6
|
-
style?: CSSProperties;
|
|
7
|
-
}>;
|
|
8
|
-
interface CardIcons {
|
|
9
|
-
RefreshIcon: IconComponent;
|
|
10
|
-
EditIcon: IconComponent;
|
|
11
|
-
DeleteIcon: IconComponent;
|
|
12
|
-
CopyIcon: IconComponent;
|
|
13
|
-
FilterIcon: IconComponent;
|
|
14
|
-
}
|
|
4
|
+
import { CardIcons } from './EditActionButtons.js';
|
|
15
5
|
interface PortletCardHeaderProps {
|
|
16
6
|
portlet: PortletConfig;
|
|
17
7
|
className: string;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { PortletConfig } from '../../types.js';
|
|
3
|
+
import { CardIcons } from './EditActionButtons.js';
|
|
4
|
+
interface PortletFloatingActionsProps {
|
|
5
|
+
portlet: PortletConfig;
|
|
6
|
+
icons: CardIcons;
|
|
7
|
+
/** Show the edit-only actions (drag, filter config, duplicate, edit, delete). */
|
|
8
|
+
showEditActions: boolean;
|
|
9
|
+
copyAvailable: boolean;
|
|
10
|
+
copySuccess: boolean;
|
|
11
|
+
xlsExportAvailable: boolean;
|
|
12
|
+
exportInProgress: boolean;
|
|
13
|
+
onRefresh: (options?: {
|
|
14
|
+
bustCache?: boolean;
|
|
15
|
+
}) => void;
|
|
16
|
+
onCopyToClipboard: (event: React.MouseEvent | React.TouchEvent) => void;
|
|
17
|
+
onExportXlsx: (event: React.MouseEvent | React.TouchEvent) => void;
|
|
18
|
+
onOpenFilterConfig: () => void;
|
|
19
|
+
onDuplicate: () => void;
|
|
20
|
+
onEdit: () => void;
|
|
21
|
+
onDelete: () => void;
|
|
22
|
+
}
|
|
23
|
+
export default function PortletFloatingActions({ portlet, icons, showEditActions, copyAvailable, copySuccess, xlsExportAvailable, exportInProgress, onRefresh, onCopyToClipboard, onExportXlsx, onOpenFilterConfig, onDuplicate, onEdit, onDelete }: PortletFloatingActionsProps): React.JSX.Element;
|
|
24
|
+
export {};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { CSSProperties } from 'react';
|
|
2
2
|
import { ChartType, ChartDisplayConfig } from '../../types.js';
|
|
3
|
+
/** How much chrome a card draws. Group children are frameless and headerless. */
|
|
4
|
+
export type PortletCardVariant = 'standalone' | 'groupChild';
|
|
3
5
|
export interface PortletDisplayModes {
|
|
4
6
|
isMarkdownAutoHeight: boolean;
|
|
5
7
|
isTransparentContent: boolean;
|
|
@@ -17,12 +19,14 @@ export declare function resolveDisplayModes(params: {
|
|
|
17
19
|
layoutMode: string;
|
|
18
20
|
isEditMode: boolean;
|
|
19
21
|
portletTitle?: string;
|
|
22
|
+
variant?: PortletCardVariant;
|
|
20
23
|
}): PortletDisplayModes;
|
|
21
24
|
export declare function buildContainerClassName(params: {
|
|
22
25
|
isTransparent: boolean;
|
|
23
26
|
isMarkdownAutoHeight: boolean;
|
|
24
27
|
isInSelectionMode: boolean;
|
|
25
28
|
extraClassName?: string;
|
|
29
|
+
variant?: PortletCardVariant;
|
|
26
30
|
}): string;
|
|
27
31
|
export declare function buildHeaderClassName(isEditMode: boolean, extraClassName?: string): string;
|
|
28
32
|
export declare function buildContainerStyle(params: {
|
|
@@ -30,4 +34,5 @@ export declare function buildContainerStyle(params: {
|
|
|
30
34
|
isInSelectionMode: boolean;
|
|
31
35
|
hasSelectedFilter: boolean;
|
|
32
36
|
containerStyle?: CSSProperties;
|
|
37
|
+
variant?: PortletCardVariant;
|
|
33
38
|
}): CSSProperties;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { HTMLAttributes, ReactNode, ComponentType, CSSProperties } from 'react';
|
|
2
2
|
import { ChartType, DashboardFilter, DashboardLayoutMode, PortletConfig } from '../../types.js';
|
|
3
|
+
import { PortletCardVariant } from './cardStyles.js';
|
|
3
4
|
import { ColorPalette } from '../../utils/colorPalettes.js';
|
|
4
5
|
export interface DashboardPortletCardProps {
|
|
5
6
|
portlet: PortletConfig;
|
|
6
7
|
editable: boolean;
|
|
7
8
|
layoutMode?: DashboardLayoutMode;
|
|
9
|
+
variant?: PortletCardVariant;
|
|
8
10
|
dashboardFilters?: DashboardFilter[];
|
|
9
11
|
configEagerLoad?: boolean;
|
|
10
12
|
loadingComponent?: ReactNode;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ChartAxisConfig, ChartDisplayConfig, ChartType, PortletConfig } from '../../types.js';
|
|
2
|
+
export interface MobilePortletDisplay {
|
|
3
|
+
query: string;
|
|
4
|
+
chartType: ChartType;
|
|
5
|
+
chartConfig?: ChartAxisConfig;
|
|
6
|
+
displayConfig?: ChartDisplayConfig;
|
|
7
|
+
isTransparent: boolean;
|
|
8
|
+
isAutoHeight: boolean;
|
|
9
|
+
shouldHideHeader: boolean;
|
|
10
|
+
/** Outer height in px; `isAutoHeight` callers ignore it. */
|
|
11
|
+
height: number;
|
|
12
|
+
/** Height available to the chart once header and padding are removed. */
|
|
13
|
+
contentHeight: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveMobilePortletDisplay(params: {
|
|
16
|
+
portlet: PortletConfig;
|
|
17
|
+
/** False for a portlet inside a group card, which supplies its own frame. */
|
|
18
|
+
framed: boolean;
|
|
19
|
+
/** How many portlets share the group card, so its height can be shared out. */
|
|
20
|
+
memberCount: number;
|
|
21
|
+
}): MobilePortletDisplay;
|
|
@@ -14,4 +14,4 @@ export { default as DashboardEditModal } from './components/DashboardEditModal.j
|
|
|
14
14
|
export { default as Modal } from './components/Modal.js';
|
|
15
15
|
export { default as AnalysisDisplayConfigPanel } from './components/AnalysisBuilder/AnalysisDisplayConfigPanel.js';
|
|
16
16
|
export { createDashboardLayout, generateResponsiveLayouts, generatePortletId, findNextPosition, validateCubeQuery, createSamplePortlet } from './utils/index.js';
|
|
17
|
-
export type { PortletConfig, DashboardConfig } from './types.js';
|
|
17
|
+
export type { PortletConfig, DashboardConfig, PortletGroup, PortletGroupCell } from './types.js';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { PortletGroup } from '../../types.js';
|
|
2
|
+
/** Edge of a card a drag can be dropped against. Lives here, not in
|
|
3
|
+
* `groupUtils`, so `layoutUtils` can name it without importing back. */
|
|
4
|
+
export type SnapEdge = 'top' | 'right' | 'bottom' | 'left';
|
|
5
|
+
/**
|
|
6
|
+
* Split `total` integer units across `weights` using largest-remainder, never
|
|
7
|
+
* handing out less than 1. When `total < weights.length` every entry still gets
|
|
8
|
+
* 1 and the result overflows - callers accept that rather than dropping a
|
|
9
|
+
* portlet to zero size.
|
|
10
|
+
*/
|
|
11
|
+
export declare function partitionUnits(total: number, weights: number[]): number[];
|
|
12
|
+
/**
|
|
13
|
+
* Grid-unit rectangle for every portlet in a group, given the rectangle the
|
|
14
|
+
* group itself occupies. Written back onto the portlets so grid mode, the
|
|
15
|
+
* mobile stack and thumbnails keep working without knowing groups exist.
|
|
16
|
+
*/
|
|
17
|
+
export declare function deriveGroupGeometry(group: PortletGroup, x: number, y: number, w: number, h: number): Array<{
|
|
18
|
+
portletId: string;
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
w: number;
|
|
22
|
+
h: number;
|
|
23
|
+
}>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { DashboardGridSettings, PortletConfig, PortletGroup, RowLayout } from '../../types.js';
|
|
2
|
+
import { SnapEdge } from './groupGeometry.js';
|
|
3
|
+
export { deriveGroupGeometry, partitionUnits } from './groupGeometry.js';
|
|
4
|
+
export type { SnapEdge } from './groupGeometry.js';
|
|
5
|
+
export interface GroupLayoutState {
|
|
6
|
+
rows: RowLayout[];
|
|
7
|
+
groups: PortletGroup[];
|
|
8
|
+
}
|
|
9
|
+
/** Where a portlet currently lives within the rows/groups structure. */
|
|
10
|
+
export interface PortletLocation {
|
|
11
|
+
rowIndex: number;
|
|
12
|
+
colIndex: number;
|
|
13
|
+
/** Set when the portlet lives inside a group rather than owning its column. */
|
|
14
|
+
groupId?: string;
|
|
15
|
+
cellIndex?: number;
|
|
16
|
+
stackIndex?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare const createGroupId: () => string;
|
|
19
|
+
/** Portlet ids in visual order: cells along the main axis, stacks within each. */
|
|
20
|
+
export declare const groupPortletIds: (group: PortletGroup) => string[];
|
|
21
|
+
/** Locate a portlet across rows and groups. Returns null when it is unplaced. */
|
|
22
|
+
export declare function findPortletLocation(rows: RowLayout[], groups: PortletGroup[], portletId: string): PortletLocation | null;
|
|
23
|
+
/** Remove a portlet from whichever group holds it. Empty cells/groups are pruned. */
|
|
24
|
+
export declare function removeFromGroup(groups: PortletGroup[], portletId: string): {
|
|
25
|
+
groups: PortletGroup[];
|
|
26
|
+
groupId: string | null;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Reconcile groups against the portlets that exist and the rows that host them.
|
|
30
|
+
*
|
|
31
|
+
* Returns rows as well as groups, because the two are coupled: collapsing a
|
|
32
|
+
* one-portlet group has to rewrite its column back to a plain `portletId`, and
|
|
33
|
+
* pruning a group has to remove its column. **Always run this before
|
|
34
|
+
* `normalizeRows`** - otherwise `normalizeRows` sees a `groupId` column whose
|
|
35
|
+
* group has just been emptied and renders a blank card.
|
|
36
|
+
*/
|
|
37
|
+
export declare function normalizeGroups(groups: PortletGroup[] | undefined, portlets: PortletConfig[], rows: RowLayout[], gridSettings: DashboardGridSettings): GroupLayoutState;
|
|
38
|
+
/**
|
|
39
|
+
* Snap `movedPortletId` against an edge of `targetPortletId`.
|
|
40
|
+
*
|
|
41
|
+
* Left/right build a `row` group, top/bottom a `column` group. When the target
|
|
42
|
+
* is already grouped, a snap along the group's main axis adds a cell, and a
|
|
43
|
+
* perpendicular snap joins the target's stack (the depth-2 clamp).
|
|
44
|
+
*
|
|
45
|
+
* Returns null when the move is a no-op.
|
|
46
|
+
*/
|
|
47
|
+
export declare function snapIntoGroup(state: GroupLayoutState, movedPortletId: string, targetPortletId: string, edge: SnapEdge, gridSettings: DashboardGridSettings): GroupLayoutState | null;
|
|
48
|
+
/**
|
|
49
|
+
* Dissolve a group, replacing its column with one column per member portlet in
|
|
50
|
+
* visual order. The row is re-equalised afterwards.
|
|
51
|
+
*/
|
|
52
|
+
export declare function ungroup(state: GroupLayoutState, groupId: string, gridSettings: DashboardGridSettings): GroupLayoutState;
|
|
53
|
+
/** Remove a group and every portlet id it holds. Callers delete the portlets. */
|
|
54
|
+
export declare function deleteGroup(state: GroupLayoutState, groupId: string, gridSettings: DashboardGridSettings): {
|
|
55
|
+
state: GroupLayoutState;
|
|
56
|
+
removedPortletIds: string[];
|
|
57
|
+
};
|
|
@@ -1,7 +1,38 @@
|
|
|
1
|
-
import { DashboardGridSettings, PortletConfig, RowLayout, RowLayoutColumn } from '../../types.js';
|
|
1
|
+
import { DashboardGridSettings, PortletConfig, PortletGroup, RowLayout, RowLayoutColumn } from '../../types.js';
|
|
2
2
|
export declare const createRowId: () => string;
|
|
3
|
+
/**
|
|
4
|
+
* Correct a row insertion index for a source row that the move emptied.
|
|
5
|
+
*
|
|
6
|
+
* Splicing the source row out shifts every later index up by one, so an
|
|
7
|
+
* unadjusted index lands the row one position too low. `handleRowDrop` has
|
|
8
|
+
* always done this for column moves; new-row drops need it too, and hit it more
|
|
9
|
+
* often, because a group is usually the only column in its row.
|
|
10
|
+
*/
|
|
11
|
+
export declare const adjustInsertIndexForRemovedRow: (insertIndex: number, sourceRowIndex: number, sourceRowRemoved: boolean) => number;
|
|
12
|
+
/**
|
|
13
|
+
* Distribute `cols` evenly across the given columns, preserving each column's
|
|
14
|
+
* identity (`portletId` **or** `groupId`) so re-equalisation never drops a group
|
|
15
|
+
* reference. This is the function to use; `equalizeRowColumns` below is the
|
|
16
|
+
* legacy id-only wrapper.
|
|
17
|
+
*/
|
|
18
|
+
export declare const equalizeColumns: (columns: RowLayoutColumn[], gridSettings: DashboardGridSettings) => RowLayoutColumn[];
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Loses `groupId`. Use {@link equalizeColumns} with the real columns.
|
|
21
|
+
*/
|
|
3
22
|
export declare const equalizeRowColumns: (portletIds: string[], gridSettings: DashboardGridSettings) => RowLayoutColumn[];
|
|
4
23
|
export declare const adjustRowWidths: (columns: RowLayoutColumn[], gridSettings: DashboardGridSettings) => RowLayoutColumn[];
|
|
5
24
|
export declare const convertPortletsToRows: (portlets: PortletConfig[], gridSettings: DashboardGridSettings) => RowLayout[];
|
|
6
|
-
|
|
7
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Drop columns whose target no longer exists, clamp row height, re-balance
|
|
27
|
+
* widths. `groups` must be the already-normalized group list - a column
|
|
28
|
+
* referencing a group is kept only when that group survives, so run
|
|
29
|
+
* `normalizeGroups` first.
|
|
30
|
+
*/
|
|
31
|
+
export declare const normalizeRows: (rows: RowLayout[], portlets: PortletConfig[], gridSettings: DashboardGridSettings, groups?: PortletGroup[]) => RowLayout[];
|
|
32
|
+
/**
|
|
33
|
+
* Re-derive every portlet's x/y/w/h from the row layout. Group columns are
|
|
34
|
+
* subdivided via `deriveGroupGeometry`, so grouped children get real grid
|
|
35
|
+
* coordinates too - that is what keeps grid mode, the mobile stack and
|
|
36
|
+
* thumbnails working without any knowledge of groups.
|
|
37
|
+
*/
|
|
38
|
+
export declare const convertRowsToPortlets: (rows: RowLayout[], portlets: PortletConfig[], groups?: PortletGroup[]) => PortletConfig[];
|