@cosmicdrift/kumiko-types 0.201.0 → 0.203.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 +24 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-types",
3
- "version": "0.201.0",
3
+ "version": "0.203.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
@@ -323,6 +323,16 @@ export type ProjectionListScreenDefinition = {
323
323
  readonly pageSize?: number;
324
324
  readonly defaultSort?: ListSortSpec;
325
325
  readonly searchable?: boolean;
326
+ /** Derived by buildAppSchema from the query handler's Zod schema (`sort`
327
+ * param present). Same type serves author and wire schema (no separate
328
+ * client-facing screen type exists), so this stays structurally
329
+ * writable — validateProjectionListScreens rejects any hand-authored
330
+ * value at boot (fw#2165). */
331
+ readonly sortable?: boolean;
332
+ /** Derived by buildAppSchema from the query handler's Zod schema (`cursor`
333
+ * or `offset` param present). See `sortable` doc for why this is
334
+ * boot-enforced rather than type-enforced. */
335
+ readonly paginated?: boolean;
326
336
  readonly slots?: ScreenSlots;
327
337
  readonly access?: AccessRule;
328
338
  };
@@ -358,6 +368,12 @@ export type ProjectionDetailScreenDefinition = {
358
368
  readonly listScreenId?: string;
359
369
  readonly slots?: ScreenSlots;
360
370
  readonly access?: AccessRule;
371
+ /** Header action buttons. Reuses `RowAction` — the screen's single
372
+ * displayed record stands in for the "row", so `pick`/`map`, `visible`,
373
+ * `confirm`/`confirmLabel` and `style` keep their meaning unchanged.
374
+ * `rowClick` has no target here (there is no row to click) and is
375
+ * rejected by the boot-validator. */
376
+ readonly actions?: readonly RowAction[];
361
377
  };
362
378
 
363
379
  // --- dashboard ---
@@ -806,6 +822,13 @@ export type ScreenNavSugar = {
806
822
  readonly order?: number;
807
823
  };
808
824
 
825
+ // `detailFor` sits on the intersection, not on one variant, because any
826
+ // screen kind can be the detail view for an entity — including `custom`:
827
+ // in app repos, detail screens are overwhelmingly custom screens today
828
+ // (projectionDetail doesn't carry entity semantics). Value is an entity
829
+ // name in the same (unqualified, globally-unique) form as `entity` on
830
+ // `EntityListScreenDefinition` (screen.ts:259-262) — entities are never
831
+ // feature-prefixed, so there's no separate qualification step.
809
832
  export type ScreenDefinition = (
810
833
  | EntityListScreenDefinition
811
834
  | ProjectionListScreenDefinition
@@ -815,4 +838,4 @@ export type ScreenDefinition = (
815
838
  | ActionFormScreenDefinition
816
839
  | ConfigEditScreenDefinition
817
840
  | CustomScreenDefinition
818
- ) & { readonly nav?: ScreenNavSugar };
841
+ ) & { readonly nav?: ScreenNavSugar; readonly detailFor?: string };