@ai-matrx/design-system 0.11.3 → 0.11.4
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 +52 -0
- package/dist/styles.css +97 -63
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.11.4 — 2026-09-08
|
|
4
|
+
|
|
5
|
+
**0.11.3 SHIPPED THE FIX INTO A LAYER WHERE IT DID NOT APPLY — and the census
|
|
6
|
+
that forced found three older contracts in the same state.** Take this patch,
|
|
7
|
+
not 0.11.3.
|
|
8
|
+
|
|
9
|
+
0.11.3 moved the sticky-footer geometry into a shipped `.matrx-dialog-footer`
|
|
10
|
+
rule inside `@layer matrx-design-system`. On the live matrx-frontend build that
|
|
11
|
+
rule was present in the CSSOM and its padding computed to **`0px`**:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
layer order → properties, [matrx-design-system-tokens, matrx-design-system],
|
|
15
|
+
theme, base, components, utilities
|
|
16
|
+
@layer base → *, ::after, ::before, ::backdrop { … margin: 0; padding: 0 }
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
🚨 **THE PREFLIGHT RULE.** Tailwind's preflight zeroes `margin`, `padding`,
|
|
20
|
+
`border` and `box-sizing` on every element from `@layer base` — and a host that
|
|
21
|
+
follows THIS PACKAGE'S OWN documented layer statement puts
|
|
22
|
+
`matrx-design-system` BELOW `base`. So a layered declaration of any of those
|
|
23
|
+
four is not lower-priority: it is **gone**, with no error and nothing on screen
|
|
24
|
+
to trace it by, in the consumer that followed the docs most carefully.
|
|
25
|
+
|
|
26
|
+
**The census that finding forced — three contracts that were already inert,
|
|
27
|
+
silently, in matrx-frontend:**
|
|
28
|
+
|
|
29
|
+
| Rule | Shipped | Property preflight ate |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| `.pb-safe` | 0.5.0 | `padding-bottom` — the safe-area floor under every BottomSheet body/footer and the CommandDialog mobile sheet |
|
|
32
|
+
| `.pt-safe` | 0.7.0 | `padding-top` — the notch clearance on a `direction="top"` Drawer |
|
|
33
|
+
| `.matrx-glass-thin-border` | 0.5.0 | `border` — the glass chrome's whole stroke |
|
|
34
|
+
|
|
35
|
+
All four now live **unlayered**, under a banner that says why, and the glass
|
|
36
|
+
rule is split so only its stroke leaves the layer (fill, blur and elevation
|
|
37
|
+
stay layered, so a host utility can still re-tint them).
|
|
38
|
+
|
|
39
|
+
**Guard:** `styles.test.ts` § THE PREFLIGHT RULE — no layered rule may declare
|
|
40
|
+
a preflight-reset property, and the four known contracts must be unlayered and
|
|
41
|
+
intact. Proven RED on the 0.11.3 sheet, where it named all three older
|
|
42
|
+
offenders as well as the new one.
|
|
43
|
+
|
|
44
|
+
### Consumer action (C28)
|
|
45
|
+
|
|
46
|
+
**Take 0.11.4.** 0.11.3 has the correct structure and an inert footer rule: the
|
|
47
|
+
occlusion is gone but the footer renders with no padding and no bleed. Three
|
|
48
|
+
contracts get quietly *better* here — safe-area padding and the glass stroke
|
|
49
|
+
start working in every Tailwind host for the first time. One behaviour change
|
|
50
|
+
worth knowing: because `.matrx-dialog-footer`, `.pb-safe`, `.pt-safe` and the
|
|
51
|
+
glass stroke are now unlayered, a host utility on the same element no longer
|
|
52
|
+
overrides those specific properties. Pass geometry through the component's own
|
|
53
|
+
seams (`--dialog-pad`, `--dialog-pad-bottom`) rather than a padding utility.
|
|
54
|
+
|
|
3
55
|
## 0.11.3 — 2026-09-07
|
|
4
56
|
|
|
5
57
|
**THE STICKY FOOTER STOPPED PAINTING OVER THE CONSEQUENCE.** `ConfirmDialog`'s
|
package/dist/styles.css
CHANGED
|
@@ -40,6 +40,26 @@
|
|
|
40
40
|
rule regardless of specificity — that is the only way to re-scale
|
|
41
41
|
utility-set font sizes, and the only way a mask survives a `mask-*` reset.
|
|
42
42
|
|
|
43
|
+
🚨 THE PREFLIGHT RULE (0.11.3, measured — not reasoned)
|
|
44
|
+
-------------------------------------------------------
|
|
45
|
+
A LAYERED rule here may not declare `margin*`, `padding*`, `border*` or
|
|
46
|
+
`box-sizing`. Tailwind's preflight zeroes all four on `*, ::before, ::after`
|
|
47
|
+
inside `@layer base`, and in a host that follows the order statement above
|
|
48
|
+
this package's layer sits BELOW `base` — so a layered padding is silently
|
|
49
|
+
discarded with nothing to see, in the consumer that follows the docs most
|
|
50
|
+
carefully. Read off matrx-frontend's LIVE stylesheet on 2026-09-08:
|
|
51
|
+
|
|
52
|
+
layer order → properties, [matrx-design-system-tokens,
|
|
53
|
+
matrx-design-system], theme, base, components, utilities
|
|
54
|
+
@layer base → *, ::after, ::before, ::backdrop { … margin: 0; padding: 0 }
|
|
55
|
+
|
|
56
|
+
Found because `.matrx-dialog-footer`'s padding computed to `0px` on a live
|
|
57
|
+
dialog while its rule was demonstrably present in the CSSOM. The census it
|
|
58
|
+
forced found `.pb-safe`, `.pt-safe` and `.matrx-glass-thin-border`'s stroke
|
|
59
|
+
in the same state — three geometry contracts that had been INERT in
|
|
60
|
+
matrx-frontend since 0.5.0/0.7.0, silently. All four now live unlayered
|
|
61
|
+
below. Guard: `styles.test.ts` § THE PREFLIGHT RULE.
|
|
62
|
+
|
|
43
63
|
Extracted from matrx-frontend `app/globals.css` (the tap-target precedent);
|
|
44
64
|
the host originals were deleted in the same session that shipped this file.
|
|
45
65
|
========================================================================= */
|
|
@@ -88,25 +108,6 @@
|
|
|
88
108
|
}
|
|
89
109
|
}
|
|
90
110
|
|
|
91
|
-
/* -----------------------------------------------------------------------
|
|
92
|
-
pb-safe — safe-area bottom padding (BottomSheet body/footer, CommandDialog
|
|
93
|
-
mobile sheet). max() guarantees a minimum padding even when the inset is
|
|
94
|
-
0 (env() resolves to 0 on non-notched devices and when viewport-fit=cover
|
|
95
|
-
is absent).
|
|
96
|
-
----------------------------------------------------------------------- */
|
|
97
|
-
.pb-safe {
|
|
98
|
-
padding-bottom: max(0.75rem, env(safe-area-inset-bottom, 0px));
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/* -----------------------------------------------------------------------
|
|
102
|
-
pt-safe — the top twin, for a `direction="top"` Drawer, which lands under
|
|
103
|
-
the notch/status bar on exactly the devices where pb-safe matters. Same
|
|
104
|
-
max() floor and the same reason for it.
|
|
105
|
-
----------------------------------------------------------------------- */
|
|
106
|
-
.pt-safe {
|
|
107
|
-
padding-top: max(0.75rem, env(safe-area-inset-top, 0px));
|
|
108
|
-
}
|
|
109
|
-
|
|
110
111
|
/* -----------------------------------------------------------------------
|
|
111
112
|
matrx-glass-thin-border — the glass chrome the BottomSheet close control
|
|
112
113
|
and drag affordances wear. The STRUCTURE (tinted fill, backdrop blur +
|
|
@@ -126,8 +127,8 @@
|
|
|
126
127
|
saturate(var(--matrx-glass-saturate));
|
|
127
128
|
backdrop-filter: blur(var(--matrx-glass-blur))
|
|
128
129
|
saturate(var(--matrx-glass-saturate));
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
/* The stroke is NOT here — Tailwind preflight resets `border` in
|
|
131
|
+
`@layer base`, which outranks this layer. See THE PREFLIGHT RULE. */
|
|
131
132
|
}
|
|
132
133
|
.matrx-glass-thin-border:hover {
|
|
133
134
|
background-color: var(--matrx-glass-bg-hover);
|
|
@@ -141,48 +142,6 @@
|
|
|
141
142
|
background-color: var(--matrx-glass-bg);
|
|
142
143
|
}
|
|
143
144
|
|
|
144
|
-
/* -----------------------------------------------------------------------
|
|
145
|
-
.matrx-dialog-footer — THE STICKY FOOTER'S GEOMETRY, in one place.
|
|
146
|
-
|
|
147
|
-
This used to be a string of Tailwind utilities on `DialogFooter` and
|
|
148
|
-
`AlertDialogFooter`, and one of them — a NEGATIVE BOTTOM MARGIN used to
|
|
149
|
-
bleed the footer over the card's bottom padding — silently clipped the
|
|
150
|
-
thing the destructive-actions law exists to make readable (0.11.3, feedback
|
|
151
|
-
bf8fb00b). The mechanism, measured in Chrome at 1280x800:
|
|
152
|
-
|
|
153
|
-
a `position: sticky` element is CLAMPED to its containing block (here
|
|
154
|
-
the grid area / flex line the card gives it). A negative bottom margin
|
|
155
|
-
makes the footer's BORDER box taller than that area by exactly
|
|
156
|
-
`--dialog-pad`, so the browser yanks the whole footer UP by that amount.
|
|
157
|
-
With `--dialog-pad: 1.5rem` and `gap-4` that is 24px up against a 16px
|
|
158
|
-
gap: an 8px overlap in which the opaque footer painted over the last
|
|
159
|
-
line of the consequence — at EVERY description length, and unreachable
|
|
160
|
-
by scrolling, because the card's `scrollHeight === clientHeight`.
|
|
161
|
-
|
|
162
|
-
The bleed is now bought without a negative block margin: the footer owns
|
|
163
|
-
the card's BOTTOM padding (`padding-bottom`), the card gives it up (see
|
|
164
|
-
the reservation rule below), and only the INLINE bleed stays a negative
|
|
165
|
-
margin — sticky clamps the block axis, never the inline one.
|
|
166
|
-
|
|
167
|
-
`--dialog-pad-bottom` lets a card ask for more than `--dialog-pad` at the
|
|
168
|
-
bottom edge; the mobile sheet uses it for the home-indicator safe area.
|
|
169
|
-
----------------------------------------------------------------------- */
|
|
170
|
-
.matrx-dialog-footer {
|
|
171
|
-
position: sticky;
|
|
172
|
-
bottom: 0;
|
|
173
|
-
z-index: 10;
|
|
174
|
-
padding-top: 0.75rem;
|
|
175
|
-
margin-inline: calc(var(--dialog-pad, 0px) * -1);
|
|
176
|
-
padding-inline: var(--dialog-pad, 0px);
|
|
177
|
-
padding-bottom: var(--dialog-pad-bottom, var(--dialog-pad, 0px));
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/* The sheet's bottom edge is the phone's bottom edge — the footer has to
|
|
181
|
-
clear the home indicator, which is what the card's `pb-safe` used to do
|
|
182
|
-
before the footer took the bottom padding over. Same `max()` floor. */
|
|
183
|
-
.matrx-mobile-sheet {
|
|
184
|
-
--dialog-pad-bottom: max(0.75rem, env(safe-area-inset-bottom, 0px));
|
|
185
|
-
}
|
|
186
145
|
}
|
|
187
146
|
|
|
188
147
|
/* Keyframes cannot live inside a cascade layer's rule set and be referenced
|
|
@@ -791,6 +750,81 @@
|
|
|
791
750
|
);
|
|
792
751
|
}
|
|
793
752
|
|
|
753
|
+
/* ────────────────────────────────────────────────────────────────────────
|
|
754
|
+
THE PREFLIGHT-RESET GEOMETRY. Everything below this banner is UNLAYERED
|
|
755
|
+
because Tailwind preflight zeroes `margin`, `padding`, `border` and
|
|
756
|
+
`box-sizing` on every element from `@layer base` — which outranks this
|
|
757
|
+
package's layer in any host that declares the documented layer order. A
|
|
758
|
+
layered version of any of these rules is not "lower priority"; it is GONE,
|
|
759
|
+
with no error and nothing on screen to trace it by. See THE PREFLIGHT RULE
|
|
760
|
+
in this file's header for the measurement.
|
|
761
|
+
──────────────────────────────────────────────────────────────────────── */
|
|
762
|
+
|
|
763
|
+
/* pb-safe — safe-area bottom padding (BottomSheet body/footer, CommandDialog
|
|
764
|
+
mobile sheet, the dialog sheet's footer). max() guarantees a minimum padding
|
|
765
|
+
even when the inset is 0 (env() resolves to 0 on non-notched devices and
|
|
766
|
+
when viewport-fit=cover is absent). */
|
|
767
|
+
.pb-safe {
|
|
768
|
+
padding-bottom: max(0.75rem, env(safe-area-inset-bottom, 0px));
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
/* pt-safe — the top twin, for a `direction="top"` Drawer, which lands under
|
|
772
|
+
the notch/status bar on exactly the devices where pb-safe matters. */
|
|
773
|
+
.pt-safe {
|
|
774
|
+
padding-top: max(0.75rem, env(safe-area-inset-top, 0px));
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
/* The glass chrome's STROKE. The fill, blur and elevation stay layered (a host
|
|
778
|
+
utility should still be able to re-tint them); the stroke cannot, because
|
|
779
|
+
preflight's `border: 0px solid` would erase it. */
|
|
780
|
+
.matrx-glass-thin-border {
|
|
781
|
+
border: var(--matrx-glass-border-width-thin) solid
|
|
782
|
+
var(--matrx-glass-border-color);
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
/* -----------------------------------------------------------------------
|
|
786
|
+
.matrx-dialog-footer — THE STICKY FOOTER'S GEOMETRY, in one place.
|
|
787
|
+
|
|
788
|
+
This used to be a string of Tailwind utilities on `DialogFooter` and
|
|
789
|
+
`AlertDialogFooter`, and one of them — a NEGATIVE BOTTOM MARGIN used to
|
|
790
|
+
bleed the footer over the card's bottom padding — silently clipped the
|
|
791
|
+
thing the destructive-actions law exists to make readable (0.11.3, feedback
|
|
792
|
+
bf8fb00b). The mechanism, measured in Chrome at 1280x800:
|
|
793
|
+
|
|
794
|
+
a `position: sticky` element is CLAMPED to its containing block (here
|
|
795
|
+
the grid area / flex line the card gives it). A negative bottom margin
|
|
796
|
+
makes the footer's BORDER box taller than that area by exactly
|
|
797
|
+
`--dialog-pad`, so the browser yanks the whole footer UP by that amount.
|
|
798
|
+
With `--dialog-pad: 1.5rem` and `gap-4` that is 24px up against a 16px
|
|
799
|
+
gap: an 8px overlap in which the opaque footer painted over the last
|
|
800
|
+
line of the consequence — at EVERY description length, and unreachable
|
|
801
|
+
by scrolling, because the card's `scrollHeight === clientHeight`.
|
|
802
|
+
|
|
803
|
+
The bleed is now bought without a negative block margin: the footer owns
|
|
804
|
+
the card's BOTTOM padding (`padding-bottom`), the card gives it up (see
|
|
805
|
+
the reservation rule below), and only the INLINE bleed stays a negative
|
|
806
|
+
margin — sticky clamps the block axis, never the inline one.
|
|
807
|
+
|
|
808
|
+
`--dialog-pad-bottom` lets a card ask for more than `--dialog-pad` at the
|
|
809
|
+
bottom edge; the mobile sheet uses it for the home-indicator safe area.
|
|
810
|
+
----------------------------------------------------------------------- */
|
|
811
|
+
.matrx-dialog-footer {
|
|
812
|
+
position: sticky;
|
|
813
|
+
bottom: 0;
|
|
814
|
+
z-index: 10;
|
|
815
|
+
padding-top: 0.75rem;
|
|
816
|
+
margin-inline: calc(var(--dialog-pad, 0px) * -1);
|
|
817
|
+
padding-inline: var(--dialog-pad, 0px);
|
|
818
|
+
padding-bottom: var(--dialog-pad-bottom, var(--dialog-pad, 0px));
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
/* The sheet's bottom edge is the phone's bottom edge — the footer has to
|
|
822
|
+
clear the home indicator, which is what the card's `pb-safe` used to do
|
|
823
|
+
before the footer took the bottom padding over. Same `max()` floor. */
|
|
824
|
+
.matrx-mobile-sheet {
|
|
825
|
+
--dialog-pad-bottom: max(0.75rem, env(safe-area-inset-bottom, 0px));
|
|
826
|
+
}
|
|
827
|
+
|
|
794
828
|
/* ────────────────────────────────────────────────────────────────────────
|
|
795
829
|
.matrx-dialog-card — THE FOOTER RESERVATION.
|
|
796
830
|
|
package/package.json
CHANGED