@xenosystem/blocks 0.9.1 → 0.9.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.
@@ -562,6 +562,15 @@ interface AgentPanelViewProps {
562
562
  showSessions?: boolean;
563
563
  emptyHint?: string;
564
564
  }
565
+ /**
566
+ * The composer field.
567
+ *
568
+ * 🔴 `outline: 'none'` is REQUIRED, not a preference. `DESIGN_SYSTEM.md` exempts text entry from
569
+ * the global `:focus-visible` ring: `outline-offset` draws the ring OUTSIDE the field, where it
570
+ * reads as a stray stroke over the input container and makes the control look broken on dark
571
+ * chrome. The ring stays everywhere else — removing it globally would be a real keyboard-a11y
572
+ * regression on buttons.
573
+ */
565
574
  /** The view. */
566
575
  declare function AgentPanelView({ controller, submitOnEnter, showLane, showSessions, emptyHint, }: AgentPanelViewProps): ReactNode;
567
576
 
@@ -1037,6 +1037,7 @@ var agentManifest = {
1037
1037
  import { useSyncExternalStore } from "react";
1038
1038
  import {
1039
1039
  Badge,
1040
+ Composer,
1040
1041
  EmptyState,
1041
1042
  Row,
1042
1043
  RowList,
@@ -1064,17 +1065,6 @@ var TURN = {
1064
1065
  cancelled: { label: "Cancelled", tone: "neutral" }
1065
1066
  };
1066
1067
  var COLUMN = { display: "flex", flexDirection: "column", height: "100%", minHeight: 0 };
1067
- var COMPOSER = {
1068
- width: "100%",
1069
- minHeight: 64,
1070
- resize: "vertical",
1071
- background: "transparent",
1072
- color: "inherit",
1073
- border: "none",
1074
- outline: "none",
1075
- font: "inherit",
1076
- padding: "8px 10px"
1077
- };
1078
1068
  function AgentPanelView({
1079
1069
  controller,
1080
1070
  submitOnEnter = true,
@@ -1138,20 +1128,13 @@ function AgentPanelView({
1138
1128
  provider.id
1139
1129
  )) }) : null,
1140
1130
  /* @__PURE__ */ jsx(
1141
- "textarea",
1131
+ Composer,
1142
1132
  {
1143
- style: COMPOSER,
1144
1133
  value: state.draft,
1145
1134
  placeholder: state.busy ? "Steer the running turn\u2026" : "Ask the agent\u2026",
1146
- onChange: (event) => controller.setDraft(event.target.value),
1147
- onKeyDown: (event) => {
1148
- if (event.key !== "Enter") return;
1149
- const wantsSubmit = submitOnEnter ? !event.shiftKey : event.shiftKey;
1150
- if (!wantsSubmit) return;
1151
- event.preventDefault();
1152
- if (state.busy) controller.steer();
1153
- else controller.submit();
1154
- }
1135
+ submitOnEnter,
1136
+ onChange: (draft) => controller.setDraft(draft),
1137
+ onSubmit: () => state.busy ? controller.steer() : controller.submit()
1155
1138
  }
1156
1139
  ),
1157
1140
  /* @__PURE__ */ jsx(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xenosystem/blocks",
3
- "version": "0.9.1",
3
+ "version": "0.9.2",
4
4
  "description": "XENO Blocks \u2014 rung 3 of the front ladder: components composed into a contract-bearing unit (manifest: ports, intents, commands, agent surface), rendered by @xenosystem/workbench. ONE package, one subpath per family (/auth, /edit, /data, /time, /ops, /trust, /agent), one named export per block \u2014 XENO PACKAGE NAMING - STANDARD.md.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -58,7 +58,7 @@
58
58
  "test": "vitest run"
59
59
  },
60
60
  "peerDependencies": {
61
- "@xenosystem/components": ">=0.9.0 <1",
61
+ "@xenosystem/components": ">=0.9.1 <1",
62
62
  "@xenosystem/elements-react": ">=0.0.1",
63
63
  "@xenosystem/workbench": "^1.0.0",
64
64
  "react": ">=18.0.0",
@@ -75,7 +75,7 @@
75
75
  "@types/node": "^22.0.0",
76
76
  "@types/react": "^19.0.0",
77
77
  "@types/react-dom": "^19.0.0",
78
- "@xenosystem/components": "^0.9.0",
78
+ "@xenosystem/components": "^0.9.1",
79
79
  "@xenosystem/elements-react": "0.0.1",
80
80
  "@xenosystem/workbench": "^1.2.0",
81
81
  "jsdom": "^26.0.0",