@ai-matrx/design-system 0.48.9 → 0.48.11

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,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.48.11
4
+
5
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
6
+ `git diff npm/design-system/v0.48.10..npm/design-system/v0.48.11 -- apps/shared/design-system`).
7
+ No source changes intended and no consumer action required.
8
+
9
+ ## 0.48.10
10
+ ### Unreleased
11
+ ### page-pass shared fix (2026-09-27): a bottom sheet sizes to its content
12
+
13
+ - The adaptive `BottomSheet` has no 60dvh minimum (it keeps the 90dvh maximum): a two-action sheet was mostly empty and hosts overrode it with `min-h-0`. Proof: `bottom-sheet.test.tsx`, red on the old class.
14
+
15
+
16
+ ### (2026-09-27 — an empty table)
17
+
18
+ - **An empty table (nothing searched or filtered) draws no pager** — "0-0 of 0" and a disabled pager said nothing the empty state did not. A search or filter that matched nothing keeps its footer (it still says what was searched).
19
+ - **The empty / failed-read message cell keeps its room** (`data-matrx-table-message-cell`, excluded from the density padding rule that squeezed it flush under the header).
20
+ - Proof: `MatrxDataTable.cards-no-frame.test.tsx` "zero rows"; `MatrxDataTable.progressive.test.tsx` "an EMPTY table".
21
+
22
+ ### Consumer action
23
+
24
+ A test that expected the pager over an unfiltered empty table now expects none.
25
+
3
26
  ## 0.48.9
4
27
  ### ALC-15 round 5 (a host engine supersedes a built-in format; no JSON twins)
5
28
 
@@ -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}`
@@ -43905,7 +43906,9 @@ function BottomSheet({
43905
43906
  {
43906
43907
  className: cn(
43907
43908
  "fixed inset-x-0 bottom-0 z-[10000] mt-24 flex flex-col rounded-t-2xl overflow-hidden",
43908
- size === "full" ? "h-[92dvh]" : "min-h-[60dvh] max-h-[90dvh]",
43909
+ // Adaptive sizes to its content, up to 90dvh — never a 60dvh floor that
43910
+ // left a two-action sheet mostly empty (hosts overrode it with min-h-0).
43911
+ size === "full" ? "h-[92dvh]" : "max-h-[90dvh]",
43909
43912
  surface === "solid" && "border border-b-0 border-border bg-background shadow-2xl",
43910
43913
  contentClassName
43911
43914
  ),
@@ -51181,10 +51184,11 @@ function MatrxDataTableCore(coreProps) {
51181
51184
  },
51182
51185
  "matrx-column-spacer-end"
51183
51186
  ) : null
51184
- ] }, `sk-${i}`)) : readFailure ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("td", { colSpan: renderedColSpan, className: "px-0 py-12 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "sticky left-0 flex flex-col items-center gap-2 whitespace-normal px-4", style: { width: "100cqw", maxWidth: "100%" }, children: readFailure }) }) }) : paginated.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
51187
+ ] }, `sk-${i}`)) : readFailure ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("td", { colSpan: renderedColSpan, "data-matrx-table-message-cell": true, className: "px-0 py-12 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "sticky left-0 flex flex-col items-center gap-2 whitespace-normal px-4", style: { width: "100cqw", maxWidth: "100%" }, children: readFailure }) }) }) : paginated.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
51185
51188
  "td",
51186
51189
  {
51187
51190
  colSpan: renderedColSpan,
51191
+ "data-matrx-table-message-cell": true,
51188
51192
  className: "px-0 py-12 text-center",
51189
51193
  children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { "data-matrx-table-empty-state": true, className: "sticky left-0 flex flex-col items-center gap-2 whitespace-normal px-4", style: { width: "100cqw", maxWidth: "100%" }, children: [
51190
51194
  renderedEmptyState?.icon,
@@ -51471,32 +51475,37 @@ function MatrxDataTableCore(coreProps) {
51471
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
51472
51476
  ]
51473
51477
  }
51474
- ) : !hidePagination ? /* @__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)(
51475
- GenericTablePagination,
51476
- {
51477
- totalItems,
51478
- ...paginationLabelFormat ? { labelFormat: paginationLabelFormat } : sourceTotal === void 0 ? {} : { labelFormat: (start, end, total) => `${(0, import_format5.formatCount)(start)}\u2013${(0, import_format5.formatCount)(end)} of ${(0, import_format5.formatCount)(total)} matching \xB7 ${(0, import_format5.formatCount)(data.length)} / ${(0, import_format5.formatCount)(sourceTotal)} loaded` },
51479
- ...localProgressiveEnabled ? { progressive: {
51480
- shownCount: progressiveRows.shownCount,
51481
- loadedCount: data.length,
51482
- hasMore: progressiveRows.hasMore,
51483
- onShowMore: () => void chromeLatest.current.showMore()
51484
- } } : {},
51485
- itemsPerPage: pageSize === 0 && allRowsAreLoaded ? 0 : effectivePageSize,
51486
- currentPage: safePage,
51487
- onPageChange: setPage,
51488
- onItemsPerPageChange: (n2) => {
51489
- setPageSize(n2);
51490
- if (!controlledQuery) setPage(1);
51491
- },
51492
- pageSizeOptions: pageSizeOptions.filter((size) => size > 0),
51493
- showAllOption: allRowsAreLoaded,
51494
- allValue: 0,
51495
- allOptionLabel: "All loaded",
51496
- compact: true,
51497
- hideEntriesInfo: false
51498
- }
51499
- ) }) }) : null,
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
+ /* @__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
+ GenericTablePagination,
51484
+ {
51485
+ totalItems,
51486
+ ...paginationLabelFormat ? { labelFormat: paginationLabelFormat } : sourceTotal === void 0 ? {} : { labelFormat: (start, end, total) => `${(0, import_format5.formatCount)(start)}\u2013${(0, import_format5.formatCount)(end)} of ${(0, import_format5.formatCount)(total)} matching \xB7 ${(0, import_format5.formatCount)(data.length)} / ${(0, import_format5.formatCount)(sourceTotal)} loaded` },
51487
+ ...localProgressiveEnabled ? { progressive: {
51488
+ shownCount: progressiveRows.shownCount,
51489
+ loadedCount: data.length,
51490
+ hasMore: progressiveRows.hasMore,
51491
+ onShowMore: () => void chromeLatest.current.showMore()
51492
+ } } : {},
51493
+ itemsPerPage: pageSize === 0 && allRowsAreLoaded ? 0 : effectivePageSize,
51494
+ currentPage: safePage,
51495
+ onPageChange: setPage,
51496
+ onItemsPerPageChange: (n2) => {
51497
+ setPageSize(n2);
51498
+ if (!controlledQuery) setPage(1);
51499
+ },
51500
+ pageSizeOptions: pageSizeOptions.filter((size) => size > 0),
51501
+ showAllOption: allRowsAreLoaded,
51502
+ allValue: 0,
51503
+ allOptionLabel: "All loaded",
51504
+ compact: true,
51505
+ hideEntriesInfo: false
51506
+ }
51507
+ ) }) })
51508
+ ) : null,
51500
51509
  selection && selectionCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
51501
51510
  "div",
51502
51511
  {