@ghia/native 0.0.0 → 0.11.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 (211) hide show
  1. package/LICENSE +201 -0
  2. package/browser.mjs +7 -0
  3. package/dist/aria.d.ts +72 -0
  4. package/dist/aria.d.ts.map +1 -0
  5. package/dist/aria.js +2 -0
  6. package/dist/aria.js.map +1 -0
  7. package/dist/automation/client.d.ts +243 -0
  8. package/dist/automation/client.d.ts.map +1 -0
  9. package/dist/automation/client.js +801 -0
  10. package/dist/automation/client.js.map +1 -0
  11. package/dist/automation/index.d.ts +5 -0
  12. package/dist/automation/index.d.ts.map +1 -0
  13. package/dist/automation/index.js +4 -0
  14. package/dist/automation/index.js.map +1 -0
  15. package/dist/automation/protocol.d.ts +309 -0
  16. package/dist/automation/protocol.d.ts.map +1 -0
  17. package/dist/automation/protocol.js +320 -0
  18. package/dist/automation/protocol.js.map +1 -0
  19. package/dist/blob-images.d.ts +32 -0
  20. package/dist/blob-images.d.ts.map +1 -0
  21. package/dist/blob-images.js +55 -0
  22. package/dist/blob-images.js.map +1 -0
  23. package/dist/bounds.d.ts +61 -0
  24. package/dist/bounds.d.ts.map +1 -0
  25. package/dist/bounds.js +85 -0
  26. package/dist/bounds.js.map +1 -0
  27. package/dist/clipboard-global.d.ts +11 -0
  28. package/dist/clipboard-global.d.ts.map +1 -0
  29. package/dist/clipboard-global.js +2 -0
  30. package/dist/clipboard-global.js.map +1 -0
  31. package/dist/clipboard.d.ts +19 -0
  32. package/dist/clipboard.d.ts.map +1 -0
  33. package/dist/clipboard.js +41 -0
  34. package/dist/clipboard.js.map +1 -0
  35. package/dist/cpu-throttle.d.ts +6 -0
  36. package/dist/cpu-throttle.d.ts.map +1 -0
  37. package/dist/cpu-throttle.js +42 -0
  38. package/dist/cpu-throttle.js.map +1 -0
  39. package/dist/events/data-transfer.d.ts +23 -0
  40. package/dist/events/data-transfer.d.ts.map +1 -0
  41. package/dist/events/data-transfer.js +97 -0
  42. package/dist/events/data-transfer.js.map +1 -0
  43. package/dist/events/dispatch.d.ts +144 -0
  44. package/dist/events/dispatch.d.ts.map +1 -0
  45. package/dist/events/dispatch.js +241 -0
  46. package/dist/events/dispatch.js.map +1 -0
  47. package/dist/events/drag.d.ts +21 -0
  48. package/dist/events/drag.d.ts.map +1 -0
  49. package/dist/events/drag.js +111 -0
  50. package/dist/events/drag.js.map +1 -0
  51. package/dist/events/event-props.d.ts +19 -0
  52. package/dist/events/event-props.d.ts.map +1 -0
  53. package/dist/events/event-props.js +104 -0
  54. package/dist/events/event-props.js.map +1 -0
  55. package/dist/events/keyboard-defaults.d.ts +18 -0
  56. package/dist/events/keyboard-defaults.d.ts.map +1 -0
  57. package/dist/events/keyboard-defaults.js +121 -0
  58. package/dist/events/keyboard-defaults.js.map +1 -0
  59. package/dist/events/listeners.d.ts +18 -0
  60. package/dist/events/listeners.d.ts.map +1 -0
  61. package/dist/events/listeners.js +49 -0
  62. package/dist/events/listeners.js.map +1 -0
  63. package/dist/events/route.d.ts +17 -0
  64. package/dist/events/route.d.ts.map +1 -0
  65. package/dist/events/route.js +36 -0
  66. package/dist/events/route.js.map +1 -0
  67. package/dist/events/types.d.ts +269 -0
  68. package/dist/events/types.d.ts.map +1 -0
  69. package/dist/events/types.js +2 -0
  70. package/dist/events/types.js.map +1 -0
  71. package/dist/events/window-target.d.ts +120 -0
  72. package/dist/events/window-target.d.ts.map +1 -0
  73. package/dist/events/window-target.js +311 -0
  74. package/dist/events/window-target.js.map +1 -0
  75. package/dist/eyedropper.d.ts +33 -0
  76. package/dist/eyedropper.d.ts.map +1 -0
  77. package/dist/eyedropper.js +66 -0
  78. package/dist/eyedropper.js.map +1 -0
  79. package/dist/focus.d.ts +18 -0
  80. package/dist/focus.d.ts.map +1 -0
  81. package/dist/focus.js +26 -0
  82. package/dist/focus.js.map +1 -0
  83. package/dist/fonts.d.ts +12 -0
  84. package/dist/fonts.d.ts.map +1 -0
  85. package/dist/fonts.js +17 -0
  86. package/dist/fonts.js.map +1 -0
  87. package/dist/forms.d.ts +10 -0
  88. package/dist/forms.d.ts.map +1 -0
  89. package/dist/forms.js +9 -0
  90. package/dist/forms.js.map +1 -0
  91. package/dist/host-runtime.d.ts +108 -0
  92. package/dist/host-runtime.d.ts.map +1 -0
  93. package/dist/host-runtime.js +213 -0
  94. package/dist/host-runtime.js.map +1 -0
  95. package/dist/host.d.ts +2403 -0
  96. package/dist/host.d.ts.map +1 -0
  97. package/dist/host.js +30 -0
  98. package/dist/host.js.map +1 -0
  99. package/dist/idle-gc.d.ts +36 -0
  100. package/dist/idle-gc.d.ts.map +1 -0
  101. package/dist/idle-gc.js +70 -0
  102. package/dist/idle-gc.js.map +1 -0
  103. package/dist/keyframes.d.ts +108 -0
  104. package/dist/keyframes.d.ts.map +1 -0
  105. package/dist/keyframes.js +107 -0
  106. package/dist/keyframes.js.map +1 -0
  107. package/dist/layout-animation.d.ts +38 -0
  108. package/dist/layout-animation.d.ts.map +1 -0
  109. package/dist/layout-animation.js +41 -0
  110. package/dist/layout-animation.js.map +1 -0
  111. package/dist/match-media.d.ts +62 -0
  112. package/dist/match-media.d.ts.map +1 -0
  113. package/dist/match-media.js +272 -0
  114. package/dist/match-media.js.map +1 -0
  115. package/dist/media-query.d.ts +21 -0
  116. package/dist/media-query.d.ts.map +1 -0
  117. package/dist/media-query.js +599 -0
  118. package/dist/media-query.js.map +1 -0
  119. package/dist/motion-bindings.d.ts +36 -0
  120. package/dist/motion-bindings.d.ts.map +1 -0
  121. package/dist/motion-bindings.js +107 -0
  122. package/dist/motion-bindings.js.map +1 -0
  123. package/dist/motion-config.d.ts +20 -0
  124. package/dist/motion-config.d.ts.map +1 -0
  125. package/dist/motion-config.js +51 -0
  126. package/dist/motion-config.js.map +1 -0
  127. package/dist/motion-span.d.ts +57 -0
  128. package/dist/motion-span.d.ts.map +1 -0
  129. package/dist/motion-span.js +150 -0
  130. package/dist/motion-span.js.map +1 -0
  131. package/dist/motion-value.d.ts +269 -0
  132. package/dist/motion-value.d.ts.map +1 -0
  133. package/dist/motion-value.js +941 -0
  134. package/dist/motion-value.js.map +1 -0
  135. package/dist/motion-variants.d.ts +190 -0
  136. package/dist/motion-variants.d.ts.map +1 -0
  137. package/dist/motion-variants.js +249 -0
  138. package/dist/motion-variants.js.map +1 -0
  139. package/dist/mutations.d.ts +65 -0
  140. package/dist/mutations.d.ts.map +1 -0
  141. package/dist/mutations.js +320 -0
  142. package/dist/mutations.js.map +1 -0
  143. package/dist/nativeview.d.ts +10 -0
  144. package/dist/nativeview.d.ts.map +1 -0
  145. package/dist/nativeview.js +92 -0
  146. package/dist/nativeview.js.map +1 -0
  147. package/dist/observers.d.ts +92 -0
  148. package/dist/observers.d.ts.map +1 -0
  149. package/dist/observers.js +579 -0
  150. package/dist/observers.js.map +1 -0
  151. package/dist/presence.d.ts +63 -0
  152. package/dist/presence.d.ts.map +1 -0
  153. package/dist/presence.js +54 -0
  154. package/dist/presence.js.map +1 -0
  155. package/dist/renderer-state.d.ts +155 -0
  156. package/dist/renderer-state.d.ts.map +1 -0
  157. package/dist/renderer-state.js +302 -0
  158. package/dist/renderer-state.js.map +1 -0
  159. package/dist/reorder.d.ts +63 -0
  160. package/dist/reorder.d.ts.map +1 -0
  161. package/dist/reorder.js +303 -0
  162. package/dist/reorder.js.map +1 -0
  163. package/dist/runtime.d.ts +23 -0
  164. package/dist/runtime.d.ts.map +1 -0
  165. package/dist/runtime.js +157 -0
  166. package/dist/runtime.js.map +1 -0
  167. package/dist/screen.d.ts +8 -0
  168. package/dist/screen.d.ts.map +1 -0
  169. package/dist/screen.js +16 -0
  170. package/dist/screen.js.map +1 -0
  171. package/dist/scroll.d.ts +79 -0
  172. package/dist/scroll.d.ts.map +1 -0
  173. package/dist/scroll.js +170 -0
  174. package/dist/scroll.js.map +1 -0
  175. package/dist/style-images.d.ts +20 -0
  176. package/dist/style-images.d.ts.map +1 -0
  177. package/dist/style-images.js +57 -0
  178. package/dist/style-images.js.map +1 -0
  179. package/dist/svg.d.ts +16 -0
  180. package/dist/svg.d.ts.map +1 -0
  181. package/dist/svg.js +119 -0
  182. package/dist/svg.js.map +1 -0
  183. package/dist/testing.d.ts +811 -0
  184. package/dist/testing.d.ts.map +1 -0
  185. package/dist/testing.js +1187 -0
  186. package/dist/testing.js.map +1 -0
  187. package/dist/text-match.d.ts +8 -0
  188. package/dist/text-match.d.ts.map +1 -0
  189. package/dist/text-match.js +10 -0
  190. package/dist/text-match.js.map +1 -0
  191. package/dist/text-selection.d.ts +34 -0
  192. package/dist/text-selection.d.ts.map +1 -0
  193. package/dist/text-selection.js +23 -0
  194. package/dist/text-selection.js.map +1 -0
  195. package/dist/universal-style.d.ts +22 -0
  196. package/dist/universal-style.d.ts.map +1 -0
  197. package/dist/universal-style.js +58 -0
  198. package/dist/universal-style.js.map +1 -0
  199. package/dist/web-animations.d.ts +300 -0
  200. package/dist/web-animations.d.ts.map +1 -0
  201. package/dist/web-animations.js +1032 -0
  202. package/dist/web-animations.js.map +1 -0
  203. package/dist/webview.d.ts +39 -0
  204. package/dist/webview.d.ts.map +1 -0
  205. package/dist/webview.js +26 -0
  206. package/dist/webview.js.map +1 -0
  207. package/gpuix-native.darwin-arm64.node +4 -0
  208. package/index.cjs +789 -0
  209. package/index.d.ts +2603 -0
  210. package/index.js +729 -0
  211. package/package.json +96 -4
@@ -0,0 +1,320 @@
1
+ /// Typed GPUIX automation protocol and SSE codec.
2
+ ///
3
+ /// Wire format is SSE `data:` lines so `eventsource-parser` can extract
4
+ /// messages from noisy stdout. JSON carries every field. Do not emit SSE
5
+ /// `id:` or `event:` fields; process logs that start with those prefixes
6
+ /// would otherwise leak into the next message.
7
+ import { createParser } from "eventsource-parser";
8
+ import { z } from "zod";
9
+ export const PROTOCOL_VERSION = 1;
10
+ export const automationErrorCodes = [
11
+ "Timeout",
12
+ "NotFound",
13
+ "Ambiguous",
14
+ "Protocol",
15
+ "Closed",
16
+ "Unsupported",
17
+ "Security",
18
+ "Cancelled",
19
+ ];
20
+ export class AutomationError extends Error {
21
+ code;
22
+ data;
23
+ constructor(code, message, data) {
24
+ super(message);
25
+ this.name = "AutomationError";
26
+ this.code = code;
27
+ this.data = data;
28
+ }
29
+ }
30
+ const errorCodeSchema = z.enum(automationErrorCodes);
31
+ const pointSchema = z.object({
32
+ x: z.number(),
33
+ y: z.number(),
34
+ });
35
+ const buttonSchema = z.number().int().min(0).max(2).optional();
36
+ /** Held modifiers, hyphenated: `"cmd"`, `"cmd-shift"`, `"alt"`. */
37
+ const modifiersSchema = z.string().optional();
38
+ export const boundsSchema = z.object({
39
+ x: z.number(),
40
+ y: z.number(),
41
+ width: z.number(),
42
+ height: z.number(),
43
+ });
44
+ export const treeNodeSchema = z.lazy(() => z.object({
45
+ id: z.number(),
46
+ type: z.string(),
47
+ text: z.string().optional(),
48
+ testId: z.string().optional(),
49
+ style: z.record(z.string(), z.unknown()).optional(),
50
+ events: z.array(z.string()).optional(),
51
+ customProps: z.record(z.string(), z.unknown()).optional(),
52
+ bounds: boundsSchema.optional(),
53
+ children: z.array(treeNodeSchema).optional(),
54
+ }));
55
+ const okSchema = z.object({ ok: z.literal(true) });
56
+ const capabilitiesSchema = z.array(z.enum(["input", "screenshot", "clock", "tree"]));
57
+ /** Single source of truth for method names, params, and results. */
58
+ export const methods = {
59
+ initialize: {
60
+ params: z.object({
61
+ protocolVersion: z.literal(PROTOCOL_VERSION),
62
+ client: z.string(),
63
+ }),
64
+ result: z.object({
65
+ protocolVersion: z.literal(PROTOCOL_VERSION),
66
+ pid: z.number().int(),
67
+ capabilities: capabilitiesSchema,
68
+ window: z.object({
69
+ width: z.number(),
70
+ height: z.number(),
71
+ }),
72
+ }),
73
+ },
74
+ cancel: {
75
+ params: z.object({ id: z.number().int() }),
76
+ result: okSchema,
77
+ },
78
+ click: {
79
+ params: z.object({
80
+ x: z.number(),
81
+ y: z.number(),
82
+ button: buttonSchema,
83
+ modifiers: modifiersSchema,
84
+ }),
85
+ result: okSchema,
86
+ },
87
+ mouseDown: {
88
+ params: pointSchema.extend({
89
+ button: buttonSchema,
90
+ modifiers: modifiersSchema,
91
+ }),
92
+ result: okSchema,
93
+ },
94
+ mouseUp: {
95
+ params: pointSchema.extend({
96
+ button: buttonSchema,
97
+ modifiers: modifiersSchema,
98
+ }),
99
+ result: okSchema,
100
+ },
101
+ mouseMove: {
102
+ params: pointSchema.extend({
103
+ modifiers: modifiersSchema,
104
+ }),
105
+ result: okSchema,
106
+ },
107
+ scrollWheel: {
108
+ params: pointSchema.extend({
109
+ deltaX: z.number(),
110
+ deltaY: z.number(),
111
+ modifiers: modifiersSchema,
112
+ }),
113
+ result: okSchema,
114
+ },
115
+ keystrokes: {
116
+ params: z.object({
117
+ keys: z.string(),
118
+ elementId: z.number().optional(),
119
+ }),
120
+ result: okSchema,
121
+ },
122
+ keyDown: {
123
+ params: z.object({
124
+ key: z.string(),
125
+ isHeld: z.boolean().optional(),
126
+ elementId: z.number().optional(),
127
+ }),
128
+ result: okSchema,
129
+ },
130
+ keyUp: {
131
+ params: z.object({
132
+ key: z.string(),
133
+ elementId: z.number().optional(),
134
+ }),
135
+ result: okSchema,
136
+ },
137
+ focus: {
138
+ params: z.object({ elementId: z.number() }),
139
+ result: okSchema,
140
+ },
141
+ blur: {
142
+ params: z.object({}),
143
+ result: okSchema,
144
+ },
145
+ scrollTo: {
146
+ // The DOM's scroll position (`scrollLeft`, `scrollTop`, zero or more), not GPUI's offset.
147
+ params: z.object({
148
+ elementId: z.number(),
149
+ x: z.number(),
150
+ y: z.number(),
151
+ }),
152
+ result: okSchema,
153
+ },
154
+ getScrollOffset: {
155
+ // `[scrollLeft, scrollTop]`, zero or more.
156
+ params: z.object({ elementId: z.number() }),
157
+ result: z.object({
158
+ offset: z.tuple([z.number(), z.number()]).nullable(),
159
+ }),
160
+ },
161
+ getTree: {
162
+ params: z.object({}),
163
+ result: z.object({ tree: treeNodeSchema.nullable() }),
164
+ },
165
+ getPaintedText: {
166
+ params: z.object({}),
167
+ result: z.object({ text: z.array(z.string()) }),
168
+ },
169
+ getAllText: {
170
+ params: z.object({}),
171
+ result: z.object({ text: z.array(z.string()) }),
172
+ },
173
+ getBounds: {
174
+ params: z.object({ elementId: z.number() }),
175
+ result: z.object({ bounds: boundsSchema.nullable() }),
176
+ },
177
+ getSelectedText: {
178
+ params: z.object({}),
179
+ result: z.object({ text: z.string().nullable() }),
180
+ },
181
+ clearSelection: {
182
+ params: z.object({}),
183
+ result: okSchema,
184
+ },
185
+ screenshot: {
186
+ params: z.object({ path: z.string() }),
187
+ result: z.object({ path: z.string() }),
188
+ },
189
+ clockPause: {
190
+ params: z.object({}),
191
+ result: z.object({ nowMs: z.number() }),
192
+ },
193
+ clockSet: {
194
+ params: z.object({ nowMs: z.number().nonnegative() }),
195
+ result: z.object({ nowMs: z.number() }),
196
+ },
197
+ clockFastForward: {
198
+ params: z.object({ deltaMs: z.number().nonnegative() }),
199
+ result: z.object({ nowMs: z.number() }),
200
+ },
201
+ clockResume: {
202
+ params: z.object({}),
203
+ result: z.object({ nowMs: z.number() }),
204
+ },
205
+ };
206
+ export const serverEventNames = ["console", "frame", "closed"];
207
+ const methodNames = Object.keys(methods);
208
+ function isObject(value) {
209
+ return typeof value === "object" && value !== null && !Array.isArray(value);
210
+ }
211
+ function parseMethodName(value) {
212
+ if (typeof value !== "string" || !methodNames.includes(value)) {
213
+ throw new AutomationError("Protocol", `Unknown automation method: ${String(value)}`);
214
+ }
215
+ return value;
216
+ }
217
+ export function parseRequest(value) {
218
+ if (!isObject(value)) {
219
+ throw new AutomationError("Protocol", "Request must be an object");
220
+ }
221
+ if (typeof value.id !== "number" || !Number.isInteger(value.id)) {
222
+ throw new AutomationError("Protocol", "Request id must be an integer");
223
+ }
224
+ const method = parseMethodName(value.method);
225
+ const parsed = methods[method].params.safeParse(value.params);
226
+ if (!parsed.success) {
227
+ throw new AutomationError("Protocol", `Invalid params for ${method}: ${parsed.error.message}`, parsed.error.issues);
228
+ }
229
+ return { id: value.id, method, params: parsed.data };
230
+ }
231
+ export function parseResponse(value) {
232
+ if (!isObject(value)) {
233
+ throw new AutomationError("Protocol", "Response must be an object");
234
+ }
235
+ if (typeof value.id !== "number" || !Number.isInteger(value.id)) {
236
+ throw new AutomationError("Protocol", "Response id must be an integer");
237
+ }
238
+ if ("error" in value) {
239
+ if (!isObject(value.error) || typeof value.error.message !== "string") {
240
+ throw new AutomationError("Protocol", "Invalid error payload");
241
+ }
242
+ const code = errorCodeSchema.safeParse(value.error.code);
243
+ if (!code.success) {
244
+ throw new AutomationError("Protocol", "Invalid error code");
245
+ }
246
+ return {
247
+ id: value.id,
248
+ error: {
249
+ code: code.data,
250
+ message: value.error.message,
251
+ ...(value.error.data === undefined ? {} : { data: value.error.data }),
252
+ },
253
+ };
254
+ }
255
+ if (!("result" in value)) {
256
+ throw new AutomationError("Protocol", "Response needs result or error");
257
+ }
258
+ return { id: value.id, result: value.result };
259
+ }
260
+ export function parseServerEvent(value) {
261
+ if (!isObject(value) || typeof value.event !== "string") {
262
+ throw new AutomationError("Protocol", "Event must have an event name");
263
+ }
264
+ if (value.event === "console") {
265
+ const params = z.object({ text: z.string() }).parse(value.params);
266
+ return { event: "console", params };
267
+ }
268
+ if (value.event === "frame") {
269
+ const params = z
270
+ .object({ n: z.number(), path: z.string().optional() })
271
+ .parse(value.params);
272
+ return { event: "frame", params };
273
+ }
274
+ if (value.event === "closed") {
275
+ const params = z.object({ reason: z.string() }).parse(value.params);
276
+ return { event: "closed", params };
277
+ }
278
+ throw new AutomationError("Protocol", `Unknown server event: ${value.event}`);
279
+ }
280
+ export function parseWireMessage(value) {
281
+ if (!isObject(value)) {
282
+ throw new AutomationError("Protocol", "Wire message must be an object");
283
+ }
284
+ if ("method" in value)
285
+ return parseRequest(value);
286
+ if ("event" in value)
287
+ return parseServerEvent(value);
288
+ if ("result" in value || "error" in value)
289
+ return parseResponse(value);
290
+ throw new AutomationError("Protocol", "Unrecognized wire message");
291
+ }
292
+ export function encodeSse(message) {
293
+ return `data: ${JSON.stringify(message)}\n\n`;
294
+ }
295
+ export function createSseDecoder(onMessage, onInvalid) {
296
+ const parser = createParser({
297
+ onEvent(event) {
298
+ try {
299
+ onMessage(parseWireMessage(JSON.parse(event.data)));
300
+ }
301
+ catch (error) {
302
+ onInvalid?.(event.data, error);
303
+ }
304
+ },
305
+ });
306
+ return {
307
+ feed(chunk) {
308
+ parser.feed(chunk);
309
+ },
310
+ };
311
+ }
312
+ export function decodeSseChunk(chunk) {
313
+ const messages = [];
314
+ const decoder = createSseDecoder((message) => {
315
+ messages.push(message);
316
+ });
317
+ decoder.feed(chunk);
318
+ return messages;
319
+ }
320
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../js/automation/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /** Method syntax so a renderer whose `setImage` wants a `Buffer` still fits. */
2
+ export type BlobImageHost = {
3
+ setImage?(elementId: number, bytes: Uint8Array): void;
4
+ };
5
+ type BlobImageCallbacks = {
6
+ /** Applies queued mutations, so the `<img>` exists natively before `setImage`. */
7
+ flush(): void;
8
+ /**
9
+ * Tells the `<img>` that its `blob:` src could not be read. `ticket` is unique
10
+ * per src assignment: the failure travels as a prop and a prop is applied only
11
+ * when its value changes, so two failures with one message must still differ.
12
+ */
13
+ fail(id: number, message: string, ticket: number): void;
14
+ };
15
+ /**
16
+ * `<img src="blob:...">`. A blob URL only means something in this JS process, so
17
+ * the native layer cannot open it. This fetches the bytes and hands them to
18
+ * `setImage`, the path live images already use. The native element treats a
19
+ * `blob:` src as pending, then fires `load` when `setImage` lands or `error` when
20
+ * `fail` is called.
21
+ *
22
+ * A src that changes while its fetch is in flight wins: the late result is
23
+ * dropped. A revoked URL fails the fetch and reports `error`, as in a browser.
24
+ */
25
+ export declare function createBlobImageLoader(host: BlobImageHost, callbacks: BlobImageCallbacks): {
26
+ created(id: number, elementType: string): void;
27
+ destroyed(id: number): void;
28
+ /** Call for every `setCustomProp`, before it is queued. */
29
+ prop(id: number, key: string, value: unknown): void;
30
+ };
31
+ export {};
32
+ //# sourceMappingURL=blob-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blob-images.d.ts","sourceRoot":"","sources":["../js/blob-images.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;CACtD,CAAA;AAED,KAAK,kBAAkB,GAAG;IACxB,kFAAkF;IAClF,KAAK,IAAI,IAAI,CAAA;IACb;;;;OAIG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACxD,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,kBAAkB;gBAsBxE,MAAM,eAAe,MAAM;kBAGzB,MAAM;IAIpB,2DAA2D;aAClD,MAAM,OAAO,MAAM,SAAS,OAAO;EAS/C"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * `<img src="blob:...">`. A blob URL only means something in this JS process, so
3
+ * the native layer cannot open it. This fetches the bytes and hands them to
4
+ * `setImage`, the path live images already use. The native element treats a
5
+ * `blob:` src as pending, then fires `load` when `setImage` lands or `error` when
6
+ * `fail` is called.
7
+ *
8
+ * A src that changes while its fetch is in flight wins: the late result is
9
+ * dropped. A revoked URL fails the fetch and reports `error`, as in a browser.
10
+ */
11
+ export function createBlobImageLoader(host, callbacks) {
12
+ const types = new Map();
13
+ const latest = new Map();
14
+ let counter = 0;
15
+ const load = async (id, url, ticket) => {
16
+ const current = () => latest.get(id) === ticket;
17
+ try {
18
+ const response = await fetch(url);
19
+ if (!response.ok)
20
+ throw new Error(`fetch ${url} failed with status ${response.status}`);
21
+ const bytes = new Uint8Array(await response.arrayBuffer());
22
+ if (!current())
23
+ return;
24
+ if (!host.setImage)
25
+ throw new Error("this renderer cannot set an image from bytes");
26
+ callbacks.flush();
27
+ host.setImage(id, bytes);
28
+ }
29
+ catch (error) {
30
+ if (!current())
31
+ return;
32
+ callbacks.fail(id, error instanceof Error ? error.message : String(error), ticket);
33
+ }
34
+ };
35
+ return {
36
+ created(id, elementType) {
37
+ types.set(id, elementType);
38
+ },
39
+ destroyed(id) {
40
+ types.delete(id);
41
+ latest.delete(id);
42
+ },
43
+ /** Call for every `setCustomProp`, before it is queued. */
44
+ prop(id, key, value) {
45
+ if (key !== "src" || types.get(id) !== "img")
46
+ return;
47
+ const ticket = ++counter;
48
+ latest.set(id, ticket);
49
+ if (typeof value === "string" && value.trim().startsWith("blob:")) {
50
+ void load(id, value.trim(), ticket);
51
+ }
52
+ },
53
+ };
54
+ }
55
+ //# sourceMappingURL=blob-images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blob-images.js","sourceRoot":"","sources":["../js/blob-images.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAmB,EAAE,SAA6B;IACtF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,MAAM,IAAI,GAAG,KAAK,EAAE,EAAU,EAAE,GAAW,EAAE,MAAc,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;QAC/C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YACvF,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;YAC1D,IAAI,CAAC,OAAO,EAAE;gBAAE,OAAM;YACtB,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;YACnF,SAAS,CAAC,KAAK,EAAE,CAAA;YACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,EAAE;gBAAE,OAAM;YACtB,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;QACpF,CAAC;IACH,CAAC,CAAA;IAED,OAAO;QACL,OAAO,CAAC,EAAU,EAAE,WAAmB;YACrC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;QAC5B,CAAC;QACD,SAAS,CAAC,EAAU;YAClB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAChB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;QACD,2DAA2D;QAC3D,IAAI,CAAC,EAAU,EAAE,GAAW,EAAE,KAAc;YAC1C,IAAI,GAAG,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK;gBAAE,OAAM;YACpD,MAAM,MAAM,GAAG,EAAE,OAAO,CAAA;YACxB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClE,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,61 @@
1
+ import type { ElementBounds } from "../index.js";
2
+ import type { MutationRenderer, NativeRenderer } from "./host.js";
3
+ /** Border box in window coordinates, shaped like a DOM `DOMRectReadOnly`. */
4
+ export interface BoundingClientRect {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ top: number;
10
+ left: number;
11
+ right: number;
12
+ bottom: number;
13
+ }
14
+ interface FlushableQueue {
15
+ flushMutations(): void;
16
+ }
17
+ /**
18
+ * Let `flushPendingMutations(renderer)` reach this queue. `createMutationQueue`
19
+ * calls it, so a framework adapter never has to.
20
+ */
21
+ export declare function registerMutationQueue(renderer: object, queue: FlushableQueue): void;
22
+ /**
23
+ * Send every mutation a framework has queued for this renderer. A read that
24
+ * must see the current tree (bounds, hit tests) calls it first, because Solid
25
+ * flushes in a microtask and React only at commit.
26
+ */
27
+ export declare function flushPendingMutations(renderer: object): void;
28
+ /** The zero rect a DOM element without a box reports. */
29
+ export declare function toBoundingClientRect(bounds: Pick<ElementBounds, "x" | "y" | "width" | "height"> | null): BoundingClientRect;
30
+ /**
31
+ * `getBoundingClientRect` for the element with this id: pending mutations are
32
+ * sent and the renderer lays out before it answers. An element with no box
33
+ * (not mounted, not painted) reports a zero rect.
34
+ */
35
+ export declare function readBoundingClientRect(renderer: NativeRenderer, id: number): BoundingClientRect;
36
+ /**
37
+ * Key of the method a framework adapter puts on its host element instances to
38
+ * let shared code (observers) reach the element's renderer and mutation queue.
39
+ */
40
+ export declare const HOST_BINDING: unique symbol;
41
+ /**
42
+ * Key of the method a host element offers to be told each time it is created
43
+ * natively. Solid creates the native element when the tree is inserted and
44
+ * again after a removal, so an observer started earlier must follow it. An
45
+ * element that is always mounted when handed out (React) does not have it.
46
+ */
47
+ export declare const HOST_MOUNT: unique symbol;
48
+ export interface HostBinding {
49
+ readonly renderer: NativeRenderer;
50
+ readonly mutations: MutationRenderer;
51
+ }
52
+ /** A mounted host element, as `ResizeObserver` and `IntersectionObserver` take it. */
53
+ export interface ObservableElement {
54
+ readonly id: number;
55
+ /** The binding while the element is mounted, `undefined` before and after. */
56
+ [HOST_BINDING](): HostBinding | undefined;
57
+ /** Calls `listener` each time the element is created natively. Returns the stop function. */
58
+ [HOST_MOUNT]?(listener: () => void): () => void;
59
+ }
60
+ export {};
61
+ //# sourceMappingURL=bounds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounds.d.ts","sourceRoot":"","sources":["../js/bounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEjE,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,cAAc;IACtB,cAAc,IAAI,IAAI,CAAA;CACvB;AAgBD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAWnF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ5D;AAED,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG,IAAI,GAAG,kBAAkB,CAY3H;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,kBAAkB,CAM/F;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,MAAgD,CAAA;AAElF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,MAA8C,CAAA;AAE9E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAA;CACrC;AAED,sFAAsF;AACtF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,8EAA8E;IAC9E,CAAC,YAAY,CAAC,IAAI,WAAW,GAAG,SAAS,CAAA;IACzC,6FAA6F;IAC7F,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAChD"}
package/dist/bounds.js ADDED
@@ -0,0 +1,85 @@
1
+ const QUEUES_KEY = Symbol.for("@ghia/native/mutation-queues");
2
+ // Keyed by the renderer object a queue applies to. Queues are held weakly: a
3
+ // root that was unmounted and replaced leaves its queue behind otherwise.
4
+ function allQueues() {
5
+ const existing = Reflect.get(globalThis, QUEUES_KEY);
6
+ if (existing)
7
+ return existing;
8
+ const queues = new WeakMap();
9
+ Reflect.set(globalThis, QUEUES_KEY, queues);
10
+ return queues;
11
+ }
12
+ /**
13
+ * Let `flushPendingMutations(renderer)` reach this queue. `createMutationQueue`
14
+ * calls it, so a framework adapter never has to.
15
+ */
16
+ export function registerMutationQueue(renderer, queue) {
17
+ const queues = allQueues();
18
+ let refs = queues.get(renderer);
19
+ if (!refs) {
20
+ refs = new Set();
21
+ queues.set(renderer, refs);
22
+ }
23
+ for (const ref of refs) {
24
+ if (ref.deref() === undefined)
25
+ refs.delete(ref);
26
+ }
27
+ refs.add(new WeakRef(queue));
28
+ }
29
+ /**
30
+ * Send every mutation a framework has queued for this renderer. A read that
31
+ * must see the current tree (bounds, hit tests) calls it first, because Solid
32
+ * flushes in a microtask and React only at commit.
33
+ */
34
+ export function flushPendingMutations(renderer) {
35
+ const refs = allQueues().get(renderer);
36
+ if (!refs)
37
+ return;
38
+ for (const ref of [...refs]) {
39
+ const queue = ref.deref();
40
+ if (queue)
41
+ queue.flushMutations();
42
+ else
43
+ refs.delete(ref);
44
+ }
45
+ }
46
+ /** The zero rect a DOM element without a box reports. */
47
+ export function toBoundingClientRect(bounds) {
48
+ if (!bounds)
49
+ return { x: 0, y: 0, width: 0, height: 0, top: 0, left: 0, right: 0, bottom: 0 };
50
+ return {
51
+ x: bounds.x,
52
+ y: bounds.y,
53
+ width: bounds.width,
54
+ height: bounds.height,
55
+ top: bounds.y,
56
+ left: bounds.x,
57
+ right: bounds.x + bounds.width,
58
+ bottom: bounds.y + bounds.height,
59
+ };
60
+ }
61
+ /**
62
+ * `getBoundingClientRect` for the element with this id: pending mutations are
63
+ * sent and the renderer lays out before it answers. An element with no box
64
+ * (not mounted, not painted) reports a zero rect.
65
+ */
66
+ export function readBoundingClientRect(renderer, id) {
67
+ if (!renderer.getElementBounds) {
68
+ throw new Error("This renderer cannot measure elements: it has no getElementBounds");
69
+ }
70
+ flushPendingMutations(renderer);
71
+ return toBoundingClientRect(renderer.getElementBounds(id));
72
+ }
73
+ /**
74
+ * Key of the method a framework adapter puts on its host element instances to
75
+ * let shared code (observers) reach the element's renderer and mutation queue.
76
+ */
77
+ export const HOST_BINDING = Symbol.for("@ghia/native/host-binding");
78
+ /**
79
+ * Key of the method a host element offers to be told each time it is created
80
+ * natively. Solid creates the native element when the tree is inserted and
81
+ * again after a removal, so an observer started earlier must follow it. An
82
+ * element that is always mounted when handed out (React) does not have it.
83
+ */
84
+ export const HOST_MOUNT = Symbol.for("@ghia/native/host-mount");
85
+ //# sourceMappingURL=bounds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounds.js","sourceRoot":"","sources":["../js/bounds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ declare global {
2
+ interface Clipboard {
3
+ writeText(text: string): Promise<void>;
4
+ readText(): Promise<string>;
5
+ }
6
+ interface Navigator {
7
+ readonly clipboard: Clipboard;
8
+ }
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=clipboard-global.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard-global.d.ts","sourceRoot":"","sources":["../js/clipboard-global.ts"],"names":[],"mappings":"AAIA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,SAAS;QACjB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACtC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;KAC5B;IACD,UAAU,SAAS;QACjB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;KAC9B;CACF;AAED,OAAO,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=clipboard-global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard-global.js","sourceRoot":"","sources":["../js/clipboard-global.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAA"}
@@ -0,0 +1,19 @@
1
+ import type { NativeRenderer } from "./host.js";
2
+ import "./clipboard-global.js";
3
+ /** The `navigator.clipboard` text subset. Images and rich items are not supported. */
4
+ export interface Clipboard {
5
+ writeText(text: string): Promise<void>;
6
+ /** Resolves `""` when the clipboard holds no text, as in the DOM. */
7
+ readText(): Promise<string>;
8
+ }
9
+ export type ClipboardHost = Pick<NativeRenderer, "writeClipboardText" | "readClipboardText">;
10
+ export declare function createClipboard(host: () => ClipboardHost | undefined): Clipboard;
11
+ /** The clipboard of the renderer created last. */
12
+ export declare const clipboard: Clipboard;
13
+ /**
14
+ * Point `clipboard` at `host`, and expose it as `navigator.clipboard` when the
15
+ * runtime has a `navigator` without one, so code written for the web runs
16
+ * unchanged. A runtime with no `navigator` is left without one.
17
+ */
18
+ export declare function bindClipboard(host: ClipboardHost): void;
19
+ //# sourceMappingURL=clipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../js/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,uBAAuB,CAAA;AAE9B,sFAAsF;AACtF,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,qEAAqE;IACrE,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,cAAc,EACd,oBAAoB,GAAG,mBAAmB,CAC3C,CAAA;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,aAAa,GAAG,SAAS,GACpC,SAAS,CAkBX;AAID,kDAAkD;AAClD,eAAO,MAAM,SAAS,EAAE,SAA6C,CAAA;AAErE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAWvD"}