@viliha/vui-ui 1.14.0 → 1.14.1

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/CHANGELOG.md CHANGED
@@ -7,6 +7,15 @@ backward-compatible features, **major** for breaking changes.
7
7
 
8
8
  To upgrade, see [Upgrading](./AGENT.md#upgrading) in the agent guide.
9
9
 
10
+ ## 1.14.1 — 2026-07-26
11
+
12
+ ### Fixed
13
+
14
+ - **Per-field Filter panel layout.** The header ("Filter") and the footer
15
+ (Clear / Search) are now static — only the fields scroll — so the actions stay
16
+ in view on a long filter form. The footer's top border spans the full panel
17
+ width, and the action buttons are compact (`size="sm"`).
18
+
10
19
  ## 1.14.0 — 2026-07-26
11
20
 
12
21
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viliha/vui-ui",
3
- "version": "1.14.0",
3
+ "version": "1.14.1",
4
4
  "description": "Vui UI — a clean, token-driven React admin/CRM component library built on Tailwind CSS v4, shadcn-style patterns, and Radix Icons. Ships as TypeScript source (Just-in-Time), compiled by the consuming app.",
5
5
  "license": "MIT",
6
6
  "author": "Suman Bonakurthi",
@@ -1363,8 +1363,11 @@ export function RecordView<T extends { id: RowId }>({
1363
1363
  // Search / Clear. The panel only gathers values — matching is the
1364
1364
  // consumer's job via `onFilter` (see the field's `filterable`).
1365
1365
  <>
1366
- <DropdownLabel>Filter</DropdownLabel>
1367
- <div className="flex max-h-80 w-72 flex-col gap-3 overflow-y-auto p-3">
1366
+ <div className="flex max-h-[min(28rem,70vh)] w-72 flex-col">
1367
+ {/* Header: static, full-width separator (from DropdownLabel). */}
1368
+ <DropdownLabel>Filter</DropdownLabel>
1369
+ {/* Content: the only scrolling region. */}
1370
+ <div className="flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto p-3">
1368
1371
  {filterFields.map((f) => {
1369
1372
  const cfg: FieldFilter<T> =
1370
1373
  typeof f.filterable === "object" ? f.filterable : {};
@@ -1453,8 +1456,11 @@ export function RecordView<T extends { id: RowId }>({
1453
1456
  </div>
1454
1457
  );
1455
1458
  })}
1456
- <div className="flex items-center justify-end gap-2 border-t border-border pt-3">
1459
+ </div>
1460
+ {/* Footer: static, full-width top border, compact buttons. */}
1461
+ <div className="flex shrink-0 items-center justify-end gap-2 border-t border-border p-3">
1457
1462
  <Button
1463
+ size="sm"
1458
1464
  onClick={() => {
1459
1465
  setFilterValues({});
1460
1466
  onFilter?.({});
@@ -1473,6 +1479,7 @@ export function RecordView<T extends { id: RowId }>({
1473
1479
  Clear
1474
1480
  </Button>
1475
1481
  <Button
1482
+ size="sm"
1476
1483
  variant="primary"
1477
1484
  onClick={() => {
1478
1485
  onFilter?.(filterValues);