@praxisui/table 9.0.5-rc.13 → 9.0.5-rc.15

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 CHANGED
@@ -216,6 +216,8 @@ Use `behavior.emptyState` for table-owned no-data copy and presentation. `messag
216
216
 
217
217
  When the host does not provide `behavior.emptyState` or legacy `messages.states` copy, the table uses localized runtime defaults for the initial empty collection and for the filtered/search no-results state. Context-specific entries in `behavior.emptyState.contexts.initial`, `behavior.emptyState.contexts.filtered`, and `behavior.emptyState.contexts.searched` still override the base empty state for those modes.
218
218
 
219
+ For related resources, the generated empty state is informational and does not repeat the capability-governed CREATE action already kept stable in the toolbar. Declare `behavior.emptyState.actions` only when the journey intentionally needs a distinct contextual action; explicit host actions are preserved. Empty-state and toolbar actions share the public `--praxis-action-control-*` geometry, while `toolbar.appearance.tokens.actionSize` and `actionRadius` remain the stronger per-table overrides.
220
+
219
221
  ```ts
220
222
  const config: TableConfig = {
221
223
  behavior: {
@@ -249,27 +251,32 @@ const config: TableConfig = {
249
251
  `PraxisTableToolbar` materializes the toolbar as semantic regions rather than one wrapping row:
250
252
 
251
253
  - **identity** — title, subtitle and table context;
252
- - **query** — quick filters, always-visible dynamic filters and projected query shortcuts;
254
+ - **scope** — a small, mutually exclusive and removable set of governed quick filters;
255
+ - **query** — always-visible dynamic filters and projected query shortcuts;
253
256
  - **commands** — collection/business actions, table utilities and authoring entrypoints.
254
257
 
255
258
  The runtime owns the responsive composition through container queries. This is important when a table
256
259
  is rendered inside a drawer, split pane or dashboard card: behavior follows the width actually available
257
- to the table, not only the browser viewport. At wide widths, identity and commands share the first band
258
- and query controls use a stable second band. At compact widths, the regions move as complete units and
260
+ to the table, not only the browser viewport. At wide widths, identity and commands share the first band,
261
+ while scope and query share a stable second band. At compact widths, the regions move as complete units and
259
262
  commands are consolidated under one localized `Mais ações` entrypoint without losing export, column or
260
- density controls.
263
+ density controls. At narrow widths the first band preserves identity and commands before the scope and
264
+ query bands, so keyboard focus follows the same reading order presented visually.
261
265
 
262
266
  Authoring guidance:
263
267
 
264
268
  - use `toolbar.filters.quickFilters` for a small governed scope switch, not as a substitute for every filter;
269
+ one quick filter can be active at a time, and activating the current item again restores the previous criteria;
265
270
  - use `advancedFilters.settings.alwaysVisibleFields` for frequent editable criteria;
266
271
  - keep one clear collection/business action primary; export, columns and density are utilities;
267
272
  - project custom shortcuts through the toolbar slots, but do not target internal layout classes from the host;
268
273
  - validate the component container at `1440`, `1024`, `768`, `480` and `320` px, including long localized labels, zoom and keyboard focus.
269
274
 
270
- Adding filters or actions never requires a host breakpoint. When the command set grows, the compact menu
271
- preserves capability parity and keyboard order while the query region remains independently scroll-free at
272
- the page level.
275
+ Adding supported filters or actions never requires a host breakpoint. When the command set grows, the compact
276
+ menu preserves capability parity and keyboard order. Projected query shortcuts are grouped by the runtime,
277
+ receive a bounded width budget and wrap as one semantic cluster; projected controls must remain intrinsically
278
+ shrinkable and must not declare a fixed minimum width larger than their slot. Hosts must not rely on internal
279
+ selectors to position them. The query region remains independently scroll-free at the page level.
273
280
 
274
281
  The existing `toolbar.layout` fields are materialized by the same runtime: `alignment` aligns the identity
275
282
  and command regions, `padding` and `backgroundColor` project governed chrome, `height` defines the minimum
@@ -289,6 +296,11 @@ The package exports both the table runtime and `PraxisFilter` integration surfac
289
296
  availability; transient errors and missing discovered operations fail closed. Actions with an
290
297
  explicit `globalAction` or `recordSurface` remain governed by that declared execution contract.
291
298
  - `visibleWhen` and `disabledWhen` use canonical JSON Logic.
299
+ - Toolbar actions that are unavailable because of selection cardinality, `disabledWhen`, or an explicit
300
+ disabled state remain visually recognizable and keyboard focusable in the full toolbar. They expose
301
+ `aria-disabled="true"`, keep execution fail-closed, and announce the contextual disabled reason before
302
+ the configured operation tooltip. In the compact overflow menu, the same reason is rendered inline so
303
+ understanding the unavailable command never depends on hovering or focusing a native disabled menu item.
292
304
  - Inline and overflow actions preserve their actionable origin. Overflow menus finish closing and restore the trigger before emitting the action, allowing dialogs and drawers with `restoreFocus` to return keyboard focus to the correct table control.
293
305
 
294
306
  The filter field manager follows the compact inline visual language and can be themed by hosts through