@object-ui/plugin-report 17.1.0 → 17.3.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,202 @@
1
1
  # @object-ui/plugin-report
2
2
 
3
+ ## 17.3.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 509104a: Fix matrix report cells showing another bucket's numbers when dimension values run together.
8
+
9
+ The cross-tab in `DatasetReportRenderer` built its bucket ids by joining dimension values with the EMPTY string, so adjacent values had no boundary at all: `"x"` + `"yz"` and `"xy"` + `"z"` were the same bucket on both axes, and the later row silently overwrote the earlier one. Its cell key then joined the two bucket ids with a plain space, while dimension values contain spaces constantly ("New York", "In Progress"), so `"New"` × `"York Q1"` and `"New York"` × `"Q1"` also met in one key. A merged bucket showed a different row's measure, the overwritten row's value was unreachable, the per-row and per-column subtotals matched the wrong header, and drill-through followed the same wrong index into another record's list — none of it with an error.
10
+
11
+ Bucket ids and cell keys are now encoded with `JSON.stringify`, which carries the boundary in its own quoting rather than in a character the data is assumed never to contain. All four lookups in the renderer (row headers, column headers, row subtotals, column subtotals) share the one encoder, so they agree by construction.
12
+
13
+ The encoders moved to `@object-ui/core` as `pivotBucketId` / `pivotCellKey` and are now shared with the dashboard `DatasetWidget`, which carried the same defect and fixed it separately: two packages each hand-rolling the same key is why one fix left the other broken. The dashboard keeps its existing exports and behaviour.
14
+
15
+ - Updated dependencies [18cd432]
16
+ - Updated dependencies [b7165ce]
17
+ - Updated dependencies [532cf8b]
18
+ - Updated dependencies [680080a]
19
+ - Updated dependencies [a7651e6]
20
+ - Updated dependencies [d915c47]
21
+ - Updated dependencies [b71fc92]
22
+ - Updated dependencies [65516ba]
23
+ - Updated dependencies [94c5b7c]
24
+ - Updated dependencies [ca0fa8f]
25
+ - Updated dependencies [34595eb]
26
+ - Updated dependencies [3889ffb]
27
+ - Updated dependencies [5781fb1]
28
+ - Updated dependencies [7e2406a]
29
+ - Updated dependencies [9e9e9a9]
30
+ - Updated dependencies [19b8c9b]
31
+ - Updated dependencies [56409c2]
32
+ - Updated dependencies [042e09d]
33
+ - Updated dependencies [7d08c3f]
34
+ - Updated dependencies [9cbcbf4]
35
+ - Updated dependencies [85c4c9c]
36
+ - Updated dependencies [fd54c3e]
37
+ - Updated dependencies [4eeb932]
38
+ - Updated dependencies [6fe485b]
39
+ - Updated dependencies [5c856ec]
40
+ - Updated dependencies [23018cc]
41
+ - Updated dependencies [53811d1]
42
+ - Updated dependencies [68b6a28]
43
+ - Updated dependencies [0554e88]
44
+ - Updated dependencies [d915c47]
45
+ - Updated dependencies [f44d872]
46
+ - Updated dependencies [28b2e65]
47
+ - Updated dependencies [509104a]
48
+ - Updated dependencies [825bbe3]
49
+ - Updated dependencies [6195841]
50
+ - Updated dependencies [5dd0127]
51
+ - Updated dependencies [06632e9]
52
+ - Updated dependencies [a415684]
53
+ - Updated dependencies [a4cff5b]
54
+ - Updated dependencies [175bd79]
55
+ - Updated dependencies [5af2852]
56
+ - Updated dependencies [34d9169]
57
+ - Updated dependencies [5881a2c]
58
+ - Updated dependencies [9bc3709]
59
+ - Updated dependencies [f833d3a]
60
+ - Updated dependencies [30ae33a]
61
+ - Updated dependencies [a6ec93d]
62
+ - Updated dependencies [2a9513d]
63
+ - Updated dependencies [49f7449]
64
+ - Updated dependencies [71be406]
65
+ - Updated dependencies [d22ae31]
66
+ - Updated dependencies [c7ed4c3]
67
+ - Updated dependencies [2409e1d]
68
+ - Updated dependencies [789fe3e]
69
+ - Updated dependencies [f789c3b]
70
+ - Updated dependencies [a321fa4]
71
+ - Updated dependencies [8d8094a]
72
+ - @object-ui/core@17.3.0
73
+ - @object-ui/fields@17.3.0
74
+ - @object-ui/components@17.3.0
75
+ - @object-ui/types@17.3.0
76
+ - @object-ui/plugin-grid@17.3.0
77
+ - @object-ui/i18n@17.3.0
78
+ - @object-ui/react@17.3.0
79
+
80
+ ## 17.2.0
81
+
82
+ ### Patch Changes
83
+
84
+ - d9668a7: Honor the server's declared percent scale, so a ratio of exactly 1 renders as 100.0% (#3136)
85
+
86
+ A dataset measure declared `format: '0.0%'` rendered every ratio below 1
87
+ correctly and got the single most consequential one wrong: a rate of exactly
88
+ `1` printed as **`1.0%`**. On an SLA / pass-rate dashboard that turns
89
+ "everything met the SLA" into "1% met the SLA", on both surfaces the issue
90
+ names — the KPI card and the dataset-bound table (they share `formatMeasure`).
91
+
92
+ The cause was never a bad multiplier; it was a missing fact. `formatMeasure`
93
+ scaled by magnitude — `percentDisplayValue` multiplies by 100 only strictly
94
+ inside `(-1, 1)` — because the column arrived with a `%` format string and
95
+ nothing saying what scale its numbers were on. That guess is undecidable at
96
+ exactly 1, which is both a full-compliance ratio ("100%") and one percentage
97
+ point ("1%"), and it resolved to the reading almost nobody means.
98
+
99
+ The server now answers the question instead (framework: `percentScaleOf` +
100
+ `AnalyticsResult.fields[].percentScale`, the sibling of the ADR-0053 currency
101
+ chain): a `derived: { op: 'ratio' }` measure is a `fraction` by definition, and
102
+ a measure over a `percent` field inherits that field's scale. `formatMeasure`
103
+ takes the declared scale as a fourth argument and, when present, scales by it —
104
+ `fraction` ×100, `whole` verbatim — instead of inspecting the value. Every
105
+ dataset-bound call site passes the column's `percentScale`: the dashboard
106
+ metric/table/pivot cells, the report renderer's cells, totals and KPI, and the
107
+ dataset preview.
108
+
109
+ `percentDisplayValue` is untouched and still the fallback for a column that
110
+ arrives without the annotation (an older server, or a non-dataset percent cell
111
+ in a list view), so nothing that renders correctly today changes.
112
+
113
+ - 022e4c3: Upgrade to `@objectstack/spec@17.0.0-rc.1`, stop offering the retired `wait` timeout fields (#3101), and route the newly-adopted `combo` chart type.
114
+
115
+ **Breaking for authoring, and the reason to do it now**: the `wait` panel no longer offers
116
+ `waitEventConfig.timeoutMs` or `.onTimeout`. Both are `retiredKey()` tombstones as of spec
117
+ 17.0.0-rc.1 (framework#4158), which means a value written there is **rejected at load** —
118
+ so until this lands, Studio can produce flow metadata the author's own runtime refuses.
119
+ That hazard opened the moment rc.1 published, independent of when this repo bumps.
120
+
121
+ `wait` never had a timeout: `onTimeout` had zero readers, so neither `'fail'` nor
122
+ `'continue'` ever happened, and `timeoutMs`'s only reader used it as the timer **duration**
123
+ when `timerDuration` was absent. Use **Duration** — it accepts a bare number as
124
+ milliseconds, making the old `timeoutMs: 60000` and `timerDuration: '60000'` the same wait.
125
+ Stored flows are converted by framework's D2 conversion; the designer simply stops offering
126
+ the entry. The two `zh` label overrides go with the fields.
127
+
128
+ #3101 asked for this to ride along with the bump rather than land alone, and that is
129
+ load-bearing: the sibling-block assertion is **bidirectional**, so deleting the fields
130
+ against a spec that still declares them fails in the other direction.
131
+
132
+ **`combo` is now a spec chart type** — the sole addition to `ChartTypeSchema` in rc.1 (19
133
+ members → 20). It had been a renderer-local family the chart renderer derived from the
134
+ series, so nothing classified it on the two surfaces that route a _spec_ chart type: a
135
+ spec-valid `combo` fell through to the red "Unknown component type" panel on a dashboard
136
+ and to the out-of-spec notice on a report. Both now route it
137
+ (`widgetDispatch.SERIES_CHART_TYPES`, `planReportChart`). The renderer-local derivation
138
+ stays — it is what makes an authored `type: 'combo'` render rather than merely validate.
139
+
140
+ **Retired spec exports this repo bound to**, all removed upstream in spec 17.0.0:
141
+
142
+ - `JoinStrategy` / `WindowFunction` (framework#4286 tombstoned `query.joins` and
143
+ `query.windowFunctions`: no engine or driver ever read either on the query path). They
144
+ were derived off the spec enums under objectstack#4115's "come off the spec enum, not a
145
+ restatement" rule; with no enum left, `data-protocol.ts` now restates the members locally
146
+ — verbatim from the last spec that published them — as the objectui query-AST vocabulary
147
+ they have become. The AST itself is unchanged.
148
+ - `PerformanceConfig`, retired with `dashboard.performance` (framework#3896). Nothing bound
149
+ to it — `@object-ui/react`'s `usePerformance` declares its own interface and is untouched.
150
+ The dashboard form is derived from the spec's own `dashboardForm`, so the field
151
+ disappears from the inspector for free; its test now pins the absence.
152
+
153
+ **Three inverted pins fired, and are recorded rather than resolved.** objectstack#4171's
154
+ tripwires asserted that `NavigationItem`, `FormField` and `ConditionalValidation`'s branches
155
+ still erased to `any`/`unknown` upstream — the premise that justified objectui keeping local
156
+ declarations. rc.1 types them properly, so the assertions are inverted to state the new
157
+ fact. The burn-down each one asks for — deriving those types from the spec — touches
158
+ widely-used public types and is deliberately **not** bundled into a version bump; it is
159
+ tracked in #3177. `JoinNode`'s pin is gone outright: the symbol no longer exists.
160
+
161
+ **What the bump arms.** The reconciliation ledger's `subflow` and `decision` panels
162
+ feature-detect their spec exports and had never actually run — rc.0 predates the exports
163
+ (framework#4278). They now execute and pass. The `script` panel's full bidirectional check
164
+ stays deliberately skipped: rc.1 predates framework#4343, so the retired dispatch branches
165
+ are still contract keys there, and only the "offers nothing the executor ignores" direction
166
+ is meaningful. It arms itself on the next rc.
167
+
168
+ - Updated dependencies [4ae0ac4]
169
+ - Updated dependencies [696e3c1]
170
+ - Updated dependencies [bca45cc]
171
+ - Updated dependencies [a889e31]
172
+ - Updated dependencies [09d30a4]
173
+ - Updated dependencies [4bf612c]
174
+ - Updated dependencies [335041c]
175
+ - Updated dependencies [b414983]
176
+ - Updated dependencies [256f8cc]
177
+ - Updated dependencies [d9668a7]
178
+ - Updated dependencies [4b470b9]
179
+ - Updated dependencies [785b8a5]
180
+ - Updated dependencies [cb82705]
181
+ - Updated dependencies [f572849]
182
+ - Updated dependencies [4a51e77]
183
+ - Updated dependencies [f6e8d78]
184
+ - Updated dependencies [ea96284]
185
+ - Updated dependencies [d3584c6]
186
+ - Updated dependencies [a8ad6c0]
187
+ - Updated dependencies [444457c]
188
+ - Updated dependencies [850033c]
189
+ - Updated dependencies [022e4c3]
190
+ - Updated dependencies [009e25d]
191
+ - Updated dependencies [726b89c]
192
+ - @object-ui/types@17.2.0
193
+ - @object-ui/components@17.2.0
194
+ - @object-ui/core@17.2.0
195
+ - @object-ui/react@17.2.0
196
+ - @object-ui/i18n@17.2.0
197
+ - @object-ui/plugin-grid@17.2.0
198
+ - @object-ui/fields@17.2.0
199
+
3
200
  ## 17.1.0
4
201
 
5
202
  ### Minor Changes
@@ -167,6 +167,11 @@ export type ReportChartPlan =
167
167
  * renders beneath the chart slot is exactly the tabular presentation;
168
168
  * - anything else is out-of-spec and gets a visible notice.
169
169
  *
170
+ * `combo` joined `ChartTypeSchema` in spec 17.0.0-rc.1 and routes as a series
171
+ * chart. It was renderer-local until then — the chart renderer derives the base
172
+ * family from the series — so nothing here classified it, and a spec-valid combo
173
+ * report hit the out-of-spec notice the moment the spec started accepting one.
174
+ *
170
175
  * Exported for the spec-parity test, which fails the moment `ChartTypeSchema`
171
176
  * and this classification drift in either direction.
172
177
  */