@cosmicdrift/kumiko-types 0.224.1 → 0.225.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/screen.ts +26 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-types",
3
- "version": "0.224.1",
3
+ "version": "0.225.0",
4
4
  "description": "Framework-Type-Definitions für Kumiko — FeatureDefinition, BootCheck-Types und die reinen Engine-Types. Erlaubt Downstream-Konsumenten, gegen die Type-Contracts zu bauen, ohne das ganze Framework-Package zu importieren. Enthaelt keine identitaets-sensitiven Runtime-Werte mehr (Error-Klassen leben seit #1629 in kumiko-framework, Brand-Symbole nutzen Symbol.for) und ist deshalb eine plain dependency, keine peerDependency.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
package/src/screen.ts CHANGED
@@ -441,6 +441,12 @@ export type ProjectionListScreenDefinition = {
441
441
  // rejects them. `relatedList` sections ARE supported — they run their own
442
442
  // query against the displayed record's id, independent of the entity gap
443
443
  // above (fw#2166).
444
+ export type RecordHeaderSpec = {
445
+ readonly title: string;
446
+ readonly subtitle?: string;
447
+ readonly status?: string;
448
+ };
449
+
444
450
  export type ProjectionDetailScreenDefinition = {
445
451
  readonly id: string;
446
452
  readonly type: "projectionDetail";
@@ -453,6 +459,12 @@ export type ProjectionDetailScreenDefinition = {
453
459
  * keinen natürlichen Field-Namespace — fehlt ein Eintrag, gilt die
454
460
  * Konvention `<feature>:entity:__projection-detail__:field:<name>`. */
455
461
  readonly fieldLabels?: Readonly<Record<string, string>>;
462
+ /** Record header above the layout — title/subtitle/status name columns
463
+ * in the query row (not literals). Rendered only when set. */
464
+ readonly header?: RecordHeaderSpec;
465
+ /** Metric band above the layout — column names in the query row, labeled
466
+ * via `fieldLabels`. Rendered only when set. */
467
+ readonly metrics?: readonly string[];
456
468
  /** Parent list screen (kurze id) für eine "Zurück"-Navigation. */
457
469
  readonly listScreenId?: string;
458
470
  readonly slots?: ScreenSlots;
@@ -646,6 +658,9 @@ export type EditFieldSpec =
646
658
  export type EditSectionSpec = EditFieldsSection | EditExtensionSection | EditRelatedListSection;
647
659
 
648
660
  export type EditFieldsSection = {
661
+ /** Kebab-case tab id, used as the `?tab=` value. Required by the
662
+ * boot-validator when the enclosing `EditLayout.mode` is "tabs". */
663
+ readonly id?: string;
649
664
  readonly kind?: "fields";
650
665
  /** Optional. Ohne Titel rendert die Section nur ihre Felder (keine h3-
651
666
  * Überschrift) — für flache Forms (Card-Titel + Felder direkt, ein
@@ -662,6 +677,9 @@ export type EditFieldsSection = {
662
677
  };
663
678
 
664
679
  export type EditExtensionSection = {
680
+ /** Kebab-case tab id, used as the `?tab=` value. Required by the
681
+ * boot-validator when the enclosing `EditLayout.mode` is "tabs". */
682
+ readonly id?: string;
665
683
  readonly kind: "extension";
666
684
  readonly title: string;
667
685
  readonly component: PlatformComponent;
@@ -678,6 +696,9 @@ export type EditExtensionSection = {
678
696
  // tenant's own fields. Only supported on projectionDetail (fw#2166); the
679
697
  // boot-validator rejects it on entityEdit/configEdit/actionForm.
680
698
  export type EditRelatedListSection = {
699
+ /** Kebab-case tab id, used as the `?tab=` value. Required by the
700
+ * boot-validator when the enclosing `EditLayout.mode` is "tabs". */
701
+ readonly id?: string;
681
702
  readonly kind: "relatedList";
682
703
  readonly title: string;
683
704
  /** Fully qualified query QN. Same paged envelope as projectionList.query:
@@ -704,8 +725,11 @@ export type EditLayout = {
704
725
  readonly width?: FormWidth;
705
726
  /** Default "single". "wizard" renders one section per step (with
706
727
  * progress + per-step validation) instead of all sections at once —
707
- * boot-validator requires >= 2 sections, each with a title, when set. */
708
- readonly mode?: "single" | "wizard";
728
+ * boot-validator requires >= 2 sections, each with a title, when set.
729
+ * "tabs" renders one section per tab (projectionDetail only — the
730
+ * boot-validator rejects it on entityEdit, see the check for the reason);
731
+ * requires >= 2 sections, each with a title and an `id`. */
732
+ readonly mode?: "single" | "wizard" | "tabs";
709
733
  /** Persists in-progress wizard state as a resumable draft instead of
710
734
  * discarding it on navigation away. */
711
735
  readonly draft?: boolean;