@ai-matrx/content-ir-react 0.20.0 → 0.20.2

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 (43) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +1 -1
  3. package/dist/{component-resolution.types-DwKSF64x.d.cts → component-resolution.types-BQa2ik3i.d.cts} +1 -1
  4. package/dist/{component-resolution.types-DwKSF64x.d.ts → component-resolution.types-BQa2ik3i.d.ts} +1 -1
  5. package/dist/{component-resolution.types-DY4pGymy.d.cts → component-resolution.types-C_irCaHc.d.cts} +1 -1
  6. package/dist/{component-resolution.types-DY4pGymy.d.ts → component-resolution.types-C_irCaHc.d.ts} +1 -1
  7. package/dist/db-component.d.cts +1 -1
  8. package/dist/db-component.d.ts +1 -1
  9. package/dist/{directive-host-B1hcjJxS.d.cts → directive-host-CtFMuSZc.d.cts} +7 -0
  10. package/dist/{directive-host-B1hcjJxS.d.ts → directive-host-CtFMuSZc.d.ts} +7 -0
  11. package/dist/directives.cjs +13 -8
  12. package/dist/directives.cjs.map +1 -1
  13. package/dist/directives.d.cts +2 -2
  14. package/dist/directives.d.ts +2 -2
  15. package/dist/directives.js +13 -8
  16. package/dist/directives.js.map +1 -1
  17. package/dist/{host-types-BOWu99zI.d.ts → host-types-CGcK8Nib.d.ts} +2 -2
  18. package/dist/{host-types-Cn2lf8q3.d.cts → host-types-mMFt5-hQ.d.cts} +2 -2
  19. package/dist/host.cjs.map +1 -1
  20. package/dist/host.d.cts +4 -4
  21. package/dist/host.d.ts +4 -4
  22. package/dist/host.js.map +1 -1
  23. package/dist/index.cjs +13 -8
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.cts +5 -5
  26. package/dist/index.d.ts +5 -5
  27. package/dist/index.js +13 -8
  28. package/dist/index.js.map +1 -1
  29. package/dist/react.cjs +13 -8
  30. package/dist/react.cjs.map +1 -1
  31. package/dist/react.d.cts +4 -4
  32. package/dist/react.d.ts +4 -4
  33. package/dist/react.js +13 -8
  34. package/dist/react.js.map +1 -1
  35. package/dist/resolver.d.cts +2 -2
  36. package/dist/resolver.d.ts +2 -2
  37. package/dist/{route-DVfjdUYy.d.cts → route-Bq6db_zH.d.cts} +9 -2
  38. package/dist/{route-CDATmjfp.d.ts → route-DStinBoZ.d.ts} +9 -2
  39. package/dist/route.cjs.map +1 -1
  40. package/dist/route.d.cts +2 -2
  41. package/dist/route.d.ts +2 -2
  42. package/dist/route.js.map +1 -1
  43. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.20.2
4
+
5
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
6
+ `git diff npm/content-ir-react/v0.20.1..npm/content-ir-react/v0.20.2 -- apps/shared/content-ir-react`).
7
+ No source changes intended and no consumer action required.
8
+
9
+ ## 0.20.1 — 2026-10-02
10
+
11
+ G9 leftovers (nightly clone). Guard: `__tests__/directive-card-g9.test.tsx` (3 red on 0.20.0).
12
+
13
+ - **A button never wraps its label.** At 375px "Apply" broke to "Appl / y" beside
14
+ "Nothing to change". Apply, Run again, Retry, Details and Show more are `whitespace-nowrap`
15
+ (`shrink-0`); the header group wraps and the reason text is what wraps.
16
+ - **A screen-reader label never names an id.** A record row's copy control read
17
+ "Task a8a00001". `DirectiveCopyProps.label` is now type-generic ("this task") and the new
18
+ `DirectiveCopyProps.record` ({ noun, id }) lets the host swap in the record's live name.
19
+
20
+ ### Consumer action
21
+
22
+ - In `renderCopy`, when `props.record` is set, label the control with the record's live name
23
+ (the same one `renderRecord` shows), keeping `props.label` while it loads.
24
+
3
25
  ## 0.20.0 — 2026-10-02
4
26
 
5
27
  The G8A review of the action cards (nightly clone). Guard:
package/README.md CHANGED
@@ -74,5 +74,5 @@ cannot express what your host needs, add a seam; never fork the route.
74
74
  ## Docs
75
75
 
76
76
  - Package internals and boundary: `FEATURE.md` beside this file.
77
- - Cross-repo system-of-record: `common-docs/systems/architecture/content-ir/content-ir-twin-FEATURE.md`.
77
+ - Cross-repo system-of-record: `common-docs/systems/architecture/content-ir/FEATURE.md`.
78
78
  - Shape System semantics: `matrx-frontend/features/content-ir/docs/SHAPE_SYSTEM.md`.
@@ -29,7 +29,7 @@ declare const consoleErrorReporter: ContentIrErrorReporter;
29
29
  * resolver contract (rulings R1 + R6), stated once for every UI.
30
30
  *
31
31
  * Cross-repo system-of-record:
32
- * `common-docs/systems/architecture/content-ir/content-ir-twin-FEATURE.md` (package boundary) and
32
+ * `common-docs/systems/architecture/content-ir/FEATURE.md` (package boundary) and
33
33
  * `matrx-frontend/features/content-ir/docs/SHAPE_SYSTEM.md` (the semantics).
34
34
  *
35
35
  * Nothing here knows where a row comes from. A host supplies rows from
@@ -29,7 +29,7 @@ declare const consoleErrorReporter: ContentIrErrorReporter;
29
29
  * resolver contract (rulings R1 + R6), stated once for every UI.
30
30
  *
31
31
  * Cross-repo system-of-record:
32
- * `common-docs/systems/architecture/content-ir/content-ir-twin-FEATURE.md` (package boundary) and
32
+ * `common-docs/systems/architecture/content-ir/FEATURE.md` (package boundary) and
33
33
  * `matrx-frontend/features/content-ir/docs/SHAPE_SYSTEM.md` (the semantics).
34
34
  *
35
35
  * Nothing here knows where a row comes from. A host supplies rows from
@@ -29,7 +29,7 @@ declare const consoleErrorReporter: ContentIrErrorReporter;
29
29
  * resolver contract (rulings R1 + R6), stated once for every UI.
30
30
  *
31
31
  * Cross-repo system-of-record:
32
- * `common-docs/systems/architecture/content-ir/content-ir-twin-FEATURE.md` (package boundary) and
32
+ * `common-docs/systems/architecture/content-ir/FEATURE.md` (package boundary) and
33
33
  * `matrx-frontend/features/content-ir/docs/SHAPE_SYSTEM.md` (the semantics).
34
34
  *
35
35
  * Nothing here knows where a row comes from. A host supplies rows from
@@ -29,7 +29,7 @@ declare const consoleErrorReporter: ContentIrErrorReporter;
29
29
  * resolver contract (rulings R1 + R6), stated once for every UI.
30
30
  *
31
31
  * Cross-repo system-of-record:
32
- * `common-docs/systems/architecture/content-ir/content-ir-twin-FEATURE.md` (package boundary) and
32
+ * `common-docs/systems/architecture/content-ir/FEATURE.md` (package boundary) and
33
33
  * `matrx-frontend/features/content-ir/docs/SHAPE_SYSTEM.md` (the semantics).
34
34
  *
35
35
  * Nothing here knows where a row comes from. A host supplies rows from
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { C as ComponentResolution, a as ContentIrErrorReporter } from './component-resolution.types-DwKSF64x.cjs';
2
+ import { C as ComponentResolution, a as ContentIrErrorReporter } from './component-resolution.types-BQa2ik3i.cjs';
3
3
 
4
4
  /**
5
5
  * The DB-component COMPILE CACHE — session-scoped, keyed per winning row
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { C as ComponentResolution, a as ContentIrErrorReporter } from './component-resolution.types-DwKSF64x.js';
2
+ import { C as ComponentResolution, a as ContentIrErrorReporter } from './component-resolution.types-BQa2ik3i.js';
3
3
 
4
4
  /**
5
5
  * The DB-component COMPILE CACHE — session-scoped, keyed per winning row
@@ -121,7 +121,14 @@ interface DirectiveOpenItemOptions {
121
121
  total: number;
122
122
  }
123
123
  interface DirectiveCopyProps {
124
+ /**
125
+ * What the control is called to a screen reader. Never an id: for a record it
126
+ * is type-generic ("this task"); a host with the record's live name replaces
127
+ * it through `record`.
128
+ */
124
129
  label: string;
130
+ /** The existing record this control copies, when it copies one — to name it. */
131
+ record?: DirectiveRecordRef;
125
132
  /** The value to copy — the whole shell or one item. */
126
133
  value: unknown;
127
134
  /** The item's kind, when copying an item. */
@@ -121,7 +121,14 @@ interface DirectiveOpenItemOptions {
121
121
  total: number;
122
122
  }
123
123
  interface DirectiveCopyProps {
124
+ /**
125
+ * What the control is called to a screen reader. Never an id: for a record it
126
+ * is type-generic ("this task"); a host with the record's live name replaces
127
+ * it through `record`.
128
+ */
124
129
  label: string;
130
+ /** The existing record this control copies, when it copies one — to name it. */
131
+ record?: DirectiveRecordRef;
125
132
  /** The value to copy — the whole shell or one item. */
126
133
  value: unknown;
127
134
  /** The item's kind, when copying an item. */
@@ -633,7 +633,7 @@ function ApplyDirectiveButton({
633
633
  type: "button",
634
634
  disabled: askingAgain,
635
635
  onClick: () => void handleApply(!bad),
636
- className: "inline-flex items-center gap-1 rounded px-1 py-0.5 text-muted-foreground hover:bg-accent hover:text-accent-foreground disabled:opacity-50",
636
+ className: "inline-flex shrink-0 items-center gap-1 whitespace-nowrap rounded px-1 py-0.5 text-muted-foreground hover:bg-accent hover:text-accent-foreground disabled:opacity-50",
637
637
  "data-apply-action": bad ? "retry" : "run-again",
638
638
  children: [
639
639
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(RotateCcwIcon, { className: "h-3 w-3" }),
@@ -673,8 +673,8 @@ function ApplyDirectiveButton({
673
673
  }
674
674
  const destructive = directive.directiveClass === "delete";
675
675
  const muted = nothingToChange && view.status === "idle";
676
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "inline-flex items-center gap-2", children: [
677
- muted ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-xs text-muted-foreground", "data-apply-nothing": "", children: "Nothing to change" }) : null,
676
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "flex min-w-0 flex-wrap items-center justify-end gap-x-2 gap-y-1", children: [
677
+ muted ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "min-w-0 text-xs text-muted-foreground", "data-apply-nothing": "", children: "Nothing to change" }) : null,
678
678
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
679
679
  "button",
680
680
  {
@@ -683,7 +683,7 @@ function ApplyDirectiveButton({
683
683
  disabled: view.status === "applying" || view.status === "asking" || items.length === 0,
684
684
  "data-apply-tone": muted ? "muted" : destructive ? "destructive" : "default",
685
685
  title: muted ? "It sets no fields, so applying it changes nothing." : void 0,
686
- className: `inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs font-medium disabled:opacity-50 ${muted ? "border-border/60 bg-background text-muted-foreground hover:bg-accent" : destructive ? "border-destructive/50 bg-background text-destructive hover:bg-destructive/10" : "border-border bg-background hover:bg-accent"}`,
686
+ className: `inline-flex shrink-0 items-center gap-1 whitespace-nowrap rounded-md border px-2 py-1 text-xs font-medium disabled:opacity-50 ${muted ? "border-border/60 bg-background text-muted-foreground hover:bg-accent" : destructive ? "border-destructive/50 bg-background text-destructive hover:bg-destructive/10" : "border-border bg-background hover:bg-accent"}`,
687
687
  children: [
688
688
  view.status === "applying" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(LoaderIcon, { className: "h-3.5 w-3.5 animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(PlayIcon, { className: "h-3.5 w-3.5" }),
689
689
  view.status === "applying" ? `Applying${itemCount ? ` ${itemCount} ${itemCount === 1 ? "item" : "items"}` : ""}\u2026${elapsed ? ` ${elapsed}s` : ""}` : label
@@ -734,7 +734,7 @@ function FailureNotice({
734
734
  type: "button",
735
735
  onClick: () => setOpen((v) => !v),
736
736
  "aria-expanded": open,
737
- className: "ml-1 underline underline-offset-2 hover:no-underline",
737
+ className: "ml-1 whitespace-nowrap underline underline-offset-2 hover:no-underline",
738
738
  "data-apply-failure-details-toggle": true,
739
739
  children: open ? "Hide details" : "Details"
740
740
  }
@@ -888,7 +888,12 @@ function TargetRow({
888
888
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "py-1 text-xs", "data-directive-target": recordId, children: [
889
889
  /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex min-w-0 items-center gap-2", children: [
890
890
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "flex min-w-0 flex-1 items-center gap-1 px-1", children: name }),
891
- host.renderCopy?.({ label: fallback, value: item, size: "xs" })
891
+ host.renderCopy?.({
892
+ label: `this ${(0, import_content_ir3.nounLabel)(directive.noun, host.nouns).toLowerCase()}`,
893
+ value: item,
894
+ size: "xs",
895
+ record: { noun: directive.noun, id: recordId }
896
+ })
892
897
  ] }),
893
898
  isUpdate ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DirectiveChangeList, { changes, className: "mt-0.5 px-1" }) : null
894
899
  ] });
@@ -916,7 +921,7 @@ function SideEffectDirectiveCard({ directive }) {
916
921
  " ",
917
922
  total === 1 ? "item" : "items"
918
923
  ] }),
919
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "ml-auto flex items-center gap-1", children: [
924
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "ml-auto flex min-w-0 flex-wrap items-center justify-end gap-1", children: [
920
925
  host.renderCopy?.({ label: display.title, value: directive.shell, size: "icon" }),
921
926
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
922
927
  ApplyDirectiveButton,
@@ -938,7 +943,7 @@ function SideEffectDirectiveCard({ directive }) {
938
943
  {
939
944
  type: "button",
940
945
  onClick: () => setExpanded((v) => !v),
941
- className: "mt-0.5 inline-flex items-center gap-1 rounded px-1 py-0.5 text-[11px] text-muted-foreground hover:text-foreground",
946
+ className: "mt-0.5 inline-flex items-center gap-1 whitespace-nowrap rounded px-1 py-0.5 text-[11px] text-muted-foreground hover:text-foreground",
942
947
  children: [
943
948
  expanded ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ChevronDownIcon, { className: "h-3 w-3" }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ChevronRightIcon, { className: "h-3 w-3" }),
944
949
  expanded ? "Show less" : `Show ${hidden} more`