@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.
@@ -11,6 +11,7 @@ var __ktjs_core__ = (function (exports) {
11
11
  };
12
12
 
13
13
  // DOM manipulation utilities
14
+ // # dom natives
14
15
  /**
15
16
  * & Remove `bind` because it is shockingly slower than wrapper
16
17
  * & `window.document` is safe because it is not configurable and its setter is undefined
@@ -46,10 +47,11 @@ var __ktjs_core__ = (function (exports) {
46
47
  $appendChild.call(this, fragment);
47
48
  }
48
49
  };
50
+ const { get: $buttonDisabledGetter, set: $buttonDisabledSetter } = Object.getOwnPropertyDescriptor(HTMLButtonElement.prototype, 'disabled');
49
51
 
50
52
  // Shared utilities and cached native methods for kt.js framework
51
53
  // Re-export all utilities
52
- Object.defineProperty(window, '@ktjs/shared', { value: '0.19.0' });
54
+ Object.defineProperty(window, '@ktjs/shared', { value: '0.20.0' });
53
55
 
54
56
  var booleanHandler = function (element, key, value) {
55
57
  if (key in element) {
@@ -92,7 +94,9 @@ var __ktjs_core__ = (function (exports) {
92
94
  hidden: function (element, _key, value) { return (element.hidden = !!value); },
93
95
  };
94
96
 
95
- var defaultHandler = function (element, key, value) { return element.setAttribute(key, value); };
97
+ var defaultHandler = function (element, key, value) {
98
+ return element.setAttribute(key, value);
99
+ };
96
100
  function attrIsObject(element, attr) {
97
101
  var classValue = attr.class || attr.className;
98
102
  if (classValue !== undefined) {
@@ -195,7 +199,14 @@ var __ktjs_core__ = (function (exports) {
195
199
  }
196
200
  }
197
201
 
198
- var svgTempWrapper = document.createElement('div');
202
+ document.createElement('div');
203
+ var htmlCreator = function (tag) { return document.createElement(tag); };
204
+ var svgCreator = function (tag) { return document.createElementNS('http://www.w3.org/2000/svg', tag); };
205
+ var mathMLCreator = function (tag) { return document.createElementNS('http://www.w3.org/1998/Math/MathML', tag); };
206
+ var creator = htmlCreator;
207
+ // # consts
208
+ var SVG_ATTR_FLAG = '__kt_svg__';
209
+ var MATHML_ATTR_FLAG = '__kt_mathml__';
199
210
  /**
200
211
  * Create an enhanced HTMLElement.
201
212
  * - Only supports HTMLElements, **NOT** SVGElements or other Elements.
@@ -206,7 +217,7 @@ var __ktjs_core__ = (function (exports) {
206
217
  * ## About
207
218
  * @package @ktjs/core
208
219
  * @author Kasukabe Tsumugi <futami16237@gmail.com>
209
- * @version 0.19.1 (Last Update: 2026.01.31 23:07:55.249)
220
+ * @version 0.20.1 (Last Update: 2026.02.01 16:38:49.148)
210
221
  * @license MIT
211
222
  * @link https://github.com/baendlorel/kt.js
212
223
  * @link https://baendlorel.github.io/ Welcome to my site!
@@ -217,51 +228,35 @@ var __ktjs_core__ = (function (exports) {
217
228
  if (typeof tag !== 'string') {
218
229
  $throw('tagName must be a string.');
219
230
  }
231
+ if (attr) {
232
+ if (SVG_ATTR_FLAG in attr) {
233
+ delete attr[SVG_ATTR_FLAG];
234
+ creator = svgCreator;
235
+ }
236
+ else if (MATHML_ATTR_FLAG in attr) {
237
+ delete attr[MATHML_ATTR_FLAG];
238
+ creator = mathMLCreator;
239
+ }
240
+ else {
241
+ creator = htmlCreator;
242
+ }
243
+ }
220
244
  // * start creating the element
221
- var element = document.createElement(tag);
245
+ var element = creator(tag);
222
246
  // * Handle content
223
247
  applyAttr(element, attr);
224
248
  applyContent(element, content);
225
- if (tag === 'svg') {
226
- svgTempWrapper.innerHTML = element.outerHTML;
227
- return svgTempWrapper.firstChild;
228
- }
249
+ // if (tag === 'svg') {
250
+ // tempWrapper.innerHTML = element.outerHTML;
251
+ // return tempWrapper.firstChild as HTML<T>;
252
+ // }
253
+ // if (tag === 'math') {
254
+ // tempWrapper.innerHTML = element.outerHTML;
255
+ // return tempWrapper.firstChild as HTML<T>;
256
+ // }
229
257
  return element;
230
258
  };
231
259
 
232
- /******************************************************************************
233
- Copyright (c) Microsoft Corporation.
234
-
235
- Permission to use, copy, modify, and/or distribute this software for any
236
- purpose with or without fee is hereby granted.
237
-
238
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
239
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
240
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
241
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
242
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
243
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
244
- PERFORMANCE OF THIS SOFTWARE.
245
- ***************************************************************************** */
246
- /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
247
-
248
-
249
- var __assign = function() {
250
- __assign = Object.assign || function __assign(t) {
251
- for (var s, i = 1, n = arguments.length; i < n; i++) {
252
- s = arguments[i];
253
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
254
- }
255
- return t;
256
- };
257
- return __assign.apply(this, arguments);
258
- };
259
-
260
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
261
- var e = new Error(message);
262
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
263
- };
264
-
265
260
  var KTRef = /** @class */ (function () {
266
261
  function KTRef(_value, _onChanges) {
267
262
  /**
@@ -327,22 +322,13 @@ var __ktjs_core__ = (function (exports) {
327
322
  * @param props properties/attributes
328
323
  */
329
324
  function jsx(tag, props) {
330
- var _a, _b;
331
- if (props === void 0) { props = {}; }
325
+ var _a;
332
326
  var ref = ((_a = props.ref) === null || _a === void 0 ? void 0 : _a.isKT) ? props.ref : dummyRef;
333
327
  var el;
334
- var redraw = function (newProps) {
335
- props = newProps ? __assign(__assign({}, props), newProps) : props;
336
- el = jsx(tag, props);
337
- if (ref !== dummyRef) {
338
- ref.value = el; // & ref setter automatically replaces old element in DOM
339
- }
340
- return el;
341
- };
342
328
  if ('k-if' in props && !props['k-if']) {
329
+ // & make comment placeholder in case that ref might be redrawn later
343
330
  el = document.createComment('k-if');
344
- ref.value = el; // & ref setter automatically replaces old element in DOM
345
- el.redraw = redraw;
331
+ ref.value = el;
346
332
  return el;
347
333
  }
348
334
  // Handle function components
@@ -352,7 +338,6 @@ var __ktjs_core__ = (function (exports) {
352
338
  else {
353
339
  el = h(tag, props, props.children);
354
340
  }
355
- (_b = el.redraw) !== null && _b !== void 0 ? _b : (el.redraw = redraw);
356
341
  ref.value = el;
357
342
  return el;
358
343
  }
@@ -400,32 +385,6 @@ var __ktjs_core__ = (function (exports) {
400
385
  * This is called when using jsx: "react-jsx" or "react-jsxdev"
401
386
  */
402
387
  var jsxs = jsx;
403
- /**
404
- * A helper to create redrawable elements
405
- * ```tsx
406
- * export function MyComponent() {
407
- * let aa = 10;
408
- * // ...
409
- * // aa might be changed
410
- * return createRedrawableNoref(() => <div>{aa}</div>);
411
- * }
412
- * ```
413
- * Then the returned element has a `redraw` method to redraw itself with new values.
414
- * @param creator a simple creator function that returns an element
415
- * @returns created element
416
- */
417
- function createRedrawableNoref(creator) {
418
- var el = creator();
419
- var redraw = function () {
420
- var old = el;
421
- el = creator();
422
- old.replaceWith(el);
423
- el.redraw = redraw;
424
- return el;
425
- };
426
- el.redraw = redraw;
427
- return el;
428
- }
429
388
  /**
430
389
  * A helper to create redrawable elements
431
390
  * ```tsx
@@ -442,13 +401,12 @@ var __ktjs_core__ = (function (exports) {
442
401
  */
443
402
  function createRedrawable(creator) {
444
403
  var elRef = ref();
445
- elRef.value = creator();
446
404
  var redraw = function () {
447
405
  elRef.value = creator(); // ref setter automatically calls replaceWith
448
- elRef.value.redraw = redraw;
406
+ elRef.redraw = redraw;
449
407
  return elRef.value;
450
408
  };
451
- elRef.value.redraw = redraw;
409
+ redraw();
452
410
  return elRef;
453
411
  }
454
412
 
@@ -685,7 +643,6 @@ var __ktjs_core__ = (function (exports) {
685
643
  exports.KTRef = KTRef;
686
644
  exports.createElement = h;
687
645
  exports.createRedrawable = createRedrawable;
688
- exports.createRedrawableNoref = createRedrawableNoref;
689
646
  exports.h = h;
690
647
  exports.jsx = jsx;
691
648
  exports.jsxDEV = jsxDEV;
package/dist/index.mjs CHANGED
@@ -8,6 +8,7 @@ const $throw = (message) => {
8
8
  };
9
9
 
10
10
  // DOM manipulation utilities
11
+ // # dom natives
11
12
  /**
12
13
  * & Remove `bind` because it is shockingly slower than wrapper
13
14
  * & `window.document` is safe because it is not configurable and its setter is undefined
@@ -43,10 +44,11 @@ const $append = // for ie 9/10/11
43
44
  $appendChild.call(this, fragment);
44
45
  }
45
46
  };
47
+ const { get: $buttonDisabledGetter, set: $buttonDisabledSetter } = Object.getOwnPropertyDescriptor(HTMLButtonElement.prototype, 'disabled');
46
48
 
47
49
  // Shared utilities and cached native methods for kt.js framework
48
50
  // Re-export all utilities
49
- Object.defineProperty(window, '@ktjs/shared', { value: '0.19.0' });
51
+ Object.defineProperty(window, '@ktjs/shared', { value: '0.20.0' });
50
52
 
51
53
  const booleanHandler = (element, key, value) => {
52
54
  if (key in element) {
@@ -189,7 +191,14 @@ function applyContent(element, content) {
189
191
  }
190
192
  }
191
193
 
192
- const svgTempWrapper = document.createElement('div');
194
+ document.createElement('div');
195
+ const htmlCreator = (tag) => document.createElement(tag);
196
+ const svgCreator = (tag) => document.createElementNS('http://www.w3.org/2000/svg', tag);
197
+ const mathMLCreator = (tag) => document.createElementNS('http://www.w3.org/1998/Math/MathML', tag);
198
+ let creator = htmlCreator;
199
+ // # consts
200
+ const SVG_ATTR_FLAG = '__kt_svg__';
201
+ const MATHML_ATTR_FLAG = '__kt_mathml__';
193
202
  /**
194
203
  * Create an enhanced HTMLElement.
195
204
  * - Only supports HTMLElements, **NOT** SVGElements or other Elements.
@@ -200,7 +209,7 @@ const svgTempWrapper = document.createElement('div');
200
209
  * ## About
201
210
  * @package @ktjs/core
202
211
  * @author Kasukabe Tsumugi <futami16237@gmail.com>
203
- * @version 0.19.1 (Last Update: 2026.01.31 23:07:55.249)
212
+ * @version 0.20.1 (Last Update: 2026.02.01 16:38:49.148)
204
213
  * @license MIT
205
214
  * @link https://github.com/baendlorel/kt.js
206
215
  * @link https://baendlorel.github.io/ Welcome to my site!
@@ -211,15 +220,32 @@ const h = (tag, attr, content) => {
211
220
  if (typeof tag !== 'string') {
212
221
  $throw('tagName must be a string.');
213
222
  }
223
+ if (attr) {
224
+ if (SVG_ATTR_FLAG in attr) {
225
+ delete attr[SVG_ATTR_FLAG];
226
+ creator = svgCreator;
227
+ }
228
+ else if (MATHML_ATTR_FLAG in attr) {
229
+ delete attr[MATHML_ATTR_FLAG];
230
+ creator = mathMLCreator;
231
+ }
232
+ else {
233
+ creator = htmlCreator;
234
+ }
235
+ }
214
236
  // * start creating the element
215
- const element = document.createElement(tag);
237
+ const element = creator(tag);
216
238
  // * Handle content
217
239
  applyAttr(element, attr);
218
240
  applyContent(element, content);
219
- if (tag === 'svg') {
220
- svgTempWrapper.innerHTML = element.outerHTML;
221
- return svgTempWrapper.firstChild;
222
- }
241
+ // if (tag === 'svg') {
242
+ // tempWrapper.innerHTML = element.outerHTML;
243
+ // return tempWrapper.firstChild as HTML<T>;
244
+ // }
245
+ // if (tag === 'math') {
246
+ // tempWrapper.innerHTML = element.outerHTML;
247
+ // return tempWrapper.firstChild as HTML<T>;
248
+ // }
223
249
  return element;
224
250
  };
225
251
 
@@ -284,21 +310,13 @@ const dummyRef = { value: null };
284
310
  * @param tag html tag or function component
285
311
  * @param props properties/attributes
286
312
  */
287
- function jsx(tag, props = {}) {
313
+ function jsx(tag, props) {
288
314
  const ref = props.ref?.isKT ? props.ref : dummyRef;
289
315
  let el;
290
- const redraw = (newProps) => {
291
- props = newProps ? { ...props, ...newProps } : props;
292
- el = jsx(tag, props);
293
- if (ref !== dummyRef) {
294
- ref.value = el; // & ref setter automatically replaces old element in DOM
295
- }
296
- return el;
297
- };
298
316
  if ('k-if' in props && !props['k-if']) {
317
+ // & make comment placeholder in case that ref might be redrawn later
299
318
  el = document.createComment('k-if');
300
- ref.value = el; // & ref setter automatically replaces old element in DOM
301
- el.redraw = redraw;
319
+ ref.value = el;
302
320
  return el;
303
321
  }
304
322
  // Handle function components
@@ -308,7 +326,6 @@ function jsx(tag, props = {}) {
308
326
  else {
309
327
  el = h(tag, props, props.children);
310
328
  }
311
- el.redraw ??= redraw;
312
329
  ref.value = el;
313
330
  return el;
314
331
  }
@@ -352,32 +369,6 @@ const jsxDEV = (...args) => {
352
369
  * This is called when using jsx: "react-jsx" or "react-jsxdev"
353
370
  */
354
371
  const jsxs = jsx;
355
- /**
356
- * A helper to create redrawable elements
357
- * ```tsx
358
- * export function MyComponent() {
359
- * let aa = 10;
360
- * // ...
361
- * // aa might be changed
362
- * return createRedrawableNoref(() => <div>{aa}</div>);
363
- * }
364
- * ```
365
- * Then the returned element has a `redraw` method to redraw itself with new values.
366
- * @param creator a simple creator function that returns an element
367
- * @returns created element
368
- */
369
- function createRedrawableNoref(creator) {
370
- let el = creator();
371
- const redraw = () => {
372
- const old = el;
373
- el = creator();
374
- old.replaceWith(el);
375
- el.redraw = redraw;
376
- return el;
377
- };
378
- el.redraw = redraw;
379
- return el;
380
- }
381
372
  /**
382
373
  * A helper to create redrawable elements
383
374
  * ```tsx
@@ -394,13 +385,12 @@ function createRedrawableNoref(creator) {
394
385
  */
395
386
  function createRedrawable(creator) {
396
387
  const elRef = ref();
397
- elRef.value = creator();
398
388
  const redraw = () => {
399
389
  elRef.value = creator(); // ref setter automatically calls replaceWith
400
- elRef.value.redraw = redraw;
390
+ elRef.redraw = redraw;
401
391
  return elRef.value;
402
392
  };
403
- elRef.value.redraw = redraw;
393
+ redraw();
404
394
  return elRef;
405
395
  }
406
396
 
@@ -628,4 +618,4 @@ function getSequence(arr) {
628
618
  return result;
629
619
  }
630
620
 
631
- export { Fragment, KTAsync, KTFor, KTRef, h as createElement, createRedrawable, createRedrawableNoref, h, jsx, jsxDEV, jsxs, ref };
621
+ export { Fragment, KTAsync, KTFor, KTRef, h as createElement, createRedrawable, h, jsx, jsxDEV, jsxs, ref };