@ai-matrx/design-system 0.27.0 → 0.30.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.
Files changed (41) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/dist/data-table/copy-helpers.d.cts +1 -1
  3. package/dist/data-table/copy-helpers.d.ts +1 -1
  4. package/dist/data-table/filter-engine.d.cts +1 -1
  5. package/dist/data-table/filter-engine.d.ts +1 -1
  6. package/dist/data-table/host.d.cts +1 -1
  7. package/dist/data-table/host.d.ts +1 -1
  8. package/dist/data-table/index.cjs +39 -7
  9. package/dist/data-table/index.cjs.map +1 -1
  10. package/dist/data-table/index.d.cts +3 -3
  11. package/dist/data-table/index.d.ts +3 -3
  12. package/dist/data-table/index.js +39 -7
  13. package/dist/data-table/index.js.map +1 -1
  14. package/dist/data-table/infer-filter.d.cts +1 -1
  15. package/dist/data-table/infer-filter.d.ts +1 -1
  16. package/dist/data-table/layered-filters.d.cts +1 -1
  17. package/dist/data-table/layered-filters.d.ts +1 -1
  18. package/dist/data-table/query-control.d.cts +1 -1
  19. package/dist/data-table/query-control.d.ts +1 -1
  20. package/dist/data-table/spreadsheet.cjs +37 -6
  21. package/dist/data-table/spreadsheet.cjs.map +1 -1
  22. package/dist/data-table/spreadsheet.d.cts +35 -1
  23. package/dist/data-table/spreadsheet.d.ts +35 -1
  24. package/dist/data-table/spreadsheet.js +37 -6
  25. package/dist/data-table/spreadsheet.js.map +1 -1
  26. package/dist/data-table/types.cjs.map +1 -1
  27. package/dist/data-table/types.d.cts +2 -2
  28. package/dist/data-table/types.d.ts +2 -2
  29. package/dist/data-table/url-state.d.cts +1 -1
  30. package/dist/data-table/url-state.d.ts +1 -1
  31. package/dist/data-table/xlsx.d.cts +1 -1
  32. package/dist/data-table/xlsx.d.ts +1 -1
  33. package/dist/index.cjs +13 -5
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +16 -0
  36. package/dist/index.d.ts +16 -0
  37. package/dist/index.js +13 -5
  38. package/dist/index.js.map +1 -1
  39. package/dist/{types-D9JBR6ZU.d.ts → types-CFmCZXVn.d.ts} +24 -1
  40. package/dist/{types-jQddSUnj.d.cts → types-CYkwg9jR.d.cts} +24 -1
  41. package/package.json +1 -1
package/dist/index.d.cts CHANGED
@@ -1475,6 +1475,22 @@ interface OrganizationPickerOrganization {
1475
1475
  /** Database-validated 2–3 uppercase letters. Optional — not every report carries it. */
1476
1476
  abbreviation?: string | null;
1477
1477
  isPersonal?: boolean;
1478
+ /**
1479
+ * THE ADDRESS, for when the NAME is not enough — its slug, or whatever else the
1480
+ * host has that tells two of them apart.
1481
+ *
1482
+ * 🚨 WHY (crew D2, 2026-09-21). Two organizations called "Kessler Lab for Applied
1483
+ * Microbial Ecology" and two called "Wraithmoor Regional Museum of Art & Craft" sat
1484
+ * in one list, identical down to the abbreviation tile, and a person had no way of
1485
+ * knowing which one they were about to work in. The list drew the name and nothing
1486
+ * else, so there was nothing for it to draw.
1487
+ *
1488
+ * It is shown ONLY on the rows whose name another row in the list also carries —
1489
+ * the way Slack shows a workspace's URL and Google shows the account's email, and
1490
+ * only where it settles the question. A list of distinct names stays exactly as it
1491
+ * was, because a second line under every row is noise a person learns to skip.
1492
+ */
1493
+ distinguisher?: string | null;
1478
1494
  }
1479
1495
  interface OrganizationPickerProps {
1480
1496
  organizations: readonly OrganizationPickerOrganization[];
package/dist/index.d.ts CHANGED
@@ -1475,6 +1475,22 @@ interface OrganizationPickerOrganization {
1475
1475
  /** Database-validated 2–3 uppercase letters. Optional — not every report carries it. */
1476
1476
  abbreviation?: string | null;
1477
1477
  isPersonal?: boolean;
1478
+ /**
1479
+ * THE ADDRESS, for when the NAME is not enough — its slug, or whatever else the
1480
+ * host has that tells two of them apart.
1481
+ *
1482
+ * 🚨 WHY (crew D2, 2026-09-21). Two organizations called "Kessler Lab for Applied
1483
+ * Microbial Ecology" and two called "Wraithmoor Regional Museum of Art & Craft" sat
1484
+ * in one list, identical down to the abbreviation tile, and a person had no way of
1485
+ * knowing which one they were about to work in. The list drew the name and nothing
1486
+ * else, so there was nothing for it to draw.
1487
+ *
1488
+ * It is shown ONLY on the rows whose name another row in the list also carries —
1489
+ * the way Slack shows a workspace's URL and Google shows the account's email, and
1490
+ * only where it settles the question. A list of distinct names stays exactly as it
1491
+ * was, because a second line under every row is noise a person learns to skip.
1492
+ */
1493
+ distinguisher?: string | null;
1478
1494
  }
1479
1495
  interface OrganizationPickerProps {
1480
1496
  organizations: readonly OrganizationPickerOrganization[];
package/dist/index.js CHANGED
@@ -3415,6 +3415,11 @@ function OrganizationPicker({
3415
3415
  }) {
3416
3416
  const active = organizations.find((o) => o.id === activeOrganizationId) ?? null;
3417
3417
  const isDefault = (id) => !!defaultOrganizationId && id === defaultOrganizationId;
3418
+ const listed = defaultOrganizationId === null ? organizations : [
3419
+ ...organizations.filter((o) => o.id === defaultOrganizationId),
3420
+ ...organizations.filter((o) => o.id !== defaultOrganizationId)
3421
+ ];
3422
+ const sharesItsName = (org) => organizations.filter((other) => other.name.trim() === org.name.trim()).length > 1;
3418
3423
  return /* @__PURE__ */ jsxs21("div", { className: cn("flex flex-col", className), "data-slot": "organization-picker", children: [
3419
3424
  !hideHeading && /* @__PURE__ */ jsx38("p", { className: "px-2 py-1.5 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground", children: "Organization" }),
3420
3425
  loading ? /* @__PURE__ */ jsxs21("div", { className: "space-y-1 px-1 py-1", "aria-busy": "true", "aria-label": "Loading organizations", children: [
@@ -3426,7 +3431,7 @@ function OrganizationPicker({
3426
3431
  " ",
3427
3432
  /* @__PURE__ */ jsx38("span", { className: "font-medium text-foreground", children: active.name })
3428
3433
  ] }) : /* @__PURE__ */ jsx38("p", { className: "px-2 pb-1 text-[11px] text-destructive", "data-slot": "organization-picker-status", children: "No organization selected \u2014 pick one below." }),
3429
- /* @__PURE__ */ jsx38("ul", { className: "max-h-72 overflow-y-auto", role: "listbox", "aria-label": "Organizations", children: organizations.map((org) => {
3434
+ /* @__PURE__ */ jsx38("ul", { className: "max-h-72 overflow-y-auto", role: "listbox", "aria-label": "Organizations", children: listed.map((org) => {
3430
3435
  const isActive = org.id === activeOrganizationId;
3431
3436
  return /* @__PURE__ */ jsx38("li", { role: "none", children: /* @__PURE__ */ jsxs21(
3432
3437
  "button",
@@ -3456,7 +3461,10 @@ function OrganizationPicker({
3456
3461
  )
3457
3462
  }
3458
3463
  ),
3459
- /* @__PURE__ */ jsx38("span", { className: "min-w-0 flex-1 truncate", children: org.name }),
3464
+ /* @__PURE__ */ jsxs21("span", { className: "flex min-w-0 flex-1 flex-col", children: [
3465
+ /* @__PURE__ */ jsx38("span", { className: "truncate", children: org.name }),
3466
+ sharesItsName(org) && org.distinguisher ? /* @__PURE__ */ jsx38("span", { className: "truncate text-[10px] font-normal text-muted-foreground", children: org.distinguisher }) : null
3467
+ ] }),
3460
3468
  org.isPersonal && /* @__PURE__ */ jsx38("span", { className: "shrink-0 rounded-full bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground", children: "Personal" }),
3461
3469
  isDefault(org.id) && /* @__PURE__ */ jsx38(
3462
3470
  StarIcon,
@@ -3499,8 +3507,8 @@ function DefaultOrganizationSwitch({
3499
3507
  "data-slot": "organization-picker-default",
3500
3508
  children: [
3501
3509
  /* @__PURE__ */ jsxs21("div", { className: "min-w-0", children: [
3502
- /* @__PURE__ */ jsx38("p", { className: "text-xs font-medium text-foreground", children: "Set as my default" }),
3503
- /* @__PURE__ */ jsx38("p", { className: "truncate text-[11px] text-muted-foreground", children: disabled ? "Select an organization first" : checked ? `Next startup opens ${active.name}` : "Auto-select this at startup" })
3510
+ /* @__PURE__ */ jsx38("p", { className: "text-xs font-medium text-foreground", children: "Keep it at the top" }),
3511
+ /* @__PURE__ */ jsx38("p", { className: "truncate text-[11px] text-muted-foreground", children: disabled ? "Select an organization first" : checked ? `${active.name} is first in this list on every device` : "Star it so it is first in this list on every device" })
3504
3512
  ] }),
3505
3513
  /* @__PURE__ */ jsx38(
3506
3514
  Switch,
@@ -3508,7 +3516,7 @@ function DefaultOrganizationSwitch({
3508
3516
  checked,
3509
3517
  disabled,
3510
3518
  onCheckedChange: onChange,
3511
- "aria-label": "Set this organization as my default"
3519
+ "aria-label": "Keep this organization at the top of the list"
3512
3520
  }
3513
3521
  )
3514
3522
  ]