@praxisui/table 9.0.62 → 9.0.64
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/README.md +37 -0
- package/ai/component-registry.json +523 -336
- package/docs/local-data-mode-precedence.md +11 -0
- package/fesm2022/{praxisui-table-praxisui-table-Dc_qrYSl.mjs → praxisui-table-praxisui-table-CcSGCtum.mjs} +899 -82
- package/fesm2022/{praxisui-table-table-agentic-authoring-turn-flow-DlPu7OOk.mjs → praxisui-table-table-agentic-authoring-turn-flow-CeXvAfSA.mjs} +1 -1
- package/fesm2022/{praxisui-table-table-ai.adapter-6-ZGVEFf.mjs → praxisui-table-table-ai.adapter-BXG-fpPE.mjs} +1 -1
- package/fesm2022/praxisui-table.mjs +1 -1
- package/package.json +10 -10
- package/src/lib/praxis-table.json-api.md +15 -2
- package/types/praxisui-table.d.ts +56 -6
package/README.md
CHANGED
|
@@ -102,6 +102,8 @@ Use `resourcePath` when the host wants the table to enter backend schema/data mo
|
|
|
102
102
|
|
|
103
103
|
`resourcePath` is enough only when the host already provides the Praxis API/CRUD wiring expected by the table runtime. In remote mode, the table derives columns from the backend schema contract and data from the backend resource/filter contract.
|
|
104
104
|
|
|
105
|
+
Each standalone `praxis-filter` owns an isolated `GenericCrudService` instance. This is required when a composed page renders filters, tables, and related CRUD surfaces for different resources at the same time: one widget must never replace another widget's active schema/resource context.
|
|
106
|
+
|
|
105
107
|
For schema-governed tables that need only a few editorial differences, keep
|
|
106
108
|
`columns: []` and declare a schema projection. The runtime derives every visible
|
|
107
109
|
column from `/schemas/filtered` and reapplies the overrides by canonical field
|
|
@@ -176,12 +178,35 @@ and emit schema/metadata diagnostics, but they do not emit `configChange` or a
|
|
|
176
178
|
persistable `tableInputPatch`. Those authoring outputs are reserved for explicit
|
|
177
179
|
user operations such as applying table settings or Quick Connect.
|
|
178
180
|
|
|
181
|
+
Item actions discovered from HATEOAS are also runtime projections owned by the
|
|
182
|
+
backend. When the overflow menu is opened before contextual discovery finishes,
|
|
183
|
+
the menu shows its loading state and replaces that state with the governed
|
|
184
|
+
actions in the same user interaction as soon as discovery settles. Hosts must
|
|
185
|
+
not copy workflow actions into local table configuration or require users to
|
|
186
|
+
close and reopen the menu to observe a capability that has already resolved.
|
|
187
|
+
|
|
179
188
|
Row, selection and action events can include the read-only `resourceIdentity`
|
|
180
189
|
materialized from the response schema. A valid explicit identity is preferred;
|
|
181
190
|
otherwise a valid `idField` can produce a diagnostic key-only fallback. This
|
|
182
191
|
context is for list/detail continuity and must not be copied into command
|
|
183
192
|
controls or persistence payloads.
|
|
184
193
|
|
|
194
|
+
When row selection is enabled with `mode: "row"` or `mode: "both"`, selectable
|
|
195
|
+
rows use a single roving keyboard stop. `ArrowUp`, `ArrowDown`, `Home`, and `End`
|
|
196
|
+
move focus without changing the selection; `Enter` and `Space` activate the
|
|
197
|
+
focused row through the same `selectionChange` contract used by pointer input.
|
|
198
|
+
Navigation is resolved against the table data model rather than the rows currently
|
|
199
|
+
mounted in the DOM. In virtualized tables, `Home` and `End` therefore reach the
|
|
200
|
+
first and last logical records and scroll the viewport before restoring focus.
|
|
201
|
+
After refresh or filtering, focus follows the same stable row identity when that
|
|
202
|
+
record still exists and otherwise falls back to the first available record. Set a
|
|
203
|
+
stable `idField` for corporate datasets; index identity is only a last-resort local
|
|
204
|
+
fallback and cannot preserve focus across reordering.
|
|
205
|
+
The table receives its accessible name from `accessibility.ariaLabels.table`,
|
|
206
|
+
then the table title, and finally the localized runtime fallback. Selection
|
|
207
|
+
changes are announced in an isolated polite live region unless
|
|
208
|
+
`accessibility.announcements.userActions` is explicitly `false`.
|
|
209
|
+
|
|
185
210
|
## Column resizing and auto-fit
|
|
186
211
|
|
|
187
212
|
Column resizing is governed by `behavior.resizing`. When `enabled` is `true`,
|
|
@@ -403,10 +428,22 @@ Main authoring areas include:
|
|
|
403
428
|
|
|
404
429
|
The package exports separate governed contracts for the two authoring documents: `PRAXIS_TABLE_AUTHORING_MANIFEST` owns `TableConfig`, including embedded filtering under `behavior.filtering`, while `PRAXIS_FILTER_AUTHORING_MANIFEST` owns the standalone `FilterConfig`. The standalone manifest never persists the controlled `value` DTO and does not expose Table query-builder operations or the nominal `submit` alias. `TABLE_AI_CAPABILITIES` / `TABLE_COMPONENT_AI_CAPABILITIES` remain the component capability discovery surface for the Table aggregate.
|
|
405
430
|
|
|
431
|
+
Canonical table refinements preserve business meaning across preview, persistence, reopen and runtime rendering:
|
|
432
|
+
|
|
433
|
+
- The global table title belongs to `toolbar.title` with the toolbar visible. It is distinct from a column header and must not be stored as an ad hoc root `title` or public widget input.
|
|
434
|
+
- `column.format.set` materializes both the requested format and its compatible visual column type. For example, `BRL|symbol|2` produces a currency column while preserving the schema's numeric data shape and every unrelated column property.
|
|
435
|
+
- `column.order.set` is a discrete visual move; order `0` means the first position. Its compiler emits a complete, collision-free order for all sibling columns so reopen and stable-sort runtimes cannot turn the edit into a visual no-op.
|
|
436
|
+
- `column.sticky.set` only pins a column during horizontal scrolling. It never means move-to-start and never substitutes for `column.order.set`.
|
|
437
|
+
|
|
438
|
+
Certification of these refinements must inspect the rendered table DOM—not only the authored JSON—including the toolbar title, visible header sequence, hidden-column absence and formatted cell content.
|
|
439
|
+
|
|
406
440
|
## Analytics And Rich Content
|
|
407
441
|
|
|
408
442
|
The table can materialize analytic table projections produced by the canonical `x-ui.analytics` decision in `@praxisui/core`. Services such as `AnalyticsTableContractService` help hosts resolve analytic table contracts and data without reimplementing that projection.
|
|
409
443
|
|
|
444
|
+
`AnalyticsTableStatsApiService.execute()` returns an `Observable<AnalyticsTableRow[]>`. The subscription owns the HTTP transport: unsubscribing aborts an in-flight stats request. `PraxisTable` applies the same `behavior.loading.requestTimeoutMs`, `behavior.loading.allowCancel`, retry, supersession and destruction lifecycle to REST resources and `analyticsProjection`, while preserving the last stable rows on cancellation or failure. Consumers that need a one-shot promise may use `firstValueFrom(...)` at their own orchestration boundary.
|
|
445
|
+
When both `resourcePath` and `analyticsProjection` are present, the canonical `DataMode` precedence remains remote: the table cancels any analytical transport and does not mix rows from the stats endpoint with the resource collection.
|
|
446
|
+
|
|
410
447
|
Detail rows can host governed rich content surfaces. Rich content semantics belong to the shared rich content/core contracts; the table provides the row-detail shell and host-mediated dispatch.
|
|
411
448
|
When the actions column header combines an icon and a label, the table materializes that rich content with inline, non-wrapping layout. Column width may still be governed by the table contract, but the icon is not allowed to force the label onto a second line.
|
|
412
449
|
When no bottom paginator or footer toolbar follows the data surface, the table closes its lower corners. When a bottom surface is present, the table keeps square lower corners so the stack remains visually continuous.
|