@bicharts/chart-mcp 0.6.109 → 0.6.111
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/check-chart.mjs +85 -85
- package/dist/index.mjs +87 -87
- package/package.json +3 -3
- package/skills/bic-charts/SKILL.md +11 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bicharts/chart-mcp",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.111",
|
|
4
4
|
"description": "AI Data Components for Power BI, Excel, Fabric Apps and the web, over MCP: bivariate maps, what-if projections and about 90 everyday chart types, with selection and cross-filtering already wired. It profiles your table locally; the code it writes is yours and runs with no license.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
},
|
|
48
48
|
"// dependencies": "NONE, deliberately. dist/ bundles every module the server uses, so a runtime dependency installs nothing it needs - it only makes npx fetch that package (and its tree) before the first start. Everything the bundle carries is a devDependency; scripts/verify-package.mjs fails the release if a dependency appears or a shipped file imports anything but Node's built-ins.",
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@bicharts/chart-host": "^0.6.
|
|
51
|
-
"@bicharts/shape-core": "^0.6.
|
|
50
|
+
"@bicharts/chart-host": "^0.6.111",
|
|
51
|
+
"@bicharts/shape-core": "^0.6.111",
|
|
52
52
|
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
53
53
|
"@types/node": "^26.6.5",
|
|
54
54
|
"@types/papaparse": "^5.3.14",
|
|
@@ -799,7 +799,7 @@ const forecast = useSemanticModelQuery({ connection: "<connector name>", query:
|
|
|
799
799
|
<BivariateWorldChoroplethChart table={countries} {...size} options={options} selects={country} />
|
|
800
800
|
<OriginDestinationFlowMapChart table={routes} {...size} options={options} selects={route}
|
|
801
801
|
filterBy={{ filter: country, columns: ["OriginCode", "DestinationCode"] }} />
|
|
802
|
-
<BicChartPanel result={forecast} query={forecastQuery}>{(table, size) => <WhatIfProjectionChart table={table} {...size} />}</BicChartPanel>
|
|
802
|
+
<BicChartPanel result={forecast} query={forecastQuery}>{(table, size) => <WhatIfProjectionChart table={table} {...size} scopedBy={country} />}</BicChartPanel>
|
|
803
803
|
```
|
|
804
804
|
|
|
805
805
|
**"A click filters everything else" means every OTHER panel follows it.** Each panel the person didn't click shows only
|
|
@@ -817,11 +817,19 @@ const COUNTRY = "Geography[CountryIso3]";
|
|
|
817
817
|
const mapQuery = filterQuery(MAP_DAX, treatAs(fromTable, COUNTRY)); // the map follows the table's pick
|
|
818
818
|
const tableQuery = filterQuery(TABLE_DAX, treatAs(fromMap, COUNTRY)); // the table follows the map's
|
|
819
819
|
const kpiQuery = filterQuery(KPI_DAX, treatAs(fromMap, COUNTRY), treatAs(fromTable, COUNTRY)); // the rest follow both
|
|
820
|
-
// <MapChart ... selects={fromMap} /> and <TableChart ... selects={fromTable}
|
|
820
|
+
// <MapChart ... selects={fromMap} scopedBy={fromTable} /> and <TableChart ... selects={fromTable} scopedBy={fromMap} />;
|
|
821
|
+
// <KpiChart ... scopedBy={[fromMap, fromTable]} />; every panel gets its query={...}
|
|
821
822
|
```
|
|
822
823
|
|
|
824
|
+
**A panel whose query takes a page filter passes that filter as `scopedBy`, so the chart says it's filtered.** Its rows
|
|
825
|
+
arrive already narrowed, and the chart can't see a filter applied to its query: a KPI deck kept its region's title over
|
|
826
|
+
one country's totals and ranked what the filter left. Given `scopedBy={country}` (or `scopedBy={[fromMap, fromTable]}`),
|
|
827
|
+
the chart names the pick while it is active - "North America · United States only", "rank 2 of 3 (United States
|
|
828
|
+
only)" - and goes back to its own titles when it clears. Pass every filter its query's `treatAs` takes; a panel narrowed
|
|
829
|
+
with `filterBy` needs nothing more, its component tells the chart itself.
|
|
830
|
+
|
|
823
831
|
`check_app` lists each chart's wiring - filtered query, highlight only, or none - and warns on a panel no click
|
|
824
|
-
reaches
|
|
832
|
+
reaches, and on a filtered-query panel with no `scopedBy`. Say that list in your reply, with any panel you left whole and why, so a gap is seen before deploy.
|
|
825
833
|
|
|
826
834
|
What the library does, so the page doesn't:
|
|
827
835
|
- A click sets the filter. The same click again, or a click on empty canvas, clears it. Ctrl-click adds a key.
|