• v0.35.0 7242f8b32e

    v0.35.0 Stable

    pienter-release-bot released this 2026-09-22 14:34:59 +00:00 | 8 commits to main since this release

    Breaking

    • The tree leaves Index and DataTable for a component of its own,
      TreeIndex at @[secure]/ui/components/TreeIndex.vue (ADR 0012). Index
      loses loadTree, move, parentKey, canMove, canParent, rowLabel
      and moveLabels, useIndexQuery loses loadTree and tree, and
      DataTable loses parentKey, canMove, canParent, rowLabel,
      moveLabels, @move and announce(); both are the paged list and the flat
      table again. MoveLabels.childOf is replaced by level(n, parent), and
      treeItems gives each item a depth and lanes instead of a lane and
      four booleans. To migrate an index that used them, replace <Index> with
      <TreeIndex>: pass the tree loader as load (the flat load,
      queryOptions, state and syncQuery go, since a Tree Index has no
      query), keep columns with the level and move columns, parentKey,
      move, canParent, rowLabel, moveLabels, selection and row click, and
      drop sortable from the columns. The summary slot receives total only.
      The move request body is unchanged.

    Added

    • TreeIndex composes a new TreeTable
      (@[secure]/ui/components/TreeTable.vue) the way Index composes
      DataTable: the data-driven tree over Table for controlled data, taking
      rows, the same columns and predicates, v-model:placing and
      v-model:selected, and emitting move with the intent; it never reorders
      rows. TreeIndex shows the tree to any depth: every record is drawn, a row can
      be moved into or out of any parent, and the moving row's whole subtree
      travels with it. The optional maxDepth removes the destinations a move
      would exceed, so a backend that allows two levels never sees a third;
      without it any depth is offered. Each row's header cell carries a visually
      hidden "Level n, under ." prefix, so a screen reader hears depth and
      direct parent while the table stays a plain <table>. Loading, error and
      retry, the placing state, the optimistic move with rollback and
      announcement are as Index had them. Search and filters are a follow-up.

    Fixed

    • A table no longer stretches the page to its own height. Its visually hidden
      content (the caption, a typed column's header text, TreeTable's live
      region in the after slot) is absolutely positioned and was contained by
      the page rather than by the table's scroll port, so a long tree made the
      window scroll behind the app layout's own scrolling main and left a gap
      under the sticky footer. The wrap now contains it.
    Downloads