@object-ui/plugin-dashboard 16.1.0 → 17.2.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,444 @@
1
1
  # @object-ui/plugin-dashboard
2
2
 
3
+ ## 17.2.0
4
+
5
+ ### Patch Changes
6
+
7
+ - d9668a7: Honor the server's declared percent scale, so a ratio of exactly 1 renders as 100.0% (#3136)
8
+
9
+ A dataset measure declared `format: '0.0%'` rendered every ratio below 1
10
+ correctly and got the single most consequential one wrong: a rate of exactly
11
+ `1` printed as **`1.0%`**. On an SLA / pass-rate dashboard that turns
12
+ "everything met the SLA" into "1% met the SLA", on both surfaces the issue
13
+ names — the KPI card and the dataset-bound table (they share `formatMeasure`).
14
+
15
+ The cause was never a bad multiplier; it was a missing fact. `formatMeasure`
16
+ scaled by magnitude — `percentDisplayValue` multiplies by 100 only strictly
17
+ inside `(-1, 1)` — because the column arrived with a `%` format string and
18
+ nothing saying what scale its numbers were on. That guess is undecidable at
19
+ exactly 1, which is both a full-compliance ratio ("100%") and one percentage
20
+ point ("1%"), and it resolved to the reading almost nobody means.
21
+
22
+ The server now answers the question instead (framework: `percentScaleOf` +
23
+ `AnalyticsResult.fields[].percentScale`, the sibling of the ADR-0053 currency
24
+ chain): a `derived: { op: 'ratio' }` measure is a `fraction` by definition, and
25
+ a measure over a `percent` field inherits that field's scale. `formatMeasure`
26
+ takes the declared scale as a fourth argument and, when present, scales by it —
27
+ `fraction` ×100, `whole` verbatim — instead of inspecting the value. Every
28
+ dataset-bound call site passes the column's `percentScale`: the dashboard
29
+ metric/table/pivot cells, the report renderer's cells, totals and KPI, and the
30
+ dataset preview.
31
+
32
+ `percentDisplayValue` is untouched and still the fallback for a column that
33
+ arrives without the annotation (an older server, or a non-dataset percent cell
34
+ in a list view), so nothing that renders correctly today changes.
35
+
36
+ - 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.
37
+
38
+ **Breaking for authoring, and the reason to do it now**: the `wait` panel no longer offers
39
+ `waitEventConfig.timeoutMs` or `.onTimeout`. Both are `retiredKey()` tombstones as of spec
40
+ 17.0.0-rc.1 (framework#4158), which means a value written there is **rejected at load** —
41
+ so until this lands, Studio can produce flow metadata the author's own runtime refuses.
42
+ That hazard opened the moment rc.1 published, independent of when this repo bumps.
43
+
44
+ `wait` never had a timeout: `onTimeout` had zero readers, so neither `'fail'` nor
45
+ `'continue'` ever happened, and `timeoutMs`'s only reader used it as the timer **duration**
46
+ when `timerDuration` was absent. Use **Duration** — it accepts a bare number as
47
+ milliseconds, making the old `timeoutMs: 60000` and `timerDuration: '60000'` the same wait.
48
+ Stored flows are converted by framework's D2 conversion; the designer simply stops offering
49
+ the entry. The two `zh` label overrides go with the fields.
50
+
51
+ #3101 asked for this to ride along with the bump rather than land alone, and that is
52
+ load-bearing: the sibling-block assertion is **bidirectional**, so deleting the fields
53
+ against a spec that still declares them fails in the other direction.
54
+
55
+ **`combo` is now a spec chart type** — the sole addition to `ChartTypeSchema` in rc.1 (19
56
+ members → 20). It had been a renderer-local family the chart renderer derived from the
57
+ series, so nothing classified it on the two surfaces that route a _spec_ chart type: a
58
+ spec-valid `combo` fell through to the red "Unknown component type" panel on a dashboard
59
+ and to the out-of-spec notice on a report. Both now route it
60
+ (`widgetDispatch.SERIES_CHART_TYPES`, `planReportChart`). The renderer-local derivation
61
+ stays — it is what makes an authored `type: 'combo'` render rather than merely validate.
62
+
63
+ **Retired spec exports this repo bound to**, all removed upstream in spec 17.0.0:
64
+
65
+ - `JoinStrategy` / `WindowFunction` (framework#4286 tombstoned `query.joins` and
66
+ `query.windowFunctions`: no engine or driver ever read either on the query path). They
67
+ were derived off the spec enums under objectstack#4115's "come off the spec enum, not a
68
+ restatement" rule; with no enum left, `data-protocol.ts` now restates the members locally
69
+ — verbatim from the last spec that published them — as the objectui query-AST vocabulary
70
+ they have become. The AST itself is unchanged.
71
+ - `PerformanceConfig`, retired with `dashboard.performance` (framework#3896). Nothing bound
72
+ to it — `@object-ui/react`'s `usePerformance` declares its own interface and is untouched.
73
+ The dashboard form is derived from the spec's own `dashboardForm`, so the field
74
+ disappears from the inspector for free; its test now pins the absence.
75
+
76
+ **Three inverted pins fired, and are recorded rather than resolved.** objectstack#4171's
77
+ tripwires asserted that `NavigationItem`, `FormField` and `ConditionalValidation`'s branches
78
+ still erased to `any`/`unknown` upstream — the premise that justified objectui keeping local
79
+ declarations. rc.1 types them properly, so the assertions are inverted to state the new
80
+ fact. The burn-down each one asks for — deriving those types from the spec — touches
81
+ widely-used public types and is deliberately **not** bundled into a version bump; it is
82
+ tracked in #3177. `JoinNode`'s pin is gone outright: the symbol no longer exists.
83
+
84
+ **What the bump arms.** The reconciliation ledger's `subflow` and `decision` panels
85
+ feature-detect their spec exports and had never actually run — rc.0 predates the exports
86
+ (framework#4278). They now execute and pass. The `script` panel's full bidirectional check
87
+ stays deliberately skipped: rc.1 predates framework#4343, so the retired dispatch branches
88
+ are still contract keys there, and only the "offers nothing the executor ignores" direction
89
+ is meaningful. It arms itself on the next rc.
90
+
91
+ - Updated dependencies [4ae0ac4]
92
+ - Updated dependencies [696e3c1]
93
+ - Updated dependencies [bca45cc]
94
+ - Updated dependencies [a889e31]
95
+ - Updated dependencies [09d30a4]
96
+ - Updated dependencies [4bf612c]
97
+ - Updated dependencies [335041c]
98
+ - Updated dependencies [b414983]
99
+ - Updated dependencies [256f8cc]
100
+ - Updated dependencies [d9668a7]
101
+ - Updated dependencies [4b470b9]
102
+ - Updated dependencies [785b8a5]
103
+ - Updated dependencies [cb82705]
104
+ - Updated dependencies [f572849]
105
+ - Updated dependencies [4a51e77]
106
+ - Updated dependencies [f6e8d78]
107
+ - Updated dependencies [ea96284]
108
+ - Updated dependencies [d3584c6]
109
+ - Updated dependencies [a8ad6c0]
110
+ - Updated dependencies [444457c]
111
+ - Updated dependencies [850033c]
112
+ - Updated dependencies [022e4c3]
113
+ - Updated dependencies [009e25d]
114
+ - Updated dependencies [726b89c]
115
+ - @object-ui/types@17.2.0
116
+ - @object-ui/components@17.2.0
117
+ - @object-ui/core@17.2.0
118
+ - @object-ui/react@17.2.0
119
+ - @object-ui/i18n@17.2.0
120
+ - @object-ui/fields@17.2.0
121
+
122
+ ## 17.1.0
123
+
124
+ ### Patch Changes
125
+
126
+ - Updated dependencies [62311b6]
127
+ - Updated dependencies [fc0272a]
128
+ - Updated dependencies [9e7349e]
129
+ - Updated dependencies [8864971]
130
+ - Updated dependencies [1cf0de7]
131
+ - Updated dependencies [752e18f]
132
+ - Updated dependencies [c785740]
133
+ - Updated dependencies [b41f401]
134
+ - Updated dependencies [19e9fa0]
135
+ - Updated dependencies [d61efd1]
136
+ - Updated dependencies [95b7214]
137
+ - Updated dependencies [7d9734d]
138
+ - Updated dependencies [6ae818e]
139
+ - Updated dependencies [9eb932b]
140
+ - Updated dependencies [746dd00]
141
+ - Updated dependencies [aebfa4f]
142
+ - Updated dependencies [38ca8be]
143
+ - Updated dependencies [3cb9646]
144
+ - Updated dependencies [68ef584]
145
+ - Updated dependencies [4952edf]
146
+ - Updated dependencies [7f0252e]
147
+ - Updated dependencies [c4d7b20]
148
+ - Updated dependencies [c769d3d]
149
+ - Updated dependencies [7639a61]
150
+ - Updated dependencies [94e63ef]
151
+ - Updated dependencies [c735bf7]
152
+ - Updated dependencies [02aef0c]
153
+ - Updated dependencies [6f29aa5]
154
+ - Updated dependencies [d21794c]
155
+ - Updated dependencies [c4db402]
156
+ - Updated dependencies [5319bf1]
157
+ - Updated dependencies [49e5671]
158
+ - Updated dependencies [9a04d25]
159
+ - Updated dependencies [b5b97e2]
160
+ - Updated dependencies [f59f2c1]
161
+ - Updated dependencies [07de839]
162
+ - Updated dependencies [2a40b5e]
163
+ - Updated dependencies [df613fa]
164
+ - Updated dependencies [4874117]
165
+ - Updated dependencies [ad0183a]
166
+ - Updated dependencies [ce08d55]
167
+ - Updated dependencies [eb4b740]
168
+ - Updated dependencies [aecc934]
169
+ - Updated dependencies [5b084eb]
170
+ - Updated dependencies [aa1240a]
171
+ - Updated dependencies [2374a49]
172
+ - Updated dependencies [390c071]
173
+ - Updated dependencies [d10f526]
174
+ - Updated dependencies [2d5d594]
175
+ - Updated dependencies [ea7f477]
176
+ - Updated dependencies [379728f]
177
+ - Updated dependencies [7f23cd0]
178
+ - Updated dependencies [0ded602]
179
+ - Updated dependencies [24e0e0a]
180
+ - Updated dependencies [f8a95e5]
181
+ - Updated dependencies [3a6cf24]
182
+ - Updated dependencies [aa35561]
183
+ - Updated dependencies [03bd53b]
184
+ - Updated dependencies [3c1f321]
185
+ - Updated dependencies [a045a32]
186
+ - Updated dependencies [912496d]
187
+ - Updated dependencies [80edbd4]
188
+ - Updated dependencies [9867281]
189
+ - @object-ui/core@17.1.0
190
+ - @object-ui/components@17.1.0
191
+ - @object-ui/react@17.1.0
192
+ - @object-ui/types@17.1.0
193
+ - @object-ui/i18n@17.1.0
194
+ - @object-ui/fields@17.1.0
195
+
196
+ ## 17.0.0
197
+
198
+ ### Patch Changes
199
+
200
+ - 7b35e4b: fix(dashboard,charts): resolve `{current_user_id}` in widget filters (framework #3574)
201
+
202
+ A dashboard widget filtered on `{current_user_id}` rendered `0`. The token
203
+ reached SQL as a literal, matched no row, and nothing was logged on the client
204
+ or the server — a silent zero that reads as "you have no work" rather than
205
+ "this filter did not resolve". The same token in a list-view filter resolved
206
+ correctly, so a user-scoped list and a user-scoped widget over the same data
207
+ disagreed.
208
+
209
+ There was no shared resolver. Three ad-hoc implementations had grown up
210
+ independently — `ObjectView` for list views, `ObjectDataPage` for URL filter
211
+ triples, `NavigationRenderer` for hrefs — and each understood only the filter
212
+ shape its own surface used. `ObjectView`'s opened with
213
+ `if (!Array.isArray(filter)) return filter`, so it could not have been reused
214
+ by dashboard widgets even in principle: widget filters are MongoDB-style
215
+ objects. Widgets therefore got no resolution at all — `DatasetWidget` called
216
+ `resolveDateMacros` and nothing else, which is why `{today}` worked in a widget
217
+ and `{current_user_id}` silently did not.
218
+
219
+ - **`@object-ui/core`** — new `utils/filter-tokens.ts` with
220
+ `resolveContextTokens` and `resolveFilterPlaceholders`. The latter expands
221
+ _every_ placeholder vocabulary in one call and is what surfaces should use;
222
+ resolving only some of them is the whole defect. The walk handles arrays and
223
+ plain objects uniformly, so one resolver covers both platform filter shapes.
224
+ - **`@object-ui/react`** — new `FilterScopeProvider` / `useFilterScope`. The
225
+ renderer packages deliberately do not depend on `@object-ui/auth`, so the
226
+ shell supplies the session values. This is a separate context from
227
+ `PredicateScopeContext`, which is the expression evaluation scope and carries
228
+ no organization.
229
+ - **`@object-ui/plugin-dashboard` / `@object-ui/plugin-charts`** — all six
230
+ widgets that previously resolved date macros only now resolve both
231
+ vocabularies: `DatasetWidget`, `ObjectMetricWidget`, `ObjectDataTable`,
232
+ `ObjectPivotTable`, and `ObjectChart` (dataset-bound and inline paths). The
233
+ chart's `compareTo` comparison filter gets the session pass too — otherwise
234
+ the overlay series silently ignored the owner clause the primary series
235
+ honoured.
236
+ - **`@object-ui/app-shell`** — `ObjectView`'s local `substituteFilterTokens`
237
+ and `ObjectDataPage`'s inline `=== '{current_user_id}'` ternary now delegate
238
+ to the shared resolver, so both also gain `{current_org_id}` and date macros.
239
+ Two of the three ad-hoc implementations are gone rather than joined by a
240
+ fourth.
241
+
242
+ An unresolvable token is left intact rather than dropped: leaving it yields an
243
+ empty result, whereas dropping the clause would _widen_ the result set and show
244
+ a signed-out viewer everyone's data. It is no longer silent — the resolver
245
+ warns, naming the token, and suggests the intended spelling for known
246
+ near-misses (`{current_user}`, `{user_id}`, `{organization_id}`). Authoring-time
247
+ enforcement lands separately as `filter-token-unknown` in `@objectstack/lint`.
248
+
249
+ - e16ed2d: fix(dashboard,charts): send widget `dateGranularity`/`sortBy`/`limit` to the query, and give funnels a real stage order (framework#3588)
250
+
251
+ `DatasetWidget` never read `widget.options`. Four keys an author writes there
252
+ change the query the server compiles, so a widget declaring
253
+ `options: { dateGranularity: 'month' }` grouped by the raw timestamp and drew
254
+ one bar per record, and `sortBy`/`sortOrder` produced no ordering at all.
255
+
256
+ - `DatasetWidget` lowers `options.dateGranularity`, `options.sortBy` +
257
+ `options.sortOrder`, and `options.limit` into the `DatasetSelection` it posts.
258
+ A `sortBy` naming something the widget does not project is dropped rather than
259
+ sent, so a stale sort key left by an edit degrades to "unordered" instead of
260
+ failing the widget against the server's stricter validation. These keys also
261
+ join the refetch signature, so editing one in the designer refetches instead
262
+ of re-rendering the previous grid.
263
+ - Funnel stages follow a **declared order**. `AdvancedChartImpl` sorted funnel
264
+ segments by value descending, unconditionally — which overrode any server
265
+ ordering and rendered a sales pipeline as a tidy narrowing shape whatever the
266
+ stages' real sequence, hiding the very anomaly (a bulge at Proposal) the chart
267
+ exists to show. It now honours a `categoryOrder`, which `DatasetWidget`
268
+ derives from the dimension field's picklist option order — the pipeline order
269
+ an author already declared on the object — or from an explicit
270
+ `options.stageOrder`. With no declared order the value-descending default is
271
+ unchanged, and a category missing from the order is kept (after the declared
272
+ ones), never dropped.
273
+ - New `@object-ui/core` helpers `buildCategoryOrder` / `buildCategoryRank`,
274
+ keyed by both the stored value and the display label like the existing
275
+ `buildOptionColorMap`, so ordering works whether or not the server resolved
276
+ the dimension's labels.
277
+
278
+ Requires the framework-side fix in objectstack#3588 for the selection keys to
279
+ take effect server-side.
280
+
281
+ - 2cb8d78: fix(console): dispatch flow actions from every surface, and cover the screen-flow round trip (framework#3528)
282
+
283
+ The resume half of screen flows is fixed; these are the two launch-side holes
284
+ found while mapping every path that dispatches a `type: 'flow'` action — on
285
+ both, a screen flow could not even be started.
286
+
287
+ - **plugin-dashboard** — a dashboard header action only dispatched when its type
288
+ was `modal` or `script`. `flow` (and `api` / `form` / `navigation`) fell
289
+ through to `console.warn("Unknown header actionType")` and did nothing at all.
290
+ The click handler now routes everything that is not a raw `url` navigation
291
+ through the ActionRunner, which owns the type registry; there is nothing for
292
+ the renderer to second-guess.
293
+ - **app-shell** — the console-root `<ActionProvider>` was mounted with no
294
+ `handlers` map. It exists to give every field widget a modal handler, but an
295
+ `ActionProvider` also decides what a `useAction()` consumer _below_ it can
296
+ dispatch, so any `action:button` outside ObjectView / RecordDetailView /
297
+ PageView / DeclaredActionsBar bound to a runner that could only open modals:
298
+ a `flow` action there failed with "Flow handler not registered", and `api` /
299
+ `script` were equally dead. The root now carries the shared console runtime's
300
+ api / flow / script handlers plus its confirm / param / result / screen-flow
301
+ dialogs. `modal` deliberately stays on the client-side `useActionModal`
302
+ handler — registering it in `handlers` would take precedence over `onModal`
303
+ and reroute the inline-create affordance to `/api/v1/actions/...`.
304
+
305
+ Both changes ship with regression tests that were verified to fail without them.
306
+ Also adds the first coverage of the screen-flow seam itself, which had none:
307
+
308
+ - `FlowRunner.suspense.test.tsx` — a lazily-loaded screen body must not unwind
309
+ past the dialog. Reproduces the real shape (lazy body, route-level boundary
310
+ above the host, host state that must survive) and fails against the
311
+ pre-boundary runner, which is how a paused run's screen used to vanish before
312
+ it could be submitted.
313
+ - `e2e/live/screen-flow.spec.ts` — the live round trip: a row flow action
314
+ triggers the run, the paused screen renders, Submit POSTs to
315
+ `/automation/{flow}/runs/{runId}/resume` with the collected values, and the
316
+ flow's downstream `update_record` shows up in the list. The unit tests stub
317
+ the runner out of the action runtime and the runner's own tests feed it a
318
+ screen directly, so trigger → dialog → resume → refresh was previously only
319
+ ever exercised by hand.
320
+
321
+ - 341bfb5: fix: read spec-canonical keys for dashboard header title and field length rules
322
+
323
+ Two naming-drift closeouts (framework#1878 / framework#1891):
324
+
325
+ - `DashboardRenderer` header now falls back to the spec-canonical `label` when
326
+ the legacy `title` is absent (mirrors the `DashboardGridLayout` fallback from
327
+ #2666) — a spec-compliant dashboard gets its header title.
328
+ - Field validation rules now read the spec-canonical camelCase
329
+ `minLength`/`maxLength` (what the server record-validator enforces) with the
330
+ legacy snake_case `min_length`/`max_length` kept as fallback — authored
331
+ length constraints reach the client form.
332
+
333
+ - 5b9cf96: fix(plugin-map): drop the `maplibre-gl@6` default import, and put type-check behind a CI gate that cannot be silently skipped (#2911)
334
+
335
+ `maplibre-gl@6.0.0` removed its default export (arrived via #2848, dependabot),
336
+ so `ObjectMap.tsx`'s `import maplibregl from 'maplibre-gl'` has been a TS1192
337
+ error on `main` for a day. The binding was never used — the map instance comes
338
+ from `react-map-gl/maplibre`, and the stylesheet from the side-effect import on
339
+ the next line — so the import is simply deleted rather than rewritten to
340
+ `import * as`.
341
+
342
+ Removing it is runtime-neutral, which the issue had explicitly left unverified.
343
+ `@vis.gl/react-maplibre` (what `react-map-gl/maplibre` re-exports) does
344
+ `Promise.resolve(mapLib || import('maplibre-gl'))` in `components/map.js`, so it
345
+ loads the library itself when no `mapLib` prop is passed. Verified in a browser
346
+ against the `store-locator-map` catalog schema: `maplibre-gl` is fetched as its
347
+ own lazy chunk, the WebGL canvas comes up 800x600, and all three markers mount —
348
+ byte-identical probe output with and without the static import. That also matches
349
+ what `apps/console/src/main.tsx` already intends, where the plugin is registered
350
+ lazily specifically to keep `maplibre-gl` out of the initial bundle.
351
+
352
+ **The reason it survived a day of green CI is the part worth fixing.** No
353
+ workflow ran `type-check` at all, and `turbo build` only checks types for
354
+ packages whose `build` script happens to invoke `tsc` — the 22 `vite build`
355
+ packages transpile without checking. A sweep of all 45 packages found ten with
356
+ broken types, `plugin-map` merely being the one that had a script to notice it.
357
+
358
+ Adding a `pnpm type-check` job alone would not have been a gate: **turbo silently
359
+ skips any package with no `type-check` script**, so 17 packages read as passing
360
+ because nothing ran. With `plugin-map` fixed, `pnpm type-check` reports 63/63
361
+ green while nine packages are still broken. So:
362
+
363
+ - `plugin-ai` and `plugin-report` gain the `paths` override their type-checked
364
+ peers already carry, which detaches workspace deps from sibling _source_ and
365
+ resolves them through built `.d.ts` — the sole cause of the 104-error TS6059
366
+ `rootDir` floods, and the same trick their own `vite.config.ts` already applies
367
+ to the dts program.
368
+ - Seven packages gain `"type-check": "tsc --noEmit"` (`plugin-ai`,
369
+ `plugin-report`, `plugin-dashboard`, `create-plugin`, `console`, and the two
370
+ console examples). Coverage goes 28 -> 35 of 45.
371
+ - New `scripts/check-type-check-coverage.mjs` makes the invisibility impossible:
372
+ a package with no `type-check` script must be declared, with a reason, and the
373
+ lists only shrink — gaining a script without deleting the entry fails the
374
+ guard. The nine known-broken packages are recorded there with error counts
375
+ (`@object-ui/runner` has no `tsconfig.json` at all), tracked as follow-ups.
376
+ - New `Type Check` CI job runs the coverage guard first (instant, no install),
377
+ then `pnpm type-check`.
378
+
379
+ Both halves were proven to fail before being trusted: the guard was exercised in
380
+ all four of its failure modes, and re-introducing the `maplibre-gl` import turns
381
+ the job red again, as does a fresh error injected into `plugin-ai` — a package
382
+ that had no type checking whatsoever before this change.
383
+
384
+ - Updated dependencies [7b21891]
385
+ - Updated dependencies [0b3be01]
386
+ - Updated dependencies [3c4d935]
387
+ - Updated dependencies [4b1ed7d]
388
+ - Updated dependencies [4b60d2d]
389
+ - Updated dependencies [952b978]
390
+ - Updated dependencies [de5e40c]
391
+ - Updated dependencies [1a03af6]
392
+ - Updated dependencies [3e886eb]
393
+ - Updated dependencies [cfc675e]
394
+ - Updated dependencies [20df08c]
395
+ - Updated dependencies [1767124]
396
+ - Updated dependencies [8ecf5a6]
397
+ - Updated dependencies [af705b9]
398
+ - Updated dependencies [0502a7c]
399
+ - Updated dependencies [7b35e4b]
400
+ - Updated dependencies [8fb1295]
401
+ - Updated dependencies [e16ed2d]
402
+ - Updated dependencies [c6fd752]
403
+ - Updated dependencies [f9bbddb]
404
+ - Updated dependencies [dfd3705]
405
+ - Updated dependencies [c77108c]
406
+ - Updated dependencies [2735de6]
407
+ - Updated dependencies [697cda4]
408
+ - Updated dependencies [c19ac11]
409
+ - Updated dependencies [6dee2cb]
410
+ - Updated dependencies [e05f052]
411
+ - Updated dependencies [0502a7c]
412
+ - Updated dependencies [faad45e]
413
+ - Updated dependencies [09c6a17]
414
+ - Updated dependencies [c7cff19]
415
+ - Updated dependencies [ba73a02]
416
+ - Updated dependencies [cd09a7b]
417
+ - Updated dependencies [f1abf0e]
418
+ - Updated dependencies [f05b84e]
419
+ - Updated dependencies [9b4b952]
420
+ - Updated dependencies [341bfb5]
421
+ - Updated dependencies [2f947e4]
422
+ - Updated dependencies [7d46648]
423
+ - Updated dependencies [9b53d72]
424
+ - Updated dependencies [bb4aa25]
425
+ - Updated dependencies [75f1cdf]
426
+ - Updated dependencies [662bdf9]
427
+ - Updated dependencies [059a052]
428
+ - Updated dependencies [53642d4]
429
+ - Updated dependencies [8aae006]
430
+ - Updated dependencies [c6cfdf1]
431
+ - Updated dependencies [d147a13]
432
+ - Updated dependencies [c6aaed8]
433
+ - Updated dependencies [263f885]
434
+ - Updated dependencies [dc334da]
435
+ - @object-ui/components@17.0.0
436
+ - @object-ui/i18n@17.0.0
437
+ - @object-ui/fields@17.0.0
438
+ - @object-ui/react@17.0.0
439
+ - @object-ui/types@17.0.0
440
+ - @object-ui/core@17.0.0
441
+
3
442
  ## 16.1.0
4
443
 
5
444
  ### Minor Changes
@@ -69,7 +508,7 @@
69
508
  and removes both bounds together. A new `drillUrlFilters` module owns the
70
509
  write/read serialization so both sides can't drift (round-trip tested).
71
510
 
72
- Companion to the framework analytics change (objectstack-ai/framework#3256).
511
+ Companion to the framework analytics change (objectstack-ai/objectstack#3256).
73
512
 
74
513
  - 199fa83: feat(dashboard): retire the pre-ADR-0021 inline-analytics renderer branches (framework#3320)
75
514
 
@@ -541,7 +980,7 @@
541
980
  - A dataset-bound `metric` widget takes the shared Card wrapper (title + border)
542
981
  like kpi/gauge, instead of rendering as bare untitled text.
543
982
 
544
- Requires `AnalyticsResult.fields[].label`/`format` (objectstack-ai/framework#1683).
983
+ Requires `AnalyticsResult.fields[].label`/`format` (objectstack-ai/objectstack#1683).
545
984
 
546
985
  - 92449ef: Dataset-bound dashboard widgets now render their TRUE chart family instead of
547
986
  always a bar chart.
@@ -1,8 +1,8 @@
1
1
  import { LayoutItem as RGLLayout } from 'react-grid-layout';
2
- import { DashboardSchema } from '@object-ui/types';
2
+ import { DashboardComponentSchema } from '@object-ui/types';
3
3
  import * as React from 'react';
4
4
  export interface DashboardGridLayoutProps {
5
- schema: DashboardSchema;
5
+ schema: DashboardComponentSchema;
6
6
  className?: string;
7
7
  /**
8
8
  * Fires on every drag/resize tick with the raw react-grid-layout payload.
@@ -19,11 +19,11 @@ export interface DashboardGridLayoutProps {
19
19
  * persist to localStorage or anywhere else (per Rule #1 Protocol Agnostic:
20
20
  * persistence is the parent's responsibility, not the renderer's).
21
21
  */
22
- onSchemaChange?: (schema: DashboardSchema) => void;
22
+ onSchemaChange?: (schema: DashboardComponentSchema) => void;
23
23
  /** Callback invoked when dashboard refresh is triggered (manual or auto) */
24
24
  onRefresh?: () => void;
25
25
  }
26
26
  /** Merge react-grid-layout coordinates back into a DashboardSchema's widgets. */
27
- export declare function mergeLayoutIntoSchema(schema: DashboardSchema, layout: RGLLayout[]): DashboardSchema;
27
+ export declare function mergeLayoutIntoSchema(schema: DashboardComponentSchema, layout: RGLLayout[]): DashboardComponentSchema;
28
28
  export declare const DashboardGridLayout: React.FC<DashboardGridLayoutProps>;
29
29
  //# sourceMappingURL=DashboardGridLayout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardGridLayout.d.ts","sourceRoot":"","sources":["../src/DashboardGridLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAA2C,KAAK,UAAU,IAAI,SAAS,EAAuC,MAAM,mBAAmB,CAAC;AAC/I,OAAO,kCAAkC,CAAC;AAI1C,OAAO,KAAK,EAAE,eAAe,EAAyB,MAAM,kBAAkB,CAAC;AA2B/E,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IAC/C;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,SAAS,EAAE,GAClB,eAAe,CAajB;AAcD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAiSlE,CAAC"}
1
+ {"version":3,"file":"DashboardGridLayout.d.ts","sourceRoot":"","sources":["../src/DashboardGridLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAA2C,KAAK,UAAU,IAAI,SAAS,EAAuC,MAAM,mBAAmB,CAAC;AAC/I,OAAO,kCAAkC,CAAC;AAI1C,OAAO,KAAK,EAAE,wBAAwB,EAAyB,MAAM,kBAAkB,CAAC;AA4BxF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IAC/C;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC5D,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,wBAAwB,EAChC,MAAM,EAAE,SAAS,EAAE,GAClB,wBAAwB,CAa1B;AAcD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA6UlE,CAAC"}
@@ -1,7 +1,7 @@
1
- import { DashboardSchema, DashboardWidgetSchema } from '@object-ui/types';
1
+ import { DashboardComponentSchema, DashboardWidgetSchema } from '@object-ui/types';
2
2
  import { ActionDef, ActionResult, ActionContext, ModalHandler } from '@object-ui/core';
3
3
  export interface DashboardRendererProps {
4
- schema: DashboardSchema;
4
+ schema: DashboardComponentSchema;
5
5
  className?: string;
6
6
  /** Callback invoked when dashboard refresh is triggered (manual or auto) */
7
7
  onRefresh?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardRenderer.d.ts","sourceRoot":"","sources":["../src/DashboardRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAG/E,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAkM5F,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrE,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,uDAAuD;IACvD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,IAAI,CAAC;IAC9D,mGAAmG;IACnG,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wGAAwG;IACxG,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;IACrH;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAutBD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,gIAiB7B,CAAC"}
1
+ {"version":3,"file":"DashboardRenderer.d.ts","sourceRoot":"","sources":["../src/DashboardRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGxF,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAsJ5F,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrE,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,uDAAuD;IACvD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,IAAI,CAAC;IAC9D,mGAAmG;IACnG,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wGAAwG;IACxG,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;IACrH;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAyuBD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,gIAiB7B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { DashboardSchema } from '@object-ui/types';
1
+ import { DashboardComponentSchema } from '@object-ui/types';
2
2
  import { WidgetDatasetCatalogEntry } from './dataset-catalog';
3
3
  /**
4
4
  * ObjectUI
@@ -10,7 +10,7 @@ import { WidgetDatasetCatalogEntry } from './dataset-catalog';
10
10
  import * as React from 'react';
11
11
  export interface DashboardWithConfigProps {
12
12
  /** Dashboard schema for rendering */
13
- schema: DashboardSchema;
13
+ schema: DashboardComponentSchema;
14
14
  /** Current dashboard configuration (for the config panel) */
15
15
  config: Record<string, any>;
16
16
  /** Called when config panel saves dashboard-level changes */
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardWithConfig.d.ts","sourceRoot":"","sources":["../src/DashboardWithConfig.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,eAAe,EAAyB,MAAM,kBAAkB,CAAC;AAK/E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAMnE,MAAM,WAAW,wBAAwB;IACvC,qCAAqC;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,6DAA6D;IAC7D,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACpD,iEAAiE;IACjE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACvE,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACvC,oDAAoD;IACpD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,iBAAyB,EACzB,SAAS,EACT,QAAQ,EACR,eAAe,GAChB,EAAE,wBAAwB,qBAyJ1B"}
1
+ {"version":3,"file":"DashboardWithConfig.d.ts","sourceRoot":"","sources":["../src/DashboardWithConfig.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,wBAAwB,EAAyB,MAAM,kBAAkB,CAAC;AAKxF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAMnE,MAAM,WAAW,wBAAwB;IACvC,qCAAqC;IACrC,MAAM,EAAE,wBAAwB,CAAC;IACjC,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,6DAA6D;IAC7D,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACpD,iEAAiE;IACjE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACvE,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACvC,oDAAoD;IACpD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,iBAAyB,EACzB,SAAS,EACT,QAAQ,EACR,eAAe,GAChB,EAAE,wBAAwB,qBAyJ1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"DatasetWidget.d.ts","sourceRoot":"","sources":["../src/DatasetWidget.tsx"],"names":[],"mappings":"AA8BA,OAAO,EASL,uBAAuB,EAGxB,MAAM,iBAAiB,CAAC;AAczB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,gCAA0B,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACpC,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,GACb;IACD,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACpD,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAcA;AASD,8DAA8D;AAC9D,wBAAgB,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAEpF;AAmDD,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,+BA2ZzF"}
1
+ {"version":3,"file":"DatasetWidget.d.ts","sourceRoot":"","sources":["../src/DatasetWidget.tsx"],"names":[],"mappings":"AA8BA,OAAO,EAUL,uBAAuB,EAGxB,MAAM,iBAAiB,CAAC;AAezB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,gCAA0B,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACpC,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,GACb;IACD,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACpD,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAcA;AASD,8DAA8D;AAC9D,wBAAgB,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAEpF;AAmDD,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,+BAgezF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectDataTable.d.ts","sourceRoot":"","sources":["../src/ObjectDataTable.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAgE,MAAM,OAAO,CAAC;AAerF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACrD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,GAAG,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6EAA6E;AAC7E,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,gBAAgB,EAAE,CAiB9F;AAED;;;;;;;;;;;;;;;GAeG;AACH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAChD,YAAY,EAAE,GAAG,GAChB,MAAM,EAAE,CAgCV;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAmT1D,CAAC"}
1
+ {"version":3,"file":"ObjectDataTable.d.ts","sourceRoot":"","sources":["../src/ObjectDataTable.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAgE,MAAM,OAAO,CAAC;AAerF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACrD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,GAAG,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6EAA6E;AAC7E,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,gBAAgB,EAAE,CAiB9F;AAED;;;;;;;;;;;;;;;GAeG;AACH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAChD,YAAY,EAAE,GAAG,GAChB,MAAM,EAAE,CAgCV;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAwT1D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectMetricWidget.d.ts","sourceRoot":"","sources":["../src/ObjectMetricWidget.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAgE,MAAM,OAAO,CAAC;AAIrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIxD,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,uBAAuB;IACtC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,wBAAwB;IACxB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,kCAAkC;IAClC,KAAK,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,iBAAiB;IACjB,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzD,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;KACvC,CAAC;IACF,6BAA6B;IAC7B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IAChC,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,+CAA+C;IAC/C,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,kDAAkD;IAClD,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpG,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,iEAAiE;IACjE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAiVhE,CAAC"}
1
+ {"version":3,"file":"ObjectMetricWidget.d.ts","sourceRoot":"","sources":["../src/ObjectMetricWidget.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAgE,MAAM,OAAO,CAAC;AAIrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIxD,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,uBAAuB;IACtC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,wBAAwB;IACxB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,kCAAkC;IAClC,KAAK,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,iBAAiB;IACjB,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzD,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;KACvC,CAAC;IACF,6BAA6B;IAC7B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IAChC,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,+CAA+C;IAC/C,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,kDAAkD;IAClD,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpG,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,iEAAiE;IACjE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAuVhE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectPivotTable.d.ts","sourceRoot":"","sources":["../src/ObjectPivotTable.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAkD,MAAM,OAAO,CAAC;AAQvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,gBAAgB,GAAG;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACrD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,GAAG,CAAC;KACd,CAAC;IACF,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAgO5D,CAAC"}
1
+ {"version":3,"file":"ObjectPivotTable.d.ts","sourceRoot":"","sources":["../src/ObjectPivotTable.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAkD,MAAM,OAAO,CAAC;AAQvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,gBAAgB,GAAG;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACrD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,GAAG,CAAC;KACd,CAAC;IACF,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAoO5D,CAAC"}
@@ -22,6 +22,16 @@ export interface PivotTableProps {
22
22
  */
23
23
  onDrillDown?: (event: DrillEvent) => void;
24
24
  }
25
+ /**
26
+ * The aggregations this pivot computes — the renderer half of the spec's
27
+ * `ChartAggregateFunctionSchema` (`ui/chart.zod.ts`), the UI-side subset the
28
+ * spec deliberately carved out of the engine's 8-name `AggregationFunction`.
29
+ * Engine-level names (`count_distinct`, `array_agg`, `string_agg`) used to
30
+ * fall into a `default:` branch that returned a SUM — a plausible wrong total
31
+ * with no signal (#2941). They now short-circuit to a visible notice before
32
+ * any cell is computed. Exported for the spec-parity test.
33
+ */
34
+ export declare const PIVOT_AGGREGATIONS: ReadonlySet<string>;
25
35
  /**
26
36
  * PivotTable – Cross-tabulation / Pivot Table component.
27
37
  *
@@ -1 +1 @@
1
- {"version":3,"file":"PivotTable.d.ts","sourceRoot":"","sources":["../src/PivotTable.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAWlE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CAC3C;AA4ED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA4PhD,CAAC"}
1
+ {"version":3,"file":"PivotTable.d.ts","sourceRoot":"","sources":["../src/PivotTable.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAWlE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CAC3C;AAyDD;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAkD,CAAC;AAwBtG;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAgRhD,CAAC"}