@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
package/dist/scroll.js ADDED
@@ -0,0 +1,170 @@
1
+ import { flushPendingMutations } from "./bounds.js";
2
+ /** Fills in the DOM names of a native `scroll` payload. A `wheel` arrives complete from the dispatcher. */
3
+ export function shapeScrollEvent(event) {
4
+ if (event.eventType === "scroll") {
5
+ // Native reports the offset the way GPUI keeps it: zero, then negative.
6
+ const scroll = {
7
+ scrollLeft: 0 - required(event.scrollX, "scrollX"),
8
+ scrollTop: 0 - required(event.scrollY, "scrollY"),
9
+ };
10
+ return { ...event, ...scroll };
11
+ }
12
+ return event;
13
+ }
14
+ /** DOM `key` values that scroll by default, and the name `scrollByKey` knows each by. */
15
+ const SCROLL_KEY_NAMES = new Map([
16
+ ["ArrowUp", "up"],
17
+ ["ArrowDown", "down"],
18
+ ["ArrowLeft", "left"],
19
+ ["ArrowRight", "right"],
20
+ ["PageUp", "pageup"],
21
+ ["PageDown", "pagedown"],
22
+ ["Home", "home"],
23
+ ["End", "end"],
24
+ [" ", "space"],
25
+ ]);
26
+ /**
27
+ * What a key's default action does once nothing consumed or prevented it:
28
+ * scroll the nearest scroller. Undefined for a key that does not scroll.
29
+ */
30
+ export function scrollKeyName(key) {
31
+ return key === undefined ? undefined : SCROLL_KEY_NAMES.get(key);
32
+ }
33
+ function required(value, field) {
34
+ if (value === undefined)
35
+ throw new Error(`The native ${field} field is missing`);
36
+ return value;
37
+ }
38
+ /**
39
+ * The one place that asks native for an element's scroll geometry. Every
40
+ * `scrollTop`-style read goes through here.
41
+ *
42
+ * It is never stale, like `getBoundingClientRect`: queued mutations are sent first and
43
+ * native draws any pending change before it measures.
44
+ *
45
+ * An element native has not painted has none; the DOM answers zero for an element
46
+ * with no layout box, and so does this.
47
+ */
48
+ export function readScrollMetrics(renderer, id) {
49
+ if (!renderer.getScrollMetrics) {
50
+ throw new Error("This renderer cannot read scroll geometry");
51
+ }
52
+ flushPendingMutations(renderer);
53
+ const metrics = renderer.getScrollMetrics(id);
54
+ if (!metrics) {
55
+ return {
56
+ scrollLeft: 0,
57
+ scrollTop: 0,
58
+ scrollWidth: 0,
59
+ scrollHeight: 0,
60
+ clientWidth: 0,
61
+ clientHeight: 0,
62
+ };
63
+ }
64
+ const [scrollLeft, scrollTop, scrollWidth, scrollHeight, clientWidth, clientHeight] = metrics;
65
+ return { scrollLeft, scrollTop, scrollWidth, scrollHeight, clientWidth, clientHeight };
66
+ }
67
+ function scrollToOptions(xOrOptions, y) {
68
+ if (typeof xOrOptions === "number") {
69
+ if (y === undefined)
70
+ throw new TypeError("scrollTo(x, y) needs both coordinates");
71
+ return { left: xOrOptions, top: y };
72
+ }
73
+ return xOrOptions ?? {};
74
+ }
75
+ /** CSSOM View converts a scroll offset to a number and reads NaN and the infinities as 0, as Chrome does. */
76
+ function finiteOffset(value) {
77
+ const number = Number(value);
78
+ return Number.isFinite(number) ? number : 0;
79
+ }
80
+ function scrollTo(renderer, id, options, relative) {
81
+ if (!renderer.scrollTo)
82
+ throw new Error("This renderer cannot scroll");
83
+ const requestedLeft = options.left === undefined ? undefined : finiteOffset(options.left);
84
+ const requestedTop = options.top === undefined ? undefined : finiteOffset(options.top);
85
+ if (!relative && requestedLeft !== undefined && requestedTop !== undefined) {
86
+ // Both axes are named, so there is nothing to read back. Native lays out what is dirty
87
+ // before it clamps, as a browser's setter does.
88
+ flushPendingMutations(renderer);
89
+ renderer.scrollTo(id, requestedLeft, requestedTop, options.behavior);
90
+ return;
91
+ }
92
+ const current = readScrollMetrics(renderer, id);
93
+ const left = requestedLeft === undefined ? current.scrollLeft : requestedLeft + (relative ? current.scrollLeft : 0);
94
+ const top = requestedTop === undefined ? current.scrollTop : requestedTop + (relative ? current.scrollTop : 0);
95
+ renderer.scrollTo(id, left, top, options.behavior);
96
+ }
97
+ /** `scrollIntoView(false)` aligns the end, `true` or nothing the start, like the DOM. */
98
+ function intoViewOptions(arg) {
99
+ if (typeof arg === "boolean")
100
+ return { block: arg ? "start" : "end" };
101
+ return arg ?? {};
102
+ }
103
+ /**
104
+ * Defines the scroll members on `target`, which is a prototype or one instance.
105
+ * `bind` finds the renderer and element id behind `this`.
106
+ */
107
+ export function defineScrollMembers(target, bind) {
108
+ const resolve = (self) => {
109
+ const bound = bind(self);
110
+ if (!bound.renderer)
111
+ throw new Error("This element is not attached to a renderer");
112
+ return { renderer: bound.renderer, id: bound.id };
113
+ };
114
+ const metric = (field) => ({
115
+ configurable: true,
116
+ get() {
117
+ const bound = resolve(this);
118
+ return readScrollMetrics(bound.renderer, bound.id)[field];
119
+ },
120
+ });
121
+ Object.defineProperties(target, {
122
+ scrollTop: {
123
+ ...metric("scrollTop"),
124
+ set(top) {
125
+ const bound = resolve(this);
126
+ scrollTo(bound.renderer, bound.id, { top: finiteOffset(top), behavior: "instant" }, false);
127
+ },
128
+ },
129
+ scrollLeft: {
130
+ ...metric("scrollLeft"),
131
+ set(left) {
132
+ const bound = resolve(this);
133
+ scrollTo(bound.renderer, bound.id, { left: finiteOffset(left), behavior: "instant" }, false);
134
+ },
135
+ },
136
+ scrollWidth: metric("scrollWidth"),
137
+ scrollHeight: metric("scrollHeight"),
138
+ clientWidth: metric("clientWidth"),
139
+ clientHeight: metric("clientHeight"),
140
+ scrollTo: {
141
+ configurable: true,
142
+ writable: true,
143
+ value(xOrOptions, y) {
144
+ const bound = resolve(this);
145
+ scrollTo(bound.renderer, bound.id, scrollToOptions(xOrOptions, y), false);
146
+ },
147
+ },
148
+ scrollBy: {
149
+ configurable: true,
150
+ writable: true,
151
+ value(xOrOptions, y) {
152
+ const bound = resolve(this);
153
+ scrollTo(bound.renderer, bound.id, scrollToOptions(xOrOptions, y), true);
154
+ },
155
+ },
156
+ scrollIntoView: {
157
+ configurable: true,
158
+ writable: true,
159
+ value(arg) {
160
+ const bound = resolve(this);
161
+ if (!bound.renderer.scrollIntoView)
162
+ throw new Error("This renderer cannot scroll");
163
+ const options = intoViewOptions(arg);
164
+ flushPendingMutations(bound.renderer);
165
+ bound.renderer.scrollIntoView(bound.id, options.block, options.inline, options.behavior);
166
+ },
167
+ },
168
+ });
169
+ }
170
+ //# sourceMappingURL=scroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../js/scroll.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /** Method syntax so a renderer whose methods want a `Buffer` still fits. */
2
+ export type StyleImageHost = {
3
+ setStyleImage?(url: string, bytes: Uint8Array): void;
4
+ failStyleImage?(url: string, message: string): void;
5
+ };
6
+ /** Calls `visit` with each `blob:` address that `url()` names in the strings of a style, at any depth. */
7
+ export declare function forEachBlobUrl(style: unknown, visit: (url: string) => void): void;
8
+ /**
9
+ * `background: url(blob:...)`. A blob URL only means something in this JS
10
+ * process, so the native layer cannot open it. This fetches the bytes once per
11
+ * distinct URL a style names, base style and state styles alike, and hands them
12
+ * to `setStyleImage`; native keeps the image until a layer that names the URL
13
+ * asks for it. A URL that cannot be read (revoked) is reported through
14
+ * `failStyleImage`, and the layer paints nothing.
15
+ */
16
+ export declare function createStyleImageLoader(host: StyleImageHost): {
17
+ /** Call for every style a mutation carries, before it is queued. */
18
+ style(style: unknown): void;
19
+ };
20
+ //# sourceMappingURL=style-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-images.d.ts","sourceRoot":"","sources":["../js/style-images.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IACpD,cAAc,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACpD,CAAA;AAKD,0GAA0G;AAC1G,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAYjF;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc;IAgBvD,oEAAoE;iBACvD,OAAO;EAQvB"}
@@ -0,0 +1,57 @@
1
+ const BLOB_URL = /url\(\s*(?:"(blob:(?:[^"\\]|\\.)*)"|'(blob:(?:[^'\\]|\\.)*)'|(blob:[^\s)"'\\]*))\s*\)/gi;
2
+ /** Calls `visit` with each `blob:` address that `url()` names in the strings of a style, at any depth. */
3
+ export function forEachBlobUrl(style, visit) {
4
+ if (typeof style === "string") {
5
+ if (!style.includes("blob:"))
6
+ return;
7
+ for (const match of style.matchAll(BLOB_URL)) {
8
+ const quoted = match[1] ?? match[2];
9
+ visit(quoted === undefined ? match[3] : quoted.replace(/\\(.)/g, "$1"));
10
+ }
11
+ }
12
+ else if (Array.isArray(style)) {
13
+ for (const item of style)
14
+ forEachBlobUrl(item, visit);
15
+ }
16
+ else if (typeof style === "object" && style !== null) {
17
+ for (const value of Object.values(style))
18
+ forEachBlobUrl(value, visit);
19
+ }
20
+ }
21
+ /**
22
+ * `background: url(blob:...)`. A blob URL only means something in this JS
23
+ * process, so the native layer cannot open it. This fetches the bytes once per
24
+ * distinct URL a style names, base style and state styles alike, and hands them
25
+ * to `setStyleImage`; native keeps the image until a layer that names the URL
26
+ * asks for it. A URL that cannot be read (revoked) is reported through
27
+ * `failStyleImage`, and the layer paints nothing.
28
+ */
29
+ export function createStyleImageLoader(host) {
30
+ const requested = new Set();
31
+ const load = async (url) => {
32
+ try {
33
+ const response = await fetch(url);
34
+ if (!response.ok)
35
+ throw new Error(`fetch ${url} failed with status ${response.status}`);
36
+ const bytes = new Uint8Array(await response.arrayBuffer());
37
+ if (!host.setStyleImage)
38
+ throw new Error("this renderer cannot set a style image from bytes");
39
+ host.setStyleImage(url, bytes);
40
+ }
41
+ catch (error) {
42
+ host.failStyleImage?.(url, error instanceof Error ? error.message : String(error));
43
+ }
44
+ };
45
+ return {
46
+ /** Call for every style a mutation carries, before it is queued. */
47
+ style(style) {
48
+ forEachBlobUrl(style, (url) => {
49
+ if (requested.has(url))
50
+ return;
51
+ requested.add(url);
52
+ void load(url);
53
+ });
54
+ },
55
+ };
56
+ }
57
+ //# sourceMappingURL=style-images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-images.js","sourceRoot":"","sources":["../js/style-images.ts"],"names":[],"mappings":"AAMA,MAAM,QAAQ,GACZ,yFAAyF,CAAA;AAE3F,0GAA0G;AAC1G,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,KAA4B;IACzE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAM;QACpC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;YACnC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACvD,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACvD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACxE,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAoB;IACzD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IAEnC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;QACjC,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,IAAI,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;YAC7F,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACpF,CAAC;IACH,CAAC,CAAA;IAED,OAAO;QACL,oEAAoE;QACpE,KAAK,CAAC,KAAc;YAClB,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC5B,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,OAAM;gBAC9B,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC"}
package/dist/svg.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /** Element types that exist only as children of an `<svg>`. */
2
+ export declare const SVG_CHILD_TYPES: ReadonlySet<string>;
3
+ /**
4
+ * The props of an SVG `<text>`. `text` is also the host text element, which
5
+ * forwards only its universal props, so these are what lets `<svg><text x={4}>`
6
+ * reach the rasteriser. The host element never has them.
7
+ */
8
+ export declare const SVG_TEXT_PROPS: ReadonlySet<string>;
9
+ /**
10
+ * Throws when `child` is an SVG element placed anywhere but directly in an
11
+ * `<svg>` or in another SVG element (`<g>`, `<defs>`, `<linearGradient>`, ...).
12
+ * That one is itself checked when it is placed, so the chain always ends at an
13
+ * `<svg>`. `parent` is `undefined` for a window root.
14
+ */
15
+ export declare function assertSvgPlacement(parent: string | undefined, child: string): void;
16
+ //# sourceMappingURL=svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../js/svg.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAgD9C,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CA6C7C,CAAA;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CASlF"}
package/dist/svg.js ADDED
@@ -0,0 +1,119 @@
1
+ /** Element types that exist only as children of an `<svg>`. */
2
+ export const SVG_CHILD_TYPES = new Set([
3
+ "path",
4
+ "circle",
5
+ "ellipse",
6
+ "rect",
7
+ "line",
8
+ "polyline",
9
+ "polygon",
10
+ "g",
11
+ "defs",
12
+ "linearGradient",
13
+ "radialGradient",
14
+ "stop",
15
+ "clipPath",
16
+ "mask",
17
+ "use",
18
+ "symbol",
19
+ "pattern",
20
+ "marker",
21
+ "image",
22
+ "tspan",
23
+ "textPath",
24
+ "filter",
25
+ "feBlend",
26
+ "feColorMatrix",
27
+ "feComponentTransfer",
28
+ "feFuncR",
29
+ "feFuncG",
30
+ "feFuncB",
31
+ "feFuncA",
32
+ "feComposite",
33
+ "feConvolveMatrix",
34
+ "feDiffuseLighting",
35
+ "feDisplacementMap",
36
+ "feDistantLight",
37
+ "feDropShadow",
38
+ "feFlood",
39
+ "feGaussianBlur",
40
+ "feImage",
41
+ "feMerge",
42
+ "feMergeNode",
43
+ "feMorphology",
44
+ "feOffset",
45
+ "fePointLight",
46
+ "feSpecularLighting",
47
+ "feSpotLight",
48
+ "feTile",
49
+ "feTurbulence",
50
+ ]);
51
+ /**
52
+ * The props of an SVG `<text>`. `text` is also the host text element, which
53
+ * forwards only its universal props, so these are what lets `<svg><text x={4}>`
54
+ * reach the rasteriser. The host element never has them.
55
+ */
56
+ export const SVG_TEXT_PROPS = new Set([
57
+ "x",
58
+ "y",
59
+ "dx",
60
+ "dy",
61
+ "rotate",
62
+ "textLength",
63
+ "lengthAdjust",
64
+ "transform",
65
+ "fill",
66
+ "fillOpacity",
67
+ "fillRule",
68
+ "stroke",
69
+ "strokeWidth",
70
+ "strokeOpacity",
71
+ "strokeLinecap",
72
+ "strokeLinejoin",
73
+ "strokeMiterlimit",
74
+ "strokeDasharray",
75
+ "strokeDashoffset",
76
+ "opacity",
77
+ "display",
78
+ "visibility",
79
+ "clipPath",
80
+ "mask",
81
+ "filter",
82
+ "paintOrder",
83
+ "fontFamily",
84
+ "fontSize",
85
+ "fontWeight",
86
+ "fontStyle",
87
+ "fontVariant",
88
+ "fontStretch",
89
+ "textAnchor",
90
+ "dominantBaseline",
91
+ "alignmentBaseline",
92
+ "baselineShift",
93
+ "letterSpacing",
94
+ "wordSpacing",
95
+ "textDecoration",
96
+ "writingMode",
97
+ "direction",
98
+ "unicodeBidi",
99
+ "textRendering",
100
+ "xmlSpace",
101
+ ]);
102
+ /**
103
+ * Throws when `child` is an SVG element placed anywhere but directly in an
104
+ * `<svg>` or in another SVG element (`<g>`, `<defs>`, `<linearGradient>`, ...).
105
+ * That one is itself checked when it is placed, so the chain always ends at an
106
+ * `<svg>`. `parent` is `undefined` for a window root.
107
+ */
108
+ export function assertSvgPlacement(parent, child) {
109
+ if (!SVG_CHILD_TYPES.has(child))
110
+ return;
111
+ if (parent === "svg" || (parent !== undefined && SVG_CHILD_TYPES.has(parent)))
112
+ return;
113
+ // `text` is a host element too, so a `<text>` parent proves nothing; the
114
+ // `<tspan>` and `<textPath>` it holds are checked on the Rust side.
115
+ if (parent === "text" && (child === "tspan" || child === "textPath"))
116
+ return;
117
+ throw new Error(`<${child}> is only valid inside <svg>, but its parent is ${parent ? `<${parent}>` : "the window root"}`);
118
+ }
119
+ //# sourceMappingURL=svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../js/svg.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IAC1D,MAAM;IACN,QAAQ;IACR,SAAS;IACT,MAAM;IACN,MAAM;IACN,UAAU;IACV,SAAS;IACT,GAAG;IACH,MAAM;IACN,gBAAgB;IAChB,gBAAgB;IAChB,MAAM;IACN,UAAU;IACV,MAAM;IACN,KAAK;IACL,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,UAAU;IACV,QAAQ;IACR,SAAS;IACT,eAAe;IACf,qBAAqB;IACrB,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;IAChB,cAAc;IACd,SAAS;IACT,gBAAgB;IAChB,SAAS;IACT,SAAS;IACT,aAAa;IACb,cAAc;IACd,UAAU;IACV,cAAc;IACd,oBAAoB;IACpB,aAAa;IACb,QAAQ;IACR,cAAc;CACf,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IACzD,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,WAAW;IACX,MAAM;IACN,aAAa;IACb,UAAU;IACV,QAAQ;IACR,aAAa;IACb,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,SAAS;IACT,SAAS;IACT,YAAY;IACZ,UAAU;IACV,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,WAAW;IACX,aAAa;IACb,aAAa;IACb,YAAY;IACZ,kBAAkB;IAClB,mBAAmB;IACnB,eAAe;IACf,eAAe;IACf,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,WAAW;IACX,aAAa;IACb,eAAe;IACf,UAAU;CACX,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA0B,EAAE,KAAa;IAC1E,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAM;IACvC,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAAE,OAAM;IACrF,yEAAyE;IACzE,oEAAoE;IACpE,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,UAAU,CAAC;QAAE,OAAM;IAC5E,MAAM,IAAI,KAAK,CACb,IAAI,KAAK,mDAAmD,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,CACzG,CAAA;AACH,CAAC"}