@ai-matrx/design-system 0.48.10 → 0.48.12

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
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.48.12
4
+ ### Unreleased
5
+
6
+ - **A tab list that does not fit never hides its first tab** (lane HANDOVER, 2026-09-27): `TabsList` centres with `justify-center-safe`, so an overflowing list starts at its first tab and scrolls, instead of spilling past the start edge where no scroll reaches (the context inspector read "iff" at 390 wide). A caller's own `justify-*` still wins. Proof: `tabs.test.tsx`, red on the old class.
7
+
8
+ ## 0.48.11
9
+
10
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
11
+ `git diff npm/design-system/v0.48.10..npm/design-system/v0.48.11 -- apps/shared/design-system`).
12
+ No source changes intended and no consumer action required.
13
+
3
14
  ## 0.48.10
4
15
  ### Unreleased
5
16
  ### page-pass shared fix (2026-09-27): a bottom sheet sizes to its content
@@ -36522,6 +36522,7 @@ function GenericTablePagination({
36522
36522
  const startItem = totalItems === 0 ? 0 : progressive ? 1 : (currentPage - 1) * effectiveItemsPerPage + 1;
36523
36523
  const endItem = Math.min(progressive?.shownCount ?? currentPage * effectiveItemsPerPage, totalItems);
36524
36524
  const defaultLabelFormat = (start, end, total) => {
36525
+ if (total === 0 && !unknownTotal) return "0 rows";
36525
36526
  if (unknownTotal) return `${unknownTotal.pageRowCount.toLocaleString()} on page ${currentPage.toLocaleString()}`;
36526
36527
  if (progressive) return progressive.loadedCount !== void 0 && progressive.loadedCount !== total ? `${end} shown / ${total} matching \xB7 ${progressive.loadedCount} loaded` : `${end} shown / ${total} loaded`;
36527
36528
  return compact ? `${start}-${end} of ${total}` : `Showing ${start} to ${end} of ${total} entries`;
@@ -36576,7 +36577,7 @@ function GenericTablePagination({
36576
36577
  {
36577
36578
  className: cn("flex min-w-0 justify-center", infoContainerClassName),
36578
36579
  children: showPageInfo && !hideEntriesInfo && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
36579
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "truncate text-xs tabular-nums text-muted-foreground sm:hidden", children: labelFormat ? formatLabel(startItem, endItem, totalItems) : unknownTotal ? defaultLabelFormat(startItem, endItem, totalItems) : progressive ? `${endItem}/${totalItems} ${progressive.loadedCount !== void 0 && progressive.loadedCount !== totalItems ? "matching" : "loaded"}` : `${startItem}-${endItem} / ${totalItems}` }),
36580
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "truncate text-xs tabular-nums text-muted-foreground sm:hidden", children: labelFormat ? formatLabel(startItem, endItem, totalItems) : unknownTotal ? defaultLabelFormat(startItem, endItem, totalItems) : totalItems === 0 ? "0 rows" : progressive ? `${endItem}/${totalItems} ${progressive.loadedCount !== void 0 && progressive.loadedCount !== totalItems ? "matching" : "loaded"}` : `${startItem}-${endItem} / ${totalItems}` }),
36580
36581
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
36581
36582
  "span",
36582
36583
  {
@@ -36651,7 +36652,7 @@ function GenericTablePagination({
36651
36652
  ),
36652
36653
  fallbackClassName: page === currentPage ? pageActiveButtonClassName : pageButtonClassName,
36653
36654
  onClick: () => onPageChange(page),
36654
- disabled: isFetching,
36655
+ disabled: isFetching || totalPages <= 1,
36655
36656
  children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: page })
36656
36657
  },
36657
36658
  `mobile-${page}`
@@ -36667,7 +36668,7 @@ function GenericTablePagination({
36667
36668
  visibilityClassName: "hidden sm:inline-flex",
36668
36669
  fallbackClassName: currentPage === page ? pageActiveButtonClassName : pageButtonClassName,
36669
36670
  onClick: () => onPageChange(page),
36670
- disabled: isFetching,
36671
+ disabled: isFetching || totalPages <= 1,
36671
36672
  children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: page })
36672
36673
  },
36673
36674
  `desktop-${page}`
@@ -51474,11 +51475,10 @@ function MatrxDataTableCore(coreProps) {
51474
51475
  ] }) : !isLoading && appendQuery.pagination.totalItems !== void 0 && data.length === appendQuery.pagination.totalItems ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "min-w-0 max-w-full break-words whitespace-normal px-3 text-xs text-muted-foreground sm:text-sm", children: "All rows loaded" }) : null
51475
51476
  ]
51476
51477
  }
51477
- ) : !hidePagination && !(totalItems === 0 && !isLoading && !hasActiveFilters) ? (
51478
- // No pager over a table that is simply EMPTY: "0-0 of 0" and a disabled pager
51479
- // say nothing the empty state does not (page-pass 2026-09-27,
51480
- // /education/quizzes). A search or filter that matched nothing keeps it — its
51481
- // footer still says what was searched ("0–0 of 0 matching · 2 / 12 loaded").
51478
+ ) : !hidePagination ? (
51479
+ // Keep the footer and disabled page controls in place for an empty table,
51480
+ // including an unfiltered empty source. The empty-state copy explains why
51481
+ // there are no records; the stable footer preserves the table controls.
51482
51482
  /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(MatrxTableChrome, { part: "pagination", epoch: paginationEpoch, render: () => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
51483
51483
  GenericTablePagination,
51484
51484
  {