@ai-matrx/design-system 0.11.5 → 0.11.6

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,63 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.6 — 2026-09-08
4
+
5
+ **THE PATCH TO TAKE.** 0.11.3, 0.11.4 and 0.11.5 are all superseded; the
6
+ history of why is kept below because each one is a distinct, reusable finding
7
+ about shipping CSS from a package.
8
+
9
+ 🚨 **THE GENERATION HAZARD** — the third and last of them, measured on
10
+ matrx-frontend's live stylesheet after adopting 0.11.5. That release spelled
11
+ the footer's bottom pad `pb-[var(--dialog-pad-bottom,0px)]` and the card
12
+ `[--dialog-pad-bottom:1.5rem]`. **Neither utility reached the consumer's
13
+ stylesheet**, while the pre-existing `px-[var(--dialog-pad,0px)]` on the same
14
+ element did — so the footer rendered with `padding-bottom: 0`. A consumer's
15
+ Tailwind generates utilities from what it SCANS, and **a class name this
16
+ package invents is not guaranteed to reach any consumer's sheet**. Silent, no
17
+ error: the C26 host contract again, one layer further out.
18
+
19
+ **So 0.11.6 invents no class name at all.** The footer's utilities are the
20
+ 0.11.2 string minus exactly one token — the negative block margin that caused
21
+ the original defect:
22
+
23
+ ```
24
+ - mx-[…] mb-[calc(var(--dialog-pad,0px)*-1)] px-[…] pb-[var(--dialog-pad,0px)]
25
+ + mx-[…] px-[…] pb-[var(--dialog-pad,0px)]
26
+ ```
27
+
28
+ Everything genuinely new lives in `styles.css`, which the package ships itself:
29
+
30
+ ```css
31
+ .matrx-dialog-card:has(> [data-slot="dialog-footer"]),
32
+ .matrx-dialog-card:has(> [data-slot="alert-dialog-footer"]) { padding-bottom: 0 }
33
+
34
+ .matrx-mobile-sheet > [data-slot="dialog-footer"] {
35
+ padding-bottom: max(var(--dialog-pad, 0px), env(safe-area-inset-bottom, 0px));
36
+ }
37
+ ```
38
+
39
+ The second rule restates the home-indicator floor the sheet's card used to buy
40
+ with `pb-safe`, since the reservation hands that padding to the footer. It is
41
+ the ONE place a shipped rule overrides a caller's footer padding, and it is a
42
+ safety floor rather than taste.
43
+
44
+ **Measured on the live app, 1280x800, after adoption** — every consequence
45
+ length, `overlapPx = -16` (a full `gap-4` of clearance where 0.11.2 had `+7.6`
46
+ of occlusion), footer padding `12/24/24/24px` identical to 0.11.2, footer bottom
47
+ flush to the card's inner edge, and the card's total height unchanged. Nothing
48
+ about the dialog changed except that the consequence is now fully visible.
49
+
50
+ **Guard added:** `sticky-footer-geometry.test.tsx` § "invents NO new Tailwind
51
+ class name". All 9 of its assertions and both `styles.test.ts` § THE PREFLIGHT
52
+ RULE assertions are proven RED on the pre-fix baseline and GREEN here.
53
+
54
+ ### Consumer action (C28)
55
+
56
+ **Take 0.11.6.** No API change; the footer's rendered geometry is identical to
57
+ 0.11.2 minus the occlusion, and every `DialogFooter` / `AlertDialogFooter`
58
+ `className` override behaves exactly as it did. Three older contracts also
59
+ start working for the first time — see § 0.11.4.
60
+
3
61
  ## 0.11.5 — 2026-09-08
4
62
 
5
63
  **0.11.4's footer rule was correct and in the wrong place a second time — it
package/dist/index.cjs CHANGED
@@ -1067,7 +1067,7 @@ var AlertDialogContent = React7.forwardRef(({ className, children, container, an
1067
1067
  // a sticky footer when there is one, so the footer's box matches the
1068
1068
  // space the grid gave it and sticky never clamps it up over the
1069
1069
  // consequence copy.
1070
- "max-h-[85dvh] overflow-y-auto overscroll-contain [--dialog-pad:1.5rem] [--dialog-pad-bottom:1.5rem] overflow-x-clip [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full",
1070
+ "max-h-[85dvh] overflow-y-auto overscroll-contain [--dialog-pad:1.5rem] overflow-x-clip [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full",
1071
1071
  "sm:rounded-lg",
1072
1072
  animated && MOTION_DIALOG,
1073
1073
  className
@@ -1122,7 +1122,7 @@ var AlertDialogFooter = ({
1122
1122
  // have to be unlayered to survive Tailwind preflight (§ THE PREFLIGHT
1123
1123
  // RULE in styles.css) and would then override every caller's padding.
1124
1124
  "sticky bottom-0 z-10 bg-background pt-3",
1125
- "mx-[calc(var(--dialog-pad,0px)*-1)] px-[var(--dialog-pad,0px)] pb-[var(--dialog-pad-bottom,0px)]",
1125
+ "mx-[calc(var(--dialog-pad,0px)*-1)] px-[var(--dialog-pad,0px)] pb-[var(--dialog-pad,0px)]",
1126
1126
  className
1127
1127
  ),
1128
1128
  ...props
@@ -2143,7 +2143,7 @@ var DialogContentPrimitive = React17.forwardRef((props, ref) => {
2143
2143
  );
2144
2144
  });
2145
2145
  DialogContentPrimitive.displayName = "DialogContentPrimitive";
2146
- var DIALOG_DESKTOP_CLASSES2 = `matrx-dialog-card fixed left-[50%] top-[50%] z-[10000] grid min-w-0 w-full max-w-lg ${CENTERED_DIALOG} gap-4 max-h-[85dvh] overflow-y-auto overscroll-contain [--dialog-pad:1.5rem] [--dialog-pad-bottom:1.5rem] overflow-x-clip border bg-background p-6 shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full sm:rounded-lg`;
2146
+ var DIALOG_DESKTOP_CLASSES2 = `matrx-dialog-card fixed left-[50%] top-[50%] z-[10000] grid min-w-0 w-full max-w-lg ${CENTERED_DIALOG} gap-4 max-h-[85dvh] overflow-y-auto overscroll-contain [--dialog-pad:1.5rem] overflow-x-clip border bg-background p-6 shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full sm:rounded-lg`;
2147
2147
  var DIALOG_MOBILE_SHEET_CLASSES2 = "matrx-mobile-sheet matrx-dialog-card fixed inset-x-0 bottom-0 left-0 right-0 top-auto z-[10000] flex min-w-0 flex-col w-full max-w-full max-h-[90dvh] translate-x-0 translate-y-0 gap-4 [--dialog-pad:1rem] overflow-x-clip border-t bg-background p-4 pb-safe shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full rounded-t-2xl rounded-b-none overflow-y-auto overscroll-contain";
2148
2148
  var DIALOG_MOBILE_SHEET_OVERRIDE2 = "inset-x-0 bottom-0 left-0 right-0 top-auto translate-x-0 translate-y-0 w-full max-w-full max-h-[90dvh] rounded-b-none rounded-t-2xl overflow-y-auto";
2149
2149
  var DialogContent = React17.forwardRef(
@@ -2267,7 +2267,7 @@ var DialogFooter = ({
2267
2267
  // have to be unlayered to survive Tailwind preflight (§ THE PREFLIGHT
2268
2268
  // RULE in styles.css) and would then override every caller's padding.
2269
2269
  "sticky bottom-0 z-10 bg-background pt-3",
2270
- "mx-[calc(var(--dialog-pad,0px)*-1)] px-[var(--dialog-pad,0px)] pb-[var(--dialog-pad-bottom,0px)]",
2270
+ "mx-[calc(var(--dialog-pad,0px)*-1)] px-[var(--dialog-pad,0px)] pb-[var(--dialog-pad,0px)]",
2271
2271
  className
2272
2272
  ),
2273
2273
  ...props