kiru 1.4.1 → 1.5.1

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 (115) hide show
  1. package/dist/components/derive.d.ts +1 -1
  2. package/dist/components/derive.d.ts.map +1 -1
  3. package/dist/constants.d.ts +2 -1
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js +2 -1
  6. package/dist/constants.js.map +1 -1
  7. package/dist/devtools.d.ts +1 -1
  8. package/dist/devtools.d.ts.map +1 -1
  9. package/dist/dom/nodes.d.ts +1 -1
  10. package/dist/dom/nodes.d.ts.map +1 -1
  11. package/dist/dom/nodes.js.map +1 -1
  12. package/dist/dom/props.js.map +1 -1
  13. package/dist/globalContext.d.ts +2 -2
  14. package/dist/globalContext.d.ts.map +1 -1
  15. package/dist/headlessRender.d.ts.map +1 -1
  16. package/dist/headlessRender.js +3 -0
  17. package/dist/headlessRender.js.map +1 -1
  18. package/dist/hooks/onCleanup.d.ts.map +1 -1
  19. package/dist/hooks/onCleanup.js +3 -1
  20. package/dist/hooks/onCleanup.js.map +1 -1
  21. package/dist/hooks/setup.d.ts.map +1 -1
  22. package/dist/hooks/setup.js +11 -28
  23. package/dist/hooks/setup.js.map +1 -1
  24. package/dist/hooks/utils.d.ts.map +1 -1
  25. package/dist/hooks/utils.js +2 -1
  26. package/dist/hooks/utils.js.map +1 -1
  27. package/dist/hydration.d.ts +1 -1
  28. package/dist/hydration.d.ts.map +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/profiling.d.ts +1 -1
  32. package/dist/profiling.d.ts.map +1 -1
  33. package/dist/reconciler.d.ts.map +1 -1
  34. package/dist/reconciler.js +38 -6
  35. package/dist/reconciler.js.map +1 -1
  36. package/dist/resource.d.ts +11 -5
  37. package/dist/resource.d.ts.map +1 -1
  38. package/dist/resource.js +90 -40
  39. package/dist/resource.js.map +1 -1
  40. package/dist/router/client/index.d.ts +1 -1
  41. package/dist/router/client/index.d.ts.map +1 -1
  42. package/dist/router/fileRouterController.d.ts.map +1 -1
  43. package/dist/router/fileRouterController.js +1 -1
  44. package/dist/router/fileRouterController.js.map +1 -1
  45. package/dist/router/globals.d.ts +2 -2
  46. package/dist/router/globals.d.ts.map +1 -1
  47. package/dist/router/link.d.ts +1 -1
  48. package/dist/router/link.d.ts.map +1 -1
  49. package/dist/router/pageConfig.d.ts +1 -1
  50. package/dist/router/pageConfig.d.ts.map +1 -1
  51. package/dist/router/types.d.ts +3 -3
  52. package/dist/router/types.d.ts.map +1 -1
  53. package/dist/router/types.internal.d.ts +2 -2
  54. package/dist/router/types.internal.d.ts.map +1 -1
  55. package/dist/router/utils/index.d.ts +2 -2
  56. package/dist/router/utils/index.d.ts.map +1 -1
  57. package/dist/scheduler.d.ts.map +1 -1
  58. package/dist/scheduler.js +15 -2
  59. package/dist/scheduler.js.map +1 -1
  60. package/dist/signals/base.d.ts +1 -0
  61. package/dist/signals/base.d.ts.map +1 -1
  62. package/dist/signals/base.js +14 -2
  63. package/dist/signals/base.js.map +1 -1
  64. package/dist/signals/effect.d.ts.map +1 -1
  65. package/dist/signals/effect.js +8 -0
  66. package/dist/signals/effect.js.map +1 -1
  67. package/dist/signals/tracking.d.ts +1 -1
  68. package/dist/signals/tracking.d.ts.map +1 -1
  69. package/dist/signals/tracking.js +14 -15
  70. package/dist/signals/tracking.js.map +1 -1
  71. package/dist/ssr/client.d.ts +1 -1
  72. package/dist/ssr/client.d.ts.map +1 -1
  73. package/dist/types.d.ts +31 -7
  74. package/dist/types.d.ts.map +1 -1
  75. package/dist/types.dom.d.ts +190 -2
  76. package/dist/types.dom.d.ts.map +1 -1
  77. package/dist/types.utils.d.ts +28 -21
  78. package/dist/types.utils.d.ts.map +1 -1
  79. package/dist/utils/vdom.d.ts.map +1 -1
  80. package/dist/utils/vdom.js +5 -2
  81. package/dist/utils/vdom.js.map +1 -1
  82. package/package.json +1 -1
  83. package/src/components/derive.ts +1 -1
  84. package/src/constants.ts +2 -0
  85. package/src/devtools.ts +1 -1
  86. package/src/dom/commit.ts +1 -1
  87. package/src/dom/nodes.ts +8 -3
  88. package/src/dom/props.ts +6 -6
  89. package/src/globalContext.ts +2 -2
  90. package/src/headlessRender.ts +4 -1
  91. package/src/hooks/onCleanup.ts +3 -1
  92. package/src/hooks/setup.ts +17 -31
  93. package/src/hooks/utils.ts +2 -1
  94. package/src/hydration.ts +1 -1
  95. package/src/index.ts +1 -1
  96. package/src/profiling.ts +1 -1
  97. package/src/reconciler.ts +51 -9
  98. package/src/resource.ts +119 -45
  99. package/src/router/client/index.ts +2 -2
  100. package/src/router/fileRouterController.ts +5 -5
  101. package/src/router/globals.ts +2 -2
  102. package/src/router/link.ts +1 -1
  103. package/src/router/pageConfig.ts +1 -1
  104. package/src/router/types.internal.ts +2 -2
  105. package/src/router/types.ts +3 -3
  106. package/src/router/utils/index.ts +1 -1
  107. package/src/scheduler.ts +20 -3
  108. package/src/signals/base.ts +20 -2
  109. package/src/signals/effect.ts +8 -0
  110. package/src/signals/tracking.ts +18 -16
  111. package/src/ssr/client.ts +1 -1
  112. package/src/types.dom.ts +270 -53
  113. package/src/types.ts +36 -32
  114. package/src/types.utils.ts +56 -22
  115. package/src/utils/vdom.ts +7 -1
package/src/scheduler.ts CHANGED
@@ -1,6 +1,12 @@
1
- import type { DomVNode, ErrorBoundaryNode, FunctionVNode } from "./types.utils"
1
+ import type {
2
+ DomVNode,
3
+ ErrorBoundaryNode,
4
+ FunctionVNode,
5
+ InlineFnNode,
6
+ } from "./types.utils.js"
2
7
  import {
3
8
  $ERROR_BOUNDARY,
9
+ $INLINE_FN,
4
10
  CONSECUTIVE_DIRTY_LIMIT,
5
11
  FLAG_DELETION,
6
12
  FLAG_DIRTY,
@@ -30,7 +36,7 @@ import { node, postEffectCleanups, renderMode, setups } from "./globals.js"
30
36
  import { hydrationStack } from "./hydration.js"
31
37
  import { reconcileChildren } from "./reconciler.js"
32
38
  import { isHmrUpdate } from "./hmr.js"
33
- import type { AppHandle } from "./appHandle"
39
+ import type { AppHandle } from "./appHandle.js"
34
40
 
35
41
  type VNode = Kiru.VNode
36
42
 
@@ -298,7 +304,18 @@ function updateExoticComponent(vNode: VNode): VNode | null {
298
304
  const { props, type } = vNode
299
305
  let children = props.children
300
306
 
301
- if (type === $ERROR_BOUNDARY) {
307
+ if (type === $INLINE_FN) {
308
+ node.current = vNode
309
+ let render = (props as InlineFnNode["props"]).expr
310
+ if (__DEV__) {
311
+ render = latest(render)
312
+ }
313
+ try {
314
+ children = render()
315
+ } finally {
316
+ node.current = null
317
+ }
318
+ } else if (type === $ERROR_BOUNDARY) {
302
319
  const n = vNode as ErrorBoundaryNode
303
320
  const { error } = n
304
321
  if (error) {
@@ -5,8 +5,14 @@ import {
5
5
  generateRandomID,
6
6
  registerVNodeCleanup,
7
7
  } from "../utils/index.js"
8
- import { $DEV_FILE_LINK, $HMR_ACCEPT, $SIGNAL } from "../constants.js"
8
+ import {
9
+ $DEV_FILE_LINK,
10
+ $HMR_ACCEPT,
11
+ $INLINE_FN,
12
+ $SIGNAL,
13
+ } from "../constants.js"
9
14
  import { __DEV__, isBrowser } from "../env.js"
15
+ import { KiruError } from "../error.js"
10
16
  import { node } from "../globals.js"
11
17
  import { requestUpdate } from "../scheduler.js"
12
18
  import { tracking } from "./tracking.js"
@@ -58,7 +64,15 @@ export class Signal<T> {
58
64
 
59
65
  const n = node.current
60
66
  if (n) {
61
- registerVNodeCleanup(n, this.$id, Signal.dispose.bind(null, this))
67
+ if (__DEV__ && n.type === $INLINE_FN) {
68
+ throw new KiruError({
69
+ message: "Signals cannot be created inside inline functions",
70
+ vNode: n,
71
+ })
72
+ }
73
+ if (sideEffectsEnabled()) {
74
+ registerVNodeCleanup(n, this.$id, Signal.dispose.bind(null, this))
75
+ }
62
76
  }
63
77
  }
64
78
 
@@ -151,6 +165,10 @@ export class Signal<T> {
151
165
  return typeof x === "object" && !!x && $SIGNAL in x
152
166
  }
153
167
 
168
+ static id(signal: Signal<any>) {
169
+ return signal.$id
170
+ }
171
+
154
172
  static subscribers(signal: Signal<any>) {
155
173
  return signal.$subs
156
174
  }
@@ -11,6 +11,8 @@ import {
11
11
  import type { Signal } from "./base.js"
12
12
  import type { SignalValues } from "./types.js"
13
13
  import { node } from "../globals.js"
14
+ import { $INLINE_FN } from "../constants.js"
15
+ import { KiruError } from "../error.js"
14
16
 
15
17
  type EffectCallbackReturn = (() => void) | void
16
18
 
@@ -37,6 +39,12 @@ export class Effect<const Deps extends readonly Signal<unknown>[] = []> {
37
39
  }
38
40
  const n = node.current
39
41
  if (n) {
42
+ if (__DEV__ && n.type === $INLINE_FN) {
43
+ throw new KiruError({
44
+ message: "Effects cannot be created inside inline functions",
45
+ vNode: n,
46
+ })
47
+ }
40
48
  if (!sideEffectsEnabled()) return // prevent side effects in non-browser environments
41
49
  registerVNodeCleanup(n, this.id, this.stop.bind(this))
42
50
  }
@@ -9,7 +9,7 @@ export type TrackingStackObservations = Map<string, Signal<unknown>>
9
9
  export const tracking = {
10
10
  enabled: true,
11
11
  stack: new Array<TrackingStackObservations>(),
12
- current: function (): TrackingStackObservations | undefined {
12
+ current(): TrackingStackObservations | undefined {
13
13
  return this.stack[this.stack.length - 1]
14
14
  },
15
15
  }
@@ -32,25 +32,19 @@ export function executeWithTracking<T, Deps extends readonly Signal<unknown>[]>(
32
32
  ctx: TrackedExecutionContext<T, Deps>
33
33
  ): T {
34
34
  const { id, subs, fn, deps = [], onDepChanged } = ctx
35
- let observations: Map<string, Signal<unknown>> | undefined
35
+ let observations: TrackingStackObservations | undefined
36
36
 
37
37
  effectQueue.delete(id)
38
- const isServer = !!node.current && !sideEffectsEnabled()
39
38
 
40
- if (!isServer) {
41
- observations = new Map<string, Signal<unknown>>()
39
+ // Prevent side effects in non-browser environments while rendering
40
+ if (!node.current || sideEffectsEnabled()) {
41
+ observations = new Map()
42
42
  tracking.stack.push(observations)
43
43
  }
44
44
 
45
45
  const result = fn(...(deps.map((s) => s.value) as SignalValues<Deps>))
46
46
 
47
- if (!isServer) {
48
- for (const [id, unsub] of subs) {
49
- if (observations!.has(id)) continue
50
- unsub()
51
- subs.delete(id)
52
- }
53
-
47
+ if (observations) {
54
48
  const effect = () => {
55
49
  if (!effectQueue.size) {
56
50
  queueMicrotask(tick)
@@ -58,11 +52,19 @@ export function executeWithTracking<T, Deps extends readonly Signal<unknown>[]>(
58
52
  effectQueue.set(id, onDepChanged)
59
53
  }
60
54
 
61
- for (const [id, sig] of observations!) {
62
- if (subs.has(id)) continue
63
- const unsub = sig.subscribe(effect)
64
- subs.set(id, unsub)
55
+ for (const [id, signal] of observations) {
56
+ if (!subs.has(id)) {
57
+ subs.set(id, signal.subscribe(effect))
58
+ }
65
59
  }
60
+
61
+ for (const [id, unsub] of subs) {
62
+ if (!observations.has(id)) {
63
+ unsub()
64
+ subs.delete(id)
65
+ }
66
+ }
67
+
66
68
  tracking.stack.pop()
67
69
  }
68
70
 
package/src/ssr/client.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AppHandle, AppHandleOptions } from "../appHandle"
1
+ import type { AppHandle, AppHandleOptions } from "../appHandle.js"
2
2
  import { hydrationStack } from "../hydration.js"
3
3
  import { hydrationMode, renderMode } from "../globals.js"
4
4
  import { mount } from "../index.js"
package/src/types.dom.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { Signal } from "./signals"
2
- import type { Prettify, Signalable } from "./types.utils"
1
+ import type { Signal } from "./signals/base.js"
2
+ import type { Prettify, Signalable } from "./types.utils.js"
3
3
 
4
4
  export type {
5
5
  HTMLTagToElement,
@@ -16,8 +16,8 @@ type HTMLTagToElement<T extends keyof HtmlElementAttributes> =
16
16
  T extends keyof HTMLElementTagNameMap
17
17
  ? HTMLElementTagNameMap[T]
18
18
  : T extends keyof HTMLElementDeprecatedTagNameMap
19
- ? HTMLElementDeprecatedTagNameMap[T]
20
- : never
19
+ ? HTMLElementDeprecatedTagNameMap[T]
20
+ : never
21
21
 
22
22
  type SVGTagToElement<T extends keyof SvgElementAttributes> =
23
23
  T extends keyof SVGElementTagNameMap ? SVGElementTagNameMap[T] : never
@@ -369,53 +369,81 @@ declare global {
369
369
  bivarianceHack(event: E): void
370
370
  }["bivarianceHack"]
371
371
 
372
- interface BaseEvent<T extends DomElement = DomElement>
373
- extends DOMEvent<Event, T> {}
374
-
375
- interface AnimationEvent<T extends DomElement = DomElement>
376
- extends DOMEvent<NativeAnimationEvent, T> {}
377
-
378
- interface ClipboardEvent<T extends DomElement = DomElement>
379
- extends DOMEvent<NativeClipboardEvent, T> {}
380
-
381
- interface CompositionEvent<T extends DomElement = DomElement>
382
- extends DOMEvent<NativeCompositionEvent, T> {}
383
-
384
- interface DragEvent<T extends DomElement = DomElement>
385
- extends DOMEvent<NativeDragEvent, T> {}
386
-
387
- interface FocusEvent<T extends DomElement = DomElement>
388
- extends DOMEvent<NativeFocusEvent, T> {}
389
-
390
- interface FormEvent<T extends DomElement = DomElement>
391
- extends DOMEvent<Event, T> {}
392
-
393
- interface KeyboardEvent<T extends DomElement = DomElement>
394
- extends DOMEvent<NativeKeyboardEvent, T> {}
395
-
396
- interface MouseEvent<T extends DomElement = DomElement>
397
- extends DOMEvent<NativeMouseEvent, T> {}
398
-
399
- interface PointerEvent<T extends DomElement = DomElement>
400
- extends DOMEvent<NativePointerEvent, T> {}
401
-
402
- interface SubmitEvent<T extends DomElement = DomElement>
403
- extends DOMEvent<NativeSubmitEvent, T> {}
404
-
405
- interface TouchEvent<T extends DomElement = DomElement>
406
- extends DOMEvent<NativeTouchEvent, T> {}
407
-
408
- interface ToggleEvent<T extends DomElement = DomElement>
409
- extends DOMEvent<NativeToggleEvent, T> {}
410
-
411
- interface TransitionEvent<T extends DomElement = DomElement>
412
- extends DOMEvent<NativeTransitionEvent, T> {}
413
-
414
- interface UIEvent<T extends DomElement = DomElement>
415
- extends DOMEvent<NativeUIEvent, T> {}
416
-
417
- interface WheelEvent<T extends DomElement = DomElement>
418
- extends DOMEvent<NativeWheelEvent, T> {}
372
+ interface BaseEvent<T extends DomElement = DomElement> extends DOMEvent<
373
+ Event,
374
+ T
375
+ > {}
376
+
377
+ interface AnimationEvent<
378
+ T extends DomElement = DomElement,
379
+ > extends DOMEvent<NativeAnimationEvent, T> {}
380
+
381
+ interface ClipboardEvent<
382
+ T extends DomElement = DomElement,
383
+ > extends DOMEvent<NativeClipboardEvent, T> {}
384
+
385
+ interface CompositionEvent<
386
+ T extends DomElement = DomElement,
387
+ > extends DOMEvent<NativeCompositionEvent, T> {}
388
+
389
+ interface DragEvent<T extends DomElement = DomElement> extends DOMEvent<
390
+ NativeDragEvent,
391
+ T
392
+ > {}
393
+
394
+ interface FocusEvent<T extends DomElement = DomElement> extends DOMEvent<
395
+ NativeFocusEvent,
396
+ T
397
+ > {}
398
+
399
+ interface FormEvent<T extends DomElement = DomElement> extends DOMEvent<
400
+ Event,
401
+ T
402
+ > {}
403
+
404
+ interface KeyboardEvent<T extends DomElement = DomElement> extends DOMEvent<
405
+ NativeKeyboardEvent,
406
+ T
407
+ > {}
408
+
409
+ interface MouseEvent<T extends DomElement = DomElement> extends DOMEvent<
410
+ NativeMouseEvent,
411
+ T
412
+ > {}
413
+
414
+ interface PointerEvent<T extends DomElement = DomElement> extends DOMEvent<
415
+ NativePointerEvent,
416
+ T
417
+ > {}
418
+
419
+ interface SubmitEvent<T extends DomElement = DomElement> extends DOMEvent<
420
+ NativeSubmitEvent,
421
+ T
422
+ > {}
423
+
424
+ interface TouchEvent<T extends DomElement = DomElement> extends DOMEvent<
425
+ NativeTouchEvent,
426
+ T
427
+ > {}
428
+
429
+ interface ToggleEvent<T extends DomElement = DomElement> extends DOMEvent<
430
+ NativeToggleEvent,
431
+ T
432
+ > {}
433
+
434
+ interface TransitionEvent<
435
+ T extends DomElement = DomElement,
436
+ > extends DOMEvent<NativeTransitionEvent, T> {}
437
+
438
+ interface UIEvent<T extends DomElement = DomElement> extends DOMEvent<
439
+ NativeUIEvent,
440
+ T
441
+ > {}
442
+
443
+ interface WheelEvent<T extends DomElement = DomElement> extends DOMEvent<
444
+ NativeWheelEvent,
445
+ T
446
+ > {}
419
447
 
420
448
  type BaseEventHandler<T extends DomElement = DomElement> = EventHandler<
421
449
  BaseEvent<T>
@@ -466,8 +494,9 @@ declare global {
466
494
  ) => void
467
495
  }
468
496
 
469
- interface EventAttributes<T extends DomElement = DomElement>
470
- extends CustomEventAttributes {
497
+ interface EventAttributes<
498
+ T extends DomElement = DomElement,
499
+ > extends CustomEventAttributes {
471
500
  // Clipboard Events
472
501
  oncopy?: ClipboardEventHandler<T> | undefined
473
502
  oncut?: ClipboardEventHandler<T> | undefined
@@ -1035,6 +1064,7 @@ interface HtmlElementAttributes {
1035
1064
  ev: PictureInPictureEvent
1036
1065
  ) => void
1037
1066
  }
1067
+ wbr: {}
1038
1068
  }
1039
1069
 
1040
1070
  interface SvgGlobalAttributes {
@@ -1091,6 +1121,46 @@ interface FeFuncAttributes {
1091
1121
  }
1092
1122
 
1093
1123
  interface SvgElementAttributes {
1124
+ animate: {
1125
+ begin?: string
1126
+ dur?: string
1127
+ end?: string
1128
+ min?: string
1129
+ max?: string
1130
+ restart?: "always" | "whenNotActive" | "never"
1131
+ repeatCount?: "indefinite" | number
1132
+ repeatDur?: string
1133
+ fill?: "freeze" | "remove" | "default"
1134
+ calcMode?: "linear" | "discrete" | "spline" | "paced"
1135
+ keyTimes?: string
1136
+ keySplines?: string
1137
+ values?: string
1138
+ from?: string
1139
+ to?: string
1140
+ by?: string
1141
+ attributeName?: string
1142
+ attributeType?: "CSS" | "XML"
1143
+ additive?: "replace" | "sum"
1144
+ accumulate?: "none" | "sum"
1145
+ }
1146
+ animateMotion: {
1147
+ begin?: string
1148
+ dur?: string
1149
+ end?: string
1150
+ min?: string
1151
+ max?: string
1152
+ restart?: "always" | "whenNotActive" | "never"
1153
+ repeatCount?: "indefinite" | number
1154
+ repeatDur?: string
1155
+ fill?: "freeze" | "remove" | "default"
1156
+ calcMode?: "linear" | "discrete" | "spline" | "paced"
1157
+ keyTimes?: string
1158
+ keySplines?: string
1159
+ path?: string
1160
+ keyPoints?: string
1161
+ rotate?: "none" | (string & {})
1162
+ origin?: string
1163
+ }
1094
1164
  animateTransform: {
1095
1165
  begin?: string
1096
1166
  dur?: string
@@ -1126,6 +1196,69 @@ interface SvgElementAttributes {
1126
1196
  }
1127
1197
  defs: {}
1128
1198
  desc: {}
1199
+ foreignObject: {
1200
+ x?: string | number
1201
+ y?: string | number
1202
+ width?: string | number
1203
+ height?: string | number
1204
+ requiredExtensions?: string
1205
+ requiredFeatures?: string
1206
+ systemLanguage?: string
1207
+ }
1208
+ marker: {
1209
+ markerUnits?: "userSpaceOnUse" | "strokeWidth"
1210
+ markerWidth?: string | number
1211
+ markerHeight?: string | number
1212
+ refX?: string | number
1213
+ refY?: string | number
1214
+ orient?: "auto" | "auto-start-reverse" | string
1215
+ viewBox?: string
1216
+ }
1217
+ metadata: {}
1218
+ mpath: {
1219
+ href?: string
1220
+ "xlink:href"?: string
1221
+ }
1222
+ set: {
1223
+ begin?: string
1224
+ dur?: string
1225
+ end?: string
1226
+ min?: string
1227
+ max?: string
1228
+ restart?: "always" | "whenNotActive" | "never"
1229
+ repeatCount?: "indefinite" | number
1230
+ repeatDur?: string
1231
+ fill?: "freeze" | "remove" | "default"
1232
+ attributeName?: string
1233
+ attributeType?: "CSS" | "XML"
1234
+ to?: string
1235
+ }
1236
+ switch: {
1237
+ requiredExtensions?: string
1238
+ requiredFeatures?: string
1239
+ systemLanguage?: string
1240
+ }
1241
+ symbol: {
1242
+ x?: string | number
1243
+ y?: string | number
1244
+ width?: string | number
1245
+ height?: string | number
1246
+ viewBox?: string
1247
+ preserveAspectRatio?: string
1248
+ }
1249
+ use: {
1250
+ href?: string
1251
+ "xlink:href"?: string
1252
+ x?: string | number
1253
+ y?: string | number
1254
+ width?: string | number
1255
+ height?: string | number
1256
+ }
1257
+ view: {
1258
+ viewBox?: string
1259
+ preserveAspectRatio?: string
1260
+ zoomAndPan?: "magnify" | "disable" | string
1261
+ }
1129
1262
  ellipse: SvgStrokeAttributes & {
1130
1263
  cx?: string | number
1131
1264
  cy?: string | number
@@ -1140,6 +1273,90 @@ interface SvgElementAttributes {
1140
1273
  in2?: string
1141
1274
  result?: string
1142
1275
  }
1276
+ feColorMatrix: {
1277
+ in?: string
1278
+ type?: "matrix" | "saturate" | "hueRotate" | "luminanceToAlpha"
1279
+ values?: string
1280
+ result?: string
1281
+ }
1282
+ feComposite: {
1283
+ in?: string
1284
+ in2?: string
1285
+ operator?: "over" | "in" | "out" | "atop" | "xor" | "arithmetic"
1286
+ k1?: string | number
1287
+ k2?: string | number
1288
+ k3?: string | number
1289
+ k4?: string | number
1290
+ result?: string
1291
+ }
1292
+ feConvolveMatrix: {
1293
+ in?: string
1294
+ order?: string
1295
+ kernelMatrix?: string
1296
+ divisor?: string | number
1297
+ bias?: string | number
1298
+ targetX?: string | number
1299
+ targetY?: string | number
1300
+ edgeMode?: "duplicate" | "wrap" | "none"
1301
+ preserveAlpha?: boolean
1302
+ result?: string
1303
+ }
1304
+ feDiffuseLighting: {
1305
+ in?: string
1306
+ surfaceScale?: string | number
1307
+ diffuseConstant?: string | number
1308
+ kernelUnitLength?: string
1309
+ lightingColor?: string
1310
+ azimuth?: string | number
1311
+ elevation?: string | number
1312
+ result?: string
1313
+ }
1314
+ feImage: {
1315
+ x?: string | number
1316
+ y?: string | number
1317
+ width?: string | number
1318
+ height?: string | number
1319
+ preserveAspectRatio?: string
1320
+ href?: string
1321
+ result?: string
1322
+ }
1323
+ feMerge: {
1324
+ result?: string
1325
+ }
1326
+ feMergeNode: {
1327
+ in?: string
1328
+ }
1329
+ feMorphology: {
1330
+ in?: string
1331
+ operator?: "erode" | "dilate"
1332
+ radius?: string | number
1333
+ result?: string
1334
+ }
1335
+ feOffset: {
1336
+ in?: string
1337
+ dx?: string | number
1338
+ dy?: string | number
1339
+ result?: string
1340
+ }
1341
+ feSpecularLighting: {
1342
+ in?: string
1343
+ surfaceScale?: string | number
1344
+ specularConstant?: string | number
1345
+ specularExponent?: string | number
1346
+ kernelUnitLength?: string
1347
+ lightingColor?: string
1348
+ azimuth?: string | number
1349
+ elevation?: string | number
1350
+ result?: string
1351
+ }
1352
+ feTile: {
1353
+ in?: string
1354
+ x?: string | number
1355
+ y?: string | number
1356
+ width?: string | number
1357
+ height?: string | number
1358
+ result?: string
1359
+ }
1143
1360
  feFuncR: FeFuncAttributes
1144
1361
  feFuncG: FeFuncAttributes
1145
1362
  feFuncB: FeFuncAttributes