@cosmicdrift/kumiko-renderer 0.67.1 → 0.70.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-renderer",
3
- "version": "0.67.1",
3
+ "version": "0.70.0",
4
4
  "description": "Platform-agnostic React renderer for Kumiko screens. Contains the shared logic — primitives-contract, hooks, KumikoScreen, navigation & SSE abstractions — that any platform-specific renderer (web, native) composes. No DOM, no EventSource, no react-dom.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -15,8 +15,8 @@
15
15
  }
16
16
  },
17
17
  "dependencies": {
18
- "@cosmicdrift/kumiko-framework": "0.67.1",
19
- "@cosmicdrift/kumiko-headless": "0.67.1",
18
+ "@cosmicdrift/kumiko-framework": "0.70.0",
19
+ "@cosmicdrift/kumiko-headless": "0.70.0",
20
20
  "react": "^19.2.6"
21
21
  },
22
22
  "devDependencies": {
@@ -1198,8 +1198,9 @@ function ConfigEditBody({
1198
1198
  }
1199
1199
  // Cascade-Disclosure + Maskenwerte nach dem Write nachziehen, sonst
1200
1200
  // bleibt die Anzeige stale bis Reload — gleiche refetch-Calls wie onReset.
1201
- await valuesQuery.refetch?.();
1202
- await cascadeQuery.refetch?.();
1201
+ // allSettled: der Write ist schon committed, ein gescheitertes Refetch
1202
+ // (stale Anzeige) darf das Erfolgsergebnis nicht in einen Fehler kippen.
1203
+ await Promise.allSettled([valuesQuery.refetch?.(), cascadeQuery.refetch?.()]);
1203
1204
  return { validationBlocked: false, isSuccess: true, data: undefined };
1204
1205
  },
1205
1206
  [dispatcher, screen.configKeys, screen.scope, valuesQuery.refetch, cascadeQuery.refetch],
@@ -1275,8 +1276,7 @@ function ConfigEditBody({
1275
1276
  qualifiedKey={screen.configKeys[fieldName]}
1276
1277
  onReset={async (key, scope) => {
1277
1278
  await dispatcher.write("config:write:reset", { key, scope });
1278
- await valuesQuery.refetch?.();
1279
- await cascadeQuery.refetch?.();
1279
+ await Promise.allSettled([valuesQuery.refetch?.(), cascadeQuery.refetch?.()]);
1280
1280
  }}
1281
1281
  />
1282
1282
  );
@@ -485,7 +485,14 @@ export type SectionProps = {
485
485
  * (kein Header). RenderEdit lässt ihn weg, wenn er den Screen-Titel
486
486
  * der Action-Bar 1:1 wiederholen würde. */
487
487
  readonly title?: string;
488
+ /** Optionaler muted Untertitel unter dem Titel — gibt der Section
489
+ * Kontext statt nur ein Label (analog FormProps.subtitle). */
490
+ readonly subtitle?: ReactNode;
488
491
  readonly children: ReactNode;
492
+ /** Optionaler Aktions-Slot am Fuß der Section (z.B. „In Finanzierung
493
+ * übernehmen"). Web rendert standalone eine abgehobene Footer-Row
494
+ * (border-t), innerhalb eines Forms eine rechtsbündige Button-Reihe. */
495
+ readonly actions?: ReactNode;
489
496
  readonly testId?: string;
490
497
  };
491
498