@detergent-software/atk 9.3.0-dev.7 → 9.3.0-dev.8

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 CHANGED
@@ -1,3 +1,10 @@
1
+ ## [9.3.0-dev.8](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv9.3.0-dev.7&targetVersion=GTv9.3.0-dev.8) (2026-10-26)
2
+
3
+ ### Bug Fixes
4
+
5
+ * **cli:** keep a text prompt's cursor in step with outside values (ATK-782) ([6e67491](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/6e67491703bc933e55fd8ef87219ce5cc2039722))
6
+ * **cli:** start a text prompt's cursor at the end of a new value (ATK-782) ([93c4ed1](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/93c4ed18bf7a9ed39b351611f799964ed20b1214))
7
+
1
8
  ## [9.3.0-dev.7](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv9.3.0-dev.6&targetVersion=GTv9.3.0-dev.7) (2026-10-26)
2
9
 
3
10
  ### Bug Fixes
@@ -11,10 +11,16 @@ interface TextInputProps {
11
11
  * ink-text-input calls Ink's `useInput` itself, so a key pressed as a new value or a new prompt
12
12
  * first shows reached the previous render's handler: it went to the previous prompt's field,
13
13
  * submitted it again, or dropped the character before it (ATK-781). React keeps one instance across
14
- * prompts drawn at the same place (init's, setup's), so the cursor offset carries over from the
15
- * previous prompt; it is read clamped to the value. ink-text-input clamped it in an effect instead,
16
- * which ran after a key pressed as the new prompt first showed, with that prompt's first value, and
17
- * so put the cursor back to 0: the next characters went in front of the first.
14
+ * prompts drawn at the same place (init's, register's, publish's), so the cursor would carry over
15
+ * from the previous prompt. It is stored with the value it was set for, and a value the input didn't
16
+ * type (a new prompt's pre-filled value, a value set from outside) puts it at the end of that value
17
+ * (ATK-782). The render does that before React commits, so a key pressed as the new value first
18
+ * shows has it, and a later return to the old value doesn't bring the old cursor back. A new prompt
19
+ * pre-filled with exactly the text the cursor was set for keeps that cursor: only a prompt's
20
+ * identity could tell them apart.
21
+ * ink-text-input clamped the offset in an effect instead, which ran after a key pressed as the new
22
+ * prompt first showed, with that prompt's first value, and so put the cursor back to 0: the next
23
+ * characters went in front of the first.
18
24
  *
19
25
  * Ink emits every key of one stdin chunk in a row, and React renders their updates only after the
20
26
  * last, so each key edits the value and cursor the previous key left (`edit`), not the render's;
@@ -1 +1 @@
1
- {"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../src/components/TextInput.tsx"],"names":[],"mappings":"AA4BA,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,KAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,cAAc,+BAkD5F"}
1
+ {"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../src/components/TextInput.tsx"],"names":[],"mappings":"AA4BA,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,KAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,cAAc,+BAmD5F"}
@@ -32,10 +32,16 @@ import { useLatestInput } from '../hooks/useLatestInput.js';
32
32
  * ink-text-input calls Ink's `useInput` itself, so a key pressed as a new value or a new prompt
33
33
  * first shows reached the previous render's handler: it went to the previous prompt's field,
34
34
  * submitted it again, or dropped the character before it (ATK-781). React keeps one instance across
35
- * prompts drawn at the same place (init's, setup's), so the cursor offset carries over from the
36
- * previous prompt; it is read clamped to the value. ink-text-input clamped it in an effect instead,
37
- * which ran after a key pressed as the new prompt first showed, with that prompt's first value, and
38
- * so put the cursor back to 0: the next characters went in front of the first.
35
+ * prompts drawn at the same place (init's, register's, publish's), so the cursor would carry over
36
+ * from the previous prompt. It is stored with the value it was set for, and a value the input didn't
37
+ * type (a new prompt's pre-filled value, a value set from outside) puts it at the end of that value
38
+ * (ATK-782). The render does that before React commits, so a key pressed as the new value first
39
+ * shows has it, and a later return to the old value doesn't bring the old cursor back. A new prompt
40
+ * pre-filled with exactly the text the cursor was set for keeps that cursor: only a prompt's
41
+ * identity could tell them apart.
42
+ * ink-text-input clamped the offset in an effect instead, which ran after a key pressed as the new
43
+ * prompt first showed, with that prompt's first value, and so put the cursor back to 0: the next
44
+ * characters went in front of the first.
39
45
  *
40
46
  * Ink emits every key of one stdin chunk in a row, and React renders their updates only after the
41
47
  * last, so each key edits the value and cursor the previous key left (`edit`), not the render's;
@@ -43,8 +49,10 @@ import { useLatestInput } from '../hooks/useLatestInput.js';
43
49
  * assumes the parent takes each `onChange` value as sent, as every caller does.
44
50
  */
45
51
  export default function TextInput({ focus = true, onChange, onSubmit, value }) {
46
- const [storedOffset, setCursorOffset] = useState(value.length);
47
- const cursorOffset = Math.min(storedOffset, value.length);
52
+ const [cursor, setCursor] = useState({ for: value, offset: value.length });
53
+ if (cursor.for !== value)
54
+ setCursor({ for: value, offset: value.length });
55
+ const cursorOffset = cursor.for === value ? cursor.offset : value.length;
48
56
  const edit = useRef({ offset: cursorOffset, value });
49
57
  edit.current = { offset: cursorOffset, value };
50
58
  useLatestInput((input, key) => {
@@ -75,7 +83,7 @@ export default function TextInput({ focus = true, onChange, onSubmit, value }) {
75
83
  }
76
84
  nextOffset = Math.max(0, Math.min(nextOffset, nextValue.length));
77
85
  edit.current = { offset: nextOffset, value: nextValue };
78
- setCursorOffset(nextOffset);
86
+ setCursor({ for: nextValue, offset: nextOffset });
79
87
  if (nextValue !== current)
80
88
  onChange(nextValue);
81
89
  }, { isActive: focus });
@@ -1 +1 @@
1
- {"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../src/components/TextInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../src/components/TextInput.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@detergent-software/atk",
3
- "version": "9.3.0-dev.7",
3
+ "version": "9.3.0-dev.8",
4
4
  "description": "Agentic Tool Kit — CLI for managing AI coding tool assets.",
5
5
  "type": "module",
6
6
  "bin": {