@ktjs/core 0.18.3 → 0.18.6

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