@ktjs/core 0.13.0 → 0.13.2
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 +44 -34
- package/dist/index.iife.js +23 -10
- package/dist/index.legacy.js +35 -10
- package/dist/index.mjs +23 -10
- package/dist/jsx/index.d.ts +36 -26
- package/dist/jsx/index.mjs +23 -10
- package/dist/jsx/jsx-runtime.d.ts +36 -26
- package/dist/jsx/jsx-runtime.mjs +23 -10
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -16,6 +16,33 @@ interface KTRef<T> {
|
|
|
16
16
|
*/
|
|
17
17
|
declare function ref<T = HTMLElement>(value?: T): KTRef<T>;
|
|
18
18
|
|
|
19
|
+
type KTHTMLElement = HTMLElement & {
|
|
20
|
+
/**
|
|
21
|
+
* Automically generate a redraw function if it is not provided
|
|
22
|
+
* @param props
|
|
23
|
+
*/
|
|
24
|
+
redraw: (props?: KTAttribute, children?: KTRawContent) => void;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
declare global {
|
|
28
|
+
namespace JSX {
|
|
29
|
+
type Element = KTHTMLElement;
|
|
30
|
+
|
|
31
|
+
interface IntrinsicElements {
|
|
32
|
+
[tag: string]: KTAttribute & { children?: KTRawContent };
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// interface IntrinsicAttributes {
|
|
36
|
+
// key?: string | number;
|
|
37
|
+
// }
|
|
38
|
+
type IntrinsicAttributes = KTAttribute;
|
|
39
|
+
|
|
40
|
+
interface ElementChildrenAttribute {
|
|
41
|
+
children: {};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
19
46
|
type KTAvailableContent =
|
|
20
47
|
| KTRef<any>
|
|
21
48
|
| HTMLElement
|
|
@@ -98,15 +125,25 @@ type KTPrefixedEventHandlers = {
|
|
|
98
125
|
[EventName in keyof HTMLElementEventMap as `on:${EventName}`]?: (ev: HTMLElementEventMap[EventName]) => void;
|
|
99
126
|
};
|
|
100
127
|
|
|
101
|
-
type
|
|
128
|
+
type KTSpecialEventHandlers = {
|
|
129
|
+
'on:ktchange'?: (value: string) => void;
|
|
130
|
+
'ontrim:ktchange'?: (value: string) => void;
|
|
131
|
+
'on:ktchangenumber'?: (value: number) => void;
|
|
132
|
+
|
|
133
|
+
'on:ktinput'?: (value: string) => void;
|
|
134
|
+
'ontrim:ktinput'?: (value: string) => void;
|
|
135
|
+
'on:ktinputnumber'?: (value: number) => void;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
type KTAttribute = KTBaseAttribute & KTPrefixedEventHandlers & KTSpecialEventHandlers;
|
|
102
139
|
|
|
103
140
|
type KTComponent = (
|
|
104
141
|
props: {
|
|
105
|
-
ref?: KTRef<
|
|
142
|
+
ref?: KTRef<KTHTMLElement>;
|
|
106
143
|
children?: KTRawContent;
|
|
107
144
|
} & KTAttribute &
|
|
108
145
|
any
|
|
109
|
-
) =>
|
|
146
|
+
) => KTHTMLElement | Promise<KTHTMLElement> | any;
|
|
110
147
|
|
|
111
148
|
type HTML<T extends HTMLTag & otherstring> = T extends HTMLTag ? HTMLElementTagNameMap[T] : HTMLElement;
|
|
112
149
|
type H = (<T extends HTMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent) => HTML<T>) & {
|
|
@@ -123,7 +160,7 @@ type H = (<T extends HTMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent)
|
|
|
123
160
|
* ## About
|
|
124
161
|
* @package @ktjs/core
|
|
125
162
|
* @author Kasukabe Tsumugi <futami16237@gmail.com>
|
|
126
|
-
* @version 0.13.
|
|
163
|
+
* @version 0.13.2 (Last Update: 2026.01.16 19:38:40.621)
|
|
127
164
|
* @license MIT
|
|
128
165
|
* @link https://github.com/baendlorel/kt.js
|
|
129
166
|
* @link https://baendlorel.github.io/ Welcome to my site!
|
|
@@ -132,33 +169,6 @@ type H = (<T extends HTMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent)
|
|
|
132
169
|
*/
|
|
133
170
|
declare const h: H;
|
|
134
171
|
|
|
135
|
-
type KTHTMLElement = HTMLElement & {
|
|
136
|
-
/**
|
|
137
|
-
* Automically generate a redraw function if it is not provided
|
|
138
|
-
* @param props
|
|
139
|
-
*/
|
|
140
|
-
redraw: (props?: KTAttribute, children?: KTRawContent) => void;
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
declare global {
|
|
144
|
-
namespace JSX {
|
|
145
|
-
type Element = KTHTMLElement;
|
|
146
|
-
|
|
147
|
-
interface IntrinsicElements {
|
|
148
|
-
[tag: string]: KTAttribute & { children?: KTRawContent };
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// interface IntrinsicAttributes {
|
|
152
|
-
// key?: string | number;
|
|
153
|
-
// }
|
|
154
|
-
type IntrinsicAttributes = KTAttribute;
|
|
155
|
-
|
|
156
|
-
interface ElementChildrenAttribute {
|
|
157
|
-
children: {};
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
172
|
type JSXTag = HTMLTag | ((props?: any) => HTMLElement) | ((props?: any) => Promise<HTMLElement>) | ((props?: any) => KTHTMLElement) | ((props?: any) => Promise<KTHTMLElement>);
|
|
163
173
|
/**
|
|
164
174
|
* @param tag html tag or function component
|
|
@@ -187,11 +197,11 @@ declare const jsxs: typeof jsx;
|
|
|
187
197
|
*/
|
|
188
198
|
type ExtractComponentProps<T> = T extends (props: infer P) => any ? Omit<P, 'ref' | 'children'> : {};
|
|
189
199
|
declare function KTAsync<T extends KTComponent>(props: {
|
|
190
|
-
ref?: KTRef<
|
|
191
|
-
skeleton?:
|
|
200
|
+
ref?: KTRef<KTHTMLElement>;
|
|
201
|
+
skeleton?: KTHTMLElement;
|
|
192
202
|
component: T;
|
|
193
203
|
children?: KTRawContent;
|
|
194
|
-
} & ExtractComponentProps<T>):
|
|
204
|
+
} & ExtractComponentProps<T>): KTHTMLElement;
|
|
195
205
|
|
|
196
206
|
export { Fragment, KTAsync, h as createElement, h, jsx, jsxDEV, jsxs, ref };
|
|
197
207
|
export type { EventHandler, HTMLTag, KTAttribute, KTHTMLElement, KTRawAttr, KTRawContent, KTRawContents, KTRef };
|
package/dist/index.iife.js
CHANGED
|
@@ -51,22 +51,22 @@ var __ktjs_core__ = (function (exports) {
|
|
|
51
51
|
}
|
|
52
52
|
const $isThenable = (o) => typeof o === 'object' && o !== null && typeof o.then === 'function';
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
const booleanHandler = (element, key, value) => {
|
|
55
55
|
if (key in element) {
|
|
56
56
|
element[key] = !!value;
|
|
57
57
|
}
|
|
58
58
|
else {
|
|
59
59
|
element.setAttribute(key, value);
|
|
60
60
|
}
|
|
61
|
-
}
|
|
62
|
-
|
|
61
|
+
};
|
|
62
|
+
const valueHandler = (element, key, value) => {
|
|
63
63
|
if (key in element) {
|
|
64
64
|
element[key] = value;
|
|
65
65
|
}
|
|
66
66
|
else {
|
|
67
67
|
element.setAttribute(key, value);
|
|
68
68
|
}
|
|
69
|
-
}
|
|
69
|
+
};
|
|
70
70
|
// Attribute handlers map for optimized lookup
|
|
71
71
|
const handlers = {
|
|
72
72
|
checked: booleanHandler,
|
|
@@ -89,13 +89,18 @@ var __ktjs_core__ = (function (exports) {
|
|
|
89
89
|
muted: booleanHandler,
|
|
90
90
|
defer: booleanHandler,
|
|
91
91
|
async: booleanHandler,
|
|
92
|
-
hidden:
|
|
93
|
-
element.hidden = !!value;
|
|
94
|
-
},
|
|
92
|
+
hidden: (element, _key, value) => (element.hidden = !!value),
|
|
95
93
|
};
|
|
96
|
-
const
|
|
97
|
-
|
|
94
|
+
const ktEventHandlers = {
|
|
95
|
+
'on:ktchange': (element, handler) => element.addEventListener('change', () => handler(element.value)),
|
|
96
|
+
'ontrim:ktchange': (element, handler) => element.addEventListener('change', () => handler(element.value.trim())),
|
|
97
|
+
'on:ktchangenumber': (element, handler) => element.addEventListener('change', () => handler(Number(element.value))),
|
|
98
|
+
'on:ktinput': (element, handler) => element.addEventListener('input', () => handler(element.value)),
|
|
99
|
+
'ontrim:ktinput': (element, handler) => element.addEventListener('input', () => handler(element.value.trim())),
|
|
100
|
+
'on:ktinputnumber': (element, handler) => element.addEventListener('input', () => handler(Number(element.value))),
|
|
98
101
|
};
|
|
102
|
+
|
|
103
|
+
const defaultHandler = (element, key, value) => element.setAttribute(key, value);
|
|
99
104
|
function attrIsObject(element, attr) {
|
|
100
105
|
const classValue = attr.class;
|
|
101
106
|
const style = attr.style;
|
|
@@ -115,11 +120,19 @@ var __ktjs_core__ = (function (exports) {
|
|
|
115
120
|
delete attr.style;
|
|
116
121
|
}
|
|
117
122
|
const keys = $keys(attr);
|
|
123
|
+
// todo 这里的处理每次遍历都要if所有的情况,能否用map或者对象来优化?
|
|
118
124
|
for (let i = keys.length - 1; i >= 0; i--) {
|
|
119
125
|
const key = keys[i];
|
|
120
126
|
const o = attr[key];
|
|
121
127
|
// force register on:xxx as an event handler
|
|
122
128
|
// !if o is not valid, the throwing job will be done by `on`, not kt.js
|
|
129
|
+
// # special handling for kt.js specific events
|
|
130
|
+
const ktEvent = ktEventHandlers[key];
|
|
131
|
+
if (ktEvent) {
|
|
132
|
+
ktEvent(element, o);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
// # normal event handler
|
|
123
136
|
if (key.startsWith('on:')) {
|
|
124
137
|
element.addEventListener(key.slice(3), o); // chop off the `@`
|
|
125
138
|
continue;
|
|
@@ -206,7 +219,7 @@ var __ktjs_core__ = (function (exports) {
|
|
|
206
219
|
* ## About
|
|
207
220
|
* @package @ktjs/core
|
|
208
221
|
* @author Kasukabe Tsumugi <futami16237@gmail.com>
|
|
209
|
-
* @version 0.13.
|
|
222
|
+
* @version 0.13.2 (Last Update: 2026.01.16 19:38:40.621)
|
|
210
223
|
* @license MIT
|
|
211
224
|
* @link https://github.com/baendlorel/kt.js
|
|
212
225
|
* @link https://baendlorel.github.io/ Welcome to my site!
|
package/dist/index.legacy.js
CHANGED
|
@@ -61,22 +61,22 @@ var __ktjs_core__ = (function (exports) {
|
|
|
61
61
|
return typeof o === 'object' && o !== null && typeof o.then === 'function';
|
|
62
62
|
};
|
|
63
63
|
|
|
64
|
-
function
|
|
64
|
+
var booleanHandler = function (element, key, value) {
|
|
65
65
|
if (key in element) {
|
|
66
66
|
element[key] = !!value;
|
|
67
67
|
}
|
|
68
68
|
else {
|
|
69
69
|
element.setAttribute(key, value);
|
|
70
70
|
}
|
|
71
|
-
}
|
|
72
|
-
function
|
|
71
|
+
};
|
|
72
|
+
var valueHandler = function (element, key, value) {
|
|
73
73
|
if (key in element) {
|
|
74
74
|
element[key] = value;
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
77
77
|
element.setAttribute(key, value);
|
|
78
78
|
}
|
|
79
|
-
}
|
|
79
|
+
};
|
|
80
80
|
// Attribute handlers map for optimized lookup
|
|
81
81
|
var handlers = {
|
|
82
82
|
checked: booleanHandler,
|
|
@@ -99,13 +99,30 @@ var __ktjs_core__ = (function (exports) {
|
|
|
99
99
|
muted: booleanHandler,
|
|
100
100
|
defer: booleanHandler,
|
|
101
101
|
async: booleanHandler,
|
|
102
|
-
hidden: function (element, _key, value) {
|
|
103
|
-
element.hidden = !!value;
|
|
104
|
-
},
|
|
102
|
+
hidden: function (element, _key, value) { return (element.hidden = !!value); },
|
|
105
103
|
};
|
|
106
|
-
var
|
|
107
|
-
|
|
104
|
+
var ktEventHandlers = {
|
|
105
|
+
'on:ktchange': function (element, handler) {
|
|
106
|
+
return element.addEventListener('change', function () { return handler(element.value); });
|
|
107
|
+
},
|
|
108
|
+
'ontrim:ktchange': function (element, handler) {
|
|
109
|
+
return element.addEventListener('change', function () { return handler(element.value.trim()); });
|
|
110
|
+
},
|
|
111
|
+
'on:ktchangenumber': function (element, handler) {
|
|
112
|
+
return element.addEventListener('change', function () { return handler(Number(element.value)); });
|
|
113
|
+
},
|
|
114
|
+
'on:ktinput': function (element, handler) {
|
|
115
|
+
return element.addEventListener('input', function () { return handler(element.value); });
|
|
116
|
+
},
|
|
117
|
+
'ontrim:ktinput': function (element, handler) {
|
|
118
|
+
return element.addEventListener('input', function () { return handler(element.value.trim()); });
|
|
119
|
+
},
|
|
120
|
+
'on:ktinputnumber': function (element, handler) {
|
|
121
|
+
return element.addEventListener('input', function () { return handler(Number(element.value)); });
|
|
122
|
+
},
|
|
108
123
|
};
|
|
124
|
+
|
|
125
|
+
var defaultHandler = function (element, key, value) { return element.setAttribute(key, value); };
|
|
109
126
|
function attrIsObject(element, attr) {
|
|
110
127
|
var classValue = attr.class;
|
|
111
128
|
var style = attr.style;
|
|
@@ -125,11 +142,19 @@ var __ktjs_core__ = (function (exports) {
|
|
|
125
142
|
delete attr.style;
|
|
126
143
|
}
|
|
127
144
|
var keys = $keys(attr);
|
|
145
|
+
// todo 这里的处理每次遍历都要if所有的情况,能否用map或者对象来优化?
|
|
128
146
|
for (var i = keys.length - 1; i >= 0; i--) {
|
|
129
147
|
var key = keys[i];
|
|
130
148
|
var o = attr[key];
|
|
131
149
|
// force register on:xxx as an event handler
|
|
132
150
|
// !if o is not valid, the throwing job will be done by `on`, not kt.js
|
|
151
|
+
// # special handling for kt.js specific events
|
|
152
|
+
var ktEvent = ktEventHandlers[key];
|
|
153
|
+
if (ktEvent) {
|
|
154
|
+
ktEvent(element, o);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
// # normal event handler
|
|
133
158
|
if (key.startsWith('on:')) {
|
|
134
159
|
element.addEventListener(key.slice(3), o); // chop off the `@`
|
|
135
160
|
continue;
|
|
@@ -219,7 +244,7 @@ var __ktjs_core__ = (function (exports) {
|
|
|
219
244
|
* ## About
|
|
220
245
|
* @package @ktjs/core
|
|
221
246
|
* @author Kasukabe Tsumugi <futami16237@gmail.com>
|
|
222
|
-
* @version 0.13.
|
|
247
|
+
* @version 0.13.2 (Last Update: 2026.01.16 19:38:40.621)
|
|
223
248
|
* @license MIT
|
|
224
249
|
* @link https://github.com/baendlorel/kt.js
|
|
225
250
|
* @link https://baendlorel.github.io/ Welcome to my site!
|
package/dist/index.mjs
CHANGED
|
@@ -48,22 +48,22 @@ if (typeof Promise === 'undefined') {
|
|
|
48
48
|
}
|
|
49
49
|
const $isThenable = (o) => typeof o === 'object' && o !== null && typeof o.then === 'function';
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
const booleanHandler = (element, key, value) => {
|
|
52
52
|
if (key in element) {
|
|
53
53
|
element[key] = !!value;
|
|
54
54
|
}
|
|
55
55
|
else {
|
|
56
56
|
element.setAttribute(key, value);
|
|
57
57
|
}
|
|
58
|
-
}
|
|
59
|
-
|
|
58
|
+
};
|
|
59
|
+
const valueHandler = (element, key, value) => {
|
|
60
60
|
if (key in element) {
|
|
61
61
|
element[key] = value;
|
|
62
62
|
}
|
|
63
63
|
else {
|
|
64
64
|
element.setAttribute(key, value);
|
|
65
65
|
}
|
|
66
|
-
}
|
|
66
|
+
};
|
|
67
67
|
// Attribute handlers map for optimized lookup
|
|
68
68
|
const handlers = {
|
|
69
69
|
checked: booleanHandler,
|
|
@@ -86,13 +86,18 @@ const handlers = {
|
|
|
86
86
|
muted: booleanHandler,
|
|
87
87
|
defer: booleanHandler,
|
|
88
88
|
async: booleanHandler,
|
|
89
|
-
hidden:
|
|
90
|
-
element.hidden = !!value;
|
|
91
|
-
},
|
|
89
|
+
hidden: (element, _key, value) => (element.hidden = !!value),
|
|
92
90
|
};
|
|
93
|
-
const
|
|
94
|
-
|
|
91
|
+
const ktEventHandlers = {
|
|
92
|
+
'on:ktchange': (element, handler) => element.addEventListener('change', () => handler(element.value)),
|
|
93
|
+
'ontrim:ktchange': (element, handler) => element.addEventListener('change', () => handler(element.value.trim())),
|
|
94
|
+
'on:ktchangenumber': (element, handler) => element.addEventListener('change', () => handler(Number(element.value))),
|
|
95
|
+
'on:ktinput': (element, handler) => element.addEventListener('input', () => handler(element.value)),
|
|
96
|
+
'ontrim:ktinput': (element, handler) => element.addEventListener('input', () => handler(element.value.trim())),
|
|
97
|
+
'on:ktinputnumber': (element, handler) => element.addEventListener('input', () => handler(Number(element.value))),
|
|
95
98
|
};
|
|
99
|
+
|
|
100
|
+
const defaultHandler = (element, key, value) => element.setAttribute(key, value);
|
|
96
101
|
function attrIsObject(element, attr) {
|
|
97
102
|
const classValue = attr.class;
|
|
98
103
|
const style = attr.style;
|
|
@@ -112,11 +117,19 @@ function attrIsObject(element, attr) {
|
|
|
112
117
|
delete attr.style;
|
|
113
118
|
}
|
|
114
119
|
const keys = $keys(attr);
|
|
120
|
+
// todo 这里的处理每次遍历都要if所有的情况,能否用map或者对象来优化?
|
|
115
121
|
for (let i = keys.length - 1; i >= 0; i--) {
|
|
116
122
|
const key = keys[i];
|
|
117
123
|
const o = attr[key];
|
|
118
124
|
// force register on:xxx as an event handler
|
|
119
125
|
// !if o is not valid, the throwing job will be done by `on`, not kt.js
|
|
126
|
+
// # special handling for kt.js specific events
|
|
127
|
+
const ktEvent = ktEventHandlers[key];
|
|
128
|
+
if (ktEvent) {
|
|
129
|
+
ktEvent(element, o);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
// # normal event handler
|
|
120
133
|
if (key.startsWith('on:')) {
|
|
121
134
|
element.addEventListener(key.slice(3), o); // chop off the `@`
|
|
122
135
|
continue;
|
|
@@ -203,7 +216,7 @@ function applyContent(element, content) {
|
|
|
203
216
|
* ## About
|
|
204
217
|
* @package @ktjs/core
|
|
205
218
|
* @author Kasukabe Tsumugi <futami16237@gmail.com>
|
|
206
|
-
* @version 0.13.
|
|
219
|
+
* @version 0.13.2 (Last Update: 2026.01.16 19:38:40.621)
|
|
207
220
|
* @license MIT
|
|
208
221
|
* @link https://github.com/baendlorel/kt.js
|
|
209
222
|
* @link https://baendlorel.github.io/ Welcome to my site!
|
package/dist/jsx/index.d.ts
CHANGED
|
@@ -16,6 +16,33 @@ interface KTRef<T> {
|
|
|
16
16
|
*/
|
|
17
17
|
declare function ref<T = HTMLElement>(value?: T): KTRef<T>;
|
|
18
18
|
|
|
19
|
+
type KTHTMLElement = HTMLElement & {
|
|
20
|
+
/**
|
|
21
|
+
* Automically generate a redraw function if it is not provided
|
|
22
|
+
* @param props
|
|
23
|
+
*/
|
|
24
|
+
redraw: (props?: KTAttribute, children?: KTRawContent) => void;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
declare global {
|
|
28
|
+
namespace JSX {
|
|
29
|
+
type Element = KTHTMLElement;
|
|
30
|
+
|
|
31
|
+
interface IntrinsicElements {
|
|
32
|
+
[tag: string]: KTAttribute & { children?: KTRawContent };
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// interface IntrinsicAttributes {
|
|
36
|
+
// key?: string | number;
|
|
37
|
+
// }
|
|
38
|
+
type IntrinsicAttributes = KTAttribute;
|
|
39
|
+
|
|
40
|
+
interface ElementChildrenAttribute {
|
|
41
|
+
children: {};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
19
46
|
type KTAvailableContent =
|
|
20
47
|
| KTRef<any>
|
|
21
48
|
| HTMLElement
|
|
@@ -92,34 +119,17 @@ type KTPrefixedEventHandlers = {
|
|
|
92
119
|
[EventName in keyof HTMLElementEventMap as `on:${EventName}`]?: (ev: HTMLElementEventMap[EventName]) => void;
|
|
93
120
|
};
|
|
94
121
|
|
|
95
|
-
type
|
|
122
|
+
type KTSpecialEventHandlers = {
|
|
123
|
+
'on:ktchange'?: (value: string) => void;
|
|
124
|
+
'ontrim:ktchange'?: (value: string) => void;
|
|
125
|
+
'on:ktchangenumber'?: (value: number) => void;
|
|
96
126
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
* @param props
|
|
101
|
-
*/
|
|
102
|
-
redraw: (props?: KTAttribute, children?: KTRawContent) => void;
|
|
127
|
+
'on:ktinput'?: (value: string) => void;
|
|
128
|
+
'ontrim:ktinput'?: (value: string) => void;
|
|
129
|
+
'on:ktinputnumber'?: (value: number) => void;
|
|
103
130
|
};
|
|
104
131
|
|
|
105
|
-
|
|
106
|
-
namespace JSX {
|
|
107
|
-
type Element = KTHTMLElement;
|
|
108
|
-
|
|
109
|
-
interface IntrinsicElements {
|
|
110
|
-
[tag: string]: KTAttribute & { children?: KTRawContent };
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// interface IntrinsicAttributes {
|
|
114
|
-
// key?: string | number;
|
|
115
|
-
// }
|
|
116
|
-
type IntrinsicAttributes = KTAttribute;
|
|
117
|
-
|
|
118
|
-
interface ElementChildrenAttribute {
|
|
119
|
-
children: {};
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
132
|
+
type KTAttribute = KTBaseAttribute & KTPrefixedEventHandlers & KTSpecialEventHandlers;
|
|
123
133
|
|
|
124
134
|
type HTML<T extends HTMLTag & otherstring> = T extends HTMLTag ? HTMLElementTagNameMap[T] : HTMLElement;
|
|
125
135
|
type H = (<T extends HTMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent) => HTML<T>) & {
|
|
@@ -136,7 +146,7 @@ type H = (<T extends HTMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent)
|
|
|
136
146
|
* ## About
|
|
137
147
|
* @package @ktjs/core
|
|
138
148
|
* @author Kasukabe Tsumugi <futami16237@gmail.com>
|
|
139
|
-
* @version 0.13.
|
|
149
|
+
* @version 0.13.2 (Last Update: 2026.01.16 19:38:40.621)
|
|
140
150
|
* @license MIT
|
|
141
151
|
* @link https://github.com/baendlorel/kt.js
|
|
142
152
|
* @link https://baendlorel.github.io/ Welcome to my site!
|
package/dist/jsx/index.mjs
CHANGED
|
@@ -48,22 +48,22 @@ if (typeof Promise === 'undefined') {
|
|
|
48
48
|
}
|
|
49
49
|
const $isThenable = (o) => typeof o === 'object' && o !== null && typeof o.then === 'function';
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
const booleanHandler = (element, key, value) => {
|
|
52
52
|
if (key in element) {
|
|
53
53
|
element[key] = !!value;
|
|
54
54
|
}
|
|
55
55
|
else {
|
|
56
56
|
element.setAttribute(key, value);
|
|
57
57
|
}
|
|
58
|
-
}
|
|
59
|
-
|
|
58
|
+
};
|
|
59
|
+
const valueHandler = (element, key, value) => {
|
|
60
60
|
if (key in element) {
|
|
61
61
|
element[key] = value;
|
|
62
62
|
}
|
|
63
63
|
else {
|
|
64
64
|
element.setAttribute(key, value);
|
|
65
65
|
}
|
|
66
|
-
}
|
|
66
|
+
};
|
|
67
67
|
// Attribute handlers map for optimized lookup
|
|
68
68
|
const handlers = {
|
|
69
69
|
checked: booleanHandler,
|
|
@@ -86,13 +86,18 @@ const handlers = {
|
|
|
86
86
|
muted: booleanHandler,
|
|
87
87
|
defer: booleanHandler,
|
|
88
88
|
async: booleanHandler,
|
|
89
|
-
hidden:
|
|
90
|
-
element.hidden = !!value;
|
|
91
|
-
},
|
|
89
|
+
hidden: (element, _key, value) => (element.hidden = !!value),
|
|
92
90
|
};
|
|
93
|
-
const
|
|
94
|
-
|
|
91
|
+
const ktEventHandlers = {
|
|
92
|
+
'on:ktchange': (element, handler) => element.addEventListener('change', () => handler(element.value)),
|
|
93
|
+
'ontrim:ktchange': (element, handler) => element.addEventListener('change', () => handler(element.value.trim())),
|
|
94
|
+
'on:ktchangenumber': (element, handler) => element.addEventListener('change', () => handler(Number(element.value))),
|
|
95
|
+
'on:ktinput': (element, handler) => element.addEventListener('input', () => handler(element.value)),
|
|
96
|
+
'ontrim:ktinput': (element, handler) => element.addEventListener('input', () => handler(element.value.trim())),
|
|
97
|
+
'on:ktinputnumber': (element, handler) => element.addEventListener('input', () => handler(Number(element.value))),
|
|
95
98
|
};
|
|
99
|
+
|
|
100
|
+
const defaultHandler = (element, key, value) => element.setAttribute(key, value);
|
|
96
101
|
function attrIsObject(element, attr) {
|
|
97
102
|
const classValue = attr.class;
|
|
98
103
|
const style = attr.style;
|
|
@@ -112,11 +117,19 @@ function attrIsObject(element, attr) {
|
|
|
112
117
|
delete attr.style;
|
|
113
118
|
}
|
|
114
119
|
const keys = $keys(attr);
|
|
120
|
+
// todo 这里的处理每次遍历都要if所有的情况,能否用map或者对象来优化?
|
|
115
121
|
for (let i = keys.length - 1; i >= 0; i--) {
|
|
116
122
|
const key = keys[i];
|
|
117
123
|
const o = attr[key];
|
|
118
124
|
// force register on:xxx as an event handler
|
|
119
125
|
// !if o is not valid, the throwing job will be done by `on`, not kt.js
|
|
126
|
+
// # special handling for kt.js specific events
|
|
127
|
+
const ktEvent = ktEventHandlers[key];
|
|
128
|
+
if (ktEvent) {
|
|
129
|
+
ktEvent(element, o);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
// # normal event handler
|
|
120
133
|
if (key.startsWith('on:')) {
|
|
121
134
|
element.addEventListener(key.slice(3), o); // chop off the `@`
|
|
122
135
|
continue;
|
|
@@ -203,7 +216,7 @@ function applyContent(element, content) {
|
|
|
203
216
|
* ## About
|
|
204
217
|
* @package @ktjs/core
|
|
205
218
|
* @author Kasukabe Tsumugi <futami16237@gmail.com>
|
|
206
|
-
* @version 0.13.
|
|
219
|
+
* @version 0.13.2 (Last Update: 2026.01.16 19:38:40.621)
|
|
207
220
|
* @license MIT
|
|
208
221
|
* @link https://github.com/baendlorel/kt.js
|
|
209
222
|
* @link https://baendlorel.github.io/ Welcome to my site!
|
|
@@ -10,6 +10,33 @@ interface KTRef<T> {
|
|
|
10
10
|
isKT: true;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
type KTHTMLElement = HTMLElement & {
|
|
14
|
+
/**
|
|
15
|
+
* Automically generate a redraw function if it is not provided
|
|
16
|
+
* @param props
|
|
17
|
+
*/
|
|
18
|
+
redraw: (props?: KTAttribute, children?: KTRawContent) => void;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
declare global {
|
|
22
|
+
namespace JSX {
|
|
23
|
+
type Element = KTHTMLElement;
|
|
24
|
+
|
|
25
|
+
interface IntrinsicElements {
|
|
26
|
+
[tag: string]: KTAttribute & { children?: KTRawContent };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// interface IntrinsicAttributes {
|
|
30
|
+
// key?: string | number;
|
|
31
|
+
// }
|
|
32
|
+
type IntrinsicAttributes = KTAttribute;
|
|
33
|
+
|
|
34
|
+
interface ElementChildrenAttribute {
|
|
35
|
+
children: {};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
13
40
|
type KTAvailableContent =
|
|
14
41
|
| KTRef<any>
|
|
15
42
|
| HTMLElement
|
|
@@ -86,34 +113,17 @@ type KTPrefixedEventHandlers = {
|
|
|
86
113
|
[EventName in keyof HTMLElementEventMap as `on:${EventName}`]?: (ev: HTMLElementEventMap[EventName]) => void;
|
|
87
114
|
};
|
|
88
115
|
|
|
89
|
-
type
|
|
116
|
+
type KTSpecialEventHandlers = {
|
|
117
|
+
'on:ktchange'?: (value: string) => void;
|
|
118
|
+
'ontrim:ktchange'?: (value: string) => void;
|
|
119
|
+
'on:ktchangenumber'?: (value: number) => void;
|
|
90
120
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
* @param props
|
|
95
|
-
*/
|
|
96
|
-
redraw: (props?: KTAttribute, children?: KTRawContent) => void;
|
|
121
|
+
'on:ktinput'?: (value: string) => void;
|
|
122
|
+
'ontrim:ktinput'?: (value: string) => void;
|
|
123
|
+
'on:ktinputnumber'?: (value: number) => void;
|
|
97
124
|
};
|
|
98
125
|
|
|
99
|
-
|
|
100
|
-
namespace JSX {
|
|
101
|
-
type Element = KTHTMLElement;
|
|
102
|
-
|
|
103
|
-
interface IntrinsicElements {
|
|
104
|
-
[tag: string]: KTAttribute & { children?: KTRawContent };
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// interface IntrinsicAttributes {
|
|
108
|
-
// key?: string | number;
|
|
109
|
-
// }
|
|
110
|
-
type IntrinsicAttributes = KTAttribute;
|
|
111
|
-
|
|
112
|
-
interface ElementChildrenAttribute {
|
|
113
|
-
children: {};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
126
|
+
type KTAttribute = KTBaseAttribute & KTPrefixedEventHandlers & KTSpecialEventHandlers;
|
|
117
127
|
|
|
118
128
|
type HTML<T extends HTMLTag & otherstring> = T extends HTMLTag ? HTMLElementTagNameMap[T] : HTMLElement;
|
|
119
129
|
type H = (<T extends HTMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent) => HTML<T>) & {
|
|
@@ -130,7 +140,7 @@ type H = (<T extends HTMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent)
|
|
|
130
140
|
* ## About
|
|
131
141
|
* @package @ktjs/core
|
|
132
142
|
* @author Kasukabe Tsumugi <futami16237@gmail.com>
|
|
133
|
-
* @version 0.13.
|
|
143
|
+
* @version 0.13.2 (Last Update: 2026.01.16 19:38:40.621)
|
|
134
144
|
* @license MIT
|
|
135
145
|
* @link https://github.com/baendlorel/kt.js
|
|
136
146
|
* @link https://baendlorel.github.io/ Welcome to my site!
|
package/dist/jsx/jsx-runtime.mjs
CHANGED
|
@@ -48,22 +48,22 @@ if (typeof Promise === 'undefined') {
|
|
|
48
48
|
}
|
|
49
49
|
const $isThenable = (o) => typeof o === 'object' && o !== null && typeof o.then === 'function';
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
const booleanHandler = (element, key, value) => {
|
|
52
52
|
if (key in element) {
|
|
53
53
|
element[key] = !!value;
|
|
54
54
|
}
|
|
55
55
|
else {
|
|
56
56
|
element.setAttribute(key, value);
|
|
57
57
|
}
|
|
58
|
-
}
|
|
59
|
-
|
|
58
|
+
};
|
|
59
|
+
const valueHandler = (element, key, value) => {
|
|
60
60
|
if (key in element) {
|
|
61
61
|
element[key] = value;
|
|
62
62
|
}
|
|
63
63
|
else {
|
|
64
64
|
element.setAttribute(key, value);
|
|
65
65
|
}
|
|
66
|
-
}
|
|
66
|
+
};
|
|
67
67
|
// Attribute handlers map for optimized lookup
|
|
68
68
|
const handlers = {
|
|
69
69
|
checked: booleanHandler,
|
|
@@ -86,13 +86,18 @@ const handlers = {
|
|
|
86
86
|
muted: booleanHandler,
|
|
87
87
|
defer: booleanHandler,
|
|
88
88
|
async: booleanHandler,
|
|
89
|
-
hidden:
|
|
90
|
-
element.hidden = !!value;
|
|
91
|
-
},
|
|
89
|
+
hidden: (element, _key, value) => (element.hidden = !!value),
|
|
92
90
|
};
|
|
93
|
-
const
|
|
94
|
-
|
|
91
|
+
const ktEventHandlers = {
|
|
92
|
+
'on:ktchange': (element, handler) => element.addEventListener('change', () => handler(element.value)),
|
|
93
|
+
'ontrim:ktchange': (element, handler) => element.addEventListener('change', () => handler(element.value.trim())),
|
|
94
|
+
'on:ktchangenumber': (element, handler) => element.addEventListener('change', () => handler(Number(element.value))),
|
|
95
|
+
'on:ktinput': (element, handler) => element.addEventListener('input', () => handler(element.value)),
|
|
96
|
+
'ontrim:ktinput': (element, handler) => element.addEventListener('input', () => handler(element.value.trim())),
|
|
97
|
+
'on:ktinputnumber': (element, handler) => element.addEventListener('input', () => handler(Number(element.value))),
|
|
95
98
|
};
|
|
99
|
+
|
|
100
|
+
const defaultHandler = (element, key, value) => element.setAttribute(key, value);
|
|
96
101
|
function attrIsObject(element, attr) {
|
|
97
102
|
const classValue = attr.class;
|
|
98
103
|
const style = attr.style;
|
|
@@ -112,11 +117,19 @@ function attrIsObject(element, attr) {
|
|
|
112
117
|
delete attr.style;
|
|
113
118
|
}
|
|
114
119
|
const keys = $keys(attr);
|
|
120
|
+
// todo 这里的处理每次遍历都要if所有的情况,能否用map或者对象来优化?
|
|
115
121
|
for (let i = keys.length - 1; i >= 0; i--) {
|
|
116
122
|
const key = keys[i];
|
|
117
123
|
const o = attr[key];
|
|
118
124
|
// force register on:xxx as an event handler
|
|
119
125
|
// !if o is not valid, the throwing job will be done by `on`, not kt.js
|
|
126
|
+
// # special handling for kt.js specific events
|
|
127
|
+
const ktEvent = ktEventHandlers[key];
|
|
128
|
+
if (ktEvent) {
|
|
129
|
+
ktEvent(element, o);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
// # normal event handler
|
|
120
133
|
if (key.startsWith('on:')) {
|
|
121
134
|
element.addEventListener(key.slice(3), o); // chop off the `@`
|
|
122
135
|
continue;
|
|
@@ -203,7 +216,7 @@ function applyContent(element, content) {
|
|
|
203
216
|
* ## About
|
|
204
217
|
* @package @ktjs/core
|
|
205
218
|
* @author Kasukabe Tsumugi <futami16237@gmail.com>
|
|
206
|
-
* @version 0.13.
|
|
219
|
+
* @version 0.13.2 (Last Update: 2026.01.16 19:38:40.621)
|
|
207
220
|
* @license MIT
|
|
208
221
|
* @link https://github.com/baendlorel/kt.js
|
|
209
222
|
* @link https://baendlorel.github.io/ Welcome to my site!
|