@cosmicdrift/kumiko-types 0.413.1 → 0.415.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 (38) hide show
  1. package/dist/access-predicates.d.ts +1 -0
  2. package/dist/access-predicates.js +3 -3
  3. package/dist/config.d.ts +4 -2
  4. package/dist/config.js +10 -1
  5. package/dist/db-connection.d.ts +0 -3
  6. package/dist/define-handler.d.ts +1 -1
  7. package/dist/delivery-attempt-types.d.ts +22 -0
  8. package/dist/delivery-attempt-types.js +31 -0
  9. package/dist/entity-table-meta-types.d.ts +2 -0
  10. package/dist/event-store-executor-types.d.ts +4 -1
  11. package/dist/feature.d.ts +1 -0
  12. package/dist/fields.d.ts +2 -0
  13. package/dist/handler-context-facets.d.ts +5 -2
  14. package/dist/handler-context-services.d.ts +2 -1
  15. package/dist/handlers.d.ts +17 -15
  16. package/dist/handlers.js +4 -32
  17. package/dist/hooks.d.ts +1 -0
  18. package/dist/identifiers.d.ts +7 -0
  19. package/dist/identifiers.js +20 -0
  20. package/dist/minor-units.d.ts +3 -0
  21. package/dist/minor-units.js +11 -0
  22. package/dist/multi-stream-apply-context-types.d.ts +3 -1
  23. package/dist/named-list-filters.d.ts +39 -0
  24. package/dist/nav-icon.js +1 -1
  25. package/dist/observability/provider.d.ts +0 -2
  26. package/dist/projection.d.ts +2 -1
  27. package/dist/screen-dashboard.d.ts +139 -22
  28. package/dist/screen-entity-edit.d.ts +2 -0
  29. package/dist/screen-entity-list.d.ts +83 -19
  30. package/dist/screen-list-table.d.ts +49 -3
  31. package/dist/screen-list-table.js +35 -1
  32. package/dist/screen-projection.d.ts +58 -4
  33. package/dist/screen-record-guidance.d.ts +96 -0
  34. package/dist/screen-record-guidance.js +1 -0
  35. package/dist/screen.d.ts +9 -5
  36. package/dist/screen.js +1 -1
  37. package/package.json +9 -1
  38. package/src/changes.json +6 -0
@@ -1,18 +1,21 @@
1
1
  import type { SelectOptionTone } from "./fields.ts";
2
2
  import type { AccessRule, AgentScreenHints } from "./handlers.ts";
3
- import type { NamedListFilterRef } from "./named-list-filters.ts";
3
+ import type { NamedFilterFacetOptions, NamedListFilterRef } from "./named-list-filters.ts";
4
4
  import type { NavIconKey } from "./nav-icon.ts";
5
5
  import type { FormatSpec, PlatformComponent, ScreenNavSugar, ScreenSlots } from "./screen.ts";
6
6
  import type { DashboardStatTone, ScreenVisibility } from "./screen-dashboard.ts";
7
7
  import type { EditLayout, ListEmptyStateSpec } from "./screen-entity-edit.ts";
8
- import type { ListColumnSpec, ListPaginationMode, ListSortSpec, RowAction, RowActionMode, RowFieldExtractor, ScreenFilter, ToolbarAction } from "./screen-entity-list.ts";
8
+ import type { ListColumnSpec, ListPaginationMode, ListRowDecoration, ListSortOption, ListSortSpec, RowAction, RowActionMode, RowFieldExtractor, ScreenFilter, ToolbarAction } from "./screen-entity-list.ts";
9
9
  import type { ScreenFallback } from "./screen-fallback.ts";
10
10
  import type { ListBulkAction } from "./screen-list-bulk.ts";
11
- import type { ListTableOptions } from "./screen-list-table.ts";
11
+ import type { ListNarrowFacets, ListTableOptions, ListToolbarActionsPlacement } from "./screen-list-table.ts";
12
+ import type { RecordBannerSpec, RecordBreadcrumbSpec, RecordProgressSpec, RecordStepsSpec, RecordSummarySpec } from "./screen-record-guidance.ts";
12
13
  export type ListFacetSpec = {
13
14
  readonly field: string;
14
15
  readonly type: "select";
15
16
  readonly label: string;
17
+ /** Below `sm` the facet opens behind the filter icon next to the search field. */
18
+ readonly narrowPlacement?: "behind-filter";
16
19
  readonly options: readonly {
17
20
  readonly value: string;
18
21
  readonly label: string;
@@ -21,12 +24,16 @@ export type ListFacetSpec = {
21
24
  readonly field: string;
22
25
  readonly type: "boolean";
23
26
  readonly label: string;
27
+ /** Below `sm` the facet opens behind the filter icon next to the search field. */
28
+ readonly narrowPlacement?: "behind-filter";
24
29
  readonly trueLabel: string;
25
30
  readonly falseLabel: string;
26
31
  } | {
27
32
  readonly field: string;
28
33
  readonly type: "reference";
29
34
  readonly label: string;
35
+ /** Below `sm` the facet opens behind the filter icon next to the search field. */
36
+ readonly narrowPlacement?: "behind-filter";
30
37
  /** Entity name (same feature) or `feature:entity` (cross-feature), same
31
38
  * convention as `ListColumnSpec.refEntity`. Options load at render time. */
32
39
  readonly entity: string;
@@ -71,23 +78,36 @@ export type ProjectionListScreenDefinition = {
71
78
  readonly fallback?: ScreenFallback;
72
79
  readonly query: string;
73
80
  readonly columns: readonly ListColumnSpec[];
81
+ /** Row field holding a SelectOptionTone; the row is toned like relatedList `rowTone`, other values leave it untoned. */
82
+ readonly rowToneField?: string;
83
+ /** Computed row fields from an app query, merged into the query rows; see `ListRowDecoration`. */
84
+ readonly rowDecoration?: ListRowDecoration;
74
85
  readonly rowRenderer?: PlatformComponent;
75
- readonly cardRenderer?: PlatformComponent;
76
86
  readonly rowActions?: readonly RowAction[];
77
87
  /** Layout of the row-action column — see `RowActionMode`. */
78
88
  readonly rowActionMode?: RowActionMode;
79
89
  /** Bulk actions over checkbox-selected rows, each pointing at a writeHandler row action. Adds a checkbox column and a selection bar; without it the list has no checkboxes. */
80
90
  readonly bulkActions?: readonly ListBulkAction[];
81
91
  readonly toolbarActions?: readonly ToolbarAction[];
92
+ /** "toolbar": from `md` up the `toolbarActions` end the filter row, after the "Sorted by" select, instead of standing in the page header. Below `md` they stay in the header. Default "header". Needs `toolbarActions`. */
93
+ readonly toolbarActionsPlacement?: ListToolbarActionsPlacement;
94
+ /** From `sm` up, a "Sorted by" select in the filter row (same options as the narrow sort control); column headers stay sortable. Needs `sortOptions`. */
95
+ readonly toolbarSort?: true;
96
+ /** "pills": below `sm` the select facets render as rounded pill triggers with a stronger border; from `sm` up unchanged. */
97
+ readonly narrowFacets?: ListNarrowFacets;
82
98
  readonly pagination?: ListPaginationMode;
83
99
  readonly pageSize?: number;
84
100
  /** Opt-in table behaviour: remembered state, reset, column picker, density. */
85
101
  readonly table?: ListTableOptions;
86
102
  readonly defaultSort?: ListSortSpec;
103
+ /** Choices of the "Sorted by" select in the toolbar (and the narrow-width sort control) instead of one entry per column; every field must be sortable. */
104
+ readonly sortOptions?: readonly ListSortOption[];
87
105
  /** Replaces the default empty-list title/hint; the create button stays when the list can create. */
88
106
  readonly emptyState?: ListEmptyStateSpec;
89
107
  /** i18n key for the primary create button label (default `kumiko.actions.create`). */
90
108
  readonly createLabel?: string;
109
+ /** i18n key of the plural noun for the list size in the phone sort line ('{count}' pluralised, e.g. "contract"/"contracts"). Default `<feature>:entity:<entity>:noun`, which a projectionList has no entity for. */
110
+ readonly itemNounKey?: string;
91
111
  /** i18n key for the search field placeholder (default `kumiko.list.search-placeholder`). */
92
112
  readonly searchPlaceholder?: string;
93
113
  readonly searchable?: boolean;
@@ -116,6 +136,8 @@ export type ProjectionListScreenDefinition = {
116
136
  /** Named work-queue rules the bound query understands: its Zod schema must have a
117
137
  * `namedFilter` key (boot-checked) and is sent the selected id in every list and count query. */
118
138
  readonly namedFilters?: readonly NamedListFilterRef[];
139
+ /** Presentation of `namedFilters` in the toolbar; needs `namedFilters`. */
140
+ readonly namedFilterFacet?: NamedFilterFacetOptions;
119
141
  readonly slots?: ScreenSlots;
120
142
  readonly access?: AccessRule;
121
143
  };
@@ -124,12 +146,18 @@ export type RecordHeaderSubtitlePart = string | {
124
146
  readonly navigate?: MetricNavigate;
125
147
  /** Formats the raw field value (e.g. `timestamp`); an empty value is still dropped. */
126
148
  readonly format?: FormatSpec;
149
+ /** i18n key of a text before the value ("Owner "); it stays plain text, a `navigate` link covers only the value. Dropped with an empty value. */
150
+ readonly prefix?: string;
127
151
  };
128
152
  export type RecordHeaderSpec = {
129
153
  readonly title: string;
154
+ /** Field holding a short title for the desktop top bar ("Orders › SO-10482 ● processing"); the body keeps the full `title` as the h1. Default: the title. */
155
+ readonly shortTitle?: string;
130
156
  /** Field name, or several parts (field name or `{ field, navigate }`)
131
157
  * joined by a separator; parts with an empty value are dropped. */
132
158
  readonly subtitle?: string | readonly RecordHeaderSubtitlePart[];
159
+ /** Field holding a plain-text subtitle shown instead of `subtitle` below `sm` (e.g. "Main St 12, Berlin · 3 rooms"). */
160
+ readonly narrowSubtitle?: string;
133
161
  readonly status?: string;
134
162
  /** Formats the badge text (typically `enumOption` with a `keyPrefix`); tones still resolve on the raw value. Needs `status`. Without it, the `status` field's layout renderer is used when it is `enumOption` or `i18nText`. */
135
163
  readonly statusFormat?: FormatSpec;
@@ -159,9 +187,19 @@ export type MetricNavigate = {
159
187
  export type MetricSpec = {
160
188
  readonly field: string;
161
189
  readonly label: string;
190
+ /** Record field of the detail query holding the label text, e.g. "Rent from 01.12."; it replaces the static `label` while it holds a non-empty string. The static `label` stays the fallback. */
191
+ readonly labelField?: string;
162
192
  readonly navigate?: MetricNavigate;
193
+ /** Leaves the metric out below `sm`. */
194
+ readonly hideOnNarrow?: true;
163
195
  /** Tile color as on dashboard stat panels; not applied while the value is 0. */
164
196
  readonly tone?: DashboardStatTone;
197
+ /** Record field of the detail query holding a SelectOptionTone; a valid value overrides `tone`, also at value 0. Empty or unknown values fall back to `tone`. */
198
+ readonly toneField?: string;
199
+ /** Record field of the detail query shown as a small line under the value; the value stays the number. Same name as `DashboardStatPanel.subField`. */
200
+ readonly subField?: string;
201
+ /** Record field shown instead of `subField` below `sm` ("of 2,850 €" instead of "0 of 2,850.00 €"). */
202
+ readonly subFieldNarrow?: string;
165
203
  /** Icon chip of the tile; only drawn with `metricsStyle: "tiles"`. */
166
204
  readonly icon?: NavIconKey;
167
205
  /** Formats the displayed value (e.g. `date`, `enumOption`); the tone still resolves on the raw value. */
@@ -189,6 +227,8 @@ export type ProjectionDetailScreenDefinition = {
189
227
  readonly query: string;
190
228
  /** Query output field whose value titles the page header (breadcrumb) when no `header` is set. */
191
229
  readonly recordTitleField?: string;
230
+ /** Focused shell while the record is open: the app header actions leave the shell header, and on phones a top bar with the record title, a back arrow to the parent list and the page-header overflow menu replaces it. Default off. */
231
+ readonly focus?: boolean;
192
232
  /** Query-payload key for the row-id. Default "id". */
193
233
  readonly idParam?: string;
194
234
  /** The server determines the shown row from the caller's session/context
@@ -221,6 +261,20 @@ export type ProjectionDetailScreenDefinition = {
221
261
  readonly metrics?: readonly MetricSpec[];
222
262
  /** "tiles" draws the metrics as the dashboard KPI tiles (StatCard) instead of the plain band. */
223
263
  readonly metricsStyle?: "band" | "tiles";
264
+ /** `narrow: "after-guidance"` moves the metrics below the summary, banner and steps on screens under md, ahead of the tabs. Works with the page header and the head card; only the metric tiles move, the subtitle and status line stay under the title. */
265
+ readonly metricsPlacement?: {
266
+ readonly narrow?: "after-guidance";
267
+ };
268
+ /** Path above the header (query column holding items). */
269
+ readonly breadcrumb?: RecordBreadcrumbSpec;
270
+ /** One emphasized sentence below the header. */
271
+ readonly summary?: RecordSummarySpec;
272
+ /** Notice below the summary. Its `actions` are evaluated against the notice like a list row (`visible`, `params`, `payload` read the notice); a writeHandler without `payload` sends the shown record's id; `rowClick` and `showOnTabs` are rejected. */
273
+ readonly banner?: RecordBannerSpec;
274
+ /** "Next steps" panel. Its `actions` are evaluated against the step like a list row (`visible`, `params`, `payload` read the step); a writeHandler without `payload` sends the shown record's id; `rowClick` and `showOnTabs` are rejected. */
275
+ readonly steps?: RecordStepsSpec;
276
+ /** Process chains the record is part of, drawn as step bars between the banner and the steps panel. Reads `RecordProgress[]` from the query row; an empty array shows no block. */
277
+ readonly progress?: RecordProgressSpec;
224
278
  /** Parent list screen (short id) for a "back" navigation. */
225
279
  readonly listScreenId?: string;
226
280
  readonly slots?: ScreenSlots;
@@ -0,0 +1,96 @@
1
+ import type { SelectOptionTone } from "./fields.ts";
2
+ import type { RowAction } from "./screen-entity-list.ts";
3
+ export type RecordBreadcrumbItem = {
4
+ readonly label: string;
5
+ /** With `id`, the item links to that record's detail screen when the user may open it. */
6
+ readonly entity?: string;
7
+ readonly id?: string;
8
+ };
9
+ /**
10
+ * A banner or step action. `hideIcon` keeps the icon out of the drawn button (text only); it
11
+ * stays registered for the `screen/action-icon` rule and for icon-only or menu renderings.
12
+ */
13
+ export type RecordGuidanceAction = RowAction & {
14
+ readonly hideIcon?: true;
15
+ /** i18n key shown as the button label below `sm` (a shorter word, e.g. "Plan" for "Plan handover"). */
16
+ readonly narrowLabel?: string;
17
+ };
18
+ export type RecordNotice = {
19
+ readonly title: string;
20
+ readonly text?: string;
21
+ /** Shown instead of `title` below `sm`. */
22
+ readonly narrowTitle?: string;
23
+ /** Shown instead of `text` below `sm`. */
24
+ readonly narrowText?: string;
25
+ readonly tone?: SelectOptionTone;
26
+ readonly [field: string]: unknown;
27
+ };
28
+ export type RecordStep = {
29
+ readonly id: string;
30
+ readonly title: string;
31
+ /** Shown instead of `title` below `sm`. */
32
+ readonly narrowTitle?: string;
33
+ readonly detail?: string;
34
+ /** Shown instead of `detail` below `sm`. */
35
+ readonly narrowDetail?: string;
36
+ readonly tone?: SelectOptionTone;
37
+ /** Explanation behind a toggle next to the step. */
38
+ readonly why?: string;
39
+ /** With `why`: the explanation stands open as a box under the step from `sm` up; the toggle closes it. */
40
+ readonly whyOpen?: true;
41
+ /** Bold lead-in of the `why` paragraph. */
42
+ readonly whyTitle?: string;
43
+ readonly [field: string]: unknown;
44
+ };
45
+ /** Path above the header; `field` holds `RecordBreadcrumbItem[]`. */
46
+ export type RecordBreadcrumbSpec = {
47
+ readonly field: string;
48
+ };
49
+ /** One emphasized sentence below the header; `field` holds a string. */
50
+ export type RecordSummarySpec = {
51
+ readonly field: string;
52
+ /** Row field holding a SelectOptionTone for the sentence's accent. */
53
+ readonly toneField?: string;
54
+ /** Row field with a shorter sentence shown instead of `field` below `sm`. */
55
+ readonly narrowField?: string;
56
+ };
57
+ export type RecordBannerSpec = {
58
+ /** Holds `RecordNotice | null`; null shows no banner. */
59
+ readonly field: string;
60
+ readonly actions?: readonly RecordGuidanceAction[];
61
+ };
62
+ export type RecordStepsSpec = {
63
+ /** Holds `RecordStep[]`. */
64
+ readonly field: string;
65
+ /** i18n key, default `kumiko.detail.steps.title`. */
66
+ readonly title?: string;
67
+ /** Record field with a plain-text subtitle. */
68
+ readonly subtitleField?: string;
69
+ /** i18n key for an empty list, default `kumiko.detail.steps.empty`. */
70
+ readonly emptyLabel?: string;
71
+ /** Below `sm` only the first n steps show; the rest sits behind a "k more steps" toggle. */
72
+ readonly narrowLimit?: number;
73
+ /** Plural base key for the toggle of the hidden rest: define `<key>.one` and `<key>.other` (the latter with `{count}`). Default `kumiko.detail.steps.more`. */
74
+ readonly narrowMoreLabel?: string;
75
+ readonly actions?: readonly RecordGuidanceAction[];
76
+ };
77
+ export type RecordProgressStep = {
78
+ readonly id: string;
79
+ readonly label: string;
80
+ readonly done: boolean;
81
+ readonly detail?: string;
82
+ };
83
+ /** A process chain the record is part of. `currentIndex` points at the first open step. */
84
+ export type RecordProgress = {
85
+ readonly title: string;
86
+ readonly steps: readonly RecordProgressStep[];
87
+ readonly currentIndex: number;
88
+ };
89
+ export type RecordProgressSpec = {
90
+ /** Holds `RecordProgress[]`; an empty array shows no block. */
91
+ readonly field: string;
92
+ /** "beside-steps": the chains sit as a vertical stage list in a 4/12 column next to the steps panel (8/12) from lg, stacked below it under lg. Needs `steps`; without it the chains keep their own row. */
93
+ readonly placement?: "beside-steps";
94
+ /** Leaves the chains out below `sm`. */
95
+ readonly hideOnNarrow?: true;
96
+ };
@@ -0,0 +1 @@
1
+ export {};
package/dist/screen.d.ts CHANGED
@@ -78,9 +78,11 @@ export interface FieldFormatRegistry {
78
78
  /** FileRef id (or id array) as a download link with the file name. On a
79
79
  * read-only detail field it renders a file list with download links and an
80
80
  * inline preview for PDFs; elsewhere the raw value is shown.
81
- * `previewOpenByDefault` opens the newest (last) file's PDF preview initially. */
81
+ * `previewOpenByDefault` opens the newest (last) file's PDF preview initially.
82
+ * `viewInDrawer` adds a "View" action to list cells for PDFs that opens the PDF viewer in a drawer. */
82
83
  file: {
83
84
  readonly previewOpenByDefault?: boolean;
85
+ readonly viewInDrawer?: boolean;
84
86
  };
85
87
  }
86
88
  export type FormatSpec = {
@@ -115,18 +117,20 @@ export type ScreenNavSugar = {
115
117
  readonly order?: number;
116
118
  };
117
119
  export type ScreenDefinition = EntityListScreenDefinition | ProjectionListScreenDefinition | ProjectionDetailScreenDefinition | DashboardScreenDefinition | EntityEditScreenDefinition | ActionFormScreenDefinition | ConfigEditScreenDefinition | SecretsEditScreenDefinition | SecretMintScreenDefinition | CustomScreenDefinition;
120
+ export type { NamedFilterFacetOptions } from "./named-list-filters.ts";
118
121
  export type { ActionFormFooterAction, ActionFormLoad, ActionFormRedirect, ActionFormScreenDefinition, ActionFormSuccessFact, ActionFormSuccessItems, ActionFormSuccessLink, FormFieldDerivation, FormFieldDerivationWithoutList, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, } from "./screen-action-form.ts";
119
122
  export type { ConfigEditAction, ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, SecretsEditScreenDefinition, SecretsEditSection, } from "./screen-custom-config.ts";
120
- export type { DashboardChartKind, DashboardChartMarkerKind, DashboardChartPanel, DashboardChartRangeOption, DashboardChartRanges, DashboardChartTone, DashboardCurrencyFormat, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListPanel, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelGate, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardProgressTone, DashboardRecordBinding, DashboardRefresh, DashboardRelativeTimeFormat, DashboardRelativeTimeParam, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardStatTone, DashboardText, DashboardTextBlock, DashboardTextPanel, DashboardTextParam, DashboardTimeRangeDefinition, DashboardValueFormat, ScreenVisibility, } from "./screen-dashboard.ts";
123
+ export type { DashboardChartKind, DashboardChartMarkerKind, DashboardChartPanel, DashboardChartRangeOption, DashboardChartRanges, DashboardChartTone, DashboardCurrencyFormat, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListFooterLink, DashboardListNarrow, DashboardListPanel, DashboardListRowLink, DashboardListRowToneMarker, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelGate, DashboardPanelNarrow, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardProgressTone, DashboardRecordBinding, DashboardRefresh, DashboardRelativeTimeFormat, DashboardRelativeTimeParam, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupLayout, DashboardStatGroupLink, DashboardStatGroupNarrow, DashboardStatGroupPanel, DashboardStatPanel, DashboardStatTone, DashboardText, DashboardTextBlock, DashboardTextPanel, DashboardTextParam, DashboardTimeRangeDefinition, DashboardValueFormat, ScreenVisibility, } from "./screen-dashboard.ts";
121
124
  export { DASHBOARD_MIN_REFRESH_SECONDS, DASHBOARD_STAT_TONES } from "./screen-dashboard.ts";
122
125
  export type { EditExtensionSection, EditFieldGroup, EditFieldPrefill, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EmbeddedListEditSpec, EntityEditAction, EntityEditActionPlacement, EntityEditScreenDefinition, EntityWriteExcludedFields, FieldAffix, FieldFillAction, FormWidth, ListEmptyStateSpec, RelatedListEmptyStateSpec, RelatedListEmptyStateVariant, RelatedListRowTone, } from "./screen-entity-edit.ts";
123
126
  export { relatedListGroupHeaderLabel, relatedListGroupKey } from "./screen-entity-edit.ts";
124
- export type { EntityListFacetConfig, EntityListFacetExtraOption, EntityListScreenDefinition, ListBadgeTone, ListColumnDisplay, ListColumnSpec, ListPaginationMode, ListSortDir, ListSortSpec, RelatedListToolbarAction, RowAction, RowActionClientAction, RowActionDisplay, RowActionDrawer, RowActionMode, RowActionNavigate, RowActionNavigateBase, RowActionWriteHandler, RowFieldExtractor, ScreenFilter, ScreenFilterOp, ToolbarAction, } from "./screen-entity-list.ts";
127
+ export type { EntityListFacetConfig, EntityListFacetExtraOption, EntityListScreenDefinition, ListBadgeTone, ListColumnDisplay, ListColumnHint, ListColumnSpec, ListPaginationMode, ListRowDecoration, ListSortDir, ListSortOption, ListSortSpec, RelatedListToolbarAction, RowAction, RowActionClientAction, RowActionDisplay, RowActionDrawer, RowActionMode, RowActionNavigate, RowActionNavigateBase, RowActionWriteHandler, RowFieldExtractor, ScreenFilter, ScreenFilterOp, ToolbarAction, } from "./screen-entity-list.ts";
125
128
  export type { EntityListExpandableRow, ExpandableRowGrouping } from "./screen-expandable-row.ts";
126
129
  export type { ScreenFallback, ScreenFallbackByReason, ScreenFallbackReason, } from "./screen-fallback.ts";
127
130
  export { fallbackTargetFor, fallbackTargets, SCREEN_FALLBACK_REASONS } from "./screen-fallback.ts";
128
131
  export type { ListBulkAction } from "./screen-list-bulk.ts";
129
132
  export { LIST_BULK_ACTION_KEYS, MAX_BULK_SELECTION } from "./screen-list-bulk.ts";
130
- export type { BundledListsOptions, ListColumnPin, ListTableDensity, ListTableExportOptions, ListTableGrouping, ListTableOptions, ListTableTotal, } from "./screen-list-table.ts";
131
- export { DEFAULT_EXPORT_MAX_ROWS, LIST_COLUMN_PINS, LIST_TABLE_DENSITIES, LIST_TABLE_DENSITY_KEYS, LIST_TABLE_EXPORT_KEYS, LIST_TABLE_GROUPING_KEYS, LIST_TABLE_OPTION_KEYS, LIST_TABLE_TOTAL_KEYS, MAX_EXPORT_MAX_ROWS, } from "./screen-list-table.ts";
133
+ export type { BundledListsOptions, ListColumnPin, ListNarrowFacets, ListPayloadCapabilities, ListTableDensity, ListTableExportOptions, ListTableFrame, ListTableGrouping, ListTableOptions, ListTableSummaryRow, ListTableTotal, ListToolbarActionsPlacement, } from "./screen-list-table.ts";
134
+ export { DEFAULT_EXPORT_MAX_ROWS, entityHasFilterableFields, entityListDeclaresFilters, entityListDeclaresSearch, LIST_COLUMN_MAX_WIDTH_PX, LIST_COLUMN_PINS, LIST_NARROW_FACETS, LIST_TABLE_DENSITIES, LIST_TABLE_DENSITY_KEYS, LIST_TABLE_EXPORT_KEYS, LIST_TABLE_FRAMES, LIST_TABLE_GROUPING_KEYS, LIST_TABLE_OPTION_KEYS, LIST_TABLE_SUMMARY_ROW_KEYS, LIST_TABLE_TOTAL_KEYS, LIST_TOOLBAR_ACTIONS_PLACEMENTS, listPayloadKeysSent, MAX_EXPORT_MAX_ROWS, } from "./screen-list-table.ts";
132
135
  export type { ListFacetSpec, MetricNavigate, MetricSpec, ProjectionDetailScreenDefinition, ProjectionListScreenDefinition, RecordHeaderSpec, RecordHeaderSubtitlePart, } from "./screen-projection.ts";
136
+ export type { RecordBannerSpec, RecordBreadcrumbItem, RecordBreadcrumbSpec, RecordNotice, RecordProgress, RecordProgressSpec, RecordProgressStep, RecordStep, RecordStepsSpec, RecordSummarySpec, } from "./screen-record-guidance.ts";
package/dist/screen.js CHANGED
@@ -2,4 +2,4 @@ export { DASHBOARD_MIN_REFRESH_SECONDS, DASHBOARD_STAT_TONES } from "./screen-da
2
2
  export { relatedListGroupHeaderLabel, relatedListGroupKey } from "./screen-entity-edit.js";
3
3
  export { fallbackTargetFor, fallbackTargets, SCREEN_FALLBACK_REASONS } from "./screen-fallback.js";
4
4
  export { LIST_BULK_ACTION_KEYS, MAX_BULK_SELECTION } from "./screen-list-bulk.js";
5
- export { DEFAULT_EXPORT_MAX_ROWS, LIST_COLUMN_PINS, LIST_TABLE_DENSITIES, LIST_TABLE_DENSITY_KEYS, LIST_TABLE_EXPORT_KEYS, LIST_TABLE_GROUPING_KEYS, LIST_TABLE_OPTION_KEYS, LIST_TABLE_TOTAL_KEYS, MAX_EXPORT_MAX_ROWS, } from "./screen-list-table.js";
5
+ export { DEFAULT_EXPORT_MAX_ROWS, entityHasFilterableFields, entityListDeclaresFilters, entityListDeclaresSearch, LIST_COLUMN_MAX_WIDTH_PX, LIST_COLUMN_PINS, LIST_NARROW_FACETS, LIST_TABLE_DENSITIES, LIST_TABLE_DENSITY_KEYS, LIST_TABLE_EXPORT_KEYS, LIST_TABLE_FRAMES, LIST_TABLE_GROUPING_KEYS, LIST_TABLE_OPTION_KEYS, LIST_TABLE_SUMMARY_ROW_KEYS, LIST_TABLE_TOTAL_KEYS, LIST_TOOLBAR_ACTIONS_PLACEMENTS, listPayloadKeysSent, MAX_EXPORT_MAX_ROWS, } from "./screen-list-table.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-types",
3
- "version": "0.413.1",
3
+ "version": "0.415.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": "MIT",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -30,6 +30,10 @@
30
30
  "types": "./dist/kebab-case.d.ts",
31
31
  "default": "./dist/kebab-case.js"
32
32
  },
33
+ "./minor-units": {
34
+ "types": "./dist/minor-units.d.ts",
35
+ "default": "./dist/minor-units.js"
36
+ },
33
37
  "./identifiers": {
34
38
  "types": "./dist/identifiers.d.ts",
35
39
  "default": "./dist/identifiers.js"
@@ -341,6 +345,10 @@
341
345
  "types": "./dist/kebab-case.d.ts",
342
346
  "default": "./dist/kebab-case.js"
343
347
  },
348
+ "./minor-units": {
349
+ "types": "./dist/minor-units.d.ts",
350
+ "default": "./dist/minor-units.js"
351
+ },
344
352
  "./identifiers": {
345
353
  "types": "./dist/identifiers.d.ts",
346
354
  "default": "./dist/identifiers.js"
package/src/changes.json CHANGED
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.414.0",
4
+ "type": "improvement",
5
+ "title": "Long external calls with writes belong in transaction perCommand",
6
+ "detail": "A `perCommand` write handler holds no transaction or connection while an external call runs and keeps `ctx.db.outsideTransaction`, so metering and provenance bookings work there (covered by an integration test with the cap counter). The docs of `WriteHandlerTransactionMode` and `BeforeTransactionContext` say so; `beforeTransaction` keeps its read-only context."
7
+ },
2
8
  {
3
9
  "version": "0.404.0",
4
10
  "type": "improvement",