@graview/guest 0.1.6 → 0.1.8

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 (70) hide show
  1. package/README.md +86 -0
  2. package/dist/build.d.ts +43 -0
  3. package/dist/build.d.ts.map +1 -0
  4. package/dist/build.js +117 -0
  5. package/dist/build.js.map +1 -0
  6. package/dist/channel.d.ts +51 -0
  7. package/dist/channel.d.ts.map +1 -0
  8. package/dist/channel.js +105 -0
  9. package/dist/channel.js.map +1 -0
  10. package/dist/guest.d.ts +2 -22
  11. package/dist/guest.d.ts.map +1 -1
  12. package/dist/guest.js +8 -89
  13. package/dist/guest.js.map +1 -1
  14. package/dist/host/frame.d.ts.map +1 -1
  15. package/dist/host/frame.js +1 -6
  16. package/dist/host/frame.js.map +1 -1
  17. package/dist/host/index.d.ts +3 -0
  18. package/dist/host/index.d.ts.map +1 -1
  19. package/dist/host/index.js.map +1 -1
  20. package/dist/host/kit.d.ts +85 -0
  21. package/dist/host/kit.d.ts.map +1 -0
  22. package/dist/host/kit.js +344 -0
  23. package/dist/host/kit.js.map +1 -0
  24. package/dist/host/nonce.d.ts +3 -0
  25. package/dist/host/nonce.d.ts.map +1 -0
  26. package/dist/host/nonce.js +7 -0
  27. package/dist/host/nonce.js.map +1 -0
  28. package/dist/host/react.d.ts +16 -5
  29. package/dist/host/react.d.ts.map +1 -1
  30. package/dist/host/react.js +31 -3
  31. package/dist/host/react.js.map +1 -1
  32. package/dist/host/session.d.ts +6 -0
  33. package/dist/host/session.d.ts.map +1 -1
  34. package/dist/host/session.js +4 -0
  35. package/dist/host/session.js.map +1 -1
  36. package/dist/host/worker.d.ts +96 -0
  37. package/dist/host/worker.d.ts.map +1 -0
  38. package/dist/host/worker.js +195 -0
  39. package/dist/host/worker.js.map +1 -0
  40. package/dist/index.d.ts +1 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/kit.d.ts +202 -0
  43. package/dist/kit.d.ts.map +1 -0
  44. package/dist/kit.js +69 -0
  45. package/dist/kit.js.map +1 -0
  46. package/dist/protocol.d.ts +48 -1
  47. package/dist/protocol.d.ts.map +1 -1
  48. package/dist/protocol.js +20 -0
  49. package/dist/protocol.js.map +1 -1
  50. package/dist/worker/elements.d.ts +11 -0
  51. package/dist/worker/elements.d.ts.map +1 -0
  52. package/dist/worker/elements.js +28 -0
  53. package/dist/worker/elements.js.map +1 -0
  54. package/dist/worker/harden.d.ts +39 -0
  55. package/dist/worker/harden.d.ts.map +1 -0
  56. package/dist/worker/harden.js +175 -0
  57. package/dist/worker/harden.js.map +1 -0
  58. package/dist/worker/index.d.ts +32 -0
  59. package/dist/worker/index.d.ts.map +1 -0
  60. package/dist/worker/index.js +92 -0
  61. package/dist/worker/index.js.map +1 -0
  62. package/dist/worker/listeners.d.ts +19 -0
  63. package/dist/worker/listeners.d.ts.map +1 -0
  64. package/dist/worker/listeners.js +157 -0
  65. package/dist/worker/listeners.js.map +1 -0
  66. package/dist/worker/natives.d.ts +7 -0
  67. package/dist/worker/natives.d.ts.map +1 -0
  68. package/dist/worker/natives.js +12 -0
  69. package/dist/worker/natives.js.map +1 -0
  70. package/package.json +30 -7
@@ -1 +1 @@
1
- {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/host/frame.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/host/frame.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAC5G,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAA0E,MAAM,cAAc,CAAC;AA6B3I;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAsB,OAAoB,EAAE,OAAiC;IACzG,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAY,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACrD,iHAAiH;IACjH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAC1B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/B,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAEzB,MAAM,KAAK,GAAe,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACjE,iGAAiG;IACjG,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,OAA8B,CAAC;IACnC,IAAI,IAA6B,CAAC;IAClC,IAAI,OAAO,GAAe,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;QAC1B,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/C,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/C,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/C,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,GAAG,EAAE;QACf,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,OAAO,EAAE,CAAC;QACnB,IAAI,EAAE,KAAK,EAAE,CAAC;QACd,OAAO,GAAG,SAAS,CAAC;QACpB,IAAI,GAAG,SAAS,CAAC;QACjB,OAAO,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACnD,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAmB,EAAE,EAAE;QACxC,4FAA4F;QAC5F,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa;YAAE,OAAO;QAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,aAAa,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;YACxE,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,GAAG,EAAE,CAAC;QACN,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK;YACL,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC;YAC7E,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,OAAO;SACR,CAAC,CAAC;QACH,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE,EAAE;YACpC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,KAAK,EAAE,CAAC;QACV,CAAC,CAAC;QACF,MAAM,KAAK,GAAc,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QACxG;;;;WAIG;QACH,MAAM,CAAC,aAAc,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9C,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE5B,OAAO;QACL,MAAM;QACN,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE;QAC7B,IAAI,KAAK;YACP,KAAK,EAAE,CAAC;YACR,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO;YACL,GAAG,EAAE,CAAC;YACN,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -2,6 +2,9 @@ export { mountGuestView } from "./frame.js";
2
2
  export type { GuestFrame, MountGuestViewOptions } from "./frame.js";
3
3
  export { createGuestHost, createGuestLimiter } from "./session.js";
4
4
  export type { GuestHost, GuestHostOptions, GuestLimiter, GuestLimits, GuestStats, GuestViewInput } from "./session.js";
5
+ export type { GuestWorker, GuestWorkerFailure, GuestWorkerSource, MountGuestWorkerOptions } from "./worker.js";
6
+ export type { KitLinks, KitRefusal, KitRefusalReason, KitRenderer, KitRendererOptions } from "./kit.js";
7
+ export type { GuestKitElement, Kit, KitComponent, KitEvent, KitProperty, KitPropertyType, KitTone } from "../kit.js";
5
8
  export { guestView } from "./react.js";
6
9
  export type { GuestViewOptions } from "./react.js";
7
10
  export { GUEST_PROTOCOL, GUEST_SANDBOX, OPAQUE_ORIGIN } from "../protocol.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACvH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAMvH,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC/G,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACxG,YAAY,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAUnE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { type Kit, type KitProperty } from "../kit.js";
2
+ /** Why a part of what a guest drew was not drawn. */
3
+ export type KitRefusalReason =
4
+ /** An element outside the kit. */
5
+ "element"
6
+ /** A property its component does not declare. */
7
+ | "property"
8
+ /** An event its component does not declare. */
9
+ | "event"
10
+ /** A raw attribute: a kit component has properties, never attributes. */
11
+ | "attribute"
12
+ /** A value of the wrong type for its declaration. */
13
+ | "value"
14
+ /** A `url` that is not an absolute `https:` URL, or is not on an origin the host lists (`links.origins`). */
15
+ | "url"
16
+ /** A child its component may not hold. */
17
+ | "child"
18
+ /** A record the format does not know. */
19
+ | "record"
20
+ /** More nodes than the guest is allowed. */
21
+ | "budget";
22
+ export interface KitRefusal {
23
+ readonly reason: KitRefusalReason;
24
+ /** The element it was on or was, when there was one. */
25
+ readonly element?: string;
26
+ /** The property, event or attribute, when it was one. */
27
+ readonly name?: string;
28
+ }
29
+ /** What a host lets a guest's links go to. */
30
+ export interface KitLinks {
31
+ /**
32
+ * The only origins a link may go to (`https://recipes.example`); a link
33
+ * anywhere else is drawn with no `href`, as a non-`https:` one is. An
34
+ * entry that is not an `https:` URL is ignored, and an empty list draws
35
+ * no link at all. Without it, any `https:` address is drawn.
36
+ */
37
+ readonly origins: readonly string[];
38
+ }
39
+ export interface KitRendererOptions {
40
+ /** The kit to draw from. `GUEST_KIT` by default. */
41
+ readonly kit?: Kit;
42
+ /** Where the guest's links may go. Any `https:` address by default. */
43
+ readonly links?: KitLinks;
44
+ /** The viewer raised a declared event on something the guest drew: call its listener. */
45
+ readonly onEvent: (listener: number, detail?: string) => void;
46
+ /** The most nodes a guest may have drawn at once. 2 000 by default. */
47
+ readonly maxNodes?: number;
48
+ /** The guest went past `maxNodes`. Called once. */
49
+ readonly onOverBudget?: () => void;
50
+ }
51
+ export interface KitRenderer {
52
+ /** Draw one batch of mutation records. */
53
+ apply(records: unknown): void;
54
+ /** What was refused, oldest first (the last 200). */
55
+ readonly refused: readonly KitRefusal[];
56
+ /** How many nodes are drawn. */
57
+ readonly size: number;
58
+ /** How many of the guest's listeners are attached to what is drawn: each goes with its node, or when the guest takes it away. */
59
+ readonly listening: number;
60
+ dispose(): void;
61
+ }
62
+ /** The host attribute a property is drawn as. */
63
+ export declare function hostAttribute(name: string, property: KitProperty): string;
64
+ /**
65
+ * A value as the host draws it, or a refusal: exactly the declared type —
66
+ * a string for `string`, a finite number for `number`, a boolean for
67
+ * `boolean`, one of the list for `oneOf` — and for a `url`, a string that
68
+ * parses as an absolute `https:` URL with a host. `null` clears it.
69
+ */
70
+ export declare function kitValue(property: KitProperty, value: unknown): {
71
+ readonly ok: true;
72
+ readonly value: string | boolean | null;
73
+ } | {
74
+ readonly ok: false;
75
+ readonly reason: "value" | "url";
76
+ };
77
+ /**
78
+ * DRAW A WORKER GUEST'S TREE into `into`, from the kit alone. Every node
79
+ * the guest sends has a place here, so its indices stay true; a refused one
80
+ * holds its place as an empty comment and nothing under it is drawn.
81
+ */
82
+ export declare function createKitRenderer(into: HTMLElement, options: KitRendererOptions): KitRenderer;
83
+ /** The stylesheet the kit is drawn with: classes over the theme's tokens, and nothing a guest can reach. */
84
+ export declare const GUEST_KIT_CSS = "\n.graview-guest { display: flex; flex-direction: column; gap: 8px; min-width: 0; color: var(--graview-ink, inherit); font: inherit; }\n.graview-guest-card { display: flex; flex-direction: column; gap: 6px; padding: 12px; border: 1px solid var(--graview-edge, #d0d0d0); border-radius: 10px; background: var(--graview-panel, transparent); }\n.graview-guest-group { display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n.graview-guest-group[data-gv-direction=\"row\"] { flex-direction: row; flex-wrap: wrap; align-items: center; }\n.graview-guest-title { font-weight: 600; font-size: 1rem; overflow-wrap: anywhere; }\n.graview-guest-text { margin: 0; font-size: 0.875rem; line-height: 1.45; overflow-wrap: anywhere; }\n.graview-guest-badge { align-self: flex-start; padding: 1px 8px; border: 1px solid currentColor; border-radius: 999px; font-size: 0.8125rem; font-weight: 600; }\n.graview-guest-field { font-size: 0.875rem; overflow-wrap: anywhere; }\n.graview-guest-field[data-gv-label]::before { content: attr(data-gv-label) \" \"; color: var(--graview-ink-muted, inherit); }\n.graview-guest-progress { width: 100%; }\n.graview-guest-divider { width: 100%; margin: 2px 0; border: 0; border-top: 1px solid var(--graview-edge, #d0d0d0); }\n.graview-guest-link { color: var(--graview-accent, inherit); text-decoration: underline; }\n.graview-guest-button { align-self: flex-start; font: inherit; padding: 4px 12px; border-radius: 8px; border: 1px solid var(--graview-edge, #d0d0d0); background: var(--graview-panel, transparent); color: inherit; cursor: pointer; }\n.graview-guest-input { font: inherit; padding: 4px 8px; border-radius: 6px; border: 1px solid var(--graview-edge, #d0d0d0); }\n.graview-guest [data-gv-tone=\"good\"] { color: var(--graview-good, inherit); }\n.graview-guest [data-gv-tone=\"bad\"] { color: var(--graview-bad, inherit); }\n.graview-guest [data-gv-tone=\"warn\"] { color: var(--graview-warn, inherit); }\n.graview-guest [data-gv-tone=\"accent\"] { color: var(--graview-accent, inherit); }\n.graview-guest [data-gv-tone=\"neutral\"] { color: var(--graview-ink-muted, inherit); }\n";
85
+ //# sourceMappingURL=kit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../src/host/kit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkG,KAAK,GAAG,EAAqB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAyB1K,qDAAqD;AACrD,MAAM,MAAM,gBAAgB;AAC1B,kCAAkC;AAChC,SAAS;AACX,iDAAiD;GAC/C,UAAU;AACZ,+CAA+C;GAC7C,OAAO;AACT,yEAAyE;GACvE,WAAW;AACb,qDAAqD;GACnD,OAAO;AACT,6GAA6G;GAC3G,KAAK;AACP,0CAA0C;GACxC,OAAO;AACT,yCAAyC;GACvC,QAAQ;AACV,4CAA4C;GAC1C,QAAQ,CAAC;AAEb,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,wDAAwD;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,8CAA8C;AAC9C,MAAM,WAAW,QAAQ;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IACnB,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IAC1B,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iIAAiI;IACjI,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,IAAI,IAAI,CAAC;CACjB;AAiBD,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,MAAM,CAEzE;AAKD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAAA;CAAE,CAuBzL;AAmBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAiN7F;AAED,4GAA4G;AAC5G,eAAO,MAAM,aAAa,2kEAoBzB,CAAC"}
@@ -0,0 +1,344 @@
1
+ import { GUEST_KIT, KIT_HOST_ATTRIBUTES, KIT_HOST_EVENTS, KIT_HOST_TAGS, KIT_LINK_TARGETS, KIT_MAX_TEXT } from "../kit.js";
2
+ /*
3
+ * THE HOST'S HALF OF THE KIT (FR-68, FR-69): Remote DOM mutation records
4
+ * from a worker guest, drawn into the host's own document — only a
5
+ * component the kit declares, only the properties and events it declares.
6
+ * Anything else is refused: not drawn, and written down.
7
+ *
8
+ * The record format is Remote DOM's (`@remote-dom/core` constants, held to
9
+ * these by a test), read here without the library, so a host that draws a
10
+ * worker guest carries none of it.
11
+ */
12
+ const INSERT_CHILD = 0;
13
+ const REMOVE_CHILD = 1;
14
+ const UPDATE_TEXT = 2;
15
+ const UPDATE_PROPERTY = 3;
16
+ const PROPERTY = 1;
17
+ const ATTRIBUTE = 2;
18
+ const EVENT_LISTENER = 3;
19
+ const ELEMENT = 1;
20
+ const TEXT = 3;
21
+ const COMMENT = 8;
22
+ const ROOT_ID = "~";
23
+ const own = (object, key) => Object.prototype.hasOwnProperty.call(object, key);
24
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
25
+ /** The host attribute a property is drawn as. */
26
+ export function hostAttribute(name, property) {
27
+ return property.type === "url" ? "href" : (property.as ?? `data-gv-${name.toLowerCase()}`);
28
+ }
29
+ /** The longest string property, in characters. */
30
+ const MAX_PROPERTY = 2_000;
31
+ /**
32
+ * A value as the host draws it, or a refusal: exactly the declared type —
33
+ * a string for `string`, a finite number for `number`, a boolean for
34
+ * `boolean`, one of the list for `oneOf` — and for a `url`, a string that
35
+ * parses as an absolute `https:` URL with a host. `null` clears it.
36
+ */
37
+ export function kitValue(property, value) {
38
+ if (value === null || value === undefined)
39
+ return { ok: true, value: null };
40
+ const type = property.type;
41
+ if (type === "boolean")
42
+ return typeof value === "boolean" ? { ok: true, value } : { ok: false, reason: "value" };
43
+ if (type === "number")
44
+ return typeof value === "number" && Number.isFinite(value) ? { ok: true, value: String(value) } : { ok: false, reason: "value" };
45
+ if (typeof value !== "string" || value.length > MAX_PROPERTY)
46
+ return { ok: false, reason: type === "url" ? "url" : "value" };
47
+ if (typeof type === "object")
48
+ return type.oneOf.includes(value) ? { ok: true, value } : { ok: false, reason: "value" };
49
+ if (type === "url") {
50
+ /*
51
+ * Absolute, https:, with a host, and said exactly as it parses: no
52
+ * relative path the page's own base would resolve, no scheme-relative
53
+ * `//`, no `javascript:` behind a space or in capitals.
54
+ */
55
+ let parsed;
56
+ try {
57
+ parsed = new URL(value);
58
+ }
59
+ catch {
60
+ return { ok: false, reason: "url" };
61
+ }
62
+ if (parsed.protocol !== "https:" || parsed.hostname === "" || !/^https:\/\//i.test(value))
63
+ return { ok: false, reason: "url" };
64
+ return { ok: true, value: parsed.href };
65
+ }
66
+ return { ok: true, value };
67
+ }
68
+ /**
69
+ * Whether a kit's component draws only what the closed lists allow: a kit
70
+ * is held to them as a guest is. A `url` is drawn only on a link, so
71
+ * nothing else a guest draws is navigable, and a link opens only where
72
+ * `KIT_LINK_TARGETS` allows.
73
+ */
74
+ function sound(component) {
75
+ const link = component.host === "a";
76
+ return (KIT_HOST_TAGS.includes(component.host) &&
77
+ (component.target === undefined || (link && KIT_LINK_TARGETS.includes(component.target))) &&
78
+ Object.values(component.properties).every((property) => property.type !== "url" || link) &&
79
+ Object.values(component.properties).every((property) => property.as === undefined || (property.type !== "url" && KIT_HOST_ATTRIBUTES.includes(property.as))) &&
80
+ Object.values(component.events).every((event) => KIT_HOST_EVENTS.includes(event.from)));
81
+ }
82
+ /**
83
+ * DRAW A WORKER GUEST'S TREE into `into`, from the kit alone. Every node
84
+ * the guest sends has a place here, so its indices stay true; a refused one
85
+ * holds its place as an empty comment and nothing under it is drawn.
86
+ */
87
+ export function createKitRenderer(into, options) {
88
+ const kit = options.kit ?? GUEST_KIT;
89
+ const maxNodes = options.maxNodes ?? 2_000;
90
+ const document = into.ownerDocument;
91
+ const refused = [];
92
+ const byId = new Map();
93
+ const root = { dom: into, name: ROOT_ID, component: { host: "div", properties: {}, events: {}, children: "any" }, children: [], listeners: new Map(), id: ROOT_ID };
94
+ byId.set(ROOT_ID, root);
95
+ /* The origins a link may go to, as the URL parser says them; an entry that is not https: is no origin. */
96
+ const origins = options.links
97
+ ? new Set(options.links.origins.flatMap((origin) => {
98
+ try {
99
+ const parsed = new URL(origin);
100
+ return parsed.protocol === "https:" && parsed.hostname !== "" ? [parsed.origin] : [];
101
+ }
102
+ catch {
103
+ return [];
104
+ }
105
+ }))
106
+ : undefined;
107
+ let size = 0;
108
+ let listening = 0;
109
+ let over = false;
110
+ const refuse = (refusal) => {
111
+ refused.push(refusal);
112
+ if (refused.length > 200)
113
+ refused.shift();
114
+ };
115
+ const placeholder = () => ({ dom: document.createComment(""), children: [], refused: true, listeners: new Map() });
116
+ const setProperty = (drawn, name, value) => {
117
+ const component = drawn.component;
118
+ if (!own(component.properties, name))
119
+ return refuse({ reason: "property", element: drawn.name, name });
120
+ const property = component.properties[name];
121
+ const valued = kitValue(property, value);
122
+ /* An https: address outside the host's origins is drawn as a bad one is: with no href. */
123
+ const judged = valued.ok && property.type === "url" && origins && typeof valued.value === "string" && !origins.has(new URL(valued.value).origin) ? { ok: false, reason: "url" } : valued;
124
+ const element = drawn.dom;
125
+ const attribute = hostAttribute(name, property);
126
+ if (!judged.ok) {
127
+ element.removeAttribute(attribute);
128
+ return refuse({ reason: judged.reason, element: drawn.name, name });
129
+ }
130
+ const said = judged.value;
131
+ if (said === null || said === false)
132
+ element.removeAttribute(attribute);
133
+ else
134
+ element.setAttribute(attribute, said === true ? "" : said);
135
+ /* What the host element holds live, as well as what it says. */
136
+ if (attribute === "value" && "value" in element)
137
+ element.value = typeof said === "string" ? said : "";
138
+ if (attribute === "disabled" && "disabled" in element)
139
+ element.disabled = said !== null && said !== false;
140
+ };
141
+ const setListener = (drawn, name, value) => {
142
+ const component = drawn.component;
143
+ if (!own(component.events, name))
144
+ return refuse({ reason: "event", element: drawn.name, name });
145
+ const before = drawn.listeners.get(name);
146
+ if (before) {
147
+ before();
148
+ drawn.listeners.delete(name);
149
+ listening -= 1;
150
+ }
151
+ if (value === null || value === undefined)
152
+ return;
153
+ if (!isRecord(value) || typeof value["listener"] !== "number")
154
+ return refuse({ reason: "value", element: drawn.name, name });
155
+ const listener = value["listener"];
156
+ const event = component.events[name];
157
+ const element = drawn.dom;
158
+ const raised = () => options.onEvent(listener, event.detail === "value" ? String(element.value ?? "") : undefined);
159
+ element.addEventListener(event.from, raised);
160
+ drawn.listeners.set(name, () => element.removeEventListener(event.from, raised));
161
+ listening += 1;
162
+ };
163
+ const forget = (drawn) => {
164
+ if (drawn.refused)
165
+ return;
166
+ size -= 1;
167
+ if (drawn.id !== undefined)
168
+ byId.delete(drawn.id);
169
+ for (const off of drawn.listeners.values())
170
+ off();
171
+ listening -= drawn.listeners.size;
172
+ drawn.listeners.clear();
173
+ for (const child of drawn.children)
174
+ forget(child);
175
+ };
176
+ const build = (raw, parent) => {
177
+ if (!isRecord(raw) || typeof raw["id"] !== "string" || byId.has(raw["id"])) {
178
+ refuse({ reason: "record" });
179
+ return placeholder();
180
+ }
181
+ if (size >= maxNodes) {
182
+ refuse({ reason: "budget" });
183
+ if (!over) {
184
+ over = true;
185
+ options.onOverBudget?.();
186
+ }
187
+ return placeholder();
188
+ }
189
+ const id = raw["id"];
190
+ const may = parent.component.children;
191
+ if (raw["type"] === COMMENT)
192
+ return placeholder();
193
+ if (raw["type"] === TEXT) {
194
+ if (may === "none") {
195
+ refuse({ reason: "child", element: parent.name });
196
+ return placeholder();
197
+ }
198
+ const drawn = { dom: document.createTextNode(String(raw["data"] ?? "").slice(0, KIT_MAX_TEXT)), children: [], text: true, listeners: new Map(), id };
199
+ byId.set(id, drawn);
200
+ size += 1;
201
+ return drawn;
202
+ }
203
+ if (raw["type"] !== ELEMENT) {
204
+ refuse({ reason: "record" });
205
+ return placeholder();
206
+ }
207
+ const name = String(raw["element"]);
208
+ if (!own(kit, name) || !sound(kit[name])) {
209
+ refuse({ reason: "element", element: name });
210
+ return placeholder();
211
+ }
212
+ if (may !== "any") {
213
+ refuse({ reason: "child", element: name });
214
+ return placeholder();
215
+ }
216
+ const component = kit[name];
217
+ const element = document.createElement(component.host);
218
+ element.setAttribute("data-gv", name.replace(/^gv-/, ""));
219
+ element.className = `graview-guest-${name.replace(/^gv-/, "")}`;
220
+ if (component.host === "a") {
221
+ element.setAttribute("rel", "noopener noreferrer");
222
+ element.setAttribute("target", component.target ?? "_blank");
223
+ element.setAttribute("referrerpolicy", "no-referrer");
224
+ }
225
+ if (component.host === "button")
226
+ element.setAttribute("type", "button");
227
+ const drawn = { dom: element, name, component, children: [], listeners: new Map(), id };
228
+ byId.set(id, drawn);
229
+ size += 1;
230
+ if (isRecord(raw["properties"]))
231
+ for (const [key, value] of Object.entries(raw["properties"]))
232
+ setProperty(drawn, key, value);
233
+ if (isRecord(raw["attributes"]))
234
+ for (const key of Object.keys(raw["attributes"]))
235
+ refuse({ reason: "attribute", element: name, name: key });
236
+ if (isRecord(raw["eventListeners"]))
237
+ for (const [key, value] of Object.entries(raw["eventListeners"]))
238
+ setListener(drawn, key, value);
239
+ if (Array.isArray(raw["children"])) {
240
+ for (const child of raw["children"]) {
241
+ const built = build(child, drawn);
242
+ drawn.children.push(built);
243
+ element.appendChild(built.dom);
244
+ }
245
+ }
246
+ return drawn;
247
+ };
248
+ const one = (record) => {
249
+ if (!Array.isArray(record))
250
+ return refuse({ reason: "record" });
251
+ const [type, id] = record;
252
+ const target = typeof id === "string" ? byId.get(id) : undefined;
253
+ if (!target)
254
+ return refuse({ reason: "record" });
255
+ switch (type) {
256
+ case INSERT_CHILD: {
257
+ if (target.text)
258
+ return refuse({ reason: "record" });
259
+ const index = Number(record[3]);
260
+ const at = Number.isInteger(index) && index >= 0 && index <= target.children.length ? index : target.children.length;
261
+ const built = build(record[2], target);
262
+ target.dom.insertBefore(built.dom, target.children[at]?.dom ?? null);
263
+ target.children.splice(at, 0, built);
264
+ return;
265
+ }
266
+ case REMOVE_CHILD: {
267
+ const index = Number(record[2]);
268
+ const gone = target.children[index];
269
+ if (!gone)
270
+ return refuse({ reason: "record" });
271
+ target.children.splice(index, 1);
272
+ gone.dom.parentNode?.removeChild(gone.dom);
273
+ forget(gone);
274
+ return;
275
+ }
276
+ case UPDATE_TEXT:
277
+ if (!target.text)
278
+ return refuse({ reason: "record" });
279
+ target.dom.data = String(record[2] ?? "").slice(0, KIT_MAX_TEXT);
280
+ return;
281
+ case UPDATE_PROPERTY: {
282
+ if (target === root || target.text)
283
+ return refuse({ reason: "record" });
284
+ const name = String(record[2]);
285
+ const kind = record[4] ?? PROPERTY;
286
+ if (kind === PROPERTY)
287
+ return setProperty(target, name, record[3]);
288
+ if (kind === EVENT_LISTENER)
289
+ return setListener(target, name, record[3]);
290
+ if (kind === ATTRIBUTE)
291
+ return refuse({ reason: "attribute", element: target.name, name });
292
+ return refuse({ reason: "record" });
293
+ }
294
+ default:
295
+ return refuse({ reason: "record" });
296
+ }
297
+ };
298
+ return {
299
+ apply(records) {
300
+ if (!Array.isArray(records))
301
+ return refuse({ reason: "record" });
302
+ for (const record of records)
303
+ one(record);
304
+ },
305
+ get refused() {
306
+ return refused;
307
+ },
308
+ get size() {
309
+ return size;
310
+ },
311
+ get listening() {
312
+ return listening;
313
+ },
314
+ dispose() {
315
+ for (const child of root.children)
316
+ forget(child);
317
+ root.children.length = 0;
318
+ into.replaceChildren();
319
+ },
320
+ };
321
+ }
322
+ /** The stylesheet the kit is drawn with: classes over the theme's tokens, and nothing a guest can reach. */
323
+ export const GUEST_KIT_CSS = `
324
+ .graview-guest { display: flex; flex-direction: column; gap: 8px; min-width: 0; color: var(--graview-ink, inherit); font: inherit; }
325
+ .graview-guest-card { display: flex; flex-direction: column; gap: 6px; padding: 12px; border: 1px solid var(--graview-edge, #d0d0d0); border-radius: 10px; background: var(--graview-panel, transparent); }
326
+ .graview-guest-group { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
327
+ .graview-guest-group[data-gv-direction="row"] { flex-direction: row; flex-wrap: wrap; align-items: center; }
328
+ .graview-guest-title { font-weight: 600; font-size: 1rem; overflow-wrap: anywhere; }
329
+ .graview-guest-text { margin: 0; font-size: 0.875rem; line-height: 1.45; overflow-wrap: anywhere; }
330
+ .graview-guest-badge { align-self: flex-start; padding: 1px 8px; border: 1px solid currentColor; border-radius: 999px; font-size: 0.8125rem; font-weight: 600; }
331
+ .graview-guest-field { font-size: 0.875rem; overflow-wrap: anywhere; }
332
+ .graview-guest-field[data-gv-label]::before { content: attr(data-gv-label) " "; color: var(--graview-ink-muted, inherit); }
333
+ .graview-guest-progress { width: 100%; }
334
+ .graview-guest-divider { width: 100%; margin: 2px 0; border: 0; border-top: 1px solid var(--graview-edge, #d0d0d0); }
335
+ .graview-guest-link { color: var(--graview-accent, inherit); text-decoration: underline; }
336
+ .graview-guest-button { align-self: flex-start; font: inherit; padding: 4px 12px; border-radius: 8px; border: 1px solid var(--graview-edge, #d0d0d0); background: var(--graview-panel, transparent); color: inherit; cursor: pointer; }
337
+ .graview-guest-input { font: inherit; padding: 4px 8px; border-radius: 6px; border: 1px solid var(--graview-edge, #d0d0d0); }
338
+ .graview-guest [data-gv-tone="good"] { color: var(--graview-good, inherit); }
339
+ .graview-guest [data-gv-tone="bad"] { color: var(--graview-bad, inherit); }
340
+ .graview-guest [data-gv-tone="warn"] { color: var(--graview-warn, inherit); }
341
+ .graview-guest [data-gv-tone="accent"] { color: var(--graview-accent, inherit); }
342
+ .graview-guest [data-gv-tone="neutral"] { color: var(--graview-ink-muted, inherit); }
343
+ `;
344
+ //# sourceMappingURL=kit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kit.js","sourceRoot":"","sources":["../../src/host/kit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** A nonce no other guest and no other load of this one shares. */
2
+ export declare function mintNonce(): string;
3
+ //# sourceMappingURL=nonce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonce.d.ts","sourceRoot":"","sources":["../../src/host/nonce.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,wBAAgB,SAAS,IAAI,MAAM,CAIlC"}
@@ -0,0 +1,7 @@
1
+ /** A nonce no other guest and no other load of this one shares. */
2
+ export function mintNonce() {
3
+ const bytes = new Uint8Array(16);
4
+ globalThis.crypto.getRandomValues(bytes);
5
+ return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
6
+ }
7
+ //# sourceMappingURL=nonce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonce.js","sourceRoot":"","sources":["../../src/host/nonce.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,UAAU,SAAS;IACvB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACjC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClF,CAAC"}
@@ -1,14 +1,24 @@
1
1
  import type { AnySchema } from "@graview/core";
2
2
  import { type ViewComponent } from "@graview/react/provider";
3
3
  import type { GuestLimits } from "./session.js";
4
+ import type { KitLinks } from "./kit.js";
5
+ import type { GuestWorkerSource } from "./worker.js";
4
6
  export interface GuestViewOptions {
5
- /** Where the guest's code is served. */
6
- readonly url: string;
7
+ /** Where the guest's code is served, for a guest in a frame. */
8
+ readonly url?: string;
9
+ /**
10
+ * The guest's code, for a guest in a worker (FR-68): a `blob:` URL or the
11
+ * script's text. Drawn from the component kit in the host's own page; the
12
+ * worker's half of the host is fetched only when a worker view is drawn.
13
+ */
14
+ readonly worker?: GuestWorkerSource;
7
15
  /** The view's name: what the rail says an act came through. */
8
16
  readonly name: string;
9
17
  /** Where the frame first stands before the guest asks for a height. 160px by default. */
10
18
  readonly height?: number;
11
19
  readonly limits?: GuestLimits;
20
+ /** Where a worker guest's links may go (`mountGuestWorker`'s `links`). Any `https:` address by default. */
21
+ readonly links?: KitLinks;
12
22
  }
13
23
  /**
14
24
  * A VIEW SOMEBODY ELSE WROTE, registered like any other:
@@ -16,9 +26,10 @@ export interface GuestViewOptions {
16
26
  * views.register("recipe", { fidelity: "full", cardinality: "one" },
17
27
  * guestView({ url: "https://recipes.example/card.html", name: "recipe-card" }));
18
28
  *
19
- * It draws an iframe sandboxed to scripts alone, pushes the view's props as
20
- * the seat at the keyboard sees them, applies what the guest asks for as
21
- * that seat, and goes to a record by selecting it.
29
+ * It draws an iframe sandboxed to scripts alone — or, given `worker`
30
+ * rather than `url`, a classic worker drawing the component kit — pushes
31
+ * the view's props as the seat at the keyboard sees them, applies what the
32
+ * guest asks for as that seat, and goes to a record by selecting it.
22
33
  */
23
34
  export declare function guestView(options: GuestViewOptions): ViewComponent<AnySchema>;
24
35
  //# sourceMappingURL=react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/host/react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAc,KAAK,aAAa,EAAkB,MAAM,yBAAyB,CAAC;AAGzF,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAcD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,CAAC,SAAS,CAAC,CA+B7E"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/host/react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAc,KAAK,aAAa,EAAkB,MAAM,yBAAyB,CAAC;AAGzF,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,2GAA2G;IAC3G,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAcD;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,CAAC,SAAS,CAAC,CAwD7E"}
@@ -19,11 +19,14 @@ const inputOf = (props) => ({
19
19
  * views.register("recipe", { fidelity: "full", cardinality: "one" },
20
20
  * guestView({ url: "https://recipes.example/card.html", name: "recipe-card" }));
21
21
  *
22
- * It draws an iframe sandboxed to scripts alone, pushes the view's props as
23
- * the seat at the keyboard sees them, applies what the guest asks for as
24
- * that seat, and goes to a record by selecting it.
22
+ * It draws an iframe sandboxed to scripts alone — or, given `worker`
23
+ * rather than `url`, a classic worker drawing the component kit — pushes
24
+ * the view's props as the seat at the keyboard sees them, applies what the
25
+ * guest asks for as that seat, and goes to a record by selecting it.
25
26
  */
26
27
  export function guestView(options) {
28
+ if ((options.url === undefined) === (options.worker === undefined))
29
+ throw new Error(`guestView "${options.name}" takes a url or a worker, one of the two`);
27
30
  function GuestView(props) {
28
31
  const { store, principal, setSelection } = useGraview();
29
32
  const holder = useRef(null);
@@ -34,6 +37,31 @@ export function guestView(options) {
34
37
  const element = holder.current;
35
38
  if (!element)
36
39
  return;
40
+ const worker = options.worker;
41
+ if (worker) {
42
+ let gone = false;
43
+ let drawn;
44
+ void import("./worker.js").then(({ mountGuestWorker }) => {
45
+ if (gone)
46
+ return;
47
+ drawn = mountGuestWorker(element, {
48
+ worker,
49
+ view: options.name,
50
+ store,
51
+ principal,
52
+ input: () => inputOf(latest.current),
53
+ onNavigate: (id) => setSelection([id]),
54
+ ...(options.limits ? { limits: options.limits } : {}),
55
+ ...(options.links ? { links: options.links } : {}),
56
+ });
57
+ frame.current = drawn;
58
+ });
59
+ return () => {
60
+ gone = true;
61
+ drawn?.dispose();
62
+ frame.current = null;
63
+ };
64
+ }
37
65
  const mounted = mountGuestView(element, {
38
66
  url: options.url,
39
67
  view: options.name,