@ai-matrx/design-system 0.11.5 → 0.12.0

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,86 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.12.0 — 2026-09-08
4
+
5
+ ### `OrganizationPicker` — the ONE "which organization am I acting in" control
6
+
7
+ Three surfaces, three UIs for one fact: matrx-frontend had the full picker
8
+ (list with abbreviation tile, Personal badge, default star, active check, the
9
+ "Set as my default" switch, and the sentence naming the working organization);
10
+ Workflow Studio's sidebar and the admin dashboard's settings each had a bare
11
+ `<Select>` with different copy, different placement and no default control.
12
+ `OrganizationPicker` is the matrx-frontend panel ported verbatim
13
+ (`OrganizationPickerPanel` + `UserMenuOrgSection` + `DefaultOrgSwitch`), made
14
+ presentational: the host supplies memberships, the active id, the default id,
15
+ `onSelect` and (optionally) `onSetDefault`; it owns no fetch, storage or
16
+ resolution. Omit `onSetDefault` and the switch is not rendered — a host with no
17
+ write path must not show a control that does nothing. `OrganizationAbbreviation`
18
+ ships alongside (falls back to the name's first letter, so a tile is never
19
+ empty). Icons are package SVGs (C19: `StarIcon`, `Building2Icon` added
20
+ internally); the loading rows are this package's `Skeleton`; the default star
21
+ uses the semantic `warning` token — both caught by the package's own guards on
22
+ the first attempt. Adopted in the same session by matrx-frontend (user menu +
23
+ header nudge), workflow-studio (sidebar popover) and the admin dashboard
24
+ (Settings → Organization).
25
+
26
+ ## 0.11.6 — 2026-09-08
27
+
28
+ **THE PATCH TO TAKE.** 0.11.3, 0.11.4 and 0.11.5 are all superseded; the
29
+ history of why is kept below because each one is a distinct, reusable finding
30
+ about shipping CSS from a package.
31
+
32
+ 🚨 **THE GENERATION HAZARD** — the third and last of them, measured on
33
+ matrx-frontend's live stylesheet after adopting 0.11.5. That release spelled
34
+ the footer's bottom pad `pb-[var(--dialog-pad-bottom,0px)]` and the card
35
+ `[--dialog-pad-bottom:1.5rem]`. **Neither utility reached the consumer's
36
+ stylesheet**, while the pre-existing `px-[var(--dialog-pad,0px)]` on the same
37
+ element did — so the footer rendered with `padding-bottom: 0`. A consumer's
38
+ Tailwind generates utilities from what it SCANS, and **a class name this
39
+ package invents is not guaranteed to reach any consumer's sheet**. Silent, no
40
+ error: the C26 host contract again, one layer further out.
41
+
42
+ **So 0.11.6 invents no class name at all.** The footer's utilities are the
43
+ 0.11.2 string minus exactly one token — the negative block margin that caused
44
+ the original defect:
45
+
46
+ ```
47
+ - mx-[…] mb-[calc(var(--dialog-pad,0px)*-1)] px-[…] pb-[var(--dialog-pad,0px)]
48
+ + mx-[…] px-[…] pb-[var(--dialog-pad,0px)]
49
+ ```
50
+
51
+ Everything genuinely new lives in `styles.css`, which the package ships itself:
52
+
53
+ ```css
54
+ .matrx-dialog-card:has(> [data-slot="dialog-footer"]),
55
+ .matrx-dialog-card:has(> [data-slot="alert-dialog-footer"]) { padding-bottom: 0 }
56
+
57
+ .matrx-mobile-sheet > [data-slot="dialog-footer"] {
58
+ padding-bottom: max(var(--dialog-pad, 0px), env(safe-area-inset-bottom, 0px));
59
+ }
60
+ ```
61
+
62
+ The second rule restates the home-indicator floor the sheet's card used to buy
63
+ with `pb-safe`, since the reservation hands that padding to the footer. It is
64
+ the ONE place a shipped rule overrides a caller's footer padding, and it is a
65
+ safety floor rather than taste.
66
+
67
+ **Measured on the live app, 1280x800, after adoption** — every consequence
68
+ length, `overlapPx = -16` (a full `gap-4` of clearance where 0.11.2 had `+7.6`
69
+ of occlusion), footer padding `12/24/24/24px` identical to 0.11.2, footer bottom
70
+ flush to the card's inner edge, and the card's total height unchanged. Nothing
71
+ about the dialog changed except that the consequence is now fully visible.
72
+
73
+ **Guard added:** `sticky-footer-geometry.test.tsx` § "invents NO new Tailwind
74
+ class name". All 9 of its assertions and both `styles.test.ts` § THE PREFLIGHT
75
+ RULE assertions are proven RED on the pre-fix baseline and GREEN here.
76
+
77
+ ### Consumer action (C28)
78
+
79
+ **Take 0.11.6.** No API change; the footer's rendered geometry is identical to
80
+ 0.11.2 minus the occlusion, and every `DialogFooter` / `AlertDialogFooter`
81
+ `className` override behaves exactly as it did. Three older contracts also
82
+ start working for the first time — see § 0.11.4.
83
+
3
84
  ## 0.11.5 — 2026-09-08
4
85
 
5
86
  **0.11.4's footer rule was correct and in the wrong place a second time — it