@ktjs/core 0.19.1 → 0.20.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.
@@ -5,6 +5,7 @@ type otherstring = string & {};
5
5
  */
6
6
  type HTMLTag = keyof HTMLElementTagNameMap;
7
7
  type SVGTag = keyof SVGElementTagNameMap;
8
+ type MathMLTag = keyof MathMLElementTagNameMap;
8
9
 
9
10
  type RefChangeHandler<T> = (newValue: T, oldValue: T) => void;
10
11
  declare class KTRef<T> {
@@ -24,1180 +25,6 @@ declare class KTRef<T> {
24
25
  removeOnChange(callback: RefChangeHandler<T>): boolean;
25
26
  }
26
27
 
27
- // Base events available to all HTML elements
28
- interface BaseAttr {
29
- [k: string]: any;
30
-
31
- // # base attributes
32
- class?: string;
33
- className?: string;
34
- style?: string | Partial<CSSStyleDeclaration>;
35
-
36
- // # Events
37
- // Mouse events
38
- 'on:click'?: (ev: PointerEvent) => void;
39
- 'on:dblclick'?: (ev: PointerEvent) => void;
40
- 'on:mousedown'?: (ev: PointerEvent) => void;
41
- 'on:mouseup'?: (ev: MouseEvent) => void;
42
- 'on:mousemove'?: (ev: MouseEvent) => void;
43
- 'on:mouseenter'?: (ev: MouseEvent) => void;
44
- 'on:mouseleave'?: (ev: MouseEvent) => void;
45
- 'on:mouseover'?: (ev: MouseEvent) => void;
46
- 'on:mouseout'?: (ev: MouseEvent) => void;
47
- 'on:contextmenu'?: (ev: PointerEvent) => void;
48
-
49
- // Keyboard events
50
- 'on:keydown'?: (ev: KeyboardEvent) => void;
51
- 'on:keyup'?: (ev: KeyboardEvent) => void;
52
- 'on:keypress'?: (ev: KeyboardEvent) => void;
53
-
54
- // Focus events
55
- 'on:focus'?: (ev: FocusEvent) => void;
56
- 'on:blur'?: (ev: FocusEvent) => void;
57
- 'on:focusin'?: (ev: FocusEvent) => void;
58
- 'on:focusout'?: (ev: FocusEvent) => void;
59
-
60
- // Input events
61
- 'on:input'?: (ev: Event) => void;
62
- 'on:change'?: (ev: Event) => void;
63
- 'on:beforeinput'?: (ev: InputEvent) => void;
64
-
65
- // Drag events
66
- 'on:drag'?: (ev: DragEvent) => void;
67
- 'on:dragstart'?: (ev: DragEvent) => void;
68
- 'on:dragend'?: (ev: DragEvent) => void;
69
- 'on:dragenter'?: (ev: DragEvent) => void;
70
- 'on:dragleave'?: (ev: DragEvent) => void;
71
- 'on:dragover'?: (ev: DragEvent) => void;
72
- 'on:drop'?: (ev: DragEvent) => void;
73
-
74
- // Clipboard events
75
- 'on:copy'?: (ev: ClipboardEvent) => void;
76
- 'on:cut'?: (ev: ClipboardEvent) => void;
77
- 'on:paste'?: (ev: ClipboardEvent) => void;
78
-
79
- // Touch events
80
- 'on:touchstart'?: (ev: TouchEvent) => void;
81
- 'on:touchmove'?: (ev: TouchEvent) => void;
82
- 'on:touchend'?: (ev: TouchEvent) => void;
83
- 'on:touchcancel'?: (ev: TouchEvent) => void;
84
-
85
- // Wheel event
86
- 'on:wheel'?: (ev: WheelEvent) => void;
87
-
88
- // Animation events
89
- 'on:animationstart'?: (ev: AnimationEvent) => void;
90
- 'on:animationend'?: (ev: AnimationEvent) => void;
91
- 'on:animationiteration'?: (ev: AnimationEvent) => void;
92
-
93
- // Transition events
94
- 'on:transitionstart'?: (ev: TransitionEvent) => void;
95
- 'on:transitionend'?: (ev: TransitionEvent) => void;
96
- 'on:transitionrun'?: (ev: TransitionEvent) => void;
97
- 'on:transitioncancel'?: (ev: TransitionEvent) => void;
98
-
99
- // Pointer events
100
- 'on:pointerdown'?: (ev: PointerEvent) => void;
101
- 'on:pointerup'?: (ev: PointerEvent) => void;
102
- 'on:pointermove'?: (ev: PointerEvent) => void;
103
- 'on:pointerenter'?: (ev: PointerEvent) => void;
104
- 'on:pointerleave'?: (ev: PointerEvent) => void;
105
- 'on:pointerover'?: (ev: PointerEvent) => void;
106
- 'on:pointerout'?: (ev: PointerEvent) => void;
107
- 'on:pointercancel'?: (ev: PointerEvent) => void;
108
- 'on:gotpointercapture'?: (ev: PointerEvent) => void;
109
- 'on:lostpointercapture'?: (ev: PointerEvent) => void;
110
-
111
- // Selection events
112
- 'on:select'?: (ev: Event) => void;
113
- 'on:selectstart'?: (ev: Event) => void;
114
-
115
- // Scroll event
116
- 'on:scroll'?: (ev: Event) => void;
117
-
118
- // Resize event
119
- 'on:resize'?: (ev: UIEvent) => void;
120
- }
121
-
122
- // Form-specific events
123
- interface FormElementEvents {
124
- 'on:submit'?: (ev: SubmitEvent) => void;
125
- 'on:reset'?: (ev: Event) => void;
126
- 'on:invalid'?: (ev: Event) => void;
127
- }
128
-
129
- // Media-specific events
130
- interface MediaElementEvents {
131
- 'on:play'?: (ev: Event) => void;
132
- 'on:pause'?: (ev: Event) => void;
133
- 'on:playing'?: (ev: Event) => void;
134
- 'on:ended'?: (ev: Event) => void;
135
- 'on:canplay'?: (ev: Event) => void;
136
- 'on:canplaythrough'?: (ev: Event) => void;
137
- 'on:durationchange'?: (ev: Event) => void;
138
- 'on:emptied'?: (ev: Event) => void;
139
- 'on:loadeddata'?: (ev: Event) => void;
140
- 'on:loadedmetadata'?: (ev: Event) => void;
141
- 'on:loadstart'?: (ev: Event) => void;
142
- 'on:progress'?: (ev: ProgressEvent) => void;
143
- 'on:ratechange'?: (ev: Event) => void;
144
- 'on:seeked'?: (ev: Event) => void;
145
- 'on:seeking'?: (ev: Event) => void;
146
- 'on:stalled'?: (ev: Event) => void;
147
- 'on:suspend'?: (ev: Event) => void;
148
- 'on:timeupdate'?: (ev: Event) => void;
149
- 'on:volumechange'?: (ev: Event) => void;
150
- 'on:waiting'?: (ev: Event) => void;
151
- 'on:abort'?: (ev: UIEvent) => void;
152
- 'on:error'?: (ev: ErrorEvent) => void;
153
- }
154
-
155
- // Details-specific events
156
- interface DetailsElementEvents {
157
- 'on:toggle'?: (ev: Event) => void;
158
- }
159
-
160
- // Dialog-specific events
161
- interface DialogElementEvents {
162
- 'on:cancel'?: (ev: Event) => void;
163
- 'on:close'?: (ev: Event) => void;
164
- }
165
-
166
- // Image-specific events
167
- interface ImageElementEvents {
168
- 'on:load'?: (ev: Event) => void;
169
- 'on:error'?: (ev: ErrorEvent) => void;
170
- }
171
-
172
- interface AttributesMap {
173
- // Anchor element
174
- a: BaseAttr & {
175
- download?: string;
176
- href?: string;
177
- hreflang?: string;
178
- ping?: string;
179
- referrerpolicy?:
180
- | 'no-referrer'
181
- | 'no-referrer-when-downgrade'
182
- | 'origin'
183
- | 'origin-when-cross-origin'
184
- | 'same-origin'
185
- | 'strict-origin'
186
- | 'strict-origin-when-cross-origin'
187
- | 'unsafe-url';
188
- rel?: string;
189
- target?: '_self' | '_blank' | '_parent' | '_top' | string;
190
- type?: string;
191
- };
192
-
193
- // Area element
194
- area: BaseAttr & {
195
- alt?: string;
196
- coords?: string;
197
- download?: string;
198
- href?: string;
199
- ping?: string;
200
- referrerpolicy?:
201
- | 'no-referrer'
202
- | 'no-referrer-when-downgrade'
203
- | 'origin'
204
- | 'origin-when-cross-origin'
205
- | 'same-origin'
206
- | 'strict-origin'
207
- | 'strict-origin-when-cross-origin'
208
- | 'unsafe-url';
209
- rel?: string;
210
- shape?: 'rect' | 'circle' | 'poly' | 'default';
211
- target?: '_self' | '_blank' | '_parent' | '_top' | string;
212
- };
213
-
214
- // Audio element
215
- audio: BaseAttr &
216
- MediaElementEvents & {
217
- autoplay?: boolean;
218
- controls?: boolean;
219
- crossorigin?: 'anonymous' | 'use-credentials' | '';
220
- loop?: boolean;
221
- muted?: boolean;
222
- preload?: 'none' | 'metadata' | 'auto' | '';
223
- src?: string;
224
- };
225
-
226
- // Base element
227
- base: BaseAttr & {
228
- href?: string;
229
- target?: '_self' | '_blank' | '_parent' | '_top' | string;
230
- };
231
-
232
- // Body element
233
- body: BaseAttr & {};
234
-
235
- // BR element
236
- br: BaseAttr & {};
237
-
238
- // Button element
239
- button: BaseAttr & {
240
- disabled?: boolean;
241
- form?: string;
242
- formaction?: string;
243
- formenctype?: 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain';
244
- formmethod?: 'get' | 'post' | 'dialog';
245
- formnovalidate?: boolean;
246
- formtarget?: '_self' | '_blank' | '_parent' | '_top' | string;
247
- name?: string;
248
- type?: 'submit' | 'reset' | 'button';
249
- value?: string;
250
- };
251
-
252
- // Canvas element
253
- canvas: BaseAttr & {
254
- height?: number | string;
255
- width?: number | string;
256
- };
257
-
258
- // Table caption element
259
- caption: BaseAttr & {};
260
-
261
- // Col element
262
- col: BaseAttr & {
263
- span?: number | string;
264
- };
265
-
266
- // Colgroup element
267
- colgroup: BaseAttr & {
268
- span?: number | string;
269
- };
270
-
271
- // Data element
272
- data: BaseAttr & {
273
- value?: string;
274
- };
275
-
276
- // Datalist element
277
- datalist: BaseAttr & {};
278
-
279
- // Del element
280
- del: BaseAttr & {
281
- cite?: string;
282
- datetime?: string;
283
- };
284
-
285
- // Details element
286
- details: BaseAttr &
287
- DetailsElementEvents & {
288
- open?: boolean;
289
- };
290
-
291
- // Dialog element
292
- dialog: BaseAttr &
293
- DialogElementEvents & {
294
- open?: boolean;
295
- };
296
-
297
- // Embed element
298
- embed: BaseAttr & {
299
- height?: number | string;
300
- src?: string;
301
- type?: string;
302
- width?: number | string;
303
- };
304
-
305
- // Fieldset element
306
- fieldset: BaseAttr & {
307
- disabled?: boolean;
308
- form?: string;
309
- name?: string;
310
- };
311
-
312
- // Form element
313
- form: BaseAttr &
314
- FormElementEvents & {
315
- 'accept-charset'?: string;
316
- action?: string;
317
- autocomplete?: 'on' | 'off';
318
- enctype?: 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain';
319
- method?: 'POST' | 'GET' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | 'CONNECT' | 'TRACE' | otherstring;
320
-
321
- name?: string;
322
- novalidate?: boolean;
323
- target?: '_self' | '_blank' | '_parent' | '_top' | string;
324
- };
325
-
326
- // Head element
327
- head: BaseAttr & {};
328
-
329
- // HR element
330
- hr: BaseAttr & {};
331
-
332
- // HTML element
333
- html: BaseAttr & {};
334
-
335
- // IFrame element
336
- iframe: BaseAttr &
337
- ImageElementEvents & {
338
- allow?: string;
339
- allowfullscreen?: boolean;
340
- allowpaymentrequest?: boolean;
341
- height?: number | string;
342
- loading?: 'eager' | 'lazy';
343
- name?: string;
344
- referrerpolicy?:
345
- | 'no-referrer'
346
- | 'no-referrer-when-downgrade'
347
- | 'origin'
348
- | 'origin-when-cross-origin'
349
- | 'same-origin'
350
- | 'strict-origin'
351
- | 'strict-origin-when-cross-origin'
352
- | 'unsafe-url';
353
- sandbox?: string;
354
- src?: string;
355
- srcdoc?: string;
356
- width?: number | string;
357
- };
358
-
359
- // Image element
360
- img: BaseAttr &
361
- ImageElementEvents & {
362
- alt?: string;
363
- crossorigin?: 'anonymous' | 'use-credentials' | '';
364
- decoding?: 'sync' | 'async' | 'auto';
365
- height?: number | string;
366
- ismap?: boolean;
367
- loading?: 'eager' | 'lazy';
368
- referrerpolicy?:
369
- | 'no-referrer'
370
- | 'no-referrer-when-downgrade'
371
- | 'origin'
372
- | 'origin-when-cross-origin'
373
- | 'same-origin'
374
- | 'strict-origin'
375
- | 'strict-origin-when-cross-origin'
376
- | 'unsafe-url';
377
- sizes?: string;
378
- src?: string;
379
- srcset?: string;
380
- usemap?: string;
381
- width?: number | string;
382
- };
383
-
384
- // Input element
385
- input: BaseAttr & {
386
- accept?: string;
387
- alt?: string;
388
- autocomplete?: string;
389
- checked?: boolean;
390
- dirname?: string;
391
- disabled?: boolean;
392
- form?: string;
393
- formaction?: string;
394
- formenctype?: 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain';
395
- formmethod?: 'get' | 'post';
396
- formnovalidate?: boolean;
397
- formtarget?: '_self' | '_blank' | '_parent' | '_top' | string;
398
- height?: number | string;
399
- list?: string;
400
- max?: number | string;
401
- maxlength?: number | string;
402
- min?: number | string;
403
- minlength?: number | string;
404
- multiple?: boolean;
405
- name?: string;
406
- pattern?: string;
407
- placeholder?: string;
408
- readonly?: boolean;
409
- required?: boolean;
410
- size?: number | string;
411
- src?: string;
412
- step?: number | string;
413
- type?:
414
- | 'button'
415
- | 'checkbox'
416
- | 'color'
417
- | 'date'
418
- | 'datetime-local'
419
- | 'email'
420
- | 'file'
421
- | 'hidden'
422
- | 'image'
423
- | 'month'
424
- | 'number'
425
- | 'password'
426
- | 'radio'
427
- | 'range'
428
- | 'reset'
429
- | 'search'
430
- | 'submit'
431
- | 'tel'
432
- | 'text'
433
- | 'time'
434
- | 'url'
435
- | 'week';
436
- value?: string;
437
- width?: number | string;
438
- };
439
-
440
- // Ins element
441
- ins: BaseAttr & {
442
- cite?: string;
443
- datetime?: string;
444
- };
445
-
446
- // Label element
447
- label: BaseAttr & {
448
- for?: string;
449
- };
450
-
451
- // Legend element
452
- legend: BaseAttr & {};
453
-
454
- // LI element
455
- li: BaseAttr & {
456
- value?: number | string;
457
- };
458
-
459
- // Link element
460
- link: BaseAttr &
461
- ImageElementEvents & {
462
- as?: string;
463
- crossorigin?: 'anonymous' | 'use-credentials' | '';
464
- disabled?: boolean;
465
- href?: string;
466
- hreflang?: string;
467
- imagesizes?: string;
468
- imagesrcset?: string;
469
- integrity?: string;
470
- media?: string;
471
- referrerpolicy?:
472
- | 'no-referrer'
473
- | 'no-referrer-when-downgrade'
474
- | 'origin'
475
- | 'origin-when-cross-origin'
476
- | 'same-origin'
477
- | 'strict-origin'
478
- | 'strict-origin-when-cross-origin'
479
- | 'unsafe-url';
480
- rel?: string;
481
- sizes?: string;
482
- type?: string;
483
- };
484
-
485
- // Map element
486
- map: BaseAttr & {
487
- name?: string;
488
- };
489
-
490
- // Menu element
491
- menu: BaseAttr & {};
492
-
493
- // Meta element
494
- meta: BaseAttr & {
495
- charset?: string;
496
- content?: string;
497
- 'http-equiv'?: 'content-security-policy' | 'content-type' | 'default-style' | 'refresh' | string;
498
- name?: string;
499
- };
500
-
501
- // Meter element
502
- meter: BaseAttr & {
503
- form?: string;
504
- high?: number | string;
505
- low?: number | string;
506
- max?: number | string;
507
- min?: number | string;
508
- optimum?: number | string;
509
- value?: number | string;
510
- };
511
-
512
- // Object element
513
- object: BaseAttr &
514
- ImageElementEvents & {
515
- data?: string;
516
- form?: string;
517
- height?: number | string;
518
- name?: string;
519
- type?: string;
520
- usemap?: string;
521
- width?: number | string;
522
- };
523
-
524
- // OL element
525
- ol: BaseAttr & {
526
- reversed?: boolean;
527
- start?: number | string;
528
- type?: '1' | 'a' | 'A' | 'i' | 'I';
529
- };
530
-
531
- // Optgroup element
532
- optgroup: BaseAttr & {
533
- disabled?: boolean;
534
- label?: string;
535
- };
536
-
537
- // Option element
538
- option: BaseAttr & {
539
- disabled?: boolean;
540
- label?: string;
541
- selected?: boolean;
542
- value?: string;
543
- };
544
-
545
- // Output element
546
- output: BaseAttr & {
547
- for?: string;
548
- form?: string;
549
- name?: string;
550
- };
551
-
552
- // Picture element
553
- picture: BaseAttr & {};
554
-
555
- // Pre element
556
- pre: BaseAttr & {};
557
-
558
- // Progress element
559
- progress: BaseAttr & {
560
- max?: number | string;
561
- value?: number | string;
562
- };
563
-
564
- // Quote element (q and blockquote)
565
- q: BaseAttr & {
566
- cite?: string;
567
- };
568
-
569
- blockquote: BaseAttr & {
570
- cite?: string;
571
- };
572
-
573
- // Script element
574
- script: BaseAttr &
575
- ImageElementEvents & {
576
- async?: boolean;
577
- crossorigin?: 'anonymous' | 'use-credentials' | '';
578
- defer?: boolean;
579
- integrity?: string;
580
- nomodule?: boolean;
581
- referrerpolicy?:
582
- | 'no-referrer'
583
- | 'no-referrer-when-downgrade'
584
- | 'origin'
585
- | 'origin-when-cross-origin'
586
- | 'same-origin'
587
- | 'strict-origin'
588
- | 'strict-origin-when-cross-origin'
589
- | 'unsafe-url';
590
- src?: string;
591
- type?: string;
592
- };
593
-
594
- // Select element
595
- select: BaseAttr & {
596
- autocomplete?: string;
597
- disabled?: boolean;
598
- form?: string;
599
- multiple?: boolean;
600
- name?: string;
601
- required?: boolean;
602
- size?: number | string;
603
- };
604
-
605
- // Slot element
606
- slot: BaseAttr & {
607
- name?: string;
608
- };
609
-
610
- // Source element
611
- source: BaseAttr & {
612
- height?: number | string;
613
- media?: string;
614
- sizes?: string;
615
- src?: string;
616
- srcset?: string;
617
- type?: string;
618
- width?: number | string;
619
- };
620
-
621
- // Style element
622
- style: BaseAttr &
623
- ImageElementEvents & {
624
- media?: string;
625
- };
626
-
627
- // Table element
628
- table: BaseAttr & {};
629
-
630
- // Table body/footer/header elements
631
- tbody: BaseAttr & {};
632
-
633
- tfoot: BaseAttr & {};
634
-
635
- thead: BaseAttr & {};
636
-
637
- // Table cell elements
638
- td: BaseAttr & {
639
- colspan?: number | string;
640
- headers?: string;
641
- rowspan?: number | string;
642
- };
643
-
644
- th: BaseAttr & {
645
- abbr?: string;
646
- colspan?: number | string;
647
- headers?: string;
648
- rowspan?: number | string;
649
- scope?: 'row' | 'col' | 'rowgroup' | 'colgroup';
650
- };
651
-
652
- // Template element
653
- template: BaseAttr & {};
654
-
655
- // Textarea element
656
- textarea: BaseAttr & {
657
- autocomplete?: string;
658
- cols?: number | string;
659
- dirname?: string;
660
- disabled?: boolean;
661
- form?: string;
662
- maxlength?: number | string;
663
- minlength?: number | string;
664
- name?: string;
665
- placeholder?: string;
666
- readonly?: boolean;
667
- required?: boolean;
668
- rows?: number | string;
669
- wrap?: 'hard' | 'soft' | 'off';
670
- };
671
-
672
- // Time element
673
- time: BaseAttr & {
674
- datetime?: string;
675
- };
676
-
677
- // Title element
678
- title: BaseAttr & {};
679
-
680
- // TR element
681
- tr: BaseAttr & {};
682
-
683
- // Track element
684
- track: BaseAttr & {
685
- default?: boolean;
686
- kind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata';
687
- label?: string;
688
- src?: string;
689
- srclang?: string;
690
- };
691
-
692
- // UL element
693
- ul: BaseAttr & {};
694
-
695
- // Video element
696
- video: BaseAttr &
697
- MediaElementEvents & {
698
- autoplay?: boolean;
699
- controls?: boolean;
700
- crossorigin?: 'anonymous' | 'use-credentials' | '';
701
- height?: number | string;
702
- loop?: boolean;
703
- muted?: boolean;
704
- playsinline?: boolean;
705
- poster?: string;
706
- preload?: 'none' | 'metadata' | 'auto' | '';
707
- src?: string;
708
- width?: number | string;
709
- };
710
-
711
- // Generic HTMLElement (no specific attributes beyond BaseEvent)
712
- abbr: BaseAttr & {};
713
- address: BaseAttr & {};
714
- article: BaseAttr & {};
715
- aside: BaseAttr & {};
716
- b: BaseAttr & {};
717
- bdi: BaseAttr & {};
718
- bdo: BaseAttr & {};
719
- cite: BaseAttr & {};
720
- code: BaseAttr & {};
721
- dd: BaseAttr & {};
722
- dfn: BaseAttr & {};
723
- div: BaseAttr & {};
724
- dl: BaseAttr & {};
725
- dt: BaseAttr & {};
726
- em: BaseAttr & {};
727
- figcaption: BaseAttr & {};
728
- figure: BaseAttr & {};
729
- footer: BaseAttr & {};
730
- h1: BaseAttr & {};
731
- h2: BaseAttr & {};
732
- h3: BaseAttr & {};
733
- h4: BaseAttr & {};
734
- h5: BaseAttr & {};
735
- h6: BaseAttr & {};
736
- header: BaseAttr & {};
737
- hgroup: BaseAttr & {};
738
- i: BaseAttr & {};
739
- kbd: BaseAttr & {};
740
- main: BaseAttr & {};
741
- mark: BaseAttr & {};
742
- nav: BaseAttr & {};
743
- noscript: BaseAttr & {};
744
- p: BaseAttr & {};
745
- rp: BaseAttr & {};
746
- rt: BaseAttr & {};
747
- ruby: BaseAttr & {};
748
- s: BaseAttr & {};
749
- samp: BaseAttr & {};
750
- search: BaseAttr & {};
751
- section: BaseAttr & {};
752
- small: BaseAttr & {};
753
- span: BaseAttr & {};
754
- strong: BaseAttr & {};
755
- sub: BaseAttr & {};
756
- summary: BaseAttr & {};
757
- sup: BaseAttr & {};
758
- u: BaseAttr & {};
759
- var: BaseAttr & {};
760
- wbr: BaseAttr & {};
761
-
762
- svg: BaseAttr & {
763
- class?: string;
764
- style?: string | Partial<CSSStyleDeclaration>;
765
- width?: number | string;
766
- height?: number | string;
767
- viewBox?: string;
768
- xmlns?: string;
769
- fill?: string;
770
- stroke?: string;
771
- strokeWidth?: number | string;
772
- strokeLinecap?: 'butt' | 'round' | 'square' | 'inherit';
773
- strokeLinejoin?: 'miter' | 'round' | 'bevel' | 'inherit';
774
- strokeDasharray?: string;
775
- strokeDashoffset?: number | string;
776
- opacity?: number | string;
777
- preserveAspectRatio?: string;
778
- transform?: string;
779
- x?: number | string;
780
- y?: number | string;
781
- rx?: number | string;
782
- ry?: number | string;
783
- r?: number | string;
784
- cx?: number | string;
785
- cy?: number | string;
786
- d?: string;
787
- points?: string;
788
- pathLength?: number | string;
789
- viewbox?: string;
790
- role?: string;
791
- focusable?: boolean | 'true' | 'false';
792
- xlinkHref?: string; // legacy xlink:href
793
- };
794
- }
795
-
796
- interface SVGAttributesMap {
797
- a: AttributesMap['svg'] & { href?: string; x?: number | string; y?: number | string };
798
- animate: AttributesMap['svg'] & {
799
- attributeName?: string;
800
- from?: string | number;
801
- to?: string | number;
802
- dur?: string;
803
- repeatCount?: string | number;
804
- };
805
- animateMotion: AttributesMap['svg'] & { path?: string; dur?: string; rotate?: string };
806
- animateTransform: AttributesMap['svg'] & { type?: string; from?: string; to?: string; dur?: string };
807
- circle: AttributesMap['svg'] & { cx?: number | string; cy?: number | string; r?: number | string };
808
- clipPath: AttributesMap['svg'] & { clipPathUnits?: 'userSpaceOnUse' | 'objectBoundingBox' };
809
- defs: AttributesMap['svg'];
810
- desc: AttributesMap['svg'];
811
- ellipse: AttributesMap['svg'] & {
812
- cx?: number | string;
813
- cy?: number | string;
814
- rx?: number | string;
815
- ry?: number | string;
816
- };
817
-
818
- // Filter primitives (provide common props)
819
- feBlend: AttributesMap['svg'] & { in?: string; in2?: string; mode?: string };
820
- feColorMatrix: AttributesMap['svg'] & {
821
- type?: 'matrix' | 'saturate' | 'hueRotate' | 'luminanceToAlpha';
822
- values?: string;
823
- };
824
- feComponentTransfer: AttributesMap['svg'] & {};
825
- feComposite: AttributesMap['svg'] & {
826
- in?: string;
827
- in2?: string;
828
- operator?: string;
829
- k1?: number | string;
830
- k2?: number | string;
831
- k3?: number | string;
832
- k4?: number | string;
833
- };
834
- feConvolveMatrix: AttributesMap['svg'] & {
835
- order?: string | number;
836
- kernelMatrix?: string;
837
- divisor?: string | number;
838
- bias?: string | number;
839
- };
840
- feDiffuseLighting: AttributesMap['svg'] & {};
841
- feDisplacementMap: AttributesMap['svg'] & {
842
- in?: string;
843
- in2?: string;
844
- scale?: number | string;
845
- xChannelSelector?: string;
846
- yChannelSelector?: string;
847
- };
848
- feDistantLight: AttributesMap['svg'] & { azimuth?: number | string; elevation?: number | string };
849
- feDropShadow: AttributesMap['svg'] & {
850
- dx?: number | string;
851
- dy?: number | string;
852
- stdDeviation?: number | string;
853
- floodColor?: string;
854
- floodOpacity?: number | string;
855
- };
856
- feFlood: AttributesMap['svg'] & { floodColor?: string; floodOpacity?: number | string };
857
- feFuncA: AttributesMap['svg'] & {};
858
- feFuncB: AttributesMap['svg'] & {};
859
- feFuncG: AttributesMap['svg'] & {};
860
- feFuncR: AttributesMap['svg'] & {};
861
- feGaussianBlur: AttributesMap['svg'] & { stdDeviation?: number | string; edgeMode?: string };
862
- feImage: AttributesMap['svg'] & { href?: string };
863
- feMerge: AttributesMap['svg'] & {};
864
- feMergeNode: AttributesMap['svg'] & { in?: string };
865
- feMorphology: AttributesMap['svg'] & { operator?: 'erode' | 'dilate'; radius?: number | string };
866
- feOffset: AttributesMap['svg'] & { dx?: number | string; dy?: number | string };
867
- fePointLight: AttributesMap['svg'] & { x?: number | string; y?: number | string; z?: number | string };
868
- feSpecularLighting: AttributesMap['svg'] & {
869
- specularConstant?: number | string;
870
- specularExponent?: number | string;
871
- surfaceScale?: number | string;
872
- };
873
- feSpotLight: AttributesMap['svg'] & {
874
- x?: number | string;
875
- y?: number | string;
876
- z?: number | string;
877
- pointsAtX?: number | string;
878
- pointsAtY?: number | string;
879
- pointsAtZ?: number | string;
880
- specularExponent?: number | string;
881
- limitingConeAngle?: number | string;
882
- };
883
- feTile: AttributesMap['svg'] & {};
884
- feTurbulence: AttributesMap['svg'] & {
885
- baseFrequency?: number | string;
886
- numOctaves?: number | string;
887
- seed?: number | string;
888
- stitchTiles?: string;
889
- type?: 'fractalNoise' | 'turbulence';
890
- };
891
-
892
- filter: AttributesMap['svg'] & {
893
- x?: number | string;
894
- y?: number | string;
895
- width?: number | string;
896
- height?: number | string;
897
- filterUnits?: string;
898
- primitiveUnits?: string;
899
- };
900
- foreignObject: AttributesMap['svg'] & {
901
- x?: number | string;
902
- y?: number | string;
903
- width?: number | string;
904
- height?: number | string;
905
- };
906
- g: AttributesMap['svg'];
907
- image: AttributesMap['svg'] & {
908
- href?: string;
909
- x?: number | string;
910
- y?: number | string;
911
- width?: number | string;
912
- height?: number | string;
913
- };
914
- line: AttributesMap['svg'] & {
915
- x1?: number | string;
916
- y1?: number | string;
917
- x2?: number | string;
918
- y2?: number | string;
919
- };
920
- linearGradient: AttributesMap['svg'] & {
921
- x1?: number | string;
922
- y1?: number | string;
923
- x2?: number | string;
924
- y2?: number | string;
925
- gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
926
- gradientTransform?: string;
927
- };
928
- marker: AttributesMap['svg'] & {
929
- markerUnits?: string;
930
- markerWidth?: number | string;
931
- markerHeight?: number | string;
932
- refX?: number | string;
933
- refY?: number | string;
934
- orient?: string;
935
- };
936
- mask: AttributesMap['svg'] & {
937
- maskUnits?: string;
938
- maskContentUnits?: string;
939
- x?: number | string;
940
- y?: number | string;
941
- width?: number | string;
942
- height?: number | string;
943
- };
944
- metadata: AttributesMap['svg'];
945
- mpath: AttributesMap['svg'] & { href?: string };
946
- path: AttributesMap['svg'] & { d?: string; pathLength?: number | string };
947
- pattern: AttributesMap['svg'] & {
948
- patternUnits?: string;
949
- patternContentUnits?: string;
950
- width?: number | string;
951
- height?: number | string;
952
- x?: number | string;
953
- y?: number | string;
954
- };
955
- polygon: AttributesMap['svg'] & { points?: string };
956
- polyline: AttributesMap['svg'] & { points?: string };
957
- radialGradient: AttributesMap['svg'] & {
958
- cx?: number | string;
959
- cy?: number | string;
960
- r?: number | string;
961
- fx?: number | string;
962
- fy?: number | string;
963
- gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
964
- gradientTransform?: string;
965
- };
966
- rect: AttributesMap['svg'] & {
967
- x?: number | string;
968
- y?: number | string;
969
- width?: number | string;
970
- height?: number | string;
971
- rx?: number | string;
972
- ry?: number | string;
973
- };
974
- script: AttributesMap['svg'] & { href?: string; type?: string };
975
- set: AttributesMap['svg'] & { attributeName?: string; to?: string | number; begin?: string; dur?: string };
976
- stop: AttributesMap['svg'] & { offset?: number | string; stopColor?: string; stopOpacity?: number | string };
977
- style: AttributesMap['svg'] & { media?: string };
978
- svg: AttributesMap['svg'];
979
- switch: AttributesMap['svg'];
980
- symbol: AttributesMap['svg'] & { viewBox?: string; preserveAspectRatio?: string };
981
- text: AttributesMap['svg'] & {
982
- x?: number | string;
983
- y?: number | string;
984
- dx?: number | string;
985
- dy?: number | string;
986
- textLength?: number | string;
987
- };
988
- textPath: AttributesMap['svg'] & { href?: string; startOffset?: number | string };
989
- title: AttributesMap['svg'];
990
- tspan: AttributesMap['svg'] & {
991
- x?: number | string;
992
- y?: number | string;
993
- dx?: number | string;
994
- dy?: number | string;
995
- };
996
- use: AttributesMap['svg'] & {
997
- href?: string;
998
- x?: number | string;
999
- y?: number | string;
1000
- width?: number | string;
1001
- height?: number | string;
1002
- };
1003
- view: AttributesMap['svg'] & { viewBox?: string; preserveAspectRatio?: string };
1004
- }
1005
-
1006
- type KTHTMLElement<El extends HTMLElement = HTMLElement> = El & {
1007
- /**
1008
- * Automically generate a redraw function if it is not provided
1009
- * @param props
1010
- */
1011
- redraw: (props?: KTAttribute, ...args: any[]) => KTHTMLElement;
1012
- };
1013
-
1014
- declare global {
1015
- namespace JSX {
1016
- type Element = KTHTMLElement;
1017
-
1018
- interface IntrinsicElements {
1019
- // Document-level & metadata
1020
- html: AttributesMap['html'];
1021
- head: AttributesMap['head'];
1022
- title: AttributesMap['title'];
1023
- base: AttributesMap['base'];
1024
- link: AttributesMap['link'];
1025
- meta: AttributesMap['meta'];
1026
-
1027
- // Sectioning
1028
- body: AttributesMap['body'];
1029
- header: AttributesMap['header'];
1030
- footer: AttributesMap['footer'];
1031
- nav: AttributesMap['nav'];
1032
- main: AttributesMap['main'];
1033
- section: AttributesMap['section'];
1034
- article: AttributesMap['article'];
1035
- aside: AttributesMap['aside'];
1036
-
1037
- // Headings
1038
- h1: AttributesMap['h1'];
1039
- h2: AttributesMap['h2'];
1040
- h3: AttributesMap['h3'];
1041
- h4: AttributesMap['h4'];
1042
- h5: AttributesMap['h5'];
1043
- h6: AttributesMap['h6'];
1044
-
1045
- // Text content
1046
- p: AttributesMap['p'];
1047
- pre: AttributesMap['pre'];
1048
- code: AttributesMap['code'];
1049
- strong: AttributesMap['strong'];
1050
- small: AttributesMap['small'];
1051
- em: AttributesMap['em'];
1052
- br: AttributesMap['br'];
1053
- i: AttributesMap['i'];
1054
-
1055
- // Lists
1056
- ul: AttributesMap['ul'];
1057
- ol: AttributesMap['ol'];
1058
- li: AttributesMap['li'];
1059
-
1060
- // Tables
1061
- table: AttributesMap['table'];
1062
- thead: AttributesMap['thead'];
1063
- tbody: AttributesMap['tbody'];
1064
- tfoot: AttributesMap['tfoot'];
1065
- tr: AttributesMap['tr'];
1066
- th: AttributesMap['th'];
1067
- td: AttributesMap['td'];
1068
-
1069
- // Forms
1070
- form: AttributesMap['form'];
1071
- label: AttributesMap['label'];
1072
- input: AttributesMap['input'];
1073
- textarea: AttributesMap['textarea'];
1074
- select: AttributesMap['select'];
1075
- option: AttributesMap['option'];
1076
- optgroup: AttributesMap['optgroup'];
1077
- button: AttributesMap['button'];
1078
- fieldset: AttributesMap['fieldset'];
1079
- legend: AttributesMap['legend'];
1080
- datalist: AttributesMap['datalist'];
1081
- output: AttributesMap['output'];
1082
-
1083
- // Media & embedded
1084
- img: AttributesMap['img'];
1085
- picture: AttributesMap['picture'];
1086
- source: AttributesMap['source'];
1087
- audio: AttributesMap['audio'];
1088
- video: AttributesMap['video'];
1089
- track: AttributesMap['track'];
1090
- iframe: AttributesMap['iframe'];
1091
- embed: AttributesMap['embed'];
1092
- object: AttributesMap['object'];
1093
- canvas: AttributesMap['canvas'];
1094
-
1095
- // Interactive & misc
1096
- a: AttributesMap['a'] & SVGAttributesMap['a'];
1097
- area: AttributesMap['area'];
1098
- map: AttributesMap['map'];
1099
- details: AttributesMap['details'];
1100
- dialog: AttributesMap['dialog'];
1101
- summary: AttributesMap['summary'];
1102
- slot: AttributesMap['slot'];
1103
-
1104
- // Scripting & styles
1105
- script: AttributesMap['script'];
1106
- style: AttributesMap['style'];
1107
-
1108
- // Semantic & phrasing
1109
- figure: AttributesMap['figure'];
1110
- figcaption: AttributesMap['figcaption'];
1111
- blockquote: AttributesMap['blockquote'];
1112
- q: AttributesMap['q'];
1113
-
1114
- // Generic elements
1115
- div: AttributesMap['div'];
1116
- span: AttributesMap['span'];
1117
- address: AttributesMap['address'];
1118
- abbr: AttributesMap['abbr'];
1119
- b: AttributesMap['b'];
1120
- cite: AttributesMap['cite'];
1121
- dl: AttributesMap['dl'];
1122
- dt: AttributesMap['dt'];
1123
- dd: AttributesMap['dd'];
1124
- hr: AttributesMap['hr'];
1125
-
1126
- // SVG
1127
- svg: AttributesMap['svg'];
1128
- // a: SVGAttributesMap['a'];
1129
- animate: SVGAttributesMap['animate'];
1130
- animateMotion: SVGAttributesMap['animateMotion'];
1131
- animateTransform: SVGAttributesMap['animateTransform'];
1132
- circle: SVGAttributesMap['circle'];
1133
- clipPath: SVGAttributesMap['clipPath'];
1134
- defs: SVGAttributesMap['defs'];
1135
- desc: SVGAttributesMap['desc'];
1136
- ellipse: SVGAttributesMap['ellipse'];
1137
- feBlend: SVGAttributesMap['feBlend'];
1138
- feColorMatrix: SVGAttributesMap['feColorMatrix'];
1139
- feComponentTransfer: SVGAttributesMap['feComponentTransfer'];
1140
- feComposite: SVGAttributesMap['feComposite'];
1141
- feConvolveMatrix: SVGAttributesMap['feConvolveMatrix'];
1142
- feDiffuseLighting: SVGAttributesMap['feDiffuseLighting'];
1143
- feDisplacementMap: SVGAttributesMap['feDisplacementMap'];
1144
- feDistantLight: SVGAttributesMap['feDistantLight'];
1145
- feDropShadow: SVGAttributesMap['feDropShadow'];
1146
- feFlood: SVGAttributesMap['feFlood'];
1147
- feFuncA: SVGAttributesMap['feFuncA'];
1148
- feFuncB: SVGAttributesMap['feFuncB'];
1149
- feFuncG: SVGAttributesMap['feFuncG'];
1150
- feFuncR: SVGAttributesMap['feFuncR'];
1151
- feGaussianBlur: SVGAttributesMap['feGaussianBlur'];
1152
- feImage: SVGAttributesMap['feImage'];
1153
- feMerge: SVGAttributesMap['feMerge'];
1154
- feMergeNode: SVGAttributesMap['feMergeNode'];
1155
- feMorphology: SVGAttributesMap['feMorphology'];
1156
- feOffset: SVGAttributesMap['feOffset'];
1157
- fePointLight: SVGAttributesMap['fePointLight'];
1158
- feSpecularLighting: SVGAttributesMap['feSpecularLighting'];
1159
- feSpotLight: SVGAttributesMap['feSpotLight'];
1160
- feTile: SVGAttributesMap['feTile'];
1161
- feTurbulence: SVGAttributesMap['feTurbulence'];
1162
- filter: SVGAttributesMap['filter'];
1163
- foreignObject: SVGAttributesMap['foreignObject'];
1164
- g: SVGAttributesMap['g'];
1165
- image: SVGAttributesMap['image'];
1166
- line: SVGAttributesMap['line'];
1167
- linearGradient: SVGAttributesMap['linearGradient'];
1168
- marker: SVGAttributesMap['marker'];
1169
- mask: SVGAttributesMap['mask'];
1170
- metadata: SVGAttributesMap['metadata'];
1171
- mpath: SVGAttributesMap['mpath'];
1172
- path: SVGAttributesMap['path'];
1173
- pattern: SVGAttributesMap['pattern'];
1174
- polygon: SVGAttributesMap['polygon'];
1175
- polyline: SVGAttributesMap['polyline'];
1176
- radialGradient: SVGAttributesMap['radialGradient'];
1177
- rect: SVGAttributesMap['rect'];
1178
- set: SVGAttributesMap['set'];
1179
- stop: SVGAttributesMap['stop'];
1180
- switch: SVGAttributesMap['switch'];
1181
- symbol: SVGAttributesMap['symbol'];
1182
- text: SVGAttributesMap['text'];
1183
- textPath: SVGAttributesMap['textPath'];
1184
- tspan: SVGAttributesMap['tspan'];
1185
- use: SVGAttributesMap['use'];
1186
- view: SVGAttributesMap['view'];
1187
- }
1188
-
1189
- interface IntrinsicAttributes {
1190
- ref?: KTRef<HTMLElement>;
1191
- 'k-if'?: any;
1192
- children?: KTRawContent;
1193
- }
1194
-
1195
- interface ElementChildrenAttribute {
1196
- children: {};
1197
- }
1198
- }
1199
- }
1200
-
1201
28
  type SingleContent = KTRef<any> | HTMLElement | Element | Node | string | number | boolean | null | undefined;
1202
29
  type KTAvailableContent = SingleContent | KTAvailableContent[];
1203
30
  type KTRawContent = KTAvailableContent | Promise<KTAvailableContent>;
@@ -1210,7 +37,7 @@ interface KTBaseAttribute {
1210
37
  [k: string]: any;
1211
38
 
1212
39
  // # kt-specific attributes
1213
- ref?: KTRef<KTHTMLElement>;
40
+ ref?: KTRef<JSX.Element>;
1214
41
  'k-if'?: any;
1215
42
 
1216
43
  // # normal HTML attributes
@@ -1272,7 +99,7 @@ type KTPrefixedEventHandlers = {
1272
99
 
1273
100
  type KTAttribute = KTBaseAttribute & KTPrefixedEventHandlers;
1274
101
 
1275
- type HTML<T extends (HTMLTag | SVGTag) & otherstring> = T extends SVGTag ? SVGElementTagNameMap[T] : T extends HTMLTag ? HTMLElementTagNameMap[T] : HTMLElement;
102
+ type HTML<T extends (HTMLTag | SVGTag | MathMLTag) & otherstring> = T extends SVGTag ? SVGElementTagNameMap[T] : T extends HTMLTag ? HTMLElementTagNameMap[T] : T extends MathMLTag ? MathMLElementTagNameMap[T] : HTMLElement;
1276
103
  /**
1277
104
  * Create an enhanced HTMLElement.
1278
105
  * - Only supports HTMLElements, **NOT** SVGElements or other Elements.
@@ -1283,21 +110,21 @@ type HTML<T extends (HTMLTag | SVGTag) & otherstring> = T extends SVGTag ? SVGEl
1283
110
  * ## About
1284
111
  * @package @ktjs/core
1285
112
  * @author Kasukabe Tsumugi <futami16237@gmail.com>
1286
- * @version 0.19.1 (Last Update: 2026.01.31 23:07:55.249)
113
+ * @version 0.20.1 (Last Update: 2026.02.01 16:38:49.148)
1287
114
  * @license MIT
1288
115
  * @link https://github.com/baendlorel/kt.js
1289
116
  * @link https://baendlorel.github.io/ Welcome to my site!
1290
117
  * @description Core functionality for kt.js - DOM manipulation utilities with JSX/TSX support
1291
118
  * @copyright Copyright (c) 2026 Kasukabe Tsumugi. All rights reserved.
1292
119
  */
1293
- declare const h: <T extends HTMLTag | SVGTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent) => HTML<T>;
120
+ declare const h: <T extends HTMLTag | SVGTag | MathMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent) => HTML<T>;
1294
121
 
1295
- type JSXTag = HTMLTag | ((props?: any) => HTMLElement) | ((props?: any) => Promise<HTMLElement>) | ((props?: any) => KTHTMLElement) | ((props?: any) => Promise<KTHTMLElement>);
122
+ type JSXTag = HTMLTag | ((props?: any) => HTMLElement) | ((props?: any) => Promise<HTMLElement>);
1296
123
  /**
1297
124
  * @param tag html tag or function component
1298
125
  * @param props properties/attributes
1299
126
  */
1300
- declare function jsx(tag: JSXTag, props?: KTAttribute): KTHTMLElement;
127
+ declare function jsx(tag: JSXTag, props: KTAttribute): JSX.Element;
1301
128
  /**
1302
129
  * Fragment support - returns an array of children
1303
130
  * Note: kt.js doesn't have a real Fragment concept,
@@ -1315,21 +142,6 @@ declare const jsxDEV: typeof jsx;
1315
142
  */
1316
143
  declare const jsxs: typeof jsx;
1317
144
 
1318
- /**
1319
- * A helper to create redrawable elements
1320
- * ```tsx
1321
- * export function MyComponent() {
1322
- * let aa = 10;
1323
- * // ...
1324
- * // aa might be changed
1325
- * return createRedrawableNoref(() => <div>{aa}</div>);
1326
- * }
1327
- * ```
1328
- * Then the returned element has a `redraw` method to redraw itself with new values.
1329
- * @param creator a simple creator function that returns an element
1330
- * @returns created element
1331
- */
1332
- declare function createRedrawableNoref<T extends KTHTMLElement>(creator: () => T): T;
1333
145
  /**
1334
146
  * A helper to create redrawable elements
1335
147
  * ```tsx
@@ -1344,6 +156,8 @@ declare function createRedrawableNoref<T extends KTHTMLElement>(creator: () => T
1344
156
  * @param creator a simple creator function that returns an element
1345
157
  * @returns created element's ref
1346
158
  */
1347
- declare function createRedrawable<T extends KTHTMLElement>(creator: () => T): KTRef<T>;
159
+ declare function createRedrawable<T>(creator: () => T): KTRef<T> & {
160
+ redraw: () => T;
161
+ };
1348
162
 
1349
- export { Fragment, h as createElement, createRedrawable, createRedrawableNoref, h, jsx, jsxDEV, jsxs };
163
+ export { Fragment, h as createElement, createRedrawable, h, jsx, jsxDEV, jsxs };