feat(18-01): money list column, danger record actions, preview Edit rule and table kit (task 2)

- columns.yaml type: money with currency or currencyFrom (exactly one),
  never searchable, not sortable by default; every list row carries the
  currencyFrom column's value under its own key; the schema serves
  currency and currencyFrom on the column
- pact.AdminRecordAction.Danger, served as danger on cabana.RecordAction
  (absent when false); RecordActions.vue passes it to the confirm dialog
- CellValue money kind through formatMoney with the row's code, the em
  dash when empty and the amount alone without a code; DataTable aligns
  money headers and cells to the right
- PreviewView renders Edit only when a registered value field allows
  update (F6)
- main.css .summer-table* and .summer-stat__note kit classes (F7) over
  --c-* variables; cabana README kit rows
- fixture record actions void (danger) and resend; TestMoneyListCompile,
  TestMoneyListSmoke and TestRecordActionDangerSmoke; regenerated OpenAPI
  and TS types; rebuilt dist; lists-and-filters and admin-controllers docs
This commit is contained in:
Jakub Zych
2026-10-13 11:22:36 +02:00
parent 20385e53ee
commit 0c8605123e
29 changed files with 615 additions and 56 deletions

View File

@@ -384,6 +384,77 @@
font-variant-numeric: tabular-nums;
}
/* A note under a stat value (Phase 18, UI-SPEC F7): placed inside
.summer-stat__value after the value text, because .summer-stat is
column-reverse. */
.summer-stat__note {
display: block;
margin-top: 4px;
font-size: 13px;
font-weight: 400;
line-height: 1.5;
color: var(--c-muted);
}
/* Table kit (Phase 18, UI-SPEC F7): a native-looking table inside a
partial card. The wrapper scrolls horizontally inside the card. */
.summer-table-wrap {
overflow-x: auto;
max-width: 100%;
}
.summer-table {
width: 100%;
border-collapse: collapse;
font-size: 14px;
line-height: 1.5;
color: var(--c-text);
}
.summer-table th {
height: var(--spacing-row-head);
padding: 0 14px;
font-size: 12px;
font-weight: 600;
color: var(--c-muted);
text-align: start;
border-bottom: 1px solid var(--c-border);
white-space: nowrap;
}
.summer-table td {
padding: 12px 14px;
vertical-align: top;
border-bottom: 1px solid var(--c-border);
overflow-wrap: anywhere;
}
.summer-table :where(th, td):first-child {
padding-inline-start: 0;
}
.summer-table :where(th, td):last-child {
padding-inline-end: 0;
}
.summer-table__num {
text-align: end;
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
.summer-table__sub {
display: block;
font-size: 13px;
color: var(--c-muted);
}
.summer-table tfoot td {
padding-top: 16px;
border-bottom: 0;
font-weight: 600;
}
/* Callout (Phase 12.1, UI-SPEC): a status hint above a preview screen. */
.summer-callout {
display: flex;