@veil-runtime/ui 0.4.1 → 0.4.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # 0.4.2 — renderer stability patch candidate
2
+
3
+ - Preserve existing text nodes for Text, Heading, Status and Button updates; skip unchanged text and update changed text in place.
4
+ - Fix WebKit mouse activation lost when an input blur commits state during a button press.
5
+ - Keep public APIs, revision semantics, action handlers, keyed reconciliation and transaction boundaries unchanged.
6
+ - Add cross-browser regressions for repeated and changed text, HTML escaping, nested keyed identity, rejected updates and ordinary mouse activation after blur.
7
+ - Candidate only; publication requires maintainer approval of the exact qualified artifact.
8
+
1
9
  # 0.3.0-rc.2 — review remediation candidate
2
10
 
3
11
  - Reject inherited composition field names and stage bounded state changes before acceptance.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "inputs": {
3
- "package.json": "bcc8309a63cde3b3b38f9017d22915203b813d75229a7347c873ce3074ba0a25",
3
+ "package.json": "2565895a0cb51b34fbdfd92695d4a2c1edf144f9e8574d1706b91d437633f858",
4
4
  "scripts/artifact.mjs": "92d2ffd8836d0e14742528da9ddc96e0834ef873ffa81097a3ebae58d825aace",
5
5
  "scripts/build.mjs": "54ca91e728925b1efefa61e5aeeb9e5bf549d25c2faa8ceb618009c214a7e03c",
6
6
  "scripts/check-boundary.mjs": "5c09c118f7340f3a111e3947c2d98579f73903728ded9d604ac13b93077a5b29",
@@ -16,7 +16,7 @@
16
16
  "src/composition.ts": "4d06b8fe4ed61b2e0a4daf07770be708b2f0167a35ae41140b4047b7cd8fbd78",
17
17
  "src/derive-input-fields.ts": "cf8c7ee9f98ed0838dbf299fb4653814c3e70004fc121d8c99752aa137331efd",
18
18
  "src/derive-output-view.ts": "81d622d5430f7b9333a41c33794d8d22e3e539e861e04830ce089d83a6790a8e",
19
- "src/dom.ts": "a7580ecc8599de9df2554390beaf430ac5217b0adb7e7e9145f0caaedc39e3f1",
19
+ "src/dom.ts": "a89250bb7d00453f34de62812f34364c66f8173ccd51000d67dd3d40d474ee7e",
20
20
  "src/execution-request.ts": "775c3beba47aae482acbc2a48461ab8f947ca7b773c71a69077af387557ae344",
21
21
  "src/experience-orchestration.ts": "f156497d99828d15da2b42f3155e4ec0b77fc72ad6e6d846bb9bbea4d6791fa4",
22
22
  "src/format-semantic-value.ts": "2192cd723c5a9d64164287ddae99c0aa105024e1d0778a597d0b71a2ea8ab9dd",
@@ -55,7 +55,7 @@
55
55
  "derive-output-view.d.ts": "9ca3c32ac65215bb85ae74b75121c55c2ac82d04d7754d38ebc0de94d3fa898a",
56
56
  "derive-output-view.js": "e54de4b2ece567a518d346cfd8d96fe2179f5a1fcf76cc6306c5222184e19b73",
57
57
  "dom.d.ts": "ae12ba88b9bf43bdc99a9c2ca8923764cf28e77d55b132a05dc5965cba34a6a5",
58
- "dom.js": "decdde492af176b865643e0c11992724e33c4146b155f9b9f9ca10f889769b6f",
58
+ "dom.js": "d878b9c62e1a52e3be73233b6c04721356b9a01746a4381de3e1a69511b3e194",
59
59
  "execution-request.d.ts": "f8b68cf456bfbeb63a968378e5ccaef5f55a908022e323901668ca99ebe75a3a",
60
60
  "execution-request.js": "f32bd2e9de70dd9f243d08d0fce4898e847fa3d34d77d3376a1b3c5839edb611",
61
61
  "experience-orchestration.d.ts": "45fa9770a37acccaeb6e0f267e0a566c6d6cda6133d6e1077589859478effd77",
package/dist/dom.js CHANGED
@@ -393,8 +393,17 @@ export function mountInterface(target, controller, components = {}, onError) {
393
393
  element.setAttribute("aria-label", node.ariaLabel);
394
394
  else
395
395
  element.removeAttribute("aria-label");
396
- if (["Text", "Heading", "Status", "Button"].includes(node.component))
397
- element.textContent = resolveText(node, snapshot);
396
+ if (["Text", "Heading", "Status", "Button"].includes(node.component)) {
397
+ const text = resolveText(node, snapshot);
398
+ // Retain the pressed button's text node across blur-driven state commits.
399
+ if (element.textContent !== text) {
400
+ const child = element.firstChild;
401
+ if (child?.nodeType === 3 && child === element.lastChild)
402
+ child.nodeValue = text;
403
+ else
404
+ element.textContent = text;
405
+ }
406
+ }
398
407
  if (node.component === "List") {
399
408
  const items = resolveInterfaceBinding(snapshot, node.binding);
400
409
  if (items !== undefined && (!Array.isArray(items) || items.length > 100))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veil-runtime/ui",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org/",