@cosmicdrift/kumiko-types 0.397.0 → 0.399.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/dist/fields.d.ts CHANGED
@@ -440,7 +440,8 @@ export type ReferenceFieldDef = {
440
440
  * entity is a readable label. Fully-qualified QN
441
441
  * ("<feature>:query:<short>"), boot-validated against the registered
442
442
  * handlers; result contract `{ rows: { id, label }[] }`, called with
443
- * `{ limit, search? }` like the default list handler. `id` rather than the
443
+ * `{ limit, search? }` like the default list handler, and with `{ limit, ids }`
444
+ * for stored values, which should answer exactly those rows. `id` rather than the
444
445
  * `{ value, label }` of `DashboardFilterDefinition.optionsQuery`, because
445
446
  * the stored value here IS the referenced row's id.
446
447
  *
@@ -636,6 +637,9 @@ export type FileFieldDef = {
636
637
  readonly description?: string;
637
638
  readonly required?: boolean;
638
639
  readonly maxSize?: string;
640
+ /** Anonymous visitors may upload into this field as a pending upload (no entityId); the app
641
+ * binds the file itself. Default off. */
642
+ readonly anonymousUpload?: boolean;
639
643
  readonly accept?: readonly string[];
640
644
  readonly access?: FieldAccess;
641
645
  } & ResolvedPiiFlags;
@@ -644,6 +648,9 @@ export type ImageFieldDef = {
644
648
  readonly description?: string;
645
649
  readonly required?: boolean;
646
650
  readonly maxSize?: string;
651
+ /** Anonymous visitors may upload into this field as a pending upload (no entityId); the app
652
+ * binds the file itself. Default off. */
653
+ readonly anonymousUpload?: boolean;
647
654
  readonly accept?: readonly string[];
648
655
  /** Named derived versions of the uploaded image. The name is the only
649
656
  * thing a caller may ask for — the spec lives here, never in a request,
@@ -658,6 +665,9 @@ export type FilesFieldDef = {
658
665
  readonly type: "files";
659
666
  readonly description?: string;
660
667
  readonly maxSize?: string;
668
+ /** Anonymous visitors may upload into this field as a pending upload (no entityId); the app
669
+ * binds the file itself. Default off. */
670
+ readonly anonymousUpload?: boolean;
661
671
  readonly accept?: readonly string[];
662
672
  readonly maxCount?: number;
663
673
  /** `"list"` (default) shows the picked files as a list with a file picker; `"dropzone"` shows a
@@ -670,6 +680,9 @@ export type ImagesFieldDef = {
670
680
  readonly type: "images";
671
681
  readonly description?: string;
672
682
  readonly maxSize?: string;
683
+ /** Anonymous visitors may upload into this field as a pending upload (no entityId); the app
684
+ * binds the file itself. Default off. */
685
+ readonly anonymousUpload?: boolean;
673
686
  readonly accept?: readonly string[];
674
687
  readonly maxCount?: number;
675
688
  /** `"list"` (default) shows the picked files as a list with a file picker; `"dropzone"` shows a
@@ -0,0 +1,28 @@
1
+ export declare const IN_APP_NOTIFICATION_FEATURE: "channel-in-app";
2
+ export declare const IN_APP_NOTIFICATION_QUERIES: {
3
+ readonly inbox: "channel-in-app:query:inbox";
4
+ readonly unreadCount: "channel-in-app:query:unread-count";
5
+ };
6
+ export declare const IN_APP_NOTIFICATION_WRITES: {
7
+ readonly markRead: "channel-in-app:write:mark-read";
8
+ readonly markAllRead: "channel-in-app:write:mark-all-read";
9
+ };
10
+ export declare const IN_APP_NOTIFICATION_DELIVERED_EVENT: "channel-in-app:event:delivered";
11
+ export type InAppNotificationTarget = {
12
+ readonly screenId: string;
13
+ readonly entityId?: string;
14
+ };
15
+ export type InAppInboxRow = {
16
+ readonly id: number;
17
+ readonly notificationType: string;
18
+ readonly title: string;
19
+ readonly body: string | null;
20
+ readonly isRead: boolean;
21
+ readonly createdAt: string;
22
+ readonly target: InAppNotificationTarget | null;
23
+ };
24
+ export type InAppInboxResult = {
25
+ readonly rows: readonly InAppInboxRow[];
26
+ readonly nextCursor: string | null;
27
+ readonly total: number;
28
+ };
@@ -0,0 +1,12 @@
1
+ // Contract between the channel-in-app feature (server) and the notification bell in the
2
+ // renderer shell. The renderer must not import bundled-features, so both sides share this file.
3
+ export const IN_APP_NOTIFICATION_FEATURE = "channel-in-app";
4
+ export const IN_APP_NOTIFICATION_QUERIES = {
5
+ inbox: "channel-in-app:query:inbox",
6
+ unreadCount: "channel-in-app:query:unread-count",
7
+ };
8
+ export const IN_APP_NOTIFICATION_WRITES = {
9
+ markRead: "channel-in-app:write:mark-read",
10
+ markAllRead: "channel-in-app:write:mark-all-read",
11
+ };
12
+ export const IN_APP_NOTIFICATION_DELIVERED_EVENT = "channel-in-app:event:delivered";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-types",
3
- "version": "0.397.0",
3
+ "version": "0.399.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>",
@@ -42,6 +42,10 @@
42
42
  "types": "./dist/session-cookies.d.ts",
43
43
  "default": "./dist/session-cookies.js"
44
44
  },
45
+ "./in-app-notification-types": {
46
+ "types": "./dist/in-app-notification-types.d.ts",
47
+ "default": "./dist/in-app-notification-types.js"
48
+ },
45
49
  "./target-ref": {
46
50
  "types": "./dist/target-ref.d.ts",
47
51
  "default": "./dist/target-ref.js"
@@ -297,13 +301,13 @@
297
301
  },
298
302
  "devDependencies": {
299
303
  "bun-types": "^1.4.4",
300
- "hono": "^4.13.1",
304
+ "hono": "^4.13.14",
301
305
  "temporal-polyfill": "^0.3.2",
302
306
  "zod": "^4.6.7",
303
307
  "ioredis": "^5.10.1"
304
308
  },
305
309
  "peerDependencies": {
306
- "hono": "^4.13.1",
310
+ "hono": "^4.13.14",
307
311
  "temporal-polyfill": "^0.3.2",
308
312
  "zod": "^4.6.7",
309
313
  "ioredis": "^5.10.1",
@@ -337,6 +341,10 @@
337
341
  "types": "./dist/session-cookies.d.ts",
338
342
  "default": "./dist/session-cookies.js"
339
343
  },
344
+ "./in-app-notification-types": {
345
+ "types": "./dist/in-app-notification-types.d.ts",
346
+ "default": "./dist/in-app-notification-types.js"
347
+ },
340
348
  "./target-ref": {
341
349
  "types": "./dist/target-ref.d.ts",
342
350
  "default": "./dist/target-ref.js"