@ai-matrx/design-system 0.30.0 → 0.32.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 +38 -0
- package/dist/data-table/index.cjs +1 -1
- package/dist/data-table/index.cjs.map +1 -1
- package/dist/data-table/index.js +1 -1
- package/dist/data-table/index.js.map +1 -1
- package/dist/data-table/spreadsheet.cjs +1 -1
- package/dist/data-table/spreadsheet.cjs.map +1 -1
- package/dist/data-table/spreadsheet.d.cts +11 -0
- package/dist/data-table/spreadsheet.d.ts +11 -0
- package/dist/data-table/spreadsheet.js +1 -1
- package/dist/data-table/spreadsheet.js.map +1 -1
- package/dist/index.cjs +162 -91
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +77 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.js +167 -96
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1469,6 +1469,62 @@ declare const SheetFooter: {
|
|
|
1469
1469
|
};
|
|
1470
1470
|
declare const SheetTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
1471
1471
|
|
|
1472
|
+
/**
|
|
1473
|
+
* OrganizationPicker — THE ONE "which organization am I acting in" control,
|
|
1474
|
+
* identical on every Matrx surface (the main app's user menu and header nudge,
|
|
1475
|
+
* Workflow Studio's sidebar, the admin dashboard's settings).
|
|
1476
|
+
*
|
|
1477
|
+
* Ported from matrx-frontend `features/organizations/components/
|
|
1478
|
+
* OrganizationPickerPanel.tsx` + `UserMenuOrgSection.tsx` + `DefaultOrgSwitch.tsx`
|
|
1479
|
+
* (2026-09-08), which until then were the ONLY surfaces with the full picker;
|
|
1480
|
+
* Studio and the dashboard each had a bare `<Select>` with different copy,
|
|
1481
|
+
* different placement and no default control. Three UIs for one fact.
|
|
1482
|
+
*
|
|
1483
|
+
* WHAT IT SAYS, IN WORDS (the rule the origin learned the hard way, five
|
|
1484
|
+
* reports across three rounds): the panel states which organization is
|
|
1485
|
+
* ACTIVE — "Working in Acme" — because a check mark and an accent colour are
|
|
1486
|
+
* not an answer to "which one am I in", and the default switch's sentence is
|
|
1487
|
+
* about STARTUP, not about now. A control whose only sentence describes a
|
|
1488
|
+
* different fact than the one the reader is looking for lies by omission.
|
|
1489
|
+
*
|
|
1490
|
+
* It is PRESENTATIONAL. The host supplies the memberships, the active id, the
|
|
1491
|
+
* default id, and two callbacks; it owns no fetch, no storage, no resolution.
|
|
1492
|
+
* The resolution order (this device's stored selection → sole membership →
|
|
1493
|
+
* make the person pick) and the shared cookie that carries the stored
|
|
1494
|
+
* selection live in the host's org-context module and `@ai-matrx/data/db`'s
|
|
1495
|
+
* `createActiveOrgCookie`. Persistence boundary (C10): none.
|
|
1496
|
+
*
|
|
1497
|
+
* 🚨 THE STAR DOES NOT PICK AN ORGANIZATION, AND MUST NOT SAY IT DOES.
|
|
1498
|
+
* Until 2026-09-21 this switch read "Set as my default" and promised "Next
|
|
1499
|
+
* startup opens Acme" / "Auto-select this at startup". That stopped being true
|
|
1500
|
+
* on 2026-09-19, when the owner deleted the durable-default rung from the
|
|
1501
|
+
* resolver — "a default organization is at most a per-client DISPLAY
|
|
1502
|
+
* preference; the org picker may show it and nothing else may read it" — and
|
|
1503
|
+
* nobody changed the words. Crew D2 met exactly that on 2026-09-21: the
|
|
1504
|
+
* selection gone on a fresh browser profile "with no persistence despite a
|
|
1505
|
+
* 'Set as my default' toggle implying it should stick". A control wearing a
|
|
1506
|
+
* false sentence is the one thing a screen may never do, so the switch now
|
|
1507
|
+
* says the thing it actually does — and DOES it: the starred organization is
|
|
1508
|
+
* drawn first, which is what a star is for in Slack and in Linear, and which
|
|
1509
|
+
* is the difference between finding your own workspace instantly and hunting
|
|
1510
|
+
* it among ninety.
|
|
1511
|
+
*
|
|
1512
|
+
* 🚨 A HUNDRED ROWS IS NOT A LIST (VERIFIER-8 MEDIUM-3, 2026-09-21).
|
|
1513
|
+
* The first screen of the data product offered the admin account's 116
|
|
1514
|
+
* organizations nine at a time, with no search, most of them lane fixtures.
|
|
1515
|
+
* Three things answer that, and all three are here rather than in one host:
|
|
1516
|
+
* • SEARCH over name and abbreviation, once the list passes eight rows.
|
|
1517
|
+
* • TEST ORGANIZATIONS HIDDEN by default behind the platform's one
|
|
1518
|
+
* archive-style disclosure (`ArchivedDisclosure`), with their count always
|
|
1519
|
+
* on screen. Hidden, never dropped.
|
|
1520
|
+
* • THE PERSON'S OWN organizations drawn first, under the starred one.
|
|
1521
|
+
* The host classifies (`isTestFixture`, `isOwn`); this component decides
|
|
1522
|
+
* nothing about a name it is given.
|
|
1523
|
+
*
|
|
1524
|
+
* Seam inversions from the origin: lucide `Check`/`Star` become package
|
|
1525
|
+
* SVGs (C19); the host `Switch` becomes this package's; `cn` is local.
|
|
1526
|
+
*/
|
|
1527
|
+
|
|
1472
1528
|
interface OrganizationPickerOrganization {
|
|
1473
1529
|
id: string;
|
|
1474
1530
|
name: string;
|
|
@@ -1491,6 +1547,27 @@ interface OrganizationPickerOrganization {
|
|
|
1491
1547
|
* was, because a second line under every row is noise a person learns to skip.
|
|
1492
1548
|
*/
|
|
1493
1549
|
distinguisher?: string | null;
|
|
1550
|
+
/**
|
|
1551
|
+
* This organization is a TEST FIXTURE — a lane's scratch organization, not a
|
|
1552
|
+
* business anybody works in. Classified in `iam.organizations.settings`
|
|
1553
|
+
* (`test_fixture`), never guessed from its name.
|
|
1554
|
+
*
|
|
1555
|
+
* 🚨 WHY (VERIFIER-8 MEDIUM-3, 2026-09-21). The admin account belongs to 116
|
|
1556
|
+
* organizations and 59 of them are fixtures. The first screen of the data
|
|
1557
|
+
* product offered all of them, nine at a time, with no search — so the two
|
|
1558
|
+
* or three a person actually works in were buried under lane debris. The
|
|
1559
|
+
* archived-items law already answers this shape everywhere else in the
|
|
1560
|
+
* platform: hide by default, ONE disclosure to reveal, and the count of what
|
|
1561
|
+
* is hidden is always on screen. It is hidden, never dropped: a fixture the
|
|
1562
|
+
* person genuinely wants is one click away.
|
|
1563
|
+
*/
|
|
1564
|
+
isTestFixture?: boolean;
|
|
1565
|
+
/**
|
|
1566
|
+
* The signed-in person created this organization. Drawn before the rest,
|
|
1567
|
+
* under the starred one — the same reason Slack puts your own workspace
|
|
1568
|
+
* first: in a list of a hundred, yours must not be something you search for.
|
|
1569
|
+
*/
|
|
1570
|
+
isOwn?: boolean;
|
|
1494
1571
|
}
|
|
1495
1572
|
interface OrganizationPickerProps {
|
|
1496
1573
|
organizations: readonly OrganizationPickerOrganization[];
|
package/dist/index.d.ts
CHANGED
|
@@ -1469,6 +1469,62 @@ declare const SheetFooter: {
|
|
|
1469
1469
|
};
|
|
1470
1470
|
declare const SheetTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
1471
1471
|
|
|
1472
|
+
/**
|
|
1473
|
+
* OrganizationPicker — THE ONE "which organization am I acting in" control,
|
|
1474
|
+
* identical on every Matrx surface (the main app's user menu and header nudge,
|
|
1475
|
+
* Workflow Studio's sidebar, the admin dashboard's settings).
|
|
1476
|
+
*
|
|
1477
|
+
* Ported from matrx-frontend `features/organizations/components/
|
|
1478
|
+
* OrganizationPickerPanel.tsx` + `UserMenuOrgSection.tsx` + `DefaultOrgSwitch.tsx`
|
|
1479
|
+
* (2026-09-08), which until then were the ONLY surfaces with the full picker;
|
|
1480
|
+
* Studio and the dashboard each had a bare `<Select>` with different copy,
|
|
1481
|
+
* different placement and no default control. Three UIs for one fact.
|
|
1482
|
+
*
|
|
1483
|
+
* WHAT IT SAYS, IN WORDS (the rule the origin learned the hard way, five
|
|
1484
|
+
* reports across three rounds): the panel states which organization is
|
|
1485
|
+
* ACTIVE — "Working in Acme" — because a check mark and an accent colour are
|
|
1486
|
+
* not an answer to "which one am I in", and the default switch's sentence is
|
|
1487
|
+
* about STARTUP, not about now. A control whose only sentence describes a
|
|
1488
|
+
* different fact than the one the reader is looking for lies by omission.
|
|
1489
|
+
*
|
|
1490
|
+
* It is PRESENTATIONAL. The host supplies the memberships, the active id, the
|
|
1491
|
+
* default id, and two callbacks; it owns no fetch, no storage, no resolution.
|
|
1492
|
+
* The resolution order (this device's stored selection → sole membership →
|
|
1493
|
+
* make the person pick) and the shared cookie that carries the stored
|
|
1494
|
+
* selection live in the host's org-context module and `@ai-matrx/data/db`'s
|
|
1495
|
+
* `createActiveOrgCookie`. Persistence boundary (C10): none.
|
|
1496
|
+
*
|
|
1497
|
+
* 🚨 THE STAR DOES NOT PICK AN ORGANIZATION, AND MUST NOT SAY IT DOES.
|
|
1498
|
+
* Until 2026-09-21 this switch read "Set as my default" and promised "Next
|
|
1499
|
+
* startup opens Acme" / "Auto-select this at startup". That stopped being true
|
|
1500
|
+
* on 2026-09-19, when the owner deleted the durable-default rung from the
|
|
1501
|
+
* resolver — "a default organization is at most a per-client DISPLAY
|
|
1502
|
+
* preference; the org picker may show it and nothing else may read it" — and
|
|
1503
|
+
* nobody changed the words. Crew D2 met exactly that on 2026-09-21: the
|
|
1504
|
+
* selection gone on a fresh browser profile "with no persistence despite a
|
|
1505
|
+
* 'Set as my default' toggle implying it should stick". A control wearing a
|
|
1506
|
+
* false sentence is the one thing a screen may never do, so the switch now
|
|
1507
|
+
* says the thing it actually does — and DOES it: the starred organization is
|
|
1508
|
+
* drawn first, which is what a star is for in Slack and in Linear, and which
|
|
1509
|
+
* is the difference between finding your own workspace instantly and hunting
|
|
1510
|
+
* it among ninety.
|
|
1511
|
+
*
|
|
1512
|
+
* 🚨 A HUNDRED ROWS IS NOT A LIST (VERIFIER-8 MEDIUM-3, 2026-09-21).
|
|
1513
|
+
* The first screen of the data product offered the admin account's 116
|
|
1514
|
+
* organizations nine at a time, with no search, most of them lane fixtures.
|
|
1515
|
+
* Three things answer that, and all three are here rather than in one host:
|
|
1516
|
+
* • SEARCH over name and abbreviation, once the list passes eight rows.
|
|
1517
|
+
* • TEST ORGANIZATIONS HIDDEN by default behind the platform's one
|
|
1518
|
+
* archive-style disclosure (`ArchivedDisclosure`), with their count always
|
|
1519
|
+
* on screen. Hidden, never dropped.
|
|
1520
|
+
* • THE PERSON'S OWN organizations drawn first, under the starred one.
|
|
1521
|
+
* The host classifies (`isTestFixture`, `isOwn`); this component decides
|
|
1522
|
+
* nothing about a name it is given.
|
|
1523
|
+
*
|
|
1524
|
+
* Seam inversions from the origin: lucide `Check`/`Star` become package
|
|
1525
|
+
* SVGs (C19); the host `Switch` becomes this package's; `cn` is local.
|
|
1526
|
+
*/
|
|
1527
|
+
|
|
1472
1528
|
interface OrganizationPickerOrganization {
|
|
1473
1529
|
id: string;
|
|
1474
1530
|
name: string;
|
|
@@ -1491,6 +1547,27 @@ interface OrganizationPickerOrganization {
|
|
|
1491
1547
|
* was, because a second line under every row is noise a person learns to skip.
|
|
1492
1548
|
*/
|
|
1493
1549
|
distinguisher?: string | null;
|
|
1550
|
+
/**
|
|
1551
|
+
* This organization is a TEST FIXTURE — a lane's scratch organization, not a
|
|
1552
|
+
* business anybody works in. Classified in `iam.organizations.settings`
|
|
1553
|
+
* (`test_fixture`), never guessed from its name.
|
|
1554
|
+
*
|
|
1555
|
+
* 🚨 WHY (VERIFIER-8 MEDIUM-3, 2026-09-21). The admin account belongs to 116
|
|
1556
|
+
* organizations and 59 of them are fixtures. The first screen of the data
|
|
1557
|
+
* product offered all of them, nine at a time, with no search — so the two
|
|
1558
|
+
* or three a person actually works in were buried under lane debris. The
|
|
1559
|
+
* archived-items law already answers this shape everywhere else in the
|
|
1560
|
+
* platform: hide by default, ONE disclosure to reveal, and the count of what
|
|
1561
|
+
* is hidden is always on screen. It is hidden, never dropped: a fixture the
|
|
1562
|
+
* person genuinely wants is one click away.
|
|
1563
|
+
*/
|
|
1564
|
+
isTestFixture?: boolean;
|
|
1565
|
+
/**
|
|
1566
|
+
* The signed-in person created this organization. Drawn before the rest,
|
|
1567
|
+
* under the starred one — the same reason Slack puts your own workspace
|
|
1568
|
+
* first: in a list of a hundred, yours must not be something you search for.
|
|
1569
|
+
*/
|
|
1570
|
+
isOwn?: boolean;
|
|
1494
1571
|
}
|
|
1495
1572
|
interface OrganizationPickerProps {
|
|
1496
1573
|
organizations: readonly OrganizationPickerOrganization[];
|