@ai-matrx/design-system 0.32.0 → 0.35.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 (47) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/dist/content-transfer.cjs +3 -1
  3. package/dist/content-transfer.cjs.map +1 -1
  4. package/dist/content-transfer.js +3 -1
  5. package/dist/content-transfer.js.map +1 -1
  6. package/dist/data-table/copy-helpers.d.cts +1 -1
  7. package/dist/data-table/copy-helpers.d.ts +1 -1
  8. package/dist/data-table/data-row-inspector.cjs +3 -1
  9. package/dist/data-table/data-row-inspector.cjs.map +1 -1
  10. package/dist/data-table/data-row-inspector.js +3 -1
  11. package/dist/data-table/data-row-inspector.js.map +1 -1
  12. package/dist/data-table/data-row-window.cjs +3 -1
  13. package/dist/data-table/data-row-window.cjs.map +1 -1
  14. package/dist/data-table/data-row-window.js +3 -1
  15. package/dist/data-table/data-row-window.js.map +1 -1
  16. package/dist/data-table/filter-engine.d.cts +1 -1
  17. package/dist/data-table/filter-engine.d.ts +1 -1
  18. package/dist/data-table/host.d.cts +1 -1
  19. package/dist/data-table/host.d.ts +1 -1
  20. package/dist/data-table/index.cjs +95 -34
  21. package/dist/data-table/index.cjs.map +1 -1
  22. package/dist/data-table/index.d.cts +2 -2
  23. package/dist/data-table/index.d.ts +2 -2
  24. package/dist/data-table/index.js +95 -34
  25. package/dist/data-table/index.js.map +1 -1
  26. package/dist/data-table/infer-filter.d.cts +1 -1
  27. package/dist/data-table/infer-filter.d.ts +1 -1
  28. package/dist/data-table/layered-filters.d.cts +1 -1
  29. package/dist/data-table/layered-filters.d.ts +1 -1
  30. package/dist/data-table/query-control.d.cts +1 -1
  31. package/dist/data-table/query-control.d.ts +1 -1
  32. package/dist/data-table/types.cjs.map +1 -1
  33. package/dist/data-table/types.d.cts +1 -1
  34. package/dist/data-table/types.d.ts +1 -1
  35. package/dist/data-table/url-state.d.cts +1 -1
  36. package/dist/data-table/url-state.d.ts +1 -1
  37. package/dist/data-table/xlsx.d.cts +1 -1
  38. package/dist/data-table/xlsx.d.ts +1 -1
  39. package/dist/index.cjs +33 -4
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +28 -0
  42. package/dist/index.d.ts +28 -0
  43. package/dist/index.js +33 -4
  44. package/dist/index.js.map +1 -1
  45. package/dist/{types-CFmCZXVn.d.ts → types-Cxm5XK0L.d.ts} +25 -7
  46. package/dist/{types-CYkwg9jR.d.cts → types-kiV-CAuZ.d.cts} +25 -7
  47. package/package.json +1 -1
package/dist/index.d.cts CHANGED
@@ -1089,6 +1089,34 @@ interface PopoverContentProps extends React.ComponentPropsWithoutRef<typeof Popo
1089
1089
  * `styles.css` already honours `prefers-reduced-motion`.
1090
1090
  */
1091
1091
  animated?: boolean;
1092
+ /**
1093
+ * HOW WIDE THE POPOVER IS ALLOWED TO BE, and it is the SYSTEM that decides — never a
1094
+ * surface pasting its own `w-64` over the default (lane FIX-14, 2026-09-22).
1095
+ *
1096
+ * `"fixed"` (default) is the historical `w-72`: right for a menu of short, known
1097
+ * labels, where a ragged edge would look broken.
1098
+ *
1099
+ * `"content"` is for a popover whose whole job is to SHOW SOMETHING THE SYSTEM DID
1100
+ * NOT CHOOSE — a person's name, a record's title, a row the user is about to
1101
+ * create. The relation picker offered
1102
+ *
1103
+ * Create “Marisol Okonkwo — 418 Calle Pu
1104
+ *
1105
+ * inside a 16rem box, cut mid-word, on the one control that exists to show the name
1106
+ * being created. A fixed width cannot be right for content of unknown length, so
1107
+ * this one grows to its content between an honest floor and an honest ceiling:
1108
+ *
1109
+ * · at least the trigger's own width, and at least 20rem — the width Airtable's and
1110
+ * Notion's link-record pickers settle on, and wide enough that an ordinary
1111
+ * "name — street, town" fits on one line;
1112
+ * · at most 28rem, and never wider than the viewport less a 1rem gutter each side,
1113
+ * so it still fits a 375px phone with nothing running off the screen. The floor is
1114
+ * clamped by the same gutter, so on a very narrow screen the ceiling still wins.
1115
+ *
1116
+ * Beyond that ceiling the CONTENT truncates with an ellipsis and carries a `title`.
1117
+ * Growing, then ellipsis — never a mid-word cut.
1118
+ */
1119
+ sizing?: "fixed" | "content";
1092
1120
  }
1093
1121
  declare const PopoverContent: React.ForwardRefExoticComponent<PopoverContentProps & React.RefAttributes<HTMLDivElement>>;
1094
1122
 
package/dist/index.d.ts CHANGED
@@ -1089,6 +1089,34 @@ interface PopoverContentProps extends React.ComponentPropsWithoutRef<typeof Popo
1089
1089
  * `styles.css` already honours `prefers-reduced-motion`.
1090
1090
  */
1091
1091
  animated?: boolean;
1092
+ /**
1093
+ * HOW WIDE THE POPOVER IS ALLOWED TO BE, and it is the SYSTEM that decides — never a
1094
+ * surface pasting its own `w-64` over the default (lane FIX-14, 2026-09-22).
1095
+ *
1096
+ * `"fixed"` (default) is the historical `w-72`: right for a menu of short, known
1097
+ * labels, where a ragged edge would look broken.
1098
+ *
1099
+ * `"content"` is for a popover whose whole job is to SHOW SOMETHING THE SYSTEM DID
1100
+ * NOT CHOOSE — a person's name, a record's title, a row the user is about to
1101
+ * create. The relation picker offered
1102
+ *
1103
+ * Create “Marisol Okonkwo — 418 Calle Pu
1104
+ *
1105
+ * inside a 16rem box, cut mid-word, on the one control that exists to show the name
1106
+ * being created. A fixed width cannot be right for content of unknown length, so
1107
+ * this one grows to its content between an honest floor and an honest ceiling:
1108
+ *
1109
+ * · at least the trigger's own width, and at least 20rem — the width Airtable's and
1110
+ * Notion's link-record pickers settle on, and wide enough that an ordinary
1111
+ * "name — street, town" fits on one line;
1112
+ * · at most 28rem, and never wider than the viewport less a 1rem gutter each side,
1113
+ * so it still fits a 375px phone with nothing running off the screen. The floor is
1114
+ * clamped by the same gutter, so on a very narrow screen the ceiling still wins.
1115
+ *
1116
+ * Beyond that ceiling the CONTENT truncates with an ellipsis and carries a `title`.
1117
+ * Growing, then ellipsis — never a mid-word cut.
1118
+ */
1119
+ sizing?: "fixed" | "content";
1092
1120
  }
1093
1121
  declare const PopoverContent: React.ForwardRefExoticComponent<PopoverContentProps & React.RefAttributes<HTMLDivElement>>;
1094
1122
 
package/dist/index.js CHANGED
@@ -1601,6 +1601,7 @@ var PopoverContent = React16.forwardRef(
1601
1601
  sideOffset = 4,
1602
1602
  container,
1603
1603
  animated = true,
1604
+ sizing = "fixed",
1604
1605
  ...props
1605
1606
  }, ref) => {
1606
1607
  const portalContainer = usePortalContainer(container);
@@ -1617,7 +1618,8 @@ var PopoverContent = React16.forwardRef(
1617
1618
  // z, DOM portal order decides, so a dialog opened FROM a popover stacks
1618
1619
  // above it, and a popover opened from a dialog still stacks above the
1619
1620
  // dialog. z-[10001] buried dialogs behind fullscreen popovers.
1620
- "z-[10000] w-72 max-h-[var(--radix-popover-content-available-height)] overflow-y-auto overscroll-contain rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none",
1621
+ "z-[10000] max-h-[var(--radix-popover-content-available-height)] overflow-y-auto overscroll-contain rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none",
1622
+ sizing === "content" ? "w-auto min-w-[min(max(var(--radix-popover-trigger-width),20rem),calc(100vw-2rem))] max-w-[min(28rem,calc(100vw-2rem))]" : "w-72",
1621
1623
  animated && MOTION_POPPER,
1622
1624
  className
1623
1625
  ),
@@ -1724,7 +1726,7 @@ function CreatablePicker({
1724
1726
  ]
1725
1727
  }
1726
1728
  ) }),
1727
- /* @__PURE__ */ jsx20(PopoverContent, { align: "start", className: "w-[--radix-popover-trigger-width] min-w-56 p-0", children: /* @__PURE__ */ jsxs9(
1729
+ /* @__PURE__ */ jsx20(PopoverContent, { sizing: "content", align: "start", className: "p-0", children: /* @__PURE__ */ jsxs9(
1728
1730
  Command,
1729
1731
  {
1730
1732
  filter: (itemValue, search, keywords) => {
@@ -3522,13 +3524,40 @@ function OrganizationPicker({
3522
3524
  }
3523
3525
  ) : listed.length === 0 ? (
3524
3526
  /* THE ARCHIVED-ITEMS LAW, honesty half: "nothing" may only be said
3525
- when both halves are empty. Here the other half is one line down. */
3527
+ when both halves are empty. Here the other half is one line down.
3528
+ AND IT SAYS WHAT IS TRUE, NOT WHAT IS EMPTY. The earlier sentence
3529
+ read "Nothing matches “X” outside the test organizations below" —
3530
+ which opens by negating the very rows sitting one click away, and
3531
+ `fixtures` IS query-filtered, so those rows ARE matches for X. A
3532
+ person reading "nothing matches" retypes their search instead of
3533
+ clicking. So: count the matches, say where they are, and carry
3534
+ the click that reveals them — the same shape as the honest
3535
+ empty-filter twin one line down. (TAILS-3) */
3526
3536
  /* @__PURE__ */ jsx38(
3527
3537
  "p",
3528
3538
  {
3529
3539
  className: "px-2 py-2 text-xs text-muted-foreground",
3530
3540
  "data-slot": "organization-picker-only-fixtures",
3531
- children: query.trim() ? `Nothing matches \u201C${query.trim()}\u201D outside the test organizations below.` : `Every organization you belong to is a test organization \u2014 all ${fixtures.length} are below.`
3541
+ children: query.trim() ? /* @__PURE__ */ jsxs21(Fragment2, { children: [
3542
+ fixtures.length === 1 ? `1 match for \u201C${query.trim()}\u201D is in your test organizations` : `All ${fixtures.length} matches for \u201C${query.trim()}\u201D are in your test organizations`,
3543
+ showFixtures ? ", listed below." : /* @__PURE__ */ jsxs21(Fragment2, { children: [
3544
+ " \u2014 ",
3545
+ /* @__PURE__ */ jsx38(
3546
+ "button",
3547
+ {
3548
+ type: "button",
3549
+ className: "underline underline-offset-2 hover:text-foreground",
3550
+ "data-slot": "organization-picker-show-fixtures",
3551
+ onClick: (event) => {
3552
+ event.stopPropagation();
3553
+ setShowFixtures(true);
3554
+ },
3555
+ children: "show them"
3556
+ }
3557
+ ),
3558
+ "."
3559
+ ] })
3560
+ ] }) : `Every organization you belong to is a test organization \u2014 all ${fixtures.length} are below.`
3532
3561
  }
3533
3562
  )
3534
3563
  ) : /* @__PURE__ */ jsx38("ul", { className: "max-h-72 overflow-y-auto", role: "listbox", "aria-label": "Organizations", children: listed.map(renderRow) }),