@cosmicdrift/kumiko-types 0.405.0 → 0.409.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.
@@ -2,9 +2,11 @@
2
2
  * unless it opts in explicitly. `kind` is a parameter because write and query
3
3
  * handler definitions are structurally indistinguishable at runtime. */
4
4
  export function resolveAgentExposure(def, kind) {
5
+ const effect = def.agent?.effect;
5
6
  return {
6
7
  expose: def.agent?.expose ?? def.description !== undefined,
7
8
  risk: def.agent?.risk ?? (kind === "query" ? "low" : "mid"),
9
+ ...(effect !== undefined && { effect }),
8
10
  };
9
11
  }
10
12
  /** Screens are the inverse of handlers: the manifest lists every role-visible
@@ -0,0 +1,18 @@
1
+ export type AgentRisk = "low" | "mid" | "high";
2
+ /** "proposal": the write only changes a suggestion that a person still approves elsewhere, so the
3
+ * agent may run it without its own approval step. Boot accepts it only with `risk: "low"`. */
4
+ export type AgentEffect = "proposal";
5
+ /** Per-handler hints for the AI-agent manifest. `expose` overrides the
6
+ * default derived from `description`; `risk` overrides the per-kind default. */
7
+ export type AgentHandlerHints = {
8
+ readonly expose?: boolean;
9
+ readonly risk?: AgentRisk;
10
+ readonly effect?: AgentEffect;
11
+ };
12
+ /** Screens only read `expose`; `risk` ranks handler tool calls, so it is not offered here. */
13
+ export type AgentScreenHints = Pick<AgentHandlerHints, "expose">;
14
+ export type AgentExposure = {
15
+ readonly expose: boolean;
16
+ readonly risk: AgentRisk;
17
+ readonly effect?: AgentEffect;
18
+ };
@@ -0,0 +1 @@
1
+ export {};
package/dist/config.d.ts CHANGED
@@ -148,8 +148,10 @@ export type JobTrigger = {
148
148
  } | {
149
149
  readonly cron: string;
150
150
  readonly tz?: string;
151
+ readonly wakesSleepingApp?: false;
151
152
  } | {
152
153
  readonly maintenance: true;
154
+ readonly wakesSleepingApp?: false;
153
155
  } | {
154
156
  readonly manual: true;
155
157
  };
@@ -31,6 +31,7 @@ export type LockGuardOption = {
31
31
  export type ListRuntimeOptions = {
32
32
  readonly searchAdapter?: SearchAdapter;
33
33
  readonly includeDeleted?: boolean;
34
+ readonly onlyDeleted?: boolean;
34
35
  readonly referenceSearch?: {
35
36
  readonly fields: ReadonlyArray<{
36
37
  readonly fieldName: string;
package/dist/fields.d.ts CHANGED
@@ -7,6 +7,7 @@ import type { DerivedFieldsMap } from "./fields-derived.ts";
7
7
  import type { EventUpcastCtx } from "./handlers.ts";
8
8
  import type { NamedListFilterDef } from "./named-list-filters.ts";
9
9
  import type { OwnershipMap } from "./ownership.ts";
10
+ import type { EntityPiiAbsentSubject } from "./personal-annotations.ts";
10
11
  import type { EntityTenancy } from "./tenancy-brand.ts";
11
12
  export type { ClientDerivedFieldDef, DeriveContext, DerivedCondition, DerivedConditionValue, DerivedFieldDef, DerivedFieldsMap, DerivedRelatedMeasure, DerivedSqlSpec, DerivedValueType, JsDerivedFieldDef, SqlDerivedFieldDef, } from "./fields-derived.ts";
12
13
  export { isSqlDerivedField } from "./fields-derived.ts";
@@ -36,51 +37,7 @@ export type ResolvedPiiFlags = {
36
37
  readonly subjectRef?: true;
37
38
  };
38
39
  type PiiAndFieldState = ResolvedPiiFlags & FieldStateConditions;
39
- export type EntityPiiAbsentSubject = "tenant" | "self";
40
- export type PersonalSubject = "self" | {
41
- readonly of: string;
42
- readonly whenAbsent?: EntityPiiAbsentSubject;
43
- } | "tenant";
44
- export type Findability = "exact" | "fuzzy" | "none" | "secret";
45
- type NoPersonalAnnotation = {
46
- readonly personal?: never;
47
- readonly find?: never;
48
- readonly reason?: never;
49
- readonly anonymize?: never;
50
- };
51
- export type PersonalAnnotations = {
52
- readonly personal: PersonalSubject;
53
- readonly find: Findability;
54
- readonly anonymize?: () => unknown | Promise<unknown>;
55
- } | {
56
- readonly personal: "ref";
57
- } | {
58
- readonly personal: false;
59
- readonly reason: string;
60
- readonly anonymize?: () => unknown | Promise<unknown>;
61
- };
62
- export type LongTextFindability = "none" | "secret";
63
- export type PersonalAnnotationsLongText = {
64
- readonly personal: PersonalSubject;
65
- readonly find: LongTextFindability;
66
- readonly anonymize?: () => unknown | Promise<unknown>;
67
- } | {
68
- readonly personal: "ref";
69
- } | {
70
- readonly personal: false;
71
- readonly reason: string;
72
- readonly anonymize?: () => unknown | Promise<unknown>;
73
- };
74
- export type PersonalAnnotationsNoFind = {
75
- readonly personal: PersonalSubject;
76
- readonly anonymize?: () => unknown | Promise<unknown>;
77
- } | {
78
- readonly personal: "ref";
79
- } | {
80
- readonly personal: false;
81
- readonly reason: string;
82
- readonly anonymize?: () => unknown | Promise<unknown>;
83
- } | NoPersonalAnnotation;
40
+ export type { EntityPiiAbsentSubject, Findability, LongTextFindability, PersonalAnnotations, PersonalAnnotationsLongText, PersonalAnnotationsNoFind, PersonalSubject, } from "./personal-annotations.ts";
84
41
  export type RetentionDef = {
85
42
  readonly keepFor: string;
86
43
  readonly strategy: "hardDelete" | "softDelete" | "anonymize" | "blockDelete";
@@ -151,9 +108,9 @@ export type TextFieldDef = {
151
108
  *
152
109
  * - **No `sortable`**: ordering 100 KB strings costs I/O without useful UX;
153
110
  * lexicographic ordering of code is not meaningful.
154
- * - **No `searchable`**: ILIKE/substring searches do not scale on long text.
155
- * Full-text search should use the SearchAdapter (Meilisearch), which has
156
- * its own tokenizer and index rather than this field flag.
111
+ * - **`searchable` only through `find: "fuzzy"`**: ILIKE/substring searches
112
+ * do not scale on long text, so the value is full-text indexed by the
113
+ * SearchAdapter (Meilisearch, chunked) and never searched in SQL.
157
114
  * - **No `filterable`**: filtering long strings has the same issue as sorting.
158
115
  * - **No `format`**: email/url/phone are short, structured inputs, whereas
159
116
  * longText is unstructured by definition.
@@ -177,6 +134,8 @@ export type LongTextFieldDef = {
177
134
  * "high" on the directly-dispatched entry handler; a revert doesn't undo a
178
135
  * run that already read the compromised value. See irreversible-operation-gate. */
179
136
  readonly readAsInstruction?: boolean;
137
+ /** Set by `find: "fuzzy"`: the value goes into the SearchAdapter document. */
138
+ readonly searchable?: boolean;
180
139
  readonly default?: string;
181
140
  readonly access?: FieldAccess;
182
141
  readonly multiline?: boolean | {
@@ -20,6 +20,7 @@ import type { CrossTenantReads, TenantDb } from "./tenant-db-types.ts";
20
20
  import type { Clock, TzContext } from "./tz-context.ts";
21
21
  export type { BeforeTransactionContext, HandlerAuth, HandlerDb, HandlerDispatch, HandlerEvents, HandlerObservability, JobDispatch, JobEvents, JobObservability, ReservationContext, } from "./handler-context-facets.ts";
22
22
  export type { ContextServices, HandlerLifecycle, HandlerTenants, JobLifecycle, } from "./handler-context-services.ts";
23
+ import type { AgentHandlerHints } from "./agent-hints.ts";
23
24
  export type OpenToAllPersonalData = "tenant-members";
24
25
  export type OpenToAllDeclaration = {
25
26
  readonly reason: string;
@@ -153,6 +154,7 @@ export type NotifyOptions = {
153
154
  readonly tenant: TenantId;
154
155
  };
155
156
  readonly route?: Readonly<Record<string, string>>;
157
+ readonly channels?: readonly string[];
156
158
  readonly data?: Readonly<Record<string, unknown>>;
157
159
  readonly priority?: NotifyPriority;
158
160
  readonly idempotencyKey?: string;
@@ -307,6 +309,7 @@ export type HandlerContext<TMap extends object = KumikoEventTypeMap> = {
307
309
  * dispatcher payload-bucket digest. Absent when the app wires no digest key. */
308
310
  readonly rateLimitDigest?: (value: string) => string;
309
311
  readonly includeDeleted?: boolean;
312
+ readonly onlyDeleted?: boolean;
310
313
  readonly dispatch: HandlerDispatch;
311
314
  readonly hasFeature: (featureName: string) => Promise<boolean>;
312
315
  readonly events: HandlerEvents<TMap>;
@@ -514,19 +517,7 @@ export type RateLimitDisabled = {
514
517
  export type RateLimitDeclaration = RateLimitOption | RateLimitOptions | RateLimitDisabled;
515
518
  export declare function declaredRateLimitOptions(declaration: RateLimitDeclaration | undefined): readonly RateLimitOption[];
516
519
  export declare function isRateLimitDisabled(v: RateLimitDeclaration | undefined): v is RateLimitDisabled;
517
- export type AgentRisk = "low" | "mid" | "high";
518
- /** Per-handler hints for the AI-agent manifest. `expose` overrides the
519
- * default derived from `description`; `risk` overrides the per-kind default. */
520
- export type AgentHandlerHints = {
521
- readonly expose?: boolean;
522
- readonly risk?: AgentRisk;
523
- };
524
- /** Screens only read `expose`; `risk` ranks handler tool calls, so it is not offered here. */
525
- export type AgentScreenHints = Pick<AgentHandlerHints, "expose">;
526
- export type AgentExposure = {
527
- readonly expose: boolean;
528
- readonly risk: AgentRisk;
529
- };
520
+ export type { AgentEffect, AgentExposure, AgentHandlerHints, AgentRisk, AgentScreenHints, } from "./agent-hints.ts";
530
521
  /** Undoes a reservation made before the handler transaction. */
531
522
  export type ReservationRelease = () => Promise<void>;
532
523
  /** The dispatcher's own open handler transaction: a reservation must settle on it, not on
@@ -2,6 +2,7 @@ export declare const IN_APP_NOTIFICATION_FEATURE: "channel-in-app";
2
2
  export declare const IN_APP_NOTIFICATION_QUERIES: {
3
3
  readonly inbox: "channel-in-app:query:inbox";
4
4
  readonly unreadCount: "channel-in-app:query:unread-count";
5
+ readonly readStateByKeys: "channel-in-app:query:read-state-by-keys";
5
6
  };
6
7
  export declare const IN_APP_NOTIFICATION_WRITES: {
7
8
  readonly markRead: "channel-in-app:write:mark-read";
@@ -4,6 +4,7 @@ export const IN_APP_NOTIFICATION_FEATURE = "channel-in-app";
4
4
  export const IN_APP_NOTIFICATION_QUERIES = {
5
5
  inbox: "channel-in-app:query:inbox",
6
6
  unreadCount: "channel-in-app:query:unread-count",
7
+ readStateByKeys: "channel-in-app:query:read-state-by-keys",
7
8
  };
8
9
  export const IN_APP_NOTIFICATION_WRITES = {
9
10
  markRead: "channel-in-app:write:mark-read",
@@ -1,3 +1,3 @@
1
- export declare const NAV_ICON_KEYS: readonly ["dashboard", "layout-grid", "book-open", "clipboard-list", "package", "gauge", "list", "table", "layers", "building", "calculator", "wallet", "coins", "credit-card", "piggy-bank", "receipt", "chart", "bar-chart", "trending", "sparkles", "wand", "calendar", "file", "folder", "folder-open", "home", "bell", "shield", "shield-check", "send", "settings", "users", "user", "search", "tag", "key", "link", "palette", "share", "server", "mail", "lock", "hash", "download", "upload", "rocket", "plus", "languages", "trash", "x", "check", "arrow-left", "arrow-right", "copy", "pencil", "eye", "eye-off", "filter", "refresh", "more-horizontal", "more-vertical", "external-link", "chevron-down", "chevron-up", "chevron-left", "chevron-right", "save", "undo", "archive", "star", "flag", "clock", "map-pin", "phone", "printer", "alert-triangle", "info", "check-circle", "x-circle", "loader", "mic", "circle-stop", "image", "camera", "headphones"];
1
+ export declare const NAV_ICON_KEYS: readonly ["dashboard", "layout-grid", "book-open", "clipboard-list", "package", "gauge", "list", "table", "layers", "building", "warehouse", "calculator", "wallet", "euro", "coins", "credit-card", "piggy-bank", "receipt", "chart", "bar-chart", "trending", "sparkles", "wand", "calendar", "file", "folder", "folder-open", "home", "bell", "shield", "shield-check", "send", "settings", "users", "user", "search", "tag", "key", "link", "palette", "share", "server", "mail", "lock", "hash", "download", "upload", "rocket", "plus", "languages", "trash", "x", "check", "arrow-left", "arrow-right", "copy", "pencil", "eye", "eye-off", "filter", "refresh", "more-horizontal", "more-vertical", "external-link", "chevron-down", "chevron-up", "chevron-left", "chevron-right", "save", "undo", "archive", "star", "flag", "clock", "map-pin", "phone", "printer", "alert-triangle", "info", "check-circle", "x-circle", "loader", "mic", "circle-stop", "image", "camera", "headphones"];
2
2
  export type NavIconKey = (typeof NAV_ICON_KEYS)[number];
3
3
  export type IconKey = NavIconKey;
package/dist/nav-icon.js CHANGED
@@ -25,8 +25,10 @@ export const NAV_ICON_KEYS = [
25
25
  "table",
26
26
  "layers",
27
27
  "building",
28
+ "warehouse",
28
29
  "calculator",
29
30
  "wallet",
31
+ "euro",
30
32
  "coins",
31
33
  "credit-card",
32
34
  "piggy-bank",
@@ -0,0 +1,46 @@
1
+ export type EntityPiiAbsentSubject = "tenant" | "self";
2
+ export type PersonalSubject = "self" | {
3
+ readonly of: string;
4
+ readonly whenAbsent?: EntityPiiAbsentSubject;
5
+ } | "tenant";
6
+ export type Findability = "exact" | "fuzzy" | "none" | "secret";
7
+ type NoPersonalAnnotation = {
8
+ readonly personal?: never;
9
+ readonly find?: never;
10
+ readonly reason?: never;
11
+ readonly anonymize?: never;
12
+ };
13
+ export type PersonalAnnotations = {
14
+ readonly personal: PersonalSubject;
15
+ readonly find: Findability;
16
+ readonly anonymize?: () => unknown | Promise<unknown>;
17
+ } | {
18
+ readonly personal: "ref";
19
+ } | {
20
+ readonly personal: false;
21
+ readonly reason: string;
22
+ readonly anonymize?: () => unknown | Promise<unknown>;
23
+ };
24
+ export type LongTextFindability = "none" | "fuzzy" | "secret";
25
+ export type PersonalAnnotationsLongText = {
26
+ readonly personal: PersonalSubject;
27
+ readonly find: LongTextFindability;
28
+ readonly anonymize?: () => unknown | Promise<unknown>;
29
+ } | {
30
+ readonly personal: "ref";
31
+ } | {
32
+ readonly personal: false;
33
+ readonly reason: string;
34
+ readonly anonymize?: () => unknown | Promise<unknown>;
35
+ };
36
+ export type PersonalAnnotationsNoFind = {
37
+ readonly personal: PersonalSubject;
38
+ readonly anonymize?: () => unknown | Promise<unknown>;
39
+ } | {
40
+ readonly personal: "ref";
41
+ } | {
42
+ readonly personal: false;
43
+ readonly reason: string;
44
+ readonly anonymize?: () => unknown | Promise<unknown>;
45
+ } | NoPersonalAnnotation;
46
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -121,6 +121,11 @@ export type ActionFormScreenDefinition = {
121
121
  * while the screen stays put (e.g. charged/skipped/failed of a batch run).
122
122
  * Mutually exclusive with `redirect`. */
123
123
  readonly successFacts?: readonly ActionFormSuccessFact[];
124
+ /** One hint per entry of a success-payload array, each with its own link
125
+ * (e.g. "this file is already in the inbox" with "Open" per uploaded file).
126
+ * While at least one entry is shown, the hints replace the generic
127
+ * confirmation text. Mutually exclusive with `redirect`. */
128
+ readonly successItems?: ActionFormSuccessItems;
124
129
  /** Reset the form to its initial values after a successful submit (prefill
125
130
  * kept, typed values cleared). Only applies while the screen stays put,
126
131
  * i.e. without `redirect`. */
@@ -200,12 +205,25 @@ export type ActionFormSuccessFact = {
200
205
  /** Label (i18n key). */
201
206
  readonly label: string;
202
207
  };
208
+ /** Per-entry hints of the success box, read from an array in the handler's success payload. */
209
+ export type ActionFormSuccessItems = {
210
+ /** Flat field name of an array in the success payload. An entry is shown
211
+ * when it is an object with a string `label` (the sentence of the hint). */
212
+ readonly field: string;
213
+ /** Link of each hint. `idFrom` and `params` read from the entry, not from
214
+ * the whole payload; an entry whose link does not resolve shows without one. */
215
+ readonly link?: ActionFormSuccessLink;
216
+ };
203
217
  /** A redirect target rendered as a link in the success box. */
204
218
  export type ActionFormSuccessLink = Omit<ActionFormRedirect, "idFrom"> & {
205
219
  /** Success-payload field carrying the navigation id. Required for a record
206
220
  * target (`entityEdit`, `projectionDetail`); omit it for a list, dashboard
207
221
  * or form target, which opens without an id. */
208
222
  readonly idFrom?: string;
223
+ /** URL search params of the target, each read from a success-payload field
224
+ * (`{ cmd: "duplicateOfId" }` opens `?cmd=<duplicateOfId>`). The link is
225
+ * hidden while one of these fields is not a string. */
226
+ readonly params?: Readonly<Record<string, string>>;
209
227
  /** Link text (i18n key). */
210
228
  readonly label: string;
211
229
  };
@@ -35,6 +35,22 @@ export type CustomScreenDefinition = {
35
35
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
36
36
  readonly fallback?: ScreenFallback;
37
37
  };
38
+ /** A button row on a configEdit form that calls a write handler with `{}` (for example "send a test").
39
+ * It never saves the form: the button is disabled while the form has unsaved changes, so the
40
+ * handler always works on what is stored. All text fields are i18n keys. */
41
+ export type ConfigEditAction = {
42
+ /** Unique within the screen; used for the test id. */
43
+ readonly id: string;
44
+ /** Qualified name of a write handler (`<feature>:write:<name>`). */
45
+ readonly handler: string;
46
+ readonly label: string;
47
+ readonly description?: string;
48
+ readonly buttonLabel: string;
49
+ /** Field (from the layout) after which the row is drawn. */
50
+ readonly afterField: string;
51
+ /** Shown after a successful call; without it a success stays silent. */
52
+ readonly successMessage?: string;
53
+ };
38
54
  export type ConfigEditScreenDefinition = {
39
55
  readonly id: string;
40
56
  readonly type: "configEdit";
@@ -60,7 +76,8 @@ export type ConfigEditScreenDefinition = {
60
76
  * qualified config key (`<feature>:config:<short>`). The boot validator
61
77
  * checks that every qualified key is known in the registry. */
62
78
  readonly configKeys: Readonly<Record<string, string>>;
63
- /** Field name → qualified secret key (`<feature>:secret:<short>`), tenant scope only.
79
+ /** Field name → qualified secret key (`<feature>:secret:<short>`), tenant or system scope
80
+ * (system: platform-wide, SystemAdmin only), never user scope.
64
81
  * Such a field is a writeOnly text field with no `configKeys` entry; the same save
65
82
  * writes it through secrets:write:set (or secrets:write:delete on removal). */
66
83
  readonly secretKeys?: Readonly<Record<string, string>>;
@@ -84,6 +101,8 @@ export type ConfigEditScreenDefinition = {
84
101
  readonly requiredFields?: readonly string[];
85
102
  /** i18n key for the submit button. Default: "kumiko.actions.save". */
86
103
  readonly submitLabel?: string;
104
+ /** Handler buttons drawn as their own row after `afterField` (settings-list layout). */
105
+ readonly actions?: readonly ConfigEditAction[];
87
106
  readonly slots?: ScreenSlots;
88
107
  readonly access?: AccessRule;
89
108
  };
@@ -55,6 +55,10 @@ export type EditFieldSpec = string | {
55
55
  /** Row field on the referenced entity shown as the label (default
56
56
  * "id"). Only meaningful together with `refEntity`. */
57
57
  readonly refLabelField?: string;
58
+ /** Text format for projectionDetail fields, which have no `EntityDefinition`
59
+ * to carry it: a read-only value renders as a `mailto:`/`tel:` link.
60
+ * Ignored on `entityEdit` fields, where the field's own `format` wins. */
61
+ readonly format?: "email" | "phone";
58
62
  /** Embedded-list fields only (`createEmbeddedListField`). */
59
63
  readonly embeddedList?: EmbeddedListEditSpec;
60
64
  /** Fills an empty value when the create form opens; the update form and
@@ -122,6 +122,8 @@ export type ProjectionListScreenDefinition = {
122
122
  export type RecordHeaderSubtitlePart = string | {
123
123
  readonly field: string;
124
124
  readonly navigate?: MetricNavigate;
125
+ /** Formats the raw field value (e.g. `timestamp`); an empty value is still dropped. */
126
+ readonly format?: FormatSpec;
125
127
  };
126
128
  export type RecordHeaderSpec = {
127
129
  readonly title: string;
package/dist/screen.d.ts CHANGED
@@ -115,8 +115,8 @@ export type ScreenNavSugar = {
115
115
  readonly order?: number;
116
116
  };
117
117
  export type ScreenDefinition = EntityListScreenDefinition | ProjectionListScreenDefinition | ProjectionDetailScreenDefinition | DashboardScreenDefinition | EntityEditScreenDefinition | ActionFormScreenDefinition | ConfigEditScreenDefinition | SecretsEditScreenDefinition | SecretMintScreenDefinition | CustomScreenDefinition;
118
- export type { ActionFormFooterAction, ActionFormLoad, ActionFormRedirect, ActionFormScreenDefinition, ActionFormSuccessFact, ActionFormSuccessLink, FormFieldDerivation, FormFieldDerivationWithoutList, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, } from "./screen-action-form.ts";
119
- export type { ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, SecretsEditScreenDefinition, SecretsEditSection, } from "./screen-custom-config.ts";
118
+ export type { ActionFormFooterAction, ActionFormLoad, ActionFormRedirect, ActionFormScreenDefinition, ActionFormSuccessFact, ActionFormSuccessItems, ActionFormSuccessLink, FormFieldDerivation, FormFieldDerivationWithoutList, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, } from "./screen-action-form.ts";
119
+ export type { ConfigEditAction, ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, SecretsEditScreenDefinition, SecretsEditSection, } from "./screen-custom-config.ts";
120
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";
121
121
  export { DASHBOARD_MIN_REFRESH_SECONDS, DASHBOARD_STAT_TONES } from "./screen-dashboard.ts";
122
122
  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";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-types",
3
- "version": "0.405.0",
3
+ "version": "0.409.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>",