@bicharts/chart-host 0.5.71 → 0.5.72

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/index.mjs CHANGED
@@ -750,10 +750,11 @@ function computeQualifyFilterView(groups, term) {
750
750
  if (grp.heading !== null) (any ? showHeadings : hideHeadings).push(grp.heading);
751
751
  }
752
752
  const filtering = fit.tier !== "all";
753
- const openRefusals = filtering && fit.rows.length === 0 && ref.rows.length > 0;
753
+ const nameOnlyBelow = fit.tier === "desc" && (ref.tier === "name" || ref.tier === "namePart");
754
+ const openRefusals = filtering && ref.rows.length > 0 && (fit.rows.length === 0 || nameOnlyBelow);
754
755
  let note = "none";
755
756
  if (filtering) {
756
- if (fit.tier === "desc") note = "descFallback";
757
+ if (fit.tier === "desc") note = nameOnlyBelow ? "descAndRefusalName" : "descFallback";
757
758
  else if (fit.tier === "none") note = openRefusals ? "onlyRefusals" : "noMatch";
758
759
  }
759
760
  return {
@@ -216,15 +216,20 @@ export interface QualifyFilterGroup<E> {
216
216
  *
217
217
  * "none" - a name tier answered, or nothing is being filtered. Say nothing: the reader's
218
218
  * own word was found where they expected it and needs no explanation.
219
- * "descFallback" - no name matched; these matched on description. MUST be said - a silent
220
- * fall-through is indistinguishable from bad matching.
219
+ * "descFallback" - no name matched ANYWHERE; these matched on description. MUST be said - a
220
+ * silent fall-through is indistinguishable from bad matching.
221
221
  * "onlyRefusals" - nothing that FITS matches, but something in the refusal block does. Say where
222
222
  * it went; that block is now open.
223
+ * "descAndRefusalName" - both at once, and the state that made this a five-way rather than a
224
+ * four-way decision (2026-09-04). The fitting list answered on DESCRIPTION and
225
+ * the refusal block answered on a NAME, so "no name matches" is a lie told over
226
+ * the top of a visible name match, and the reader's own word needs BOTH halves
227
+ * said: why the rows above look unrelated, and where the row they typed went.
223
228
  * "noMatch" - nothing anywhere. NEVER phrase this like "nothing fits your data": one is a
224
229
  * statement about a typed string and is fixed with backspace, the other is a
225
230
  * statement about the data and is not.
226
231
  */
227
- export type QualifyFilterNoteKind = "none" | "descFallback" | "onlyRefusals" | "noMatch";
232
+ export type QualifyFilterNoteKind = "none" | "descFallback" | "onlyRefusals" | "descAndRefusalName" | "noMatch";
228
233
  export interface QualifyFilterView<E> {
229
234
  /** Rows to show, and rows to hide. Two lists rather than one predicate so a host can write
230
235
  * them in one pass without asking a Set per element. */
@@ -243,11 +248,17 @@ export interface QualifyFilterView<E> {
243
248
  /**
244
249
  * Does the refusal block need to be OPEN for this term?
245
250
  *
246
- * True only when the term matches nothing that fits and something that does not. "Why isn't
247
- * my chart here" is the only question that section is open to ask, and the reader has just
251
+ * True when the block holds a match the fitting list cannot show the reader. "Why isn't my
252
+ * chart here" is the only question that section is open to ask, and the reader has just
248
253
  * asked it by name - the server's own sentence about why it cannot be drawn is already
249
254
  * rendered, one collapsed checkbox away.
250
255
  *
256
+ * TWO WAYS TO EARN IT, and the second was missing until 2026-09-04: nothing that fits
257
+ * matched at all, OR the only NAME match is down there while the fitting list answered on
258
+ * description. A description match above is not a substitute for the row the reader typed -
259
+ * it is a weaker tier, and leaving the block shut hides the actual answer behind a checkbox
260
+ * the reader has no reason to tick.
261
+ *
251
262
  * THE HOST MUST TREAT THIS AS AN OVERRIDE, NOT A SETTING: remember what the reader's own
252
263
  * checkbox said before the first override, and put it back the moment this goes false. An
253
264
  * auto-expansion that sticks leaves the reader with a section they never opened.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bicharts/chart-host",
3
- "version": "0.5.71",
3
+ "version": "0.5.72",
4
4
  "description": "Run a BIC-generated D3 chart in any web host: compiles the generated render() function, applies the shared option defaults, resolves mark clicks (through tooltip overlays), owns the selection affordance, and translates row indices between cross-filtered charts. The same contract the BIC Power BI visual implements, minus Power BI. React bindings at @bicharts/chart-host/react.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",