@ktjs/core 0.33.5 → 0.34.0
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/README.md +3 -3
- package/dist/index.d.ts +7 -2
- package/dist/index.mjs +14 -50
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
## Recent Updates and Breaking Changes
|
|
18
18
|
|
|
19
19
|
1. `ref.value` remains the standard read API, and it can also replace the whole outer value with `ref.value = nextValue`.
|
|
20
|
-
2. `ref.draft` is the deep-mutation entry for
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
2. `ref.draft` is the deep-mutation entry for literally any objects. Just use `someRef.draft.a = someValue`, and kt.js will add it to microqueue and redraw it on the next tick. Works for `Map`, `Set`, `Array`, `Date` and your custom objects.
|
|
21
|
+
1. `ref.draft` itself is **not assignable**.
|
|
22
|
+
3. `addOnChange((newValue, oldValue) => ...)` keeps `oldValue` as the previous reference, not a deep snapshot.
|
|
23
23
|
|
|
24
24
|
## Community
|
|
25
25
|
|
package/dist/index.d.ts
CHANGED
|
@@ -39,6 +39,10 @@ declare class KTRef<T> extends KTReactive<T> {
|
|
|
39
39
|
readonly ktType = KTReactiveType.Ref;
|
|
40
40
|
get value(): T;
|
|
41
41
|
set value(newValue: T);
|
|
42
|
+
/**
|
|
43
|
+
* Used to mutate the value in-place.
|
|
44
|
+
* - internal value is changed instantly, but the change handlers will be called in the next microtask.
|
|
45
|
+
*/
|
|
42
46
|
get draft(): T;
|
|
43
47
|
}
|
|
44
48
|
/**
|
|
@@ -1213,7 +1217,7 @@ declare class KTComputed<T> extends KTReactive<T> {
|
|
|
1213
1217
|
/**
|
|
1214
1218
|
* Force listeners to run once with the latest computed result.
|
|
1215
1219
|
*/
|
|
1216
|
-
notify(
|
|
1220
|
+
notify(): this;
|
|
1217
1221
|
}
|
|
1218
1222
|
/**
|
|
1219
1223
|
* Create a reactive computed value
|
|
@@ -1244,9 +1248,10 @@ declare class KTReactive<T> {
|
|
|
1244
1248
|
set value(_newValue: T);
|
|
1245
1249
|
/**
|
|
1246
1250
|
* Force all listeners to run even when reference identity has not changed.
|
|
1251
|
+
*
|
|
1247
1252
|
* Useful for in-place array/object mutations.
|
|
1248
1253
|
*/
|
|
1249
|
-
notify(
|
|
1254
|
+
notify(): this;
|
|
1250
1255
|
/**
|
|
1251
1256
|
* Ccreate a computed value based on this `KTReactive` instance.
|
|
1252
1257
|
* @param calculator A function that calculates the computed value based on the current value of this `KTReactive` instance.
|
package/dist/index.mjs
CHANGED
|
@@ -101,11 +101,7 @@ class KTReactive {
|
|
|
101
101
|
ktType=1;
|
|
102
102
|
_value;
|
|
103
103
|
_changeHandlers=new Map;
|
|
104
|
-
_emit(newValue, oldValue
|
|
105
|
-
if (handlerKeys) {
|
|
106
|
-
for (let i = 0; i < handlerKeys.length; i++) this._changeHandlers.get(handlerKeys[i])?.(newValue, oldValue);
|
|
107
|
-
return this;
|
|
108
|
-
}
|
|
104
|
+
_emit(newValue, oldValue) {
|
|
109
105
|
return this._changeHandlers.forEach(c => c(newValue, oldValue)), this;
|
|
110
106
|
}
|
|
111
107
|
constructor(_value) {
|
|
@@ -115,8 +111,8 @@ class KTReactive {
|
|
|
115
111
|
return this._value;
|
|
116
112
|
}
|
|
117
113
|
set value(_newValue) {}
|
|
118
|
-
notify(
|
|
119
|
-
return this._emit(this._value, this._value
|
|
114
|
+
notify() {
|
|
115
|
+
return this._emit(this._value, this._value);
|
|
120
116
|
}
|
|
121
117
|
map(..._args) {
|
|
122
118
|
throw new Error("This is meant to be override in computed.ts");
|
|
@@ -177,10 +173,10 @@ const ref = value => new KTRef(value), $modelOrRef = (props, defaultValue) => {
|
|
|
177
173
|
class KTComputed extends KTReactive {
|
|
178
174
|
ktType=2;
|
|
179
175
|
_calculator;
|
|
180
|
-
_recalculate(forceEmit = !1
|
|
176
|
+
_recalculate(forceEmit = !1) {
|
|
181
177
|
const oldValue = this._value, newValue = this._calculator();
|
|
182
|
-
return oldValue
|
|
183
|
-
this
|
|
178
|
+
return $is(oldValue, newValue) ? (forceEmit && this._emit(newValue, oldValue), this) : (this._value = newValue,
|
|
179
|
+
this._emit(newValue, oldValue), this);
|
|
184
180
|
}
|
|
185
181
|
constructor(_calculator, dependencies) {
|
|
186
182
|
super(_calculator()), this._calculator = _calculator;
|
|
@@ -192,8 +188,8 @@ class KTComputed extends KTReactive {
|
|
|
192
188
|
set value(_newValue) {
|
|
193
189
|
console.warn("[@ktjs/core warn]", "'value' of Computed are read-only.");
|
|
194
190
|
}
|
|
195
|
-
notify(
|
|
196
|
-
return this._recalculate(!0
|
|
191
|
+
notify() {
|
|
192
|
+
return this._recalculate(!0);
|
|
197
193
|
}
|
|
198
194
|
}
|
|
199
195
|
|
|
@@ -255,7 +251,7 @@ function applyKModel(element, valueRef) {
|
|
|
255
251
|
* ## About
|
|
256
252
|
* @package @ktjs/core
|
|
257
253
|
* @author Kasukabe Tsumugi <futami16237@gmail.com>
|
|
258
|
-
* @version 0.
|
|
254
|
+
* @version 0.34.0 (Last Update: 2026.03.24 09:32:14.812)
|
|
259
255
|
* @license MIT
|
|
260
256
|
* @link https://github.com/baendlorel/kt.js
|
|
261
257
|
* @link https://baendlorel.github.io/ Welcome to my site!
|
|
@@ -399,51 +395,19 @@ function KTFor(props) {
|
|
|
399
395
|
anchor;
|
|
400
396
|
}
|
|
401
397
|
const newKeyToNewIndex = new Map, newElements = new Array(newLength);
|
|
402
|
-
let maxNewIndexSoFar = 0, moved = !1;
|
|
403
398
|
for (let i = 0; i < newLength; i++) {
|
|
404
399
|
const item = newList[i], itemKey = currentKey(item, i, newList);
|
|
405
|
-
|
|
406
|
-
const node = nodeMap.get(itemKey);
|
|
407
|
-
newElements[i] = node, i < maxNewIndexSoFar ? moved = !0 : maxNewIndexSoFar = i;
|
|
408
|
-
} else newElements[i] = currentMap(item, i, newList);
|
|
400
|
+
newKeyToNewIndex.set(itemKey, i), nodeMap.has(itemKey) ? newElements[i] = nodeMap.get(itemKey) : newElements[i] = currentMap(item, i, newList);
|
|
409
401
|
}
|
|
410
402
|
const toRemove = [];
|
|
411
403
|
nodeMap.forEach((node, key) => {
|
|
412
404
|
newKeyToNewIndex.has(key) || toRemove.push(node);
|
|
413
405
|
});
|
|
414
406
|
for (let i = 0; i < toRemove.length; i++) toRemove[i].remove();
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
const len = arr.length;
|
|
420
|
-
for (i = 0; i < len; i++) {
|
|
421
|
-
const arrI = arr[i];
|
|
422
|
-
if (-1 !== arrI) if (j = result[result.length - 1], arr[j] < arrI) p[i] = j, result.push(i); else {
|
|
423
|
-
for (u = 0, v = result.length - 1; u < v; ) c = (u + v) / 2 | 0, arr[result[c]] < arrI ? u = c + 1 : v = c;
|
|
424
|
-
arrI < arr[result[u]] && (u > 0 && (p[i] = result[u - 1]), result[u] = i);
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
u = result.length, v = result[u - 1];
|
|
428
|
-
for (;u-- > 0; ) result[u] = v, v = p[v];
|
|
429
|
-
return result;
|
|
430
|
-
}(newElements.map((el, i) => nodeMap.has(currentKey(newList[i], i, newList)) ? i : -1));
|
|
431
|
-
let j = seq.length - 1, anchor = null;
|
|
432
|
-
for (let i = newLength - 1; i >= 0; i--) {
|
|
433
|
-
const node = newElements[i];
|
|
434
|
-
if (j < 0 || i !== seq[j]) if (anchor) parent.insertBefore(node, anchor); else {
|
|
435
|
-
let temp = anchor.nextSibling;
|
|
436
|
-
for (;temp && newElements.includes(temp); ) temp = temp.nextSibling;
|
|
437
|
-
parent.insertBefore(node, temp);
|
|
438
|
-
} else j--;
|
|
439
|
-
anchor = node;
|
|
440
|
-
}
|
|
441
|
-
} else {
|
|
442
|
-
let currentNode = anchor.nextSibling;
|
|
443
|
-
for (let i = 0; i < newLength; i++) {
|
|
444
|
-
const node = newElements[i];
|
|
445
|
-
currentNode !== node ? parent.insertBefore(node, currentNode) : currentNode = currentNode.nextSibling;
|
|
446
|
-
}
|
|
407
|
+
let currentNode = anchor.nextSibling;
|
|
408
|
+
for (let i = 0; i < newLength; i++) {
|
|
409
|
+
const node = newElements[i];
|
|
410
|
+
currentNode !== node ? parent.insertBefore(node, currentNode) : currentNode = currentNode.nextSibling;
|
|
447
411
|
}
|
|
448
412
|
nodeMap.clear();
|
|
449
413
|
for (let i = 0; i < newLength; i++) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/reactive/common.ts","../src/h/attr-helpers.ts","../src/h/attr.ts","../src/h/content.ts","../src/common.ts","../src/reactive/reactive.ts","../src/reactive/scheduler.ts","../src/reactive/ref.ts","../src/reactive/computed.ts","../src/reactive/effect.ts","../src/reactive/index.ts","../src/h/model.ts","../src/h/index.ts","../src/jsx/fragment.ts","../src/jsx/common.ts","../src/jsx/jsx-runtime.ts","../src/jsx/async.ts","../src/jsx/for.ts","../src/jsx/if.ts"],"sourcesContent":["import type { KTReactive } from './reactive.js';\nimport type { KTComputed } from './index.js';\nimport type { KTRef } from './ref.js';\n\nexport const enum KTReactiveType {\n Reative = 1,\n Computed,\n Ref,\n}\n\nexport const isKT = <T = any>(obj: any): obj is KTReactive<T> => obj?.isKT;\nexport const isRef = <T = any>(obj: any): obj is KTRef<T> => {\n // & This is tested to be the fastest way.\n // faster than includes, arrayindex, if or.\n if (obj.ktType === undefined) {\n return false;\n }\n return obj.ktType === KTReactiveType.Ref;\n};\nexport const isComputed = <T = any>(obj: any): obj is KTComputed<T> => obj?.ktType === KTReactiveType.Computed;\n","const booleanHandler = (element: HTMLElement | SVGElement | MathMLElement, key: string, value: any) => {\n if (key in element) {\n (element as any)[key] = !!value;\n } else {\n element.setAttribute(key, value);\n }\n};\n\nconst valueHandler = (element: HTMLElement | SVGElement | MathMLElement, key: string, value: any) => {\n if (key in element) {\n (element as any)[key] = value;\n } else {\n element.setAttribute(key, value);\n }\n};\n\n// Attribute handlers map for optimized lookup\nexport const handlers: Record<\n string,\n (element: HTMLElement | SVGElement | MathMLElement, key: string, value: any) => void\n> = {\n checked: booleanHandler,\n selected: booleanHandler,\n value: valueHandler,\n valueAsDate: valueHandler,\n valueAsNumber: valueHandler,\n defaultValue: valueHandler,\n defaultChecked: booleanHandler,\n defaultSelected: booleanHandler,\n disabled: booleanHandler,\n readOnly: booleanHandler,\n multiple: booleanHandler,\n required: booleanHandler,\n autofocus: booleanHandler,\n open: booleanHandler,\n controls: booleanHandler,\n autoplay: booleanHandler,\n loop: booleanHandler,\n muted: booleanHandler,\n defer: booleanHandler,\n async: booleanHandler,\n hidden: (element, _key, value) => ((element as HTMLElement).hidden = !!value),\n};\n","import type { KTReactifyProps } from '../reactive/reactive.js';\nimport type { KTRawAttr, KTAttribute } from '../types/h.js';\nimport { isKT } from '../reactive/common.js';\nimport { handlers } from './attr-helpers.js';\n\nconst defaultHandler = (element: HTMLElement | SVGElement | MathMLElement, key: string, value: any) =>\n element.setAttribute(key, value);\n\nconst setElementStyle = (\n element: HTMLElement | SVGElement | MathMLElement,\n style: Partial<CSSStyleDeclaration> | string,\n) => {\n if (typeof style === 'string') {\n (element as HTMLElement).style.cssText = style;\n return;\n }\n\n for (const key in style) {\n (element as any).style[key as any] = style[key];\n }\n};\n\nfunction attrIsObject(element: HTMLElement | SVGElement | MathMLElement, attr: KTReactifyProps<KTAttribute>) {\n const classValue = attr.class || attr.className;\n if (classValue !== undefined) {\n if (isKT<string>(classValue)) {\n element.setAttribute('class', classValue.value);\n classValue.addOnChange((v) => element.setAttribute('class', v));\n } else {\n element.setAttribute('class', classValue);\n }\n }\n\n const style = attr.style;\n if (style) {\n if (typeof style === 'string') {\n element.setAttribute('style', style);\n } else if (typeof style === 'object') {\n if (isKT(style)) {\n setElementStyle(element, style.value);\n style.addOnChange((v: Partial<CSSStyleDeclaration> | string) => setElementStyle(element, v));\n } else {\n setElementStyle(element, style as Partial<CSSStyleDeclaration>);\n }\n }\n }\n\n if ('k-html' in attr) {\n const html = attr['k-html'];\n if (isKT(html)) {\n element.innerHTML = html.value;\n html.addOnChange((v) => (element.innerHTML = v));\n } else {\n element.innerHTML = html;\n }\n }\n\n for (const key in attr) {\n // & Arranged in order of usage frequency\n if (\n // key === 'k-if' ||\n // key === 'k-else' ||\n key === 'k-model' ||\n key === 'k-for' ||\n key === 'k-key' ||\n key === 'ref' ||\n key === 'class' ||\n key === 'className' ||\n key === 'style' ||\n key === 'children' ||\n key === 'k-html'\n ) {\n continue;\n }\n\n const o = attr[key];\n\n // normal event handler\n if (key.startsWith('on:')) {\n if (o) {\n element.addEventListener(key.slice(3), o); // chop off the `on:`\n }\n continue;\n }\n\n // normal attributes\n const handler = handlers[key] || defaultHandler;\n if (isKT(o)) {\n handler(element, key, o.value);\n o.addOnChange((v) => handler(element, key, v));\n } else {\n handler(element, key, o);\n }\n }\n}\n\nexport function applyAttr(element: HTMLElement | SVGElement | MathMLElement, attr: KTRawAttr) {\n if (!attr) {\n return;\n }\n if (typeof attr === 'object' && attr !== null) {\n attrIsObject(element, attr as KTAttribute);\n } else {\n $throw('attr must be an object.');\n }\n}\n","import { $isArray, $isNode, $isThenable } from '@ktjs/shared';\nimport type { KTAvailableContent, KTRawContent } from '../types/h.js';\nimport { isKT } from '../reactive/common.js';\n\nconst assureNode = (o: any) => ($isNode(o) ? o : document.createTextNode(o));\n\nfunction apdSingle(element: HTMLElement | DocumentFragment | SVGElement | MathMLElement, c: KTAvailableContent) {\n // & Ignores falsy values, consistent with React's behavior\n if (c === undefined || c === null || c === false) {\n return;\n }\n\n if (isKT(c)) {\n let node = assureNode(c.value);\n element.appendChild(node);\n c.addOnChange((newValue, _oldValue) => {\n const oldNode = node;\n node = assureNode(newValue);\n oldNode.replaceWith(node);\n });\n } else {\n const node = assureNode(c);\n element.appendChild(node);\n // Handle KTFor anchor\n const list = (node as any).__kt_for_list__ as any[];\n if ($isArray(list)) {\n apd(element, list);\n }\n }\n}\n\nfunction apd(element: HTMLElement | DocumentFragment | SVGElement | MathMLElement, c: KTAvailableContent) {\n if ($isThenable(c)) {\n c.then((r) => apd(element, r));\n } else if ($isArray(c)) {\n for (let i = 0; i < c.length; i++) {\n // & might be thenable here too\n const ci = c[i];\n if ($isThenable(ci)) {\n const comment = document.createComment('ktjs-promise-placeholder');\n element.appendChild(comment);\n ci.then((awaited) => comment.replaceWith(awaited));\n } else {\n apdSingle(element, ci);\n }\n }\n } else {\n // & here is thened, so must be a simple elementj\n apdSingle(element, c);\n }\n}\n\nexport function applyContent(element: HTMLElement | SVGElement | MathMLElement, content: KTRawContent): void {\n if ($isArray(content)) {\n for (let i = 0; i < content.length; i++) {\n apd(element, content[i]);\n }\n } else {\n apd(element, content as KTAvailableContent);\n }\n}\n","// # internal methods that cannot be placed in @ktjs/shared\n\nexport const IdGenerator = {\n _refOnChangeId: 1,\n get refOnChangeId() {\n return this._refOnChangeId++;\n },\n _computedOnChangeId: 1,\n get computedOnChangeId() {\n return this._computedOnChangeId++;\n },\n _kid: 1,\n get kid() {\n return this._kid++;\n },\n};\n","import type { KTComputed } from './computed.js';\n\nimport { IdGenerator } from '../common.js';\nimport { KTReactiveType } from './common.js';\n\nexport type ChangeHandler<T> = (newValue: T, oldValue: T) => void;\nexport type ChangeHandlerKey = string | number;\nexport class KTReactive<T> {\n /**\n * Indicates that this is a KTRef instance\n */\n public readonly isKT: true = true;\n\n public readonly ktType: KTReactiveType = KTReactiveType.Reative;\n\n /**\n * @internal\n */\n protected _value: T;\n\n /**\n * & Here we trust developers using addOnChange properly. `ChangeHandler<any>` is aimed to mute some unnecessary type errors.\n */\n protected _changeHandlers: Map<ChangeHandlerKey, ChangeHandler<any>> = new Map();\n\n /**\n * @internal\n */\n protected _emit(newValue: T, oldValue: T, handlerKeys?: ChangeHandlerKey[]) {\n if (handlerKeys) {\n for (let i = 0; i < handlerKeys.length; i++) {\n this._changeHandlers.get(handlerKeys[i])?.(newValue, oldValue);\n }\n return this;\n }\n this._changeHandlers.forEach((c) => c(newValue, oldValue));\n return this;\n }\n\n constructor(_value: T) {\n this._value = _value;\n this._changeHandlers = new Map();\n }\n\n /**\n * If new value and old value are both nodes, the old one will be replaced in the DOM\n * - Use `.mutable` to modify the value.\n * @readonly\n */\n get value() {\n return this._value;\n }\n\n set value(_newValue: T) {\n // Only allow KTRef to be set.\n }\n\n /**\n * Force all listeners to run even when reference identity has not changed.\n * Useful for in-place array/object mutations.\n */\n notify(handlerKeys?: ChangeHandlerKey[]): this {\n return this._emit(this._value, this._value, handlerKeys);\n }\n\n /**\n * Ccreate a computed value based on this `KTReactive` instance.\n * @param calculator A function that calculates the computed value based on the current value of this `KTReactive` instance.\n * @param dependencies Optional additional dependencies that the computed value relies on.\n * @returns A `KTComputed` instance\n *\n * @see ./computed.ts implemented in `KTComputed`\n */\n map<R>(calculator: (currentValue: T) => R, dependencies?: Array<KTReactive<any>>): KTComputed<R>;\n map<R>(..._args: unknown[]): KTComputed<R> {\n throw new Error('This is meant to be override in computed.ts');\n }\n\n /**\n * Register a callback when the value changes\n * @param callback newValue and oldValue are references. You can use `a.draft` to make in-place mutations since `a.value` will not trigger `onChange` handers.\n * @param key Optional key to identify the callback, allowing multiple listeners on the same ref and individual removal. If not provided, a unique ID will be generated.\n */\n addOnChange(callback: ChangeHandler<T>, key?: ChangeHandlerKey): this {\n if (typeof callback !== 'function') {\n $throw('KTRef.addOnChange: callback must be a function');\n }\n const k = key ?? IdGenerator.refOnChangeId;\n this._changeHandlers.set(k, callback);\n return this;\n }\n\n removeOnChange(key: ChangeHandlerKey): ChangeHandler<any> | undefined {\n const callback = this._changeHandlers.get(key);\n this._changeHandlers.delete(key);\n return callback;\n }\n}\n\n// & Shockingly, If T is boolean, KTReactify<T> becomes KTReactive<true> | KTReactive<false>. It causes @ktjs/mui that disabledRefs not assignable.\n/**\n * Makes `KTReactify<'a' | 'b'> to be KTReactive<'a'> | KTReactive<'b'>`\n */\nexport type KTReactifySplit<T> = T extends boolean ? KTReactive<boolean> : T extends any ? KTReactive<T> : never;\n\nexport type KTReactifyObject<T extends object> = {\n [K in keyof T]: KTReactifySplit<T[K]>;\n};\n\nexport type KTReactifyProps<T extends object> = {\n [K in keyof T]: KTReactifySplit<Exclude<T[K], undefined>> | T[K];\n};\n\n/**\n * Makes `KTReactify<'a' | 'b'>` to be `KTReactive<'a' | 'b'>`\n */\nexport type KTReactify<T> = [T] extends [KTReactive<infer U>] ? KTReactive<U> : KTReactive<T>;\nexport type KTMaybeReactive<T> = T | KTReactify<T>;\nexport type KTMaybeReactiveProps<T extends object> = {\n [K in keyof T]: K extends `on:${string}` ? T[K] : KTMaybeReactive<Exclude<T[K], undefined>> | T[K];\n};\n","// Use microqueue to schedule the flush of pending reactions\n\nimport type { KTRef } from './ref.js';\n\nconst reactiveToOldValue = new Map<KTRef<any>, any>();\n\nlet scheduled = false;\n\nexport const markMutation = (reactive: KTRef<any>) => {\n if (!reactiveToOldValue.has(reactive)) {\n // @ts-expect-error accessing protected property\n reactiveToOldValue.set(reactive, reactive._value);\n\n // # schedule by microqueue\n if (scheduled) {\n return;\n }\n\n scheduled = true;\n Promise.resolve().then(() => {\n scheduled = false;\n reactiveToOldValue.forEach((oldValue, reactive) => {\n // @ts-expect-error accessing protected property\n reactive._changeHandlers.forEach((handler) => handler(reactive.value, oldValue));\n });\n reactiveToOldValue.clear();\n });\n }\n};\n","import type { JSX } from '../types/jsx.js';\nimport type { ChangeHandlerKey } from './reactive.js';\n\nimport { $emptyFn, $is } from '@ktjs/shared';\nimport { isRef, KTReactiveType } from './common.js';\nimport { KTReactive } from './reactive.js';\nimport { markMutation } from './scheduler.js';\n\nexport class KTRef<T> extends KTReactive<T> {\n public readonly ktType = KTReactiveType.Ref;\n\n // ! Cannot be omitted, otherwise this will override `KTReactive` with only setter. And getter will return undefined.\n get value() {\n return this._value;\n }\n\n set value(newValue: T) {\n if ($is(newValue, this._value)) {\n return;\n }\n const oldValue = this._value;\n this._value = newValue;\n this._emit(newValue, oldValue);\n }\n\n get draft() {\n markMutation(this);\n return this._value;\n }\n}\n\n/**\n * Create a `KTRef` object.\n * - use `refObject.state` to get plain data\n * - use `refObject.map(calculator)` to create a computed value based on this ref\n * - use `refObject.mutable` to set too, but it will recalculate in the next microtask. Useful for deep objects, `Map`, `Set` or other custom objects\n *\n * @param value any data\n * @param onChange event handler triggered when the value changes, with signature `(newValue, oldValue) => void`\n * @returns\n */\nexport const ref = <T = JSX.Element>(value?: T) => new KTRef<T>(value as any);\n\n/**\n * Assert k-model to be a ref object\n */\nexport const $modelOrRef = <T = any>(props: any, defaultValue?: T): KTRef<T> => {\n // & props is an object. Won't use it in any other place\n if ('k-model' in props) {\n const kmodel = props['k-model'];\n if (isRef(kmodel)) {\n return kmodel;\n } else {\n $throw(`k-model data must be a KTRef object, please use 'ref(...)' to wrap it.`);\n }\n }\n return ref(defaultValue) as KTRef<T>;\n};\n\nconst $refSetter = <T>(props: { ref?: KTRef<T> }, node: T) => (props.ref!.value = node);\ntype RefSetter<T> = (props: { ref?: KTRef<T> }, node: T) => void;\n\n/**\n * Whether `props.ref` is a `KTRef` only needs to be checked in the initial render\n */\nexport const $initRef = <T extends Node>(props: { ref?: KTRef<T> }, node: T): RefSetter<T> => {\n if (!('ref' in props)) {\n return $emptyFn;\n }\n\n const r = props.ref;\n if (isRef(r)) {\n r.value = node;\n return $refSetter;\n } else {\n $throw('Fragment: ref must be a KTRef');\n }\n};\n","import type { ChangeHandlerKey } from './reactive.js';\nimport type { JSX } from '../types/jsx.js';\n\nimport { isKT, KTReactiveType } from './common.js';\nimport { KTReactive } from './reactive.js';\n\nexport class KTComputed<T> extends KTReactive<T> {\n public readonly ktType = KTReactiveType.Computed;\n\n /**\n * @internal\n */\n private _calculator: () => T;\n\n /**\n * @internal\n */\n private _recalculate(forceEmit: boolean = false, handlerKeys?: ChangeHandlerKey[]): this {\n const oldValue = this._value;\n const newValue = this._calculator();\n if (oldValue === newValue) {\n if (forceEmit) {\n this._emit(newValue, oldValue, handlerKeys);\n }\n return this;\n }\n this._value = newValue;\n this._emit(newValue, oldValue, handlerKeys);\n return this;\n }\n\n // todo 侦听的dependency数量比较多的,纳入scheduler\n constructor(_calculator: () => T, dependencies: Array<KTReactive<unknown>>) {\n super(_calculator());\n this._calculator = _calculator;\n\n for (let i = 0; i < dependencies.length; i++) {\n dependencies[i].addOnChange(() => this._recalculate());\n }\n }\n\n /**\n * If new value and old value are both nodes, the old one will be replaced in the DOM\n */\n get value() {\n return this._value;\n }\n\n set value(_newValue: T) {\n $warn(`'value' of Computed are read-only.`);\n }\n\n /**\n * Force listeners to run once with the latest computed result.\n */\n notify(handlerKeys?: ChangeHandlerKey[]): this {\n return this._recalculate(true, handlerKeys);\n }\n}\n\nKTReactive.prototype.map = function <R>(calculator: (v: unknown) => R, dependencies?: Array<KTReactive<any>>) {\n return new KTComputed(() => calculator(this._value), dependencies ? [this, ...dependencies] : [this]);\n};\n\n/**\n * Create a reactive computed value\n * @param computeFn\n * @param dependencies refs and computeds that this computed depends on\n */\nexport function computed<T = JSX.Element>(computeFn: () => T, dependencies: Array<KTReactive<any>>): KTComputed<T> {\n if (dependencies.some((v) => !isKT(v))) {\n $throw('computed: all reactives must be KTRef or KTComputed instances');\n }\n return new KTComputed<T>(computeFn, dependencies);\n}\n","import { $emptyFn } from '@ktjs/shared';\nimport type { KTReactive } from './reactive.js';\n\ninterface KTEffectOptions {\n lazy: boolean;\n onCleanup: () => void;\n debugName: string;\n}\n\n/**\n * Register a reactive effect with options.\n * @param effectFn The effect function to run when dependencies change\n * @param reactives The reactive dependencies\n * @param options Effect options: lazy, onCleanup, debugName\n * @returns stop function to remove all listeners\n */\nexport function effect(effectFn: () => void, reactives: Array<KTReactive<any>>, options?: Partial<KTEffectOptions>) {\n const { lazy = false, onCleanup = $emptyFn, debugName = '' } = Object(options);\n const listenerKeys: Array<string | number> = [];\n\n let active = true;\n\n const run = () => {\n if (!active) {\n return;\n }\n\n // cleanup before rerun\n onCleanup();\n\n try {\n effectFn();\n } catch (err) {\n $debug('effect error:', debugName, err);\n }\n };\n\n // subscribe to dependencies\n for (let i = 0; i < reactives.length; i++) {\n listenerKeys[i] = i;\n reactives[i].addOnChange(run, i);\n }\n\n // auto run unless lazy\n if (!lazy) {\n run();\n }\n\n // stop function\n return () => {\n if (!active) {\n return;\n }\n active = false;\n\n for (let i = 0; i < reactives.length; i++) {\n reactives[i].removeOnChange(listenerKeys[i]);\n }\n\n // final cleanup\n onCleanup();\n };\n}\n","import type { KTReactive } from './reactive.js';\nimport type { JSX } from '../types/jsx.js';\nimport { isKT } from './common.js';\nimport { ref } from './ref.js';\n\n/**\n *\n * @param value\n * @returns\n */\nexport const toReactive = <T>(value: T | KTReactive<T>): KTReactive<T> =>\n isKT(value) ? value : (ref(value as T) as KTReactive<T>);\n\n/**\n * Extracts the value from a KTReactive, or returns the value directly if it's not reactive.\n */\nexport function dereactive<T = JSX.Element>(value: T | KTReactive<T>): T {\n return isKT<T>(value) ? value.value : value;\n}\n\nexport * from './common.js';\nexport * from './ref.js';\nexport * from './computed.js';\nexport * from './effect.js';\nexport type * from './reactive.js';\n","import { $applyModel, type InputElementTag } from '@ktjs/shared';\nimport type { KTRef } from '../reactive/ref.js';\nimport { isKT } from '../reactive/index.js';\n\nexport function applyKModel(element: HTMLElementTagNameMap[InputElementTag], valueRef: KTRef<any>) {\n if (!isKT(valueRef)) {\n $throw('k-model value must be a KTRef.');\n }\n\n if (element.tagName === 'INPUT') {\n if (element.type === 'radio' || element.type === 'checkbox') {\n $applyModel(element, valueRef, 'checked', 'change');\n return;\n }\n\n if (element.type === 'number') {\n $applyModel(element, valueRef, 'checked', 'change', Number);\n return;\n }\n\n if (element.type === 'date') {\n $applyModel(element, valueRef, 'checked', 'change', (v: any) => new Date(v));\n return;\n }\n\n $applyModel(element, valueRef, 'value', 'input');\n } else if (element.tagName === 'SELECT') {\n $applyModel(element, valueRef, 'value', 'change');\n } else if (element.tagName === 'TEXTAREA') {\n $applyModel(element, valueRef, 'value', 'input');\n } else {\n $warn('not supported element for k-model:');\n }\n}\n","import type { HTMLTag, MathMLTag, SVGTag } from '@ktjs/shared';\nimport type { KTRawAttr, KTRawContent, HTML } from '../types/h.js';\n\nimport { applyAttr } from './attr.js';\nimport { applyContent } from './content.js';\nimport { applyKModel } from './model.js';\n\n/**\n * Create an enhanced HTMLElement.\n * - Only supports HTMLElements, **NOT** SVGElements or other Elements.\n * @param tag tag of an `HTMLElement`\n * @param attr attribute object or className\n * @param content a string or an array of HTMLEnhancedElement as child nodes\n *\n * __PKG_INFO__\n */\nexport const h = <T extends HTMLTag | SVGTag | MathMLTag>(\n tag: T,\n attr?: KTRawAttr,\n content?: KTRawContent,\n): HTML<T> => {\n if (typeof tag !== 'string') {\n $throw('tagName must be a string.');\n }\n\n // * start creating the element\n const element = document.createElement(tag) as HTML<T>;\n if (typeof attr === 'object' && attr !== null && 'k-model' in attr) {\n applyKModel(element as any, attr['k-model'] as any);\n }\n\n // * Handle content\n applyAttr(element, attr);\n applyContent(element, content);\n\n return element;\n};\n\nexport const svg = <T extends SVGTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent): HTML<T> => {\n if (typeof tag !== 'string') {\n $throw('tagName must be a string.');\n }\n\n // * start creating the element\n const element = document.createElementNS('http://www.w3.org/2000/svg', tag) as HTML<T>;\n\n // * Handle content\n applyAttr(element, attr);\n applyContent(element, content);\n\n if (typeof attr === 'object' && attr !== null && 'k-model' in attr) {\n applyKModel(element as any, attr['k-model'] as any);\n }\n\n return element;\n};\n\nexport const mathml = <T extends MathMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent): HTML<T> => {\n if (typeof tag !== 'string') {\n $throw('tagName must be a string.');\n }\n\n // * start creating the element\n const element = document.createElementNS('http://www.w3.org/1998/Math/MathML', tag) as HTML<T>;\n\n // * Handle content\n applyAttr(element, attr);\n applyContent(element, content);\n\n if (typeof attr === 'object' && attr !== null && 'k-model' in attr) {\n applyKModel(element as any, attr['k-model'] as any);\n }\n\n return element;\n};\n","import type { KTReactive } from '../reactive/reactive.js';\nimport type { KTRawContent } from '../types/h.js';\nimport type { JSX } from '../types/jsx.js';\nimport type { KTRef } from '../reactive/ref.js';\n\nimport { $forEach, $isArray } from '@ktjs/shared';\nimport { $initRef, isKT, toReactive } from '../reactive/index.js';\n\nconst FRAGMENT_MOUNT_PATCHED = '__kt_fragment_mount_patched__';\nconst FRAGMENT_MOUNT = '__kt_fragment_mount__';\n\nif (typeof Node !== 'undefined' && !(globalThis as any)[FRAGMENT_MOUNT_PATCHED]) {\n (globalThis as any)[FRAGMENT_MOUNT_PATCHED] = true;\n\n const originAppendChild = Node.prototype.appendChild;\n Node.prototype.appendChild = function (node) {\n const result = originAppendChild.call(this, node);\n const mount = (node as any)[FRAGMENT_MOUNT];\n if (typeof mount === 'function') {\n mount();\n }\n return result as any;\n };\n\n const originInsertBefore = Node.prototype.insertBefore;\n Node.prototype.insertBefore = function (node: Node, child: Node | null) {\n const result = originInsertBefore.call(this, node, child);\n const mount = (node as any)[FRAGMENT_MOUNT];\n if (typeof mount === 'function') {\n mount();\n }\n return result as any;\n };\n}\n\nexport interface FragmentProps<T extends JSX.Element = JSX.Element> {\n /** Array of child elements, supports reactive arrays */\n children: T[] | KTReactive<T[]>;\n\n /** element key function for optimization (future enhancement) */\n key?: (element: T, index: number, array: T[]) => any;\n\n /** ref to get the anchor node */\n ref?: KTRef<JSX.Element>;\n}\n\n/**\n * Fragment - Container component for managing arrays of child elements\n *\n * Features:\n * 1. Returns a comment anchor node, child elements are inserted after the anchor\n * 2. Supports reactive arrays, automatically updates DOM when array changes\n * 3. Basic version uses simple replacement algorithm (remove all old elements, insert all new elements)\n * 4. Future enhancement: key-based optimization\n *\n * Usage example:\n * ```tsx\n * const children = ref([<div>A</div>, <div>B</div>]);\n * const fragment = <Fragment children={children} />;\n * document.body.appendChild(fragment);\n *\n * // Automatic update\n * children.value = [<div>C</div>, <div>D</div>];\n * ```\n */\nexport function Fragment<T extends JSX.Element = JSX.Element>(props: FragmentProps<T>): JSX.Element {\n const elements: T[] = [];\n const anchor = document.createComment('kt-fragment') as unknown as JSX.Element;\n let inserted = false;\n let observer: MutationObserver | undefined;\n\n const redraw = () => {\n const newElements = childrenRef.value;\n const parent = anchor.parentNode;\n\n if (!parent) {\n elements.length = 0;\n for (let i = 0; i < newElements.length; i++) {\n elements.push(newElements[i]);\n }\n (anchor as any).__kt_fragment_list__ = elements;\n return;\n }\n\n for (let i = 0; i < elements.length; i++) {\n elements[i].remove();\n }\n\n const fragment = document.createDocumentFragment();\n elements.length = 0;\n\n for (let i = 0; i < newElements.length; i++) {\n const element = newElements[i];\n elements.push(element);\n fragment.appendChild(element);\n }\n\n parent.insertBefore(fragment, anchor.nextSibling);\n inserted = true;\n delete (anchor as any)[FRAGMENT_MOUNT];\n observer?.disconnect();\n observer = undefined;\n (anchor as any).__kt_fragment_list__ = elements;\n };\n\n const childrenRef = toReactive(props.children).addOnChange(redraw);\n\n const renderInitial = () => {\n const current = childrenRef.value;\n elements.length = 0;\n\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < current.length; i++) {\n const element = current[i];\n elements.push(element);\n fragment.appendChild(element);\n }\n\n (anchor as any).__kt_fragment_list__ = elements;\n\n const parent = anchor.parentNode;\n if (parent && !inserted) {\n parent.insertBefore(fragment, anchor.nextSibling);\n inserted = true;\n }\n };\n\n renderInitial();\n\n (anchor as any)[FRAGMENT_MOUNT] = () => {\n if (!inserted && anchor.parentNode) {\n redraw();\n }\n };\n\n observer = new MutationObserver(() => {\n if (anchor.parentNode && !inserted) {\n redraw();\n observer?.disconnect();\n observer = undefined;\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n $initRef(props, anchor);\n\n return anchor;\n}\n\n/**\n * Convert KTRawContent to HTMLElement array\n */\nexport function convertChildrenToElements(children: KTRawContent): HTMLElement[] {\n const elements: HTMLElement[] = [];\n\n const processChild = (child: any): void => {\n if (child === undefined || child === null || child === false || child === true) {\n // Ignore null, undefined, false, true\n return;\n }\n\n if ($isArray(child)) {\n // Recursively process array\n $forEach(child, processChild);\n return;\n }\n\n if (typeof child === 'string' || typeof child === 'number') {\n const span = document.createElement('span');\n span.textContent = String(child);\n elements.push(span);\n return;\n }\n\n if (child instanceof HTMLElement) {\n elements.push(child);\n return;\n }\n\n if (isKT(child)) {\n processChild(child.value);\n return;\n }\n\n $warn('Fragment: unsupported child type', child);\n if (process.env.IS_DEV) {\n throw new Error(`Fragment: unsupported child type`);\n }\n };\n\n processChild(children);\n return elements;\n}\n","import type { JSXTag } from '@ktjs/shared';\nimport type { KTAttribute } from '../types/h.js';\nimport type { JSX } from '../types/jsx.js';\nimport { h } from '../h/index';\n\nexport const jsxh = (tag: JSXTag, props: KTAttribute): JSX.Element =>\n (typeof tag === 'function' ? tag(props) : h(tag, props, props.children)) as JSX.Element;\n\nexport const placeholder = (data: string): JSX.Element => document.createComment(data) as unknown as JSX.Element;\n","import type { JSXTag, MathMLTag, SVGTag } from '@ktjs/shared';\nimport type { KTAttribute, KTRawContent } from '../types/h.js';\nimport type { JSX } from '../types/jsx.js';\n\nimport { h, mathml as _mathml, svg as _svg } from '../h/index.js';\nimport { $initRef, isComputed } from '../reactive/index.js';\nimport { convertChildrenToElements, Fragment as FragmentArray } from './fragment.js';\nimport { jsxh, placeholder } from './common.js';\n\nfunction create(\n creator: (tag: any, props: KTAttribute, content?: KTRawContent) => JSX.Element,\n tag: any,\n props: KTAttribute,\n) {\n if (props.ref && isComputed(props.ref)) {\n $throw('Cannot assign a computed value to an element.');\n }\n const el = creator(tag, props, props.children);\n $initRef(props, el);\n return el;\n}\n\nexport const jsx = (tag: JSXTag, props: KTAttribute): JSX.Element => create(jsxh, tag, props);\nexport const svg = (tag: SVGTag, props: KTAttribute): JSX.Element => create(_svg, tag, props);\nexport const mathml = (tag: MathMLTag, props: KTAttribute): JSX.Element => create(_mathml, tag, props);\nexport { svg as svgRuntime, mathml as mathmlRuntime };\n\n/**\n * Fragment support - returns an array of children\n * Enhanced Fragment component that manages arrays of elements\n */\nexport function Fragment(props: { children?: KTRawContent }): JSX.Element {\n const { children } = props ?? {};\n\n if (!children) {\n return placeholder('kt-fragment-empty');\n }\n\n const elements = convertChildrenToElements(children);\n\n return FragmentArray({ children: elements });\n}\n\n/**\n * JSX Development runtime - same as jsx but with additional dev checks\n */\nexport const jsxDEV: typeof jsx = (...args) => {\n // console.log('JSX DEV called:', ...args);\n // console.log('children', (args[1] as any)?.children);\n return jsx(...args);\n};\n\n/**\n * JSX runtime for React 17+ automatic runtime\n * This is called when using jsx: \"react-jsx\" or \"react-jsxdev\"\n */\nexport const jsxs = jsx;\n\n// Export h as the classic JSX factory for backward compatibility\nexport { h, h as createElement };\n","import { $isThenable } from '@ktjs/shared';\nimport type { KTComponent, KTRawContent } from '../types/h.js';\nimport type { JSX } from '../types/jsx.js';\nimport type { KTRef } from '../reactive/ref.js';\n\n/**\n * Extract component props type (excluding ref and children)\n */\ntype ExtractComponentProps<T> = T extends (props: infer P) => any ? Omit<P, 'ref' | 'children'> : {};\n\nexport function KTAsync<T extends KTComponent>(\n props: {\n ref?: KTRef<JSX.Element>;\n skeleton?: JSX.Element;\n component: T;\n children?: KTRawContent;\n } & ExtractComponentProps<T>,\n): JSX.Element {\n const raw = props.component(props);\n let comp: JSX.Element =\n props.skeleton ?? (document.createComment('ktjs-suspense-placeholder') as unknown as JSX.Element);\n\n if ($isThenable(raw)) {\n raw.then((resolved) => comp.replaceWith(resolved));\n } else {\n comp = raw as JSX.Element;\n }\n\n return comp;\n}\n","import type { KTRef } from '../reactive/ref.js';\nimport type { KTReactive } from '../reactive/reactive.js';\nimport type { JSX } from '../types/jsx.js';\nimport { $initRef, toReactive } from '../reactive/index.js';\nimport { $identity } from '@ktjs/shared';\n\nexport type KTForElement = JSX.Element;\n\nexport interface KTForProps<T> {\n ref?: KTRef<KTForElement>;\n list: T[] | KTReactive<T[]>;\n key?: (item: T, index: number, array: T[]) => any;\n map?: (item: T, index: number, array: T[]) => JSX.Element;\n}\n\n// task 对于template标签的for和if,会编译为fragment,可特殊处理,让它们保持原样\n/**\n * KTFor - List rendering component with key-based optimization\n * Returns a Comment anchor node with rendered elements in __kt_for_list__\n */\nexport function KTFor<T>(props: KTForProps<T>): KTForElement {\n const redraw = () => {\n const newList = listRef.value;\n\n const parent = anchor.parentNode;\n if (!parent) {\n // If not in DOM yet, just rebuild the list\n const newElements: HTMLElement[] = [];\n nodeMap.clear();\n for (let index = 0; index < newList.length; index++) {\n const item = newList[index];\n const itemKey = currentKey(item, index, newList);\n const node = currentMap(item, index, newList);\n nodeMap.set(itemKey, node);\n newElements.push(node);\n }\n (anchor as any).__kt_for_list__ = newElements;\n return anchor;\n }\n\n const oldLength = (anchor as any).__kt_for_list__.length;\n const newLength = newList.length;\n\n // Fast path: empty list\n if (newLength === 0) {\n nodeMap.forEach((node) => node.remove());\n nodeMap.clear();\n (anchor as any).__kt_for_list__ = [];\n return anchor;\n }\n\n // Fast path: all new items\n if (oldLength === 0) {\n const newElements: HTMLElement[] = [];\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < newLength; i++) {\n const item = newList[i];\n const itemKey = currentKey(item, i, newList);\n const node = currentMap(item, i, newList);\n nodeMap.set(itemKey, node);\n newElements.push(node);\n fragment.appendChild(node);\n }\n parent.insertBefore(fragment, anchor.nextSibling);\n (anchor as any).__kt_for_list__ = newElements;\n return anchor;\n }\n\n // Build key index map and new elements array in one pass\n const newKeyToNewIndex = new Map<any, number>();\n const newElements: HTMLElement[] = new Array(newLength);\n let maxNewIndexSoFar = 0;\n let moved = false;\n\n for (let i = 0; i < newLength; i++) {\n const item = newList[i];\n const itemKey = currentKey(item, i, newList);\n newKeyToNewIndex.set(itemKey, i);\n\n if (nodeMap.has(itemKey)) {\n // Reuse existing node\n const node = nodeMap.get(itemKey)!;\n newElements[i] = node;\n\n // Track if items moved\n if (i < maxNewIndexSoFar) {\n moved = true;\n } else {\n maxNewIndexSoFar = i;\n }\n } else {\n // Create new node\n newElements[i] = currentMap(item, i, newList);\n }\n }\n\n // Remove nodes not in new list\n const toRemove: HTMLElement[] = [];\n nodeMap.forEach((node, key) => {\n if (!newKeyToNewIndex.has(key)) {\n toRemove.push(node);\n }\n });\n for (let i = 0; i < toRemove.length; i++) {\n toRemove[i].remove();\n }\n\n // Update DOM with minimal operations\n if (moved) {\n // Use longest increasing subsequence to minimize moves\n const seq = getSequence(newElements.map((el, i) => (nodeMap.has(currentKey(newList[i], i, newList)) ? i : -1)));\n\n let j = seq.length - 1;\n let anchor: Node | null = null;\n\n // Traverse from end to start for stable insertions\n for (let i = newLength - 1; i >= 0; i--) {\n const node = newElements[i];\n\n if (j < 0 || i !== seq[j]) {\n // Node needs to be moved or inserted\n if (anchor) {\n parent.insertBefore(node, anchor);\n } else {\n // Insert at end\n let temp = (anchor as any).nextSibling; // ?? 这里难道不是null?\n while (temp && newElements.includes(temp as HTMLElement)) {\n temp = temp.nextSibling;\n }\n parent.insertBefore(node, temp);\n }\n } else {\n j--;\n }\n anchor = node;\n }\n } else {\n // No moves needed, just insert new nodes\n let currentNode = anchor.nextSibling;\n for (let i = 0; i < newLength; i++) {\n const node = newElements[i];\n if (currentNode !== node) {\n parent.insertBefore(node, currentNode);\n } else {\n currentNode = currentNode.nextSibling;\n }\n }\n }\n\n // Update maps\n nodeMap.clear();\n for (let i = 0; i < newLength; i++) {\n const itemKey = currentKey(newList[i], i, newList);\n nodeMap.set(itemKey, newElements[i]);\n }\n (anchor as any).__kt_for_list__ = newElements;\n return anchor;\n };\n\n const { key: currentKey = (item: T) => item, map: currentMap = $identity } = props;\n const listRef = toReactive(props.list).addOnChange(redraw);\n const anchor = document.createComment('kt-for') as unknown as KTForElement;\n\n // Map to track rendered nodes by key\n const nodeMap = new Map<any, HTMLElement>();\n\n // Render initial list\n const elements: HTMLElement[] = [];\n for (let index = 0; index < listRef.value.length; index++) {\n const item = listRef.value[index];\n const itemKey = currentKey(item, index, listRef.value);\n const node = currentMap(item, index, listRef.value);\n nodeMap.set(itemKey, node);\n elements.push(node);\n }\n\n (anchor as any).__kt_for_list__ = elements;\n\n $initRef(props, anchor);\n\n return anchor;\n}\n\n// Longest Increasing Subsequence algorithm (optimized for diff)\nfunction getSequence(arr: number[]): number[] {\n const p = arr.slice();\n const result = [0];\n let i: number, j: number, u: number, v: number, c: number;\n const len = arr.length;\n\n for (i = 0; i < len; i++) {\n const arrI = arr[i];\n if (arrI === -1) continue;\n\n j = result[result.length - 1];\n if (arr[j] < arrI) {\n p[i] = j;\n result.push(i);\n continue;\n }\n\n u = 0;\n v = result.length - 1;\n\n while (u < v) {\n c = ((u + v) / 2) | 0;\n if (arr[result[c]] < arrI) {\n u = c + 1;\n } else {\n v = c;\n }\n }\n\n if (arrI < arr[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n\n u = result.length;\n v = result[u - 1];\n\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n\n return result;\n}\n","import type { JSXTag } from '@ktjs/shared';\nimport type { KTAttribute } from '../types/h.js';\nimport type { KTReactive } from '../reactive/reactive.js';\n\nimport { isKT } from '../reactive/index.js';\nimport { jsxh, placeholder } from './common.js';\n\nexport function KTConditional(\n condition: any | KTReactive<any>,\n tagIf: JSXTag,\n propsIf: KTAttribute,\n tagElse?: JSXTag,\n propsElse?: KTAttribute,\n) {\n if (!isKT(condition)) {\n return condition ? jsxh(tagIf, propsIf) : tagElse ? jsxh(tagElse, propsElse!) : placeholder('kt-conditional');\n }\n\n if (tagElse) {\n let current = condition.value ? jsxh(tagIf, propsIf) : jsxh(tagElse!, propsElse!);\n condition.addOnChange((newValue) => {\n const old = current;\n current = newValue ? jsxh(tagIf, propsIf) : jsxh(tagElse!, propsElse!);\n old.replaceWith(current);\n });\n return current;\n } else {\n const dummy = placeholder('kt-conditional') as HTMLElement;\n let current = condition.value ? jsxh(tagIf, propsIf) : dummy;\n condition.addOnChange((newValue) => {\n const old = current;\n current = newValue ? jsxh(tagIf, propsIf) : dummy;\n old.replaceWith(current);\n });\n return current;\n }\n}\n"],"names":["isKT","obj","isRef","undefined","ktType","isComputed","booleanHandler","element","key","value","setAttribute","valueHandler","handlers","checked","selected","valueAsDate","valueAsNumber","defaultValue","defaultChecked","defaultSelected","disabled","readOnly","multiple","required","autofocus","open","controls","autoplay","loop","muted","defer","async","hidden","_key","defaultHandler","setElementStyle","style","cssText","applyAttr","attr","Error","classValue","class","className","addOnChange","v","html","innerHTML","o","startsWith","addEventListener","slice","handler","attrIsObject","assureNode","$isNode","document","createTextNode","apdSingle","c","node","appendChild","newValue","_oldValue","oldNode","replaceWith","list","__kt_for_list__","$isArray","apd","$isThenable","then","r","i","length","ci","comment","createComment","awaited","applyContent","content","IdGenerator","_refOnChangeId","refOnChangeId","this","KTReactive","_value","_changeHandlers","Map","_emit","oldValue","handlerKeys","get","forEach","constructor","_newValue","notify","map","_args","callback","k","set","removeOnChange","delete","reactiveToOldValue","scheduled","KTRef","$is","draft","reactive","has","Promise","resolve","clear","markMutation","ref","$modelOrRef","props","kmodel","$refSetter","$initRef","$emptyFn","KTComputed","_calculator","_recalculate","forceEmit","dependencies","super","console","computed","computeFn","some","effect","effectFn","reactives","options","lazy","onCleanup","debugName","Object","listenerKeys","active","run","err","debug","prototype","calculator","toReactive","dereactive","applyKModel","valueRef","tagName","type","$applyModel","Number","Date","h","tag","createElement","svg","createElementNS","mathml","Node","globalThis","originAppendChild","result","call","mount","originInsertBefore","insertBefore","child","jsxh","children","placeholder","data","create","creator","el","jsx","_svg","_mathml","Fragment","elements","processChild","$forEach","span","textContent","String","push","HTMLElement","warn","convertChildrenToElements","anchor","observer","inserted","redraw","newElements","childrenRef","parent","parentNode","__kt_fragment_list__","remove","fragment","createDocumentFragment","nextSibling","disconnect","current","renderInitial","MutationObserver","observe","body","childList","subtree","FragmentArray","jsxDEV","args","jsxs","KTAsync","raw","component","comp","skeleton","resolved","KTFor","currentKey","item","currentMap","$identity","listRef","newList","nodeMap","index","itemKey","oldLength","newLength","newKeyToNewIndex","Array","maxNewIndexSoFar","moved","toRemove","seq","arr","p","j","u","len","arrI","getSequence","temp","includes","currentNode","KTConditional","condition","tagIf","propsIf","tagElse","propsElse","old","dummy"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/reactive/common.ts","../src/h/attr-helpers.ts","../src/h/attr.ts","../src/h/content.ts","../src/common.ts","../src/reactive/reactive.ts","../src/reactive/scheduler.ts","../src/reactive/ref.ts","../src/reactive/computed.ts","../src/reactive/effect.ts","../src/reactive/index.ts","../src/h/model.ts","../src/h/index.ts","../src/jsx/fragment.ts","../src/jsx/common.ts","../src/jsx/jsx-runtime.ts","../src/jsx/async.ts","../src/jsx/for.ts","../src/jsx/if.ts"],"sourcesContent":["import type { KTReactive } from './reactive.js';\nimport type { KTComputed } from './index.js';\nimport type { KTRef } from './ref.js';\n\nexport const enum KTReactiveType {\n Reative = 1,\n Computed,\n Ref,\n}\n\nexport const isKT = <T = any>(obj: any): obj is KTReactive<T> => obj?.isKT;\nexport const isRef = <T = any>(obj: any): obj is KTRef<T> => {\n // & This is tested to be the fastest way.\n // faster than includes, arrayindex, if or.\n if (obj.ktType === undefined) {\n return false;\n }\n return obj.ktType === KTReactiveType.Ref;\n};\nexport const isComputed = <T = any>(obj: any): obj is KTComputed<T> => obj?.ktType === KTReactiveType.Computed;\n","const booleanHandler = (element: HTMLElement | SVGElement | MathMLElement, key: string, value: any) => {\n if (key in element) {\n (element as any)[key] = !!value;\n } else {\n element.setAttribute(key, value);\n }\n};\n\nconst valueHandler = (element: HTMLElement | SVGElement | MathMLElement, key: string, value: any) => {\n if (key in element) {\n (element as any)[key] = value;\n } else {\n element.setAttribute(key, value);\n }\n};\n\n// Attribute handlers map for optimized lookup\nexport const handlers: Record<\n string,\n (element: HTMLElement | SVGElement | MathMLElement, key: string, value: any) => void\n> = {\n checked: booleanHandler,\n selected: booleanHandler,\n value: valueHandler,\n valueAsDate: valueHandler,\n valueAsNumber: valueHandler,\n defaultValue: valueHandler,\n defaultChecked: booleanHandler,\n defaultSelected: booleanHandler,\n disabled: booleanHandler,\n readOnly: booleanHandler,\n multiple: booleanHandler,\n required: booleanHandler,\n autofocus: booleanHandler,\n open: booleanHandler,\n controls: booleanHandler,\n autoplay: booleanHandler,\n loop: booleanHandler,\n muted: booleanHandler,\n defer: booleanHandler,\n async: booleanHandler,\n hidden: (element, _key, value) => ((element as HTMLElement).hidden = !!value),\n};\n","import type { KTReactifyProps } from '../reactive/reactive.js';\nimport type { KTRawAttr, KTAttribute } from '../types/h.js';\nimport { isKT } from '../reactive/common.js';\nimport { handlers } from './attr-helpers.js';\n\nconst defaultHandler = (element: HTMLElement | SVGElement | MathMLElement, key: string, value: any) =>\n element.setAttribute(key, value);\n\nconst setElementStyle = (\n element: HTMLElement | SVGElement | MathMLElement,\n style: Partial<CSSStyleDeclaration> | string,\n) => {\n if (typeof style === 'string') {\n (element as HTMLElement).style.cssText = style;\n return;\n }\n\n for (const key in style) {\n (element as any).style[key as any] = style[key];\n }\n};\n\nfunction attrIsObject(element: HTMLElement | SVGElement | MathMLElement, attr: KTReactifyProps<KTAttribute>) {\n const classValue = attr.class || attr.className;\n if (classValue !== undefined) {\n if (isKT<string>(classValue)) {\n element.setAttribute('class', classValue.value);\n classValue.addOnChange((v) => element.setAttribute('class', v));\n } else {\n element.setAttribute('class', classValue);\n }\n }\n\n const style = attr.style;\n if (style) {\n if (typeof style === 'string') {\n element.setAttribute('style', style);\n } else if (typeof style === 'object') {\n if (isKT(style)) {\n setElementStyle(element, style.value);\n style.addOnChange((v: Partial<CSSStyleDeclaration> | string) => setElementStyle(element, v));\n } else {\n setElementStyle(element, style as Partial<CSSStyleDeclaration>);\n }\n }\n }\n\n if ('k-html' in attr) {\n const html = attr['k-html'];\n if (isKT(html)) {\n element.innerHTML = html.value;\n html.addOnChange((v) => (element.innerHTML = v));\n } else {\n element.innerHTML = html;\n }\n }\n\n for (const key in attr) {\n // & Arranged in order of usage frequency\n if (\n // key === 'k-if' ||\n // key === 'k-else' ||\n key === 'k-model' ||\n key === 'k-for' ||\n key === 'k-key' ||\n key === 'ref' ||\n key === 'class' ||\n key === 'className' ||\n key === 'style' ||\n key === 'children' ||\n key === 'k-html'\n ) {\n continue;\n }\n\n const o = attr[key];\n\n // normal event handler\n if (key.startsWith('on:')) {\n if (o) {\n element.addEventListener(key.slice(3), o); // chop off the `on:`\n }\n continue;\n }\n\n // normal attributes\n const handler = handlers[key] || defaultHandler;\n if (isKT(o)) {\n handler(element, key, o.value);\n o.addOnChange((v) => handler(element, key, v));\n } else {\n handler(element, key, o);\n }\n }\n}\n\nexport function applyAttr(element: HTMLElement | SVGElement | MathMLElement, attr: KTRawAttr) {\n if (!attr) {\n return;\n }\n if (typeof attr === 'object' && attr !== null) {\n attrIsObject(element, attr as KTAttribute);\n } else {\n $throw('attr must be an object.');\n }\n}\n","import { $isArray, $isNode, $isThenable } from '@ktjs/shared';\nimport type { KTAvailableContent, KTRawContent } from '../types/h.js';\nimport { isKT } from '../reactive/common.js';\n\nconst assureNode = (o: any) => ($isNode(o) ? o : document.createTextNode(o));\n\nfunction apdSingle(element: HTMLElement | DocumentFragment | SVGElement | MathMLElement, c: KTAvailableContent) {\n // & Ignores falsy values, consistent with React's behavior\n if (c === undefined || c === null || c === false) {\n return;\n }\n\n if (isKT(c)) {\n let node = assureNode(c.value);\n element.appendChild(node);\n c.addOnChange((newValue, _oldValue) => {\n const oldNode = node;\n node = assureNode(newValue);\n oldNode.replaceWith(node);\n });\n } else {\n const node = assureNode(c);\n element.appendChild(node);\n // Handle KTFor anchor\n const list = (node as any).__kt_for_list__ as any[];\n if ($isArray(list)) {\n apd(element, list);\n }\n }\n}\n\nfunction apd(element: HTMLElement | DocumentFragment | SVGElement | MathMLElement, c: KTAvailableContent) {\n if ($isThenable(c)) {\n c.then((r) => apd(element, r));\n } else if ($isArray(c)) {\n for (let i = 0; i < c.length; i++) {\n // & might be thenable here too\n const ci = c[i];\n if ($isThenable(ci)) {\n const comment = document.createComment('ktjs-promise-placeholder');\n element.appendChild(comment);\n ci.then((awaited) => comment.replaceWith(awaited));\n } else {\n apdSingle(element, ci);\n }\n }\n } else {\n // & here is thened, so must be a simple elementj\n apdSingle(element, c);\n }\n}\n\nexport function applyContent(element: HTMLElement | SVGElement | MathMLElement, content: KTRawContent): void {\n if ($isArray(content)) {\n for (let i = 0; i < content.length; i++) {\n apd(element, content[i]);\n }\n } else {\n apd(element, content as KTAvailableContent);\n }\n}\n","// # internal methods that cannot be placed in @ktjs/shared\n\nexport const IdGenerator = {\n _refOnChangeId: 1,\n get refOnChangeId() {\n return this._refOnChangeId++;\n },\n _computedOnChangeId: 1,\n get computedOnChangeId() {\n return this._computedOnChangeId++;\n },\n _kid: 1,\n get kid() {\n return this._kid++;\n },\n};\n","import type { KTComputed } from './computed.js';\n\nimport { IdGenerator } from '../common.js';\nimport { KTReactiveType } from './common.js';\n\nexport type ChangeHandler<T> = (newValue: T, oldValue: T) => void;\nexport type ChangeHandlerKey = string | number;\nexport class KTReactive<T> {\n /**\n * Indicates that this is a KTRef instance\n */\n public readonly isKT: true = true;\n\n public readonly ktType: KTReactiveType = KTReactiveType.Reative;\n\n /**\n * @internal\n */\n protected _value: T;\n\n /**\n * & Here we trust developers using addOnChange properly. `ChangeHandler<any>` is aimed to mute some unnecessary type errors.\n */\n protected _changeHandlers: Map<ChangeHandlerKey, ChangeHandler<any>> = new Map();\n\n /**\n * @internal\n */\n protected _emit(newValue: T, oldValue: T) {\n this._changeHandlers.forEach((c) => c(newValue, oldValue));\n return this;\n }\n\n constructor(_value: T) {\n this._value = _value;\n this._changeHandlers = new Map();\n }\n\n /**\n * If new value and old value are both nodes, the old one will be replaced in the DOM\n * - Use `.mutable` to modify the value.\n * @readonly\n */\n get value() {\n return this._value;\n }\n\n set value(_newValue: T) {\n // Only allow KTRef to be set.\n }\n\n /**\n * Force all listeners to run even when reference identity has not changed.\n *\n * Useful for in-place array/object mutations.\n */\n notify(): this {\n return this._emit(this._value, this._value);\n }\n\n /**\n * Ccreate a computed value based on this `KTReactive` instance.\n * @param calculator A function that calculates the computed value based on the current value of this `KTReactive` instance.\n * @param dependencies Optional additional dependencies that the computed value relies on.\n * @returns A `KTComputed` instance\n *\n * @see ./computed.ts implemented in `KTComputed`\n */\n map<R>(calculator: (currentValue: T) => R, dependencies?: Array<KTReactive<any>>): KTComputed<R>;\n map<R>(..._args: unknown[]): KTComputed<R> {\n throw new Error('This is meant to be override in computed.ts');\n }\n\n /**\n * Register a callback when the value changes\n * @param callback newValue and oldValue are references. You can use `a.draft` to make in-place mutations since `a.value` will not trigger `onChange` handers.\n * @param key Optional key to identify the callback, allowing multiple listeners on the same ref and individual removal. If not provided, a unique ID will be generated.\n */\n addOnChange(callback: ChangeHandler<T>, key?: ChangeHandlerKey): this {\n if (typeof callback !== 'function') {\n $throw('KTRef.addOnChange: callback must be a function');\n }\n const k = key ?? IdGenerator.refOnChangeId;\n this._changeHandlers.set(k, callback);\n return this;\n }\n\n removeOnChange(key: ChangeHandlerKey): ChangeHandler<any> | undefined {\n const callback = this._changeHandlers.get(key);\n this._changeHandlers.delete(key);\n return callback;\n }\n}\n\n// & Shockingly, If T is boolean, KTReactify<T> becomes KTReactive<true> | KTReactive<false>. It causes @ktjs/mui that disabledRefs not assignable.\n/**\n * Makes `KTReactify<'a' | 'b'> to be KTReactive<'a'> | KTReactive<'b'>`\n */\nexport type KTReactifySplit<T> = T extends boolean ? KTReactive<boolean> : T extends any ? KTReactive<T> : never;\n\nexport type KTReactifyObject<T extends object> = {\n [K in keyof T]: KTReactifySplit<T[K]>;\n};\n\nexport type KTReactifyProps<T extends object> = {\n [K in keyof T]: KTReactifySplit<Exclude<T[K], undefined>> | T[K];\n};\n\n/**\n * Makes `KTReactify<'a' | 'b'>` to be `KTReactive<'a' | 'b'>`\n */\nexport type KTReactify<T> = [T] extends [KTReactive<infer U>] ? KTReactive<U> : KTReactive<T>;\nexport type KTMaybeReactive<T> = T | KTReactify<T>;\nexport type KTMaybeReactiveProps<T extends object> = {\n [K in keyof T]: K extends `on:${string}` ? T[K] : KTMaybeReactive<Exclude<T[K], undefined>> | T[K];\n};\n","// Use microqueue to schedule the flush of pending reactions\n\nimport type { KTRef } from './ref.js';\n\nconst reactiveToOldValue = new Map<KTRef<any>, any>();\n\nlet scheduled = false;\n\nexport const markMutation = (reactive: KTRef<any>) => {\n if (!reactiveToOldValue.has(reactive)) {\n // @ts-expect-error accessing protected property\n reactiveToOldValue.set(reactive, reactive._value);\n\n // # schedule by microqueue\n if (scheduled) {\n return;\n }\n\n scheduled = true;\n Promise.resolve().then(() => {\n scheduled = false;\n reactiveToOldValue.forEach((oldValue, reactive) => {\n // @ts-expect-error accessing protected property\n reactive._changeHandlers.forEach((handler) => handler(reactive.value, oldValue));\n });\n reactiveToOldValue.clear();\n });\n }\n};\n","import type { JSX } from '../types/jsx.js';\n\nimport { $emptyFn, $is } from '@ktjs/shared';\nimport { isRef, KTReactiveType } from './common.js';\nimport { KTReactive } from './reactive.js';\nimport { markMutation } from './scheduler.js';\n\nexport class KTRef<T> extends KTReactive<T> {\n public readonly ktType = KTReactiveType.Ref;\n\n // ! Cannot be omitted, otherwise this will override `KTReactive` with only setter. And getter will return undefined.\n get value() {\n return this._value;\n }\n\n set value(newValue: T) {\n if ($is(newValue, this._value)) {\n return;\n }\n const oldValue = this._value;\n this._value = newValue;\n this._emit(newValue, oldValue);\n }\n\n /**\n * Used to mutate the value in-place.\n * - internal value is changed instantly, but the change handlers will be called in the next microtask.\n */\n get draft() {\n markMutation(this);\n return this._value;\n }\n}\n\n/**\n * Create a `KTRef` object.\n * - use `refObject.state` to get plain data\n * - use `refObject.map(calculator)` to create a computed value based on this ref\n * - use `refObject.mutable` to set too, but it will recalculate in the next microtask. Useful for deep objects, `Map`, `Set` or other custom objects\n *\n * @param value any data\n * @param onChange event handler triggered when the value changes, with signature `(newValue, oldValue) => void`\n * @returns\n */\nexport const ref = <T = JSX.Element>(value?: T) => new KTRef<T>(value as any);\n\n/**\n * Assert k-model to be a ref object\n */\nexport const $modelOrRef = <T = any>(props: any, defaultValue?: T): KTRef<T> => {\n // & props is an object. Won't use it in any other place\n if ('k-model' in props) {\n const kmodel = props['k-model'];\n if (isRef(kmodel)) {\n return kmodel;\n } else {\n $throw(`k-model data must be a KTRef object, please use 'ref(...)' to wrap it.`);\n }\n }\n return ref(defaultValue) as KTRef<T>;\n};\n\nconst $refSetter = <T>(props: { ref?: KTRef<T> }, node: T) => (props.ref!.value = node);\ntype RefSetter<T> = (props: { ref?: KTRef<T> }, node: T) => void;\n\n/**\n * Whether `props.ref` is a `KTRef` only needs to be checked in the initial render\n */\nexport const $initRef = <T extends Node>(props: { ref?: KTRef<T> }, node: T): RefSetter<T> => {\n if (!('ref' in props)) {\n return $emptyFn;\n }\n\n const r = props.ref;\n if (isRef(r)) {\n r.value = node;\n return $refSetter;\n } else {\n $throw('Fragment: ref must be a KTRef');\n }\n};\n","import type { JSX } from '../types/jsx.js';\n\nimport { $is } from '@ktjs/shared';\nimport { isKT, KTReactiveType } from './common.js';\nimport { KTReactive } from './reactive.js';\n\nexport class KTComputed<T> extends KTReactive<T> {\n public readonly ktType = KTReactiveType.Computed;\n\n /**\n * @internal\n */\n private _calculator: () => T;\n\n /**\n * @internal\n */\n private _recalculate(forceEmit: boolean = false): this {\n const oldValue = this._value;\n const newValue = this._calculator();\n if ($is(oldValue, newValue)) {\n if (forceEmit) {\n this._emit(newValue, oldValue);\n }\n return this;\n }\n this._value = newValue;\n this._emit(newValue, oldValue);\n return this;\n }\n\n constructor(_calculator: () => T, dependencies: Array<KTReactive<unknown>>) {\n super(_calculator());\n this._calculator = _calculator;\n\n for (let i = 0; i < dependencies.length; i++) {\n dependencies[i].addOnChange(() => this._recalculate());\n }\n }\n\n /**\n * If new value and old value are both nodes, the old one will be replaced in the DOM\n */\n get value() {\n return this._value;\n }\n\n set value(_newValue: T) {\n $warn(`'value' of Computed are read-only.`);\n }\n\n /**\n * Force listeners to run once with the latest computed result.\n */\n notify(): this {\n return this._recalculate(true);\n }\n}\n\nKTReactive.prototype.map = function <R>(calculator: (v: unknown) => R, dependencies?: Array<KTReactive<any>>) {\n return new KTComputed(() => calculator(this._value), dependencies ? [this, ...dependencies] : [this]);\n};\n\n/**\n * Create a reactive computed value\n * @param computeFn\n * @param dependencies refs and computeds that this computed depends on\n */\nexport function computed<T = JSX.Element>(computeFn: () => T, dependencies: Array<KTReactive<any>>): KTComputed<T> {\n if (dependencies.some((v) => !isKT(v))) {\n $throw('computed: all reactives must be KTRef or KTComputed instances');\n }\n return new KTComputed<T>(computeFn, dependencies);\n}\n","import { $emptyFn } from '@ktjs/shared';\nimport type { KTReactive } from './reactive.js';\n\ninterface KTEffectOptions {\n lazy: boolean;\n onCleanup: () => void;\n debugName: string;\n}\n\n/**\n * Register a reactive effect with options.\n * @param effectFn The effect function to run when dependencies change\n * @param reactives The reactive dependencies\n * @param options Effect options: lazy, onCleanup, debugName\n * @returns stop function to remove all listeners\n */\nexport function effect(effectFn: () => void, reactives: Array<KTReactive<any>>, options?: Partial<KTEffectOptions>) {\n const { lazy = false, onCleanup = $emptyFn, debugName = '' } = Object(options);\n const listenerKeys: Array<string | number> = [];\n\n let active = true;\n\n const run = () => {\n if (!active) {\n return;\n }\n\n // cleanup before rerun\n onCleanup();\n\n try {\n effectFn();\n } catch (err) {\n $debug('effect error:', debugName, err);\n }\n };\n\n // subscribe to dependencies\n for (let i = 0; i < reactives.length; i++) {\n listenerKeys[i] = i;\n reactives[i].addOnChange(run, i);\n }\n\n // auto run unless lazy\n if (!lazy) {\n run();\n }\n\n // stop function\n return () => {\n if (!active) {\n return;\n }\n active = false;\n\n for (let i = 0; i < reactives.length; i++) {\n reactives[i].removeOnChange(listenerKeys[i]);\n }\n\n // final cleanup\n onCleanup();\n };\n}\n","import type { KTReactive } from './reactive.js';\nimport type { JSX } from '../types/jsx.js';\nimport { isKT } from './common.js';\nimport { ref } from './ref.js';\n\n/**\n *\n * @param value\n * @returns\n */\nexport const toReactive = <T>(value: T | KTReactive<T>): KTReactive<T> =>\n isKT(value) ? value : (ref(value as T) as KTReactive<T>);\n\n/**\n * Extracts the value from a KTReactive, or returns the value directly if it's not reactive.\n */\nexport function dereactive<T = JSX.Element>(value: T | KTReactive<T>): T {\n return isKT<T>(value) ? value.value : value;\n}\n\nexport * from './common.js';\nexport * from './ref.js';\nexport * from './computed.js';\nexport * from './effect.js';\nexport type * from './reactive.js';\n","import { $applyModel, type InputElementTag } from '@ktjs/shared';\nimport type { KTRef } from '../reactive/ref.js';\nimport { isKT } from '../reactive/index.js';\n\nexport function applyKModel(element: HTMLElementTagNameMap[InputElementTag], valueRef: KTRef<any>) {\n if (!isKT(valueRef)) {\n $throw('k-model value must be a KTRef.');\n }\n\n if (element.tagName === 'INPUT') {\n if (element.type === 'radio' || element.type === 'checkbox') {\n $applyModel(element, valueRef, 'checked', 'change');\n return;\n }\n\n if (element.type === 'number') {\n $applyModel(element, valueRef, 'checked', 'change', Number);\n return;\n }\n\n if (element.type === 'date') {\n $applyModel(element, valueRef, 'checked', 'change', (v: any) => new Date(v));\n return;\n }\n\n $applyModel(element, valueRef, 'value', 'input');\n } else if (element.tagName === 'SELECT') {\n $applyModel(element, valueRef, 'value', 'change');\n } else if (element.tagName === 'TEXTAREA') {\n $applyModel(element, valueRef, 'value', 'input');\n } else {\n $warn('not supported element for k-model:');\n }\n}\n","import type { HTMLTag, MathMLTag, SVGTag } from '@ktjs/shared';\nimport type { KTRawAttr, KTRawContent, HTML } from '../types/h.js';\n\nimport { applyAttr } from './attr.js';\nimport { applyContent } from './content.js';\nimport { applyKModel } from './model.js';\n\n/**\n * Create an enhanced HTMLElement.\n * - Only supports HTMLElements, **NOT** SVGElements or other Elements.\n * @param tag tag of an `HTMLElement`\n * @param attr attribute object or className\n * @param content a string or an array of HTMLEnhancedElement as child nodes\n *\n * __PKG_INFO__\n */\nexport const h = <T extends HTMLTag | SVGTag | MathMLTag>(\n tag: T,\n attr?: KTRawAttr,\n content?: KTRawContent,\n): HTML<T> => {\n if (typeof tag !== 'string') {\n $throw('tagName must be a string.');\n }\n\n // * start creating the element\n const element = document.createElement(tag) as HTML<T>;\n if (typeof attr === 'object' && attr !== null && 'k-model' in attr) {\n applyKModel(element as any, attr['k-model'] as any);\n }\n\n // * Handle content\n applyAttr(element, attr);\n applyContent(element, content);\n\n return element;\n};\n\nexport const svg = <T extends SVGTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent): HTML<T> => {\n if (typeof tag !== 'string') {\n $throw('tagName must be a string.');\n }\n\n // * start creating the element\n const element = document.createElementNS('http://www.w3.org/2000/svg', tag) as HTML<T>;\n\n // * Handle content\n applyAttr(element, attr);\n applyContent(element, content);\n\n if (typeof attr === 'object' && attr !== null && 'k-model' in attr) {\n applyKModel(element as any, attr['k-model'] as any);\n }\n\n return element;\n};\n\nexport const mathml = <T extends MathMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent): HTML<T> => {\n if (typeof tag !== 'string') {\n $throw('tagName must be a string.');\n }\n\n // * start creating the element\n const element = document.createElementNS('http://www.w3.org/1998/Math/MathML', tag) as HTML<T>;\n\n // * Handle content\n applyAttr(element, attr);\n applyContent(element, content);\n\n if (typeof attr === 'object' && attr !== null && 'k-model' in attr) {\n applyKModel(element as any, attr['k-model'] as any);\n }\n\n return element;\n};\n","import type { KTReactive } from '../reactive/reactive.js';\nimport type { KTRawContent } from '../types/h.js';\nimport type { JSX } from '../types/jsx.js';\nimport type { KTRef } from '../reactive/ref.js';\n\nimport { $forEach, $isArray } from '@ktjs/shared';\nimport { $initRef, isKT, toReactive } from '../reactive/index.js';\n\nconst FRAGMENT_MOUNT_PATCHED = '__kt_fragment_mount_patched__';\nconst FRAGMENT_MOUNT = '__kt_fragment_mount__';\n\nif (typeof Node !== 'undefined' && !(globalThis as any)[FRAGMENT_MOUNT_PATCHED]) {\n (globalThis as any)[FRAGMENT_MOUNT_PATCHED] = true;\n\n const originAppendChild = Node.prototype.appendChild;\n Node.prototype.appendChild = function (node) {\n const result = originAppendChild.call(this, node);\n const mount = (node as any)[FRAGMENT_MOUNT];\n if (typeof mount === 'function') {\n mount();\n }\n return result as any;\n };\n\n const originInsertBefore = Node.prototype.insertBefore;\n Node.prototype.insertBefore = function (node: Node, child: Node | null) {\n const result = originInsertBefore.call(this, node, child);\n const mount = (node as any)[FRAGMENT_MOUNT];\n if (typeof mount === 'function') {\n mount();\n }\n return result as any;\n };\n}\n\nexport interface FragmentProps<T extends JSX.Element = JSX.Element> {\n /** Array of child elements, supports reactive arrays */\n children: T[] | KTReactive<T[]>;\n\n /** element key function for optimization (future enhancement) */\n key?: (element: T, index: number, array: T[]) => any;\n\n /** ref to get the anchor node */\n ref?: KTRef<JSX.Element>;\n}\n\n/**\n * Fragment - Container component for managing arrays of child elements\n *\n * Features:\n * 1. Returns a comment anchor node, child elements are inserted after the anchor\n * 2. Supports reactive arrays, automatically updates DOM when array changes\n * 3. Basic version uses simple replacement algorithm (remove all old elements, insert all new elements)\n * 4. Future enhancement: key-based optimization\n *\n * Usage example:\n * ```tsx\n * const children = ref([<div>A</div>, <div>B</div>]);\n * const fragment = <Fragment children={children} />;\n * document.body.appendChild(fragment);\n *\n * // Automatic update\n * children.value = [<div>C</div>, <div>D</div>];\n * ```\n */\nexport function Fragment<T extends JSX.Element = JSX.Element>(props: FragmentProps<T>): JSX.Element {\n const elements: T[] = [];\n const anchor = document.createComment('kt-fragment') as unknown as JSX.Element;\n let inserted = false;\n let observer: MutationObserver | undefined;\n\n const redraw = () => {\n const newElements = childrenRef.value;\n const parent = anchor.parentNode;\n\n if (!parent) {\n elements.length = 0;\n for (let i = 0; i < newElements.length; i++) {\n elements.push(newElements[i]);\n }\n (anchor as any).__kt_fragment_list__ = elements;\n return;\n }\n\n for (let i = 0; i < elements.length; i++) {\n elements[i].remove();\n }\n\n const fragment = document.createDocumentFragment();\n elements.length = 0;\n\n for (let i = 0; i < newElements.length; i++) {\n const element = newElements[i];\n elements.push(element);\n fragment.appendChild(element);\n }\n\n parent.insertBefore(fragment, anchor.nextSibling);\n inserted = true;\n delete (anchor as any)[FRAGMENT_MOUNT];\n observer?.disconnect();\n observer = undefined;\n (anchor as any).__kt_fragment_list__ = elements;\n };\n\n const childrenRef = toReactive(props.children).addOnChange(redraw);\n\n const renderInitial = () => {\n const current = childrenRef.value;\n elements.length = 0;\n\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < current.length; i++) {\n const element = current[i];\n elements.push(element);\n fragment.appendChild(element);\n }\n\n (anchor as any).__kt_fragment_list__ = elements;\n\n const parent = anchor.parentNode;\n if (parent && !inserted) {\n parent.insertBefore(fragment, anchor.nextSibling);\n inserted = true;\n }\n };\n\n renderInitial();\n\n (anchor as any)[FRAGMENT_MOUNT] = () => {\n if (!inserted && anchor.parentNode) {\n redraw();\n }\n };\n\n observer = new MutationObserver(() => {\n if (anchor.parentNode && !inserted) {\n redraw();\n observer?.disconnect();\n observer = undefined;\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n $initRef(props, anchor);\n\n return anchor;\n}\n\n/**\n * Convert KTRawContent to HTMLElement array\n */\nexport function convertChildrenToElements(children: KTRawContent): HTMLElement[] {\n const elements: HTMLElement[] = [];\n\n const processChild = (child: any): void => {\n if (child === undefined || child === null || child === false || child === true) {\n // Ignore null, undefined, false, true\n return;\n }\n\n if ($isArray(child)) {\n // Recursively process array\n $forEach(child, processChild);\n return;\n }\n\n if (typeof child === 'string' || typeof child === 'number') {\n const span = document.createElement('span');\n span.textContent = String(child);\n elements.push(span);\n return;\n }\n\n if (child instanceof HTMLElement) {\n elements.push(child);\n return;\n }\n\n if (isKT(child)) {\n processChild(child.value);\n return;\n }\n\n $warn('Fragment: unsupported child type', child);\n if (process.env.IS_DEV) {\n throw new Error(`Fragment: unsupported child type`);\n }\n };\n\n processChild(children);\n return elements;\n}\n","import type { JSXTag } from '@ktjs/shared';\nimport type { KTAttribute } from '../types/h.js';\nimport type { JSX } from '../types/jsx.js';\nimport { h } from '../h/index';\n\nexport const jsxh = (tag: JSXTag, props: KTAttribute): JSX.Element =>\n (typeof tag === 'function' ? tag(props) : h(tag, props, props.children)) as JSX.Element;\n\nexport const placeholder = (data: string): JSX.Element => document.createComment(data) as unknown as JSX.Element;\n","import type { JSXTag, MathMLTag, SVGTag } from '@ktjs/shared';\nimport type { KTAttribute, KTRawContent } from '../types/h.js';\nimport type { JSX } from '../types/jsx.js';\n\nimport { h, mathml as _mathml, svg as _svg } from '../h/index.js';\nimport { $initRef, isComputed } from '../reactive/index.js';\nimport { convertChildrenToElements, Fragment as FragmentArray } from './fragment.js';\nimport { jsxh, placeholder } from './common.js';\n\nfunction create(\n creator: (tag: any, props: KTAttribute, content?: KTRawContent) => JSX.Element,\n tag: any,\n props: KTAttribute,\n) {\n if (props.ref && isComputed(props.ref)) {\n $throw('Cannot assign a computed value to an element.');\n }\n const el = creator(tag, props, props.children);\n $initRef(props, el);\n return el;\n}\n\nexport const jsx = (tag: JSXTag, props: KTAttribute): JSX.Element => create(jsxh, tag, props);\nexport const svg = (tag: SVGTag, props: KTAttribute): JSX.Element => create(_svg, tag, props);\nexport const mathml = (tag: MathMLTag, props: KTAttribute): JSX.Element => create(_mathml, tag, props);\nexport { svg as svgRuntime, mathml as mathmlRuntime };\n\n/**\n * Fragment support - returns an array of children\n * Enhanced Fragment component that manages arrays of elements\n */\nexport function Fragment(props: { children?: KTRawContent }): JSX.Element {\n const { children } = props ?? {};\n\n if (!children) {\n return placeholder('kt-fragment-empty');\n }\n\n const elements = convertChildrenToElements(children);\n\n return FragmentArray({ children: elements });\n}\n\n/**\n * JSX Development runtime - same as jsx but with additional dev checks\n */\nexport const jsxDEV: typeof jsx = (...args) => {\n // console.log('JSX DEV called:', ...args);\n // console.log('children', (args[1] as any)?.children);\n return jsx(...args);\n};\n\n/**\n * JSX runtime for React 17+ automatic runtime\n * This is called when using jsx: \"react-jsx\" or \"react-jsxdev\"\n */\nexport const jsxs = jsx;\n\n// Export h as the classic JSX factory for backward compatibility\nexport { h, h as createElement };\n","import { $isThenable } from '@ktjs/shared';\nimport type { KTComponent, KTRawContent } from '../types/h.js';\nimport type { JSX } from '../types/jsx.js';\nimport type { KTRef } from '../reactive/ref.js';\n\n/**\n * Extract component props type (excluding ref and children)\n */\ntype ExtractComponentProps<T> = T extends (props: infer P) => any ? Omit<P, 'ref' | 'children'> : {};\n\nexport function KTAsync<T extends KTComponent>(\n props: {\n ref?: KTRef<JSX.Element>;\n skeleton?: JSX.Element;\n component: T;\n children?: KTRawContent;\n } & ExtractComponentProps<T>,\n): JSX.Element {\n const raw = props.component(props);\n let comp: JSX.Element =\n props.skeleton ?? (document.createComment('ktjs-suspense-placeholder') as unknown as JSX.Element);\n\n if ($isThenable(raw)) {\n raw.then((resolved) => comp.replaceWith(resolved));\n } else {\n comp = raw as JSX.Element;\n }\n\n return comp;\n}\n","import type { KTRef } from '../reactive/ref.js';\nimport type { KTReactive } from '../reactive/reactive.js';\nimport type { JSX } from '../types/jsx.js';\nimport { $initRef, toReactive } from '../reactive/index.js';\nimport { $identity } from '@ktjs/shared';\n\nexport type KTForElement = JSX.Element;\n\nexport interface KTForProps<T> {\n ref?: KTRef<KTForElement>;\n list: T[] | KTReactive<T[]>;\n key?: (item: T, index: number, array: T[]) => any;\n map?: (item: T, index: number, array: T[]) => JSX.Element;\n}\n\n// task 对于template标签的for和if,会编译为fragment,可特殊处理,让它们保持原样\n/**\n * KTFor - List rendering component with key-based optimization\n * Returns a Comment anchor node with rendered elements in __kt_for_list__\n */\nexport function KTFor<T>(props: KTForProps<T>): KTForElement {\n const redraw = () => {\n const newList = listRef.value;\n\n const parent = anchor.parentNode;\n if (!parent) {\n // If not in DOM yet, just rebuild the list\n const newElements: HTMLElement[] = [];\n nodeMap.clear();\n for (let index = 0; index < newList.length; index++) {\n const item = newList[index];\n const itemKey = currentKey(item, index, newList);\n const node = currentMap(item, index, newList);\n nodeMap.set(itemKey, node);\n newElements.push(node);\n }\n (anchor as any).__kt_for_list__ = newElements;\n return anchor;\n }\n\n const oldLength = (anchor as any).__kt_for_list__.length;\n const newLength = newList.length;\n\n // Fast path: empty list\n if (newLength === 0) {\n nodeMap.forEach((node) => node.remove());\n nodeMap.clear();\n (anchor as any).__kt_for_list__ = [];\n return anchor;\n }\n\n // Fast path: all new items\n if (oldLength === 0) {\n const newElements: HTMLElement[] = [];\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < newLength; i++) {\n const item = newList[i];\n const itemKey = currentKey(item, i, newList);\n const node = currentMap(item, i, newList);\n nodeMap.set(itemKey, node);\n newElements.push(node);\n fragment.appendChild(node);\n }\n parent.insertBefore(fragment, anchor.nextSibling);\n (anchor as any).__kt_for_list__ = newElements;\n return anchor;\n }\n\n // Build key index map and new elements array in one pass\n const newKeyToNewIndex = new Map<any, number>();\n const newElements: HTMLElement[] = new Array(newLength);\n for (let i = 0; i < newLength; i++) {\n const item = newList[i];\n const itemKey = currentKey(item, i, newList);\n newKeyToNewIndex.set(itemKey, i);\n\n if (nodeMap.has(itemKey)) {\n // Reuse existing node\n newElements[i] = nodeMap.get(itemKey)!;\n } else {\n // Create new node\n newElements[i] = currentMap(item, i, newList);\n }\n }\n\n // Remove nodes not in new list\n const toRemove: HTMLElement[] = [];\n nodeMap.forEach((node, key) => {\n if (!newKeyToNewIndex.has(key)) {\n toRemove.push(node);\n }\n });\n for (let i = 0; i < toRemove.length; i++) {\n toRemove[i].remove();\n }\n\n // Reorder existing nodes and insert new nodes in a single pass.\n let currentNode = anchor.nextSibling;\n for (let i = 0; i < newLength; i++) {\n const node = newElements[i];\n if (currentNode !== node) {\n parent.insertBefore(node, currentNode);\n } else {\n currentNode = currentNode.nextSibling;\n }\n }\n\n // Update maps\n nodeMap.clear();\n for (let i = 0; i < newLength; i++) {\n const itemKey = currentKey(newList[i], i, newList);\n nodeMap.set(itemKey, newElements[i]);\n }\n (anchor as any).__kt_for_list__ = newElements;\n return anchor;\n };\n\n const { key: currentKey = (item: T) => item, map: currentMap = $identity } = props;\n const listRef = toReactive(props.list).addOnChange(redraw);\n const anchor = document.createComment('kt-for') as unknown as KTForElement;\n\n // Map to track rendered nodes by key\n const nodeMap = new Map<any, HTMLElement>();\n\n // Render initial list\n const elements: HTMLElement[] = [];\n for (let index = 0; index < listRef.value.length; index++) {\n const item = listRef.value[index];\n const itemKey = currentKey(item, index, listRef.value);\n const node = currentMap(item, index, listRef.value);\n nodeMap.set(itemKey, node);\n elements.push(node);\n }\n\n (anchor as any).__kt_for_list__ = elements;\n\n $initRef(props, anchor);\n\n return anchor;\n}\n","import type { JSXTag } from '@ktjs/shared';\nimport type { KTAttribute } from '../types/h.js';\nimport type { KTReactive } from '../reactive/reactive.js';\n\nimport { isKT } from '../reactive/index.js';\nimport { jsxh, placeholder } from './common.js';\n\nexport function KTConditional(\n condition: any | KTReactive<any>,\n tagIf: JSXTag,\n propsIf: KTAttribute,\n tagElse?: JSXTag,\n propsElse?: KTAttribute,\n) {\n if (!isKT(condition)) {\n return condition ? jsxh(tagIf, propsIf) : tagElse ? jsxh(tagElse, propsElse!) : placeholder('kt-conditional');\n }\n\n if (tagElse) {\n let current = condition.value ? jsxh(tagIf, propsIf) : jsxh(tagElse!, propsElse!);\n condition.addOnChange((newValue) => {\n const old = current;\n current = newValue ? jsxh(tagIf, propsIf) : jsxh(tagElse!, propsElse!);\n old.replaceWith(current);\n });\n return current;\n } else {\n const dummy = placeholder('kt-conditional') as HTMLElement;\n let current = condition.value ? jsxh(tagIf, propsIf) : dummy;\n condition.addOnChange((newValue) => {\n const old = current;\n current = newValue ? jsxh(tagIf, propsIf) : dummy;\n old.replaceWith(current);\n });\n return current;\n }\n}\n"],"names":["isKT","obj","isRef","undefined","ktType","isComputed","booleanHandler","element","key","value","setAttribute","valueHandler","handlers","checked","selected","valueAsDate","valueAsNumber","defaultValue","defaultChecked","defaultSelected","disabled","readOnly","multiple","required","autofocus","open","controls","autoplay","loop","muted","defer","async","hidden","_key","defaultHandler","setElementStyle","style","cssText","applyAttr","attr","Error","classValue","class","className","addOnChange","v","html","innerHTML","o","startsWith","addEventListener","slice","handler","attrIsObject","assureNode","$isNode","document","createTextNode","apdSingle","c","node","appendChild","newValue","_oldValue","oldNode","replaceWith","list","__kt_for_list__","$isArray","apd","$isThenable","then","r","i","length","ci","comment","createComment","awaited","applyContent","content","IdGenerator","_refOnChangeId","refOnChangeId","this","KTReactive","_value","_changeHandlers","Map","_emit","oldValue","forEach","constructor","_newValue","notify","map","_args","callback","k","set","removeOnChange","get","delete","reactiveToOldValue","scheduled","KTRef","$is","draft","reactive","has","Promise","resolve","clear","markMutation","ref","$modelOrRef","props","kmodel","$refSetter","$initRef","$emptyFn","KTComputed","_calculator","_recalculate","forceEmit","dependencies","super","console","computed","computeFn","some","effect","effectFn","reactives","options","lazy","onCleanup","debugName","Object","listenerKeys","active","run","err","debug","prototype","calculator","toReactive","dereactive","applyKModel","valueRef","tagName","type","$applyModel","Number","Date","h","tag","createElement","svg","createElementNS","mathml","Node","globalThis","originAppendChild","result","call","mount","originInsertBefore","insertBefore","child","jsxh","children","placeholder","data","create","creator","el","jsx","_svg","_mathml","Fragment","elements","processChild","$forEach","span","textContent","String","push","HTMLElement","warn","convertChildrenToElements","anchor","observer","inserted","redraw","newElements","childrenRef","parent","parentNode","__kt_fragment_list__","remove","fragment","createDocumentFragment","nextSibling","disconnect","current","renderInitial","MutationObserver","observe","body","childList","subtree","FragmentArray","jsxDEV","args","jsxs","KTAsync","raw","component","comp","skeleton","resolved","KTFor","currentKey","item","currentMap","$identity","listRef","newList","nodeMap","index","itemKey","oldLength","newLength","newKeyToNewIndex","Array","toRemove","currentNode","KTConditional","condition","tagIf","propsIf","tagElse","propsElse","old","dummy"],"mappings":";;AAUO,MAAMA,OAAiBC,OAAmCA,KAAKD,MACzDE,QAAkBD,YAGVE,MAAfF,IAAIG,UAGS,MAAVH,IAAIG,QAEAC,aAAuBJ,aAAmCA,KAAKG,QCnBtEE,iBAAiB,CAACC,SAAmDC,KAAaC;IAClFD,OAAOD,UACRA,QAAgBC,SAASC,QAE1BF,QAAQG,aAAaF,KAAKC;GAIxBE,eAAe,CAACJ,SAAmDC,KAAaC;IAChFD,OAAOD,UACRA,QAAgBC,OAAOC,QAExBF,QAAQG,aAAaF,KAAKC;GAKjBG,WAGT;IACFC,SAASP;IACTQ,UAAUR;IACVG,OAAOE;IACPI,aAAaJ;IACbK,eAAeL;IACfM,cAAcN;IACdO,gBAAgBZ;IAChBa,iBAAiBb;IACjBc,UAAUd;IACVe,UAAUf;IACVgB,UAAUhB;IACViB,UAAUjB;IACVkB,WAAWlB;IACXmB,MAAMnB;IACNoB,UAAUpB;IACVqB,UAAUrB;IACVsB,MAAMtB;IACNuB,OAAOvB;IACPwB,OAAOxB;IACPyB,OAAOzB;IACP0B,QAAQ,CAACzB,SAAS0B,MAAMxB,UAAYF,QAAwByB,WAAWvB;GCpCnEyB,iBAAiB,CAAC3B,SAAmDC,KAAaC,UACtFF,QAAQG,aAAaF,KAAKC,QAEtB0B,kBAAkB,CACtB5B,SACA6B;IAEA,IAAqB,mBAAVA,OAKX,KAAK,MAAM5B,OAAO4B,OACf7B,QAAgB6B,MAAM5B,OAAc4B,MAAM5B,WAL1CD,QAAwB6B,MAAMC,UAAUD;;;AAmFvC,SAAUE,UAAU/B,SAAmDgC;IAC3E,IAAKA,MAAL;QAGA,IAAoB,mBAATA,QAA8B,SAATA,MAG9B,MAAA,IAAAC,MAAA;SAjFJ,SAAsBjC,SAAmDgC;YACvE,MAAME,aAAaF,KAAKG,SAASH,KAAKI;iBACnBxC,MAAfsC,eACEzC,KAAayC,eACflC,QAAQG,aAAa,SAAS+B,WAAWhC;YACzCgC,WAAWG,YAAaC,KAAMtC,QAAQG,aAAa,SAASmC,OAE5DtC,QAAQG,aAAa,SAAS+B;YAIlC,MAAML,QAAQG,KAAKH;YAcnB,IAbIA,UACmB,mBAAVA,QACT7B,QAAQG,aAAa,SAAS0B,SACJ,mBAAVA,UACZpC,KAAKoC,UACPD,gBAAgB5B,SAAS6B,MAAM3B;YAC/B2B,MAAMQ,YAAaC,KAA6CV,gBAAgB5B,SAASsC,OAEzFV,gBAAgB5B,SAAS6B;YAK3B,YAAYG,MAAM;gBACpB,MAAMO,OAAOP,KAAK;gBACdvC,KAAK8C,SACPvC,QAAQwC,YAAYD,KAAKrC,OACzBqC,KAAKF,YAAaC,KAAOtC,QAAQwC,YAAYF,MAE7CtC,QAAQwC,YAAYD;AAExB;YAEA,KAAK,MAAMtC,OAAO+B,MAAM;gBAEtB,IAGU,cAAR/B,OACQ,YAARA,OACQ,YAARA,OACQ,UAARA,OACQ,YAARA,OACQ,gBAARA,OACQ,YAARA,OACQ,eAARA,OACQ,aAARA,KAEA;gBAGF,MAAMwC,IAAIT,KAAK/B;gBAGf,IAAIA,IAAIyC,WAAW,QAAQ;oBACrBD,KACFzC,QAAQ2C,iBAAiB1C,IAAI2C,MAAM,IAAIH;oBAEzC;AACF;gBAGA,MAAMI,UAAUxC,SAASJ,QAAQ0B;gBAC7BlC,KAAKgD,MACPI,QAAQ7C,SAASC,KAAKwC,EAAEvC,QACxBuC,EAAEJ,YAAaC,KAAMO,QAAQ7C,SAASC,KAAKqC,OAE3CO,QAAQ7C,SAASC,KAAKwC;AAE1B;AACF,SAOIK,CAAa9C,SAASgC;AAFxB;AAMF;;ACrGA,MAAMe,aAAcN,KAAYO,QAAQP,KAAKA,IAAIQ,SAASC,eAAeT;;AAEzE,SAASU,UAAUnD,SAAsEoD;IAEvF,IAAIA,cAAuC,MAANA,GAIrC,IAAI3D,KAAK2D,IAAI;QACX,IAAIC,OAAON,WAAWK,EAAElD;QACxBF,QAAQsD,YAAYD,OACpBD,EAAEf,YAAY,CAACkB,UAAUC;YACvB,MAAMC,UAAUJ;YAChBA,OAAON,WAAWQ,WAClBE,QAAQC,YAAYL;;AAExB,WAAO;QACL,MAAMA,OAAON,WAAWK;QACxBpD,QAAQsD,YAAYD;QAEpB,MAAMM,OAAQN,KAAaO;QACvBC,SAASF,SACXG,IAAI9D,SAAS2D;AAEjB;AACF;;AAEA,SAASG,IAAI9D,SAAsEoD;IACjF,IAAIW,YAAYX,IACdA,EAAEY,KAAMC,KAAMH,IAAI9D,SAASiE,UACtB,IAAIJ,SAAST,IAClB,KAAK,IAAIc,IAAI,GAAGA,IAAId,EAAEe,QAAQD,KAAK;QAEjC,MAAME,KAAKhB,EAAEc;QACb,IAAIH,YAAYK,KAAK;YACnB,MAAMC,UAAUpB,SAASqB,cAAc;YACvCtE,QAAQsD,YAAYe,UACpBD,GAAGJ,KAAMO,WAAYF,QAAQX,YAAYa;AAC3C,eACEpB,UAAUnD,SAASoE;AAEvB,WAGAjB,UAAUnD,SAASoD;AAEvB;;AAEM,SAAUoB,aAAaxE,SAAmDyE;IAC9E,IAAIZ,SAASY,UACX,KAAK,IAAIP,IAAI,GAAGA,IAAIO,QAAQN,QAAQD,KAClCJ,IAAI9D,SAASyE,QAAQP,UAGvBJ,IAAI9D,SAASyE;AAEjB;;AC1DO,MAAMC,cAAc;IACzBC,gBAAgB;IAChB,iBAAIC;QACF,OAAOC,KAAKF;AACd;;;MCCWG;IAIKrF,MAAa;IAEbI,OAAM;IAKZkF;IAKAC,gBAA6D,IAAIC;IAKjE,KAAAC,CAAM3B,UAAa4B;QAE3B,OADAN,KAAKG,gBAAgBI,QAAShC,KAAMA,EAAEG,UAAU4B,YACzCN;AACT;IAEA,WAAAQ,CAAYN;QACVF,KAAKE,SAASA,QACdF,KAAKG,kBAAkB,IAAIC;AAC7B;IAOA,SAAI/E;QACF,OAAO2E,KAAKE;AACd;IAEA,SAAI7E,CAAMoF,YAEV;IAOA,MAAAC;QACE,OAAOV,KAAKK,MAAML,KAAKE,QAAQF,KAAKE;AACtC;IAWA,GAAAS,IAAUC;QACR,MAAM,IAAIxD,MAAM;AAClB;IAOA,WAAAI,CAAYqD,UAA4BzF;QACtC,IAAwB,qBAAbyF,UACT,MAAA,IAAAzD,MAAA;QAEF,MAAM0D,IAAI1F,OAAOyE,YAAYE;QAE7B,OADAC,KAAKG,gBAAgBY,IAAID,GAAGD,WACrBb;AACT;IAEA,cAAAgB,CAAe5F;QACb,MAAMyF,WAAWb,KAAKG,gBAAgBc,IAAI7F;QAE1C,OADA4E,KAAKG,gBAAgBe,OAAO9F,MACrByF;AACT;;;ACvFF,MAAMM,qBAAqB,IAAIf;;AAE/B,IAAIgB,aAAY;;ACCV,MAAOC,cAAiBpB;IACZjF,OAAM;IAGtB,SAAIK;QACF,OAAO2E,KAAKE;AACd;IAEA,SAAI7E,CAAMqD;QACR,IAAI4C,IAAI5C,UAAUsB,KAAKE,SACrB;QAEF,MAAMI,WAAWN,KAAKE;QACtBF,KAAKE,SAASxB,UACdsB,KAAKK,MAAM3B,UAAU4B;AACvB;IAMA,SAAIiB;QAEF,ODtBwB,CAACC;YAC3B,KAAKL,mBAAmBM,IAAID,WAAW;gBAKrC,IAHAL,mBAAmBJ,IAAIS,UAAUA,SAAStB,SAGtCkB,WACF;gBAGFA,aAAY,GACZM,QAAQC,UAAUxC,KAAK;oBACrBiC,aAAY,GACZD,mBAAmBZ,QAAQ,CAACD,UAAUkB;wBAEpCA,SAASrB,gBAAgBI,QAASvC,WAAYA,QAAQwD,SAASnG,OAAOiF;wBAExEa,mBAAmBS;;AAEvB;UCEEC,CAAa7B,OACNA,KAAKE;AACd;;;AAaK,MAAM4B,MAAwBzG,SAAc,IAAIgG,MAAShG,QAKnD0G,cAAc,CAAUC,OAAYnG;IAE/C,IAAI,aAAamG,OAAO;QACtB,MAAMC,SAASD,MAAM;QACrB,IAAIlH,MAAMmH,SACR,OAAOA;QAEP,MAAA,IAAA7E,MAAA;AAEJ;IACA,OAAO0E,IAAIjG;GAGPqG,aAAa,CAAIF,OAA2BxD,SAAawD,MAAMF,IAAKzG,QAAQmD,MAMrE2D,WAAW,CAAiBH,OAA2BxD;IAClE,MAAM,SAASwD,QACb,OAAOI;IAGT,MAAMhD,IAAI4C,MAAMF;IAChB,IAAIhH,MAAMsE,IAER,OADAA,EAAE/D,QAAQmD,MACH0D;IAEP,MAAA,IAAA9E,MAAA;;;ACxEE,MAAOiF,mBAAsBpC;IACjBjF,OAAM;IAKdsH;IAKA,YAAAC,CAAaC,aAAqB;QACxC,MAAMlC,WAAWN,KAAKE,QAChBxB,WAAWsB,KAAKsC;QACtB,OAAIhB,IAAIhB,UAAU5B,aACZ8D,aACFxC,KAAKK,MAAM3B,UAAU4B,WAEhBN,SAETA,KAAKE,SAASxB;QACdsB,KAAKK,MAAM3B,UAAU4B,WACdN;AACT;IAEA,WAAAQ,CAAY8B,aAAsBG;QAChCC,MAAMJ,gBACNtC,KAAKsC,cAAcA;QAEnB,KAAK,IAAIjD,IAAI,GAAGA,IAAIoD,aAAanD,QAAQD,KACvCoD,aAAapD,GAAG7B,YAAY,MAAMwC,KAAKuC;AAE3C;IAKA,SAAIlH;QACF,OAAO2E,KAAKE;AACd;IAEA,SAAI7E,CAAMoF;QACRkC,kCAAM;AACR;IAKA,MAAAjC;QACE,OAAOV,KAAKuC,cAAa;AAC3B;;;AAYI,SAAUK,SAA0BC,WAAoBJ;IAC5D,IAAIA,aAAaK,KAAMrF,MAAO7C,KAAK6C,KACjC,MAAA,IAAAL,MAAA;IAEF,OAAO,IAAIiF,WAAcQ,WAAWJ;AACtC;;SCzDgBM,OAAOC,UAAsBC,WAAmCC;IAC9E,OAAMC,MAAEA,QAAO,GAAKC,WAAEA,YAAYhB,UAAQiB,WAAEA,YAAY,MAAOC,OAAOJ,UAChEK,eAAuC;IAE7C,IAAIC,UAAS;IAEb,MAAMC,MAAM;QACV,IAAKD,QAAL;YAKAJ;YAEA;gBACEJ;AACF,cAAE,OAAOU;gBACPf,QAAAgB,MAAA,sBAAO,iBAAiBN,WAAWK;AACrC;AATA;;IAaF,KAAK,IAAIrE,IAAI,GAAGA,IAAI4D,UAAU3D,QAAQD,KACpCkE,aAAalE,KAAKA,GAClB4D,UAAU5D,GAAG7B,YAAYiG,KAAKpE;IAShC,OALK8D,QACHM,OAIK;QACL,IAAKD,QAAL;YAGAA,UAAS;YAET,KAAK,IAAInE,IAAI,GAAGA,IAAI4D,UAAU3D,QAAQD,KACpC4D,UAAU5D,GAAG2B,eAAeuC,aAAalE;YAI3C+D;AARA;;AAUJ;;ADHAnD,WAAW2D,UAAUjD,MAAM,SAAakD,YAA+BpB;IACrE,OAAO,IAAIJ,WAAW,MAAMwB,WAAW7D,KAAKE,SAASuC,eAAe,EAACzC,SAASyC,iBAAgB,EAACzC;AACjG;;AEnDO,MAAM8D,aAAiBzI,SAC5BT,KAAKS,SAASA,QAASyG,IAAIzG;;AAKvB,SAAU0I,WAA4B1I;IAC1C,OAAOT,KAAQS,SAASA,MAAMA,QAAQA;AACxC;;ACdM,SAAU2I,YAAY7I,SAAiD8I;IAC3E,KAAKrJ,KAAKqJ,WACR,MAAA,IAAA7G,MAAA;IAGF,IAAwB,YAApBjC,QAAQ+I,SAAqB;QAC/B,IAAqB,YAAjB/I,QAAQgJ,QAAqC,eAAjBhJ,QAAQgJ,MAEtC,YADAC,YAAYjJ,SAAS8I,UAAU,WAAW;QAI5C,IAAqB,aAAjB9I,QAAQgJ,MAEV,YADAC,YAAYjJ,SAAS8I,UAAU,WAAW,UAAUI;QAItD,IAAqB,WAAjBlJ,QAAQgJ,MAEV,YADAC,YAAYjJ,SAAS8I,UAAU,WAAW,UAAWxG,KAAW,IAAI6G,KAAK7G;QAI3E2G,YAAYjJ,SAAS8I,UAAU,SAAS;AAC1C,WAA+B,aAApB9I,QAAQ+I,UACjBE,YAAYjJ,SAAS8I,UAAU,SAAS,YACX,eAApB9I,QAAQ+I,UACjBE,YAAYjJ,SAAS8I,UAAU,SAAS,WAExCtB,kCAAM;AAEV;;;;;;;;;;;;;;;;;;GCjBO,OAAM4B,IAAI,CACfC,KACArH,MACAyC;IAEA,IAAmB,mBAAR4E,KACT,MAAA,IAAApH,MAAA;IAIF,MAAMjC,UAAUiD,SAASqG,cAAcD;IASvC,OARoB,mBAATrH,QAA8B,SAATA,QAAiB,aAAaA,QAC5D6G,YAAY7I,SAAgBgC,KAAK;IAInCD,UAAU/B,SAASgC,OACnBwC,aAAaxE,SAASyE,UAEfzE;GAGIuJ,QAAM,CAAmBF,KAAQrH,MAAkByC;IAC9D,IAAmB,mBAAR4E,KACT,MAAA,IAAApH,MAAA;IAIF,MAAMjC,UAAUiD,SAASuG,gBAAgB,8BAA8BH;IAUvE,OAPAtH,UAAU/B,SAASgC,OACnBwC,aAAaxE,SAASyE,UAEF,mBAATzC,QAA8B,SAATA,QAAiB,aAAaA,QAC5D6G,YAAY7I,SAAgBgC,KAAK;IAG5BhC;GAGIyJ,WAAS,CAAsBJ,KAAQrH,MAAkByC;IACpE,IAAmB,mBAAR4E,KACT,MAAA,IAAApH,MAAA;IAIF,MAAMjC,UAAUiD,SAASuG,gBAAgB,sCAAsCH;IAU/E,OAPAtH,UAAU/B,SAASgC,OACnBwC,aAAaxE,SAASyE,UAEF,mBAATzC,QAA8B,SAATA,QAAiB,aAAaA,QAC5D6G,YAAY7I,SAAgBgC,KAAK;IAG5BhC;;;AC9DT,IAAoB,sBAAT0J,SAA0BC,WAAyC,+BAAG;IAC9EA,WAAyC,iCAAI;IAE9C,MAAMC,oBAAoBF,KAAKjB,UAAUnF;IACzCoG,KAAKjB,UAAUnF,cAAc,SAAUD;QACrC,MAAMwG,SAASD,kBAAkBE,KAAKjF,MAAMxB,OACtC0G,QAAS1G,KAA2B;QAI1C,OAHqB,qBAAV0G,SACTA,SAEKF;AACT;IAEA,MAAMG,qBAAqBN,KAAKjB,UAAUwB;IAC1CP,KAAKjB,UAAUwB,eAAe,SAAU5G,MAAY6G;QAClD,MAAML,SAASG,mBAAmBF,KAAKjF,MAAMxB,MAAM6G,QAC7CH,QAAS1G,KAA2B;QAI1C,OAHqB,qBAAV0G,SACTA,SAEKF;AACT;AACF;;AC5BO,MAAMM,OAAO,CAACd,KAAaxC,UAChB,qBAARwC,MAAqBA,IAAIxC,SAASuC,EAAEC,KAAKxC,OAAOA,MAAMuD,WAEnDC,cAAeC,QAA8BrH,SAASqB,cAAcgG;;ACCjF,SAASC,OACPC,SACAnB,KACAxC;IAEA,IAAIA,MAAMF,OAAO7G,WAAW+G,MAAMF,MAChC,MAAA,IAAA1E,MAAA;IAEF,MAAMwI,KAAKD,QAAQnB,KAAKxC,OAAOA,MAAMuD;IAErC,OADApD,SAASH,OAAO4D,KACTA;AACT;;AAEO,MAAMC,MAAM,CAACrB,KAAaxC,UAAoC0D,OAAOJ,MAAMd,KAAKxC,QAC1E0C,MAAM,CAACF,KAAaxC,UAAoC0D,OAAOI,OAAMtB,KAAKxC,QAC1E4C,SAAS,CAACJ,KAAgBxC,UAAoC0D,OAAOK,UAASvB,KAAKxC;;AAO1F,SAAUgE,SAAShE;IACvB,OAAMuD,UAAEA,YAAavD,SAAS,CAAA;IAE9B,KAAKuD,UACH,OAAOC,YAAY;IAGrB,MAAMS,WFmHF,SAAoCV;QACxC,MAAMU,WAA0B,IAE1BC,eAAgBb;YACpB,IAAIA,kBAAmD,MAAVA,UAA6B,MAAVA,OAKhE,IAAIrG,SAASqG,QAEXc,SAASd,OAAOa,oBAFlB;gBAMA,IAAqB,mBAAVb,SAAuC,mBAAVA,OAAoB;oBAC1D,MAAMe,OAAOhI,SAASqG,cAAc;oBAGpC,OAFA2B,KAAKC,cAAcC,OAAOjB,aAC1BY,SAASM,KAAKH;AAEhB;gBAEA,IAAIf,iBAAiBmB,aACnBP,SAASM,KAAKlB,aADhB;oBAKA,KAAIzK,KAAKyK,QAOP,MAFF1C,QAAA8D,KAAA,qBAAM,oCAAoCpB;oBAElC,IAAIjI,MAAM;oBANhB8I,aAAab,MAAMhK;AAHrB;AAZA;;QA0BF,OADA6K,aAAaX,WACNU;AACT,KE3JmBS,CAA0BnB;IAE3C,OFyBI,SAAwDvD;QAC5D,MAAMiE,WAAgB,IAChBU,SAASvI,SAASqB,cAAc;QACtC,IACImH,UADAC,YAAW;QAGf,MAAMC,SAAS;YACb,MAAMC,cAAcC,YAAY3L,OAC1B4L,SAASN,OAAOO;YAEtB,KAAKD,QAAQ;gBACXhB,SAAS3G,SAAS;gBAClB,KAAK,IAAID,IAAI,GAAGA,IAAI0H,YAAYzH,QAAQD,KACtC4G,SAASM,KAAKQ,YAAY1H;gBAG5B,aADCsH,OAAeQ,uBAAuBlB;AAEzC;YAEA,KAAK,IAAI5G,IAAI,GAAGA,IAAI4G,SAAS3G,QAAQD,KACnC4G,SAAS5G,GAAG+H;YAGd,MAAMC,WAAWjJ,SAASkJ;YAC1BrB,SAAS3G,SAAS;YAElB,KAAK,IAAID,IAAI,GAAGA,IAAI0H,YAAYzH,QAAQD,KAAK;gBAC3C,MAAMlE,UAAU4L,YAAY1H;gBAC5B4G,SAASM,KAAKpL,UACdkM,SAAS5I,YAAYtD;AACvB;YAEA8L,OAAO7B,aAAaiC,UAAUV,OAAOY,cACrCV,YAAW,UACHF,OAA6B;YACrCC,UAAUY,cACVZ,gBAAW7L,GACV4L,OAAeQ,uBAAuBlB;WAGnCe,cAAclD,WAAW9B,MAAMuD,UAAU/H,YAAYsJ;QA0C3D,OAxCsB;YACpB,MAAMW,UAAUT,YAAY3L;YAC5B4K,SAAS3G,SAAS;YAElB,MAAM+H,WAAWjJ,SAASkJ;YAC1B,KAAK,IAAIjI,IAAI,GAAGA,IAAIoI,QAAQnI,QAAQD,KAAK;gBACvC,MAAMlE,UAAUsM,QAAQpI;gBACxB4G,SAASM,KAAKpL,UACdkM,SAAS5I,YAAYtD;AACvB;YAECwL,OAAeQ,uBAAuBlB;YAEvC,MAAMgB,SAASN,OAAOO;YAClBD,WAAWJ,aACbI,OAAO7B,aAAaiC,UAAUV,OAAOY,cACrCV,YAAW;UAIfa,IAECf,OAA6B,wBAAI;aAC3BE,YAAYF,OAAOO,cACtBJ;WAIJF,WAAW,IAAIe,iBAAiB;YAC1BhB,OAAOO,eAAeL,aACxBC,UACAF,UAAUY,cACVZ,gBAAW7L;YAIf6L,SAASgB,QAAQxJ,SAASyJ,MAAM;YAAEC,YAAW;YAAMC,UAAS;YAE5D5F,SAASH,OAAO2E,SAETA;AACT,KE5GSqB,CAAc;QAAEzC,UAAUU;;AACnC;;MAKagC,SAAqB,IAAIC,SAG7BrC,OAAOqC,OAOHC,OAAOtC;;AC9Cd,SAAUuC,QACdpG;IAOA,MAAMqG,MAAMrG,MAAMsG,UAAUtG;IAC5B,IAAIuG,OACFvG,MAAMwG,YAAapK,SAASqB,cAAc;IAQ5C,OANIP,YAAYmJ,OACdA,IAAIlJ,KAAMsJ,YAAaF,KAAK1J,YAAY4J,aAExCF,OAAOF;IAGFE;AACT;;ACTM,SAAUG,MAAS1G;IACvB,OAgGQ5G,KAAKuN,aAAcC,QAAYA,MAAMjI,KAAKkI,aAAaC,aAAc9G,OACvE+G,UAAUjF,WAAW9B,MAAMlD,MAAMtB,YAjGxB;QACb,MAAMwL,UAAUD,QAAQ1N,OAElB4L,SAASN,OAAOO;QACtB,KAAKD,QAAQ;YAEX,MAAMF,cAA6B;YACnCkC,QAAQrH;YACR,KAAK,IAAIsH,QAAQ,GAAGA,QAAQF,QAAQ1J,QAAQ4J,SAAS;gBACnD,MAAMN,OAAOI,QAAQE,QACfC,UAAUR,WAAWC,MAAMM,OAAOF,UAClCxK,OAAOqK,WAAWD,MAAMM,OAAOF;gBACrCC,QAAQlI,IAAIoI,SAAS3K,OACrBuI,YAAYR,KAAK/H;AACnB;YAEA,OADCmI,OAAe5H,kBAAkBgI,aAC3BJ;AACT;QAEA,MAAMyC,YAAazC,OAAe5H,gBAAgBO,QAC5C+J,YAAYL,QAAQ1J;QAG1B,IAAkB,MAAd+J,WAIF,OAHAJ,QAAQ1I,QAAS/B,QAASA,KAAK4I,WAC/B6B,QAAQrH;QACP+E,OAAe5H,kBAAkB,IAC3B4H;QAIT,IAAkB,MAAdyC,WAAiB;YACnB,MAAMrC,cAA6B,IAC7BM,WAAWjJ,SAASkJ;YAC1B,KAAK,IAAIjI,IAAI,GAAGA,IAAIgK,WAAWhK,KAAK;gBAClC,MAAMuJ,OAAOI,QAAQ3J,IACf8J,UAAUR,WAAWC,MAAMvJ,GAAG2J,UAC9BxK,OAAOqK,WAAWD,MAAMvJ,GAAG2J;gBACjCC,QAAQlI,IAAIoI,SAAS3K,OACrBuI,YAAYR,KAAK/H,OACjB6I,SAAS5I,YAAYD;AACvB;YAGA,OAFAyI,OAAO7B,aAAaiC,UAAUV,OAAOY,cACpCZ,OAAe5H,kBAAkBgI;YAC3BJ;AACT;QAGA,MAAM2C,mBAAmB,IAAIlJ,KACvB2G,cAA6B,IAAIwC,MAAMF;QAC7C,KAAK,IAAIhK,IAAI,GAAGA,IAAIgK,WAAWhK,KAAK;YAClC,MAAMuJ,OAAOI,QAAQ3J,IACf8J,UAAUR,WAAWC,MAAMvJ,GAAG2J;YACpCM,iBAAiBvI,IAAIoI,SAAS9J,IAE1B4J,QAAQxH,IAAI0H,WAEdpC,YAAY1H,KAAK4J,QAAQhI,IAAIkI,WAG7BpC,YAAY1H,KAAKwJ,WAAWD,MAAMvJ,GAAG2J;AAEzC;QAGA,MAAMQ,WAA0B;QAChCP,QAAQ1I,QAAQ,CAAC/B,MAAMpD;YAChBkO,iBAAiB7H,IAAIrG,QACxBoO,SAASjD,KAAK/H;;QAGlB,KAAK,IAAIa,IAAI,GAAGA,IAAImK,SAASlK,QAAQD,KACnCmK,SAASnK,GAAG+H;QAId,IAAIqC,cAAc9C,OAAOY;QACzB,KAAK,IAAIlI,IAAI,GAAGA,IAAIgK,WAAWhK,KAAK;YAClC,MAAMb,OAAOuI,YAAY1H;YACrBoK,gBAAgBjL,OAClByI,OAAO7B,aAAa5G,MAAMiL,eAE1BA,cAAcA,YAAYlC;AAE9B;QAGA0B,QAAQrH;QACR,KAAK,IAAIvC,IAAI,GAAGA,IAAIgK,WAAWhK,KAAK;YAClC,MAAM8J,UAAUR,WAAWK,QAAQ3J,IAAIA,GAAG2J;YAC1CC,QAAQlI,IAAIoI,SAASpC,YAAY1H;AACnC;QAEA,OADCsH,OAAe5H,kBAAkBgI,aAC3BJ;QAKHA,SAASvI,SAASqB,cAAc,WAGhCwJ,UAAU,IAAI7I,KAGd6F,WAA0B;IAChC,KAAK,IAAIiD,QAAQ,GAAGA,QAAQH,QAAQ1N,MAAMiE,QAAQ4J,SAAS;QACzD,MAAMN,OAAOG,QAAQ1N,MAAM6N,QACrBC,UAAUR,WAAWC,MAAMM,OAAOH,QAAQ1N,QAC1CmD,OAAOqK,WAAWD,MAAMM,OAAOH,QAAQ1N;QAC7C4N,QAAQlI,IAAIoI,SAAS3K,OACrByH,SAASM,KAAK/H;AAChB;IAMA,OAJCmI,OAAe5H,kBAAkBkH,UAElC9D,SAASH,OAAO2E,SAETA;AACT;;ACpIM,SAAU+C,cACdC,WACAC,OACAC,SACAC,SACAC;IAEA,KAAKnP,KAAK+O,YACR,OAAOA,YAAYrE,KAAKsE,OAAOC,WAAWC,UAAUxE,KAAKwE,SAASC,aAAcvE,YAAY;IAG9F,IAAIsE,SAAS;QACX,IAAIrC,UAAUkC,UAAUtO,QAAQiK,KAAKsE,OAAOC,WAAWvE,KAAKwE,SAAUC;QAMtE,OALAJ,UAAUnM,YAAakB;YACrB,MAAMsL,MAAMvC;YACZA,UAAU/I,WAAW4G,KAAKsE,OAAOC,WAAWvE,KAAKwE,SAAUC,YAC3DC,IAAInL,YAAY4I;YAEXA;AACT;IAAO;QACL,MAAMwC,QAAQzE,YAAY;QAC1B,IAAIiC,UAAUkC,UAAUtO,QAAQiK,KAAKsE,OAAOC,WAAWI;QAMvD,OALAN,UAAUnM,YAAakB;YACrB,MAAMsL,MAAMvC;YACZA,UAAU/I,WAAW4G,KAAKsE,OAAOC,WAAWI,OAC5CD,IAAInL,YAAY4I;YAEXA;AACT;AACF;;"}
|
package/package.json
CHANGED