@praxisui/table 9.0.68-rc.3 → 10.0.0-rc.3
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 +44 -0
- package/ai/component-registry.json +824 -311
- package/docs/adr/table-detail-presentation.md +45 -0
- package/docs/dynamic-filter-backend-contract-cheatsheet.md +1 -1
- package/docs/dynamic-filter-troubleshooting-guide.md +1 -1
- package/docs/local-data-mode-precedence.md +3 -0
- package/docs/table-bottom-detail-progress.md +205 -0
- package/docs/table-bottom-detail-review.md +159 -0
- package/fesm2022/{praxisui-table-praxisui-table-EGWwY1dR.mjs → praxisui-table-praxisui-table-DKvwb6v1.mjs} +2014 -884
- package/fesm2022/{praxisui-table-table-agentic-authoring-turn-flow-DyL8eJ1l.mjs → praxisui-table-table-agentic-authoring-turn-flow-BzjYuDvo.mjs} +1 -1
- package/fesm2022/{praxisui-table-table-ai.adapter-B2LTkMdM.mjs → praxisui-table-table-ai.adapter-CPgpIGoi.mjs} +31 -30
- package/fesm2022/praxisui-table.mjs +1 -1
- package/package.json +10 -10
- package/src/lib/praxis-table.json-api.md +27 -11
- package/types/praxisui-table.d.ts +174 -22
package/README.md
CHANGED
|
@@ -237,6 +237,15 @@ The runtime default remains `local-first`, which loads saved table preferences.
|
|
|
237
237
|
|
|
238
238
|
The native filter **Preferências do Filtro** panel uses its own `filter-config` preference lane. Its saved always-visible order does not override a nonempty `alwaysVisibleFields` supplied by the page. Use the Page Builder content editor to author the page's filters. Editing a field opens a child settings panel and preserves the parent draft; save the child, then its parent and the page to persist authored changes.
|
|
239
239
|
|
|
240
|
+
The filter field editor emits cumulative deltas relative to its opening seed.
|
|
241
|
+
Filter Settings applies them to the opening override of that field, preserving
|
|
242
|
+
other fields in the current parent draft. Returning to the original value after
|
|
243
|
+
Apply therefore removes the intermediate edit, including an empty final delta.
|
|
244
|
+
Nested siblings survive and explicit `null` removes the addressed override.
|
|
245
|
+
Reset also refreshes the shell's dirty state without emitting a config change.
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
240
249
|
## Runtime Inputs And Outputs
|
|
241
250
|
|
|
242
251
|
Common inputs:
|
|
@@ -595,7 +604,34 @@ The table can materialize analytic table projections produced by the canonical `
|
|
|
595
604
|
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.
|
|
596
605
|
|
|
597
606
|
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.
|
|
607
|
+
`behavior.detail` owns governed rich content for both row expansion and the contextual bottom panel. Set `detail.presentation.placement` to `bottom` to use the existing selection model: exactly one visible record supplies the body. `presentation.emptyBehavior` chooses an instructional state (`message`, the default) or removes the surface when it has no renderable selected-record content (`hide`). `presentation.bottomStackPosition` defaults to `afterControls`, keeping the table, footer toolbar and paginator together before the contextual panel; `beforeControls` is available for deliberately authored compositions. `behavior.expansion` owns row interaction. The finite migration moves old `behavior.expansion.detail` documents and rejects conflicting definitions; runtime does not read both paths.
|
|
608
|
+
|
|
609
|
+
The Details editor preserves authored field expressions and provider references through Apply/Save/reopen. `detail.configure`, `detail.source.configure` and `detail.presentation.configure` declare semantic operations; the canonical executor couples presentation, expansion and selection. See [the presentation ADR](docs/adr/table-detail-presentation.md) for activation, migration and async ownership rules. Rich content semantics belong to the shared rich content/core contracts; the table provides the detail shell and host-mediated dispatch.
|
|
610
|
+
|
|
611
|
+
The visual source editor exposes the complete identity required by `source.mode: "resource"` (`kind`, `id`, and `version`) and the guarded HTTP fields required by `source.mode: "resourcePath"` (`path`, `method`, `resourceAllowList`, and `fallbackMode`). A resource fallback exposes the same identity fields even while another primary source is selected. Fallback cannot point back to the primary mode. Explicit incomplete sources and fallback cycles block Apply/Save. `paramsMap`, `contextMap`, and other advanced source extensions remain available in the advanced JSON without being rewritten by hydration.
|
|
612
|
+
|
|
613
|
+
Use a `richContent` detail node when the selected-record body needs a callout, semantic card, icon, formatted hierarchy, token-based tone or contextual action. `source.inlineSchema` accepts either a detail document or one detail node; a single node is normalized into the same governed stack before validation and rendering. The Rich Content `document` and `rootClassName` use the canonical Rich Content validators before Apply/Save and again before rendering. The Details editor delegates that document to `PraxisRichContentConfigEditor`; Table does not redefine callout/card properties. Each Rich action ID must also be declared in `actions.row.actions[]`; an undeclared action blocks local authoring and remains unavailable at runtime for remotely supplied documents. Quick starts therefore create content without inventing a domain action. Declared actions use the Table row-action pipeline, so application handlers, global actions, capability checks and backend authorization keep their existing ownership. `requiresCapabilities` is evaluated against the canonical enterprise runtime capability list; the Table does not infer capabilities from authorities. Prefer semantic tones and application tokens. Arbitrary gradients remain an advanced style choice and require rendered contrast/theme evidence.
|
|
614
|
+
|
|
615
|
+
The selected-record body supports the governed detail schema and its Rich Content presenter subset. The shell states for zero, multiple, off-page, loading, blocked and error remain localized plain text under `table.detail.*`; hosts can override them through `localization.translations`. The Details editor exposes guided copy overrides for the common zero-selection and selected-record introduction states. Other shell states remain available through localization, and shell states do not accept Rich Content documents. `textExpr`, `labelExpr` and `valueExpr` resolve governed context paths rather than arbitrary string formulas. Compose several presenter nodes to show multiple fields together, or materialize a canonical derived value upstream when the result carries reusable business meaning. The guided editor covers the common presets; advanced supported node properties round-trip through the detail JSON.
|
|
616
|
+
|
|
617
|
+
Detail documents obtained from a provider or endpoint are untrusted input. In addition to the Table node allowlist, nested Rich Content presenters are validated by the canonical Rich Content document validator; unsafe styles, URLs, expressions or nested schemas fail closed according to the configured unsupported-node policy. Backend authorization and field-level disclosure policy remain mandatory because presentation sanitization does not decide whether a record or field may be returned.
|
|
618
|
+
|
|
598
619
|
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.
|
|
620
|
+
|
|
621
|
+
When `EnterpriseRuntimeContextService` publishes a different user, tenant, environment, profile, module, authority/capability set, locale or timezone, Table invalidates pending detail/data work, selection, rendered rows and row discovery. Local hosts must deliver a new `data` array for the effective context and cancel their own obsolete requests; retaining or mutating the previous array does not make it eligible again. Remote Table reloads through its existing data pipeline. Configure the host's canonical context propagation and enforce authorization in the backend; UI invalidation does not authorize a record or prove tenant isolation. Label and timestamp refreshes alone preserve runtime state.
|
|
622
|
+
|
|
623
|
+
`initiallyCollapsed` applies after persisted hydration and configuration Apply as well as initial input. Known detail group shapes, source modes, presentation modes and booleans are validated before Apply; unknown extension properties remain preserved. A missing `height` uses dynamic sizing, matching the editor default. `height.mode: "dynamic"` makes that intent explicit, follows the rendered content and occupies no body space when the surface is hidden. `height.mode: "fixed"` requires a positive pixel height; the editor starts at 192px when fixed mode is selected without a previous value.
|
|
624
|
+
|
|
625
|
+
Within `lazyLoad`, only `cache.enabled` (retention after collapse) and `cancelOnCollapse` currently change runtime behavior. `enabled`, `actionId`, `cache.ttlMs`, `retry.maxAttempts`, and `dedupeByRowKey` are deprecated compatibility fields: they round-trip but do not enable TTL, retries, action-based loading, or a deduplication override. Corporate configurations must not rely on those fields until an owning transport contract implements and tests them.
|
|
626
|
+
|
|
627
|
+
The fixed bottom body is a named, keyboard-focusable scroll region. This keeps long notes, timelines, referenced content and actions reachable, including when the operating system hides scrollbars until interaction. Dynamic mode lets short or variable content determine the panel height and keeps the collection controls in their stable position above the panel by default.
|
|
628
|
+
|
|
629
|
+
For detail `source.mode: "resourcePath"`, only a relative route that resolves to the host origin is executable. The runtime admits the canonical pathname through `resourceAllowList`, rejects explicit or encoded path traversal/separators and follows no redirects. Requests use same-origin credentials and `EnterpriseRuntimeContextService.effectiveRequestHeaders()`; this explicit surface can include the current context and host-configured authentication data without changing the context-only `headers()` contract. The allowlist is a document guardrail, not authorization, and it is not method-aware. Backend authorization remains mandatory for every GET/POST. Query semantics remain the endpoint owner's contract. Relative routes without a leading slash retain document-base behavior. Hosts that rely on Angular authentication or XSRF interceptors must use `source.mode: "resource"` with `PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER`, or publish the required headers through the canonical enterprise runtime header configuration, because this redirect-denying transport intentionally uses Fetch.
|
|
630
|
+
|
|
631
|
+
The Fetch-based detail transport currently buffers the response body before parsing and does not define a client-side byte limit. Corporate gateways and detail endpoints must therefore enforce response-size and timeout policies. Treat a configurable client-side budget as a future platform contract, not as a property that can be improvised in a Table document.
|
|
632
|
+
|
|
633
|
+
Every non-2xx response is a failed detail resolution even when its body resembles a valid schema. Error bodies are never materialized as UI content; the configured fallback may run, otherwise the detail stays in its governed blocked state.
|
|
634
|
+
|
|
599
635
|
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.
|
|
600
636
|
Governed embed nodes (`formRef`, `tableRef`, `chartRef`, `templateRef`, `diagramEmbed`) default to `renderMode: "reference"` when the field is omitted.
|
|
601
637
|
`renderMode: "inline"` is an explicit intent for an owning runtime/provider to materialize the referenced surface inside the detail row; hosts must still keep the reference shell as the accessible fallback when the provider, data, or capability is unavailable.
|
|
@@ -684,3 +720,11 @@ editor” até 768px de largura disponível, mantendo a mesma seleção e os con
|
|
|
684
720
|
das abas. Acima desse limite, reaparece a navegação por abas. O Settings Panel
|
|
685
721
|
organiza título, expandir e fechar em uma grade até 599px; a prévia, quando
|
|
686
722
|
suportada, ocupa a linha seguinte. Nenhum documento ou protocolo de Save é alterado.
|
|
723
|
+
|
|
724
|
+
<!-- praxis-npm-catalog-links:start -->
|
|
725
|
+
## Official documentation and examples
|
|
726
|
+
|
|
727
|
+
- [Canonical technical overview: Overview](https://praxisui.dev/docs/components/praxis-table)
|
|
728
|
+
- [Praxis Angular public catalog](https://praxisui.dev/angular)
|
|
729
|
+
- [Public example: Examples](https://praxisui.dev/docs/components/praxis-table/examples)
|
|
730
|
+
<!-- praxis-npm-catalog-links:end -->
|