@fukict/basic 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +510 -0
  2. package/dist/component-class/fukict.d.ts +7 -9
  3. package/dist/component-class/fukict.d.ts.map +1 -1
  4. package/dist/component-class/fukict.js +22 -20
  5. package/dist/component-class/fukict.js.map +1 -1
  6. package/dist/component-function/define.d.ts +1 -1
  7. package/dist/component-function/define.d.ts.map +1 -1
  8. package/dist/component-function/define.js +1 -4
  9. package/dist/component-function/define.js.map +1 -1
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/metadata.d.ts +1 -1
  14. package/dist/metadata.js +1 -1
  15. package/dist/renderer/attributes.d.ts +2 -2
  16. package/dist/renderer/attributes.d.ts.map +1 -1
  17. package/dist/renderer/attributes.js +4 -14
  18. package/dist/renderer/attributes.js.map +1 -1
  19. package/dist/renderer/class-helpers.d.ts +19 -0
  20. package/dist/renderer/class-helpers.d.ts.map +1 -0
  21. package/dist/renderer/class-helpers.js +49 -0
  22. package/dist/renderer/class-helpers.js.map +1 -0
  23. package/dist/renderer/create.d.ts.map +1 -1
  24. package/dist/renderer/create.js +47 -43
  25. package/dist/renderer/create.js.map +1 -1
  26. package/dist/renderer/diff/class.d.ts +8 -1
  27. package/dist/renderer/diff/class.d.ts.map +1 -1
  28. package/dist/renderer/diff/class.js +14 -7
  29. package/dist/renderer/diff/class.js.map +1 -1
  30. package/dist/renderer/diff/element.d.ts.map +1 -1
  31. package/dist/renderer/diff/element.js +11 -7
  32. package/dist/renderer/diff/element.js.map +1 -1
  33. package/dist/renderer/diff/fragment.d.ts.map +1 -1
  34. package/dist/renderer/diff/fragment.js +6 -3
  35. package/dist/renderer/diff/fragment.js.map +1 -1
  36. package/dist/renderer/diff/function.d.ts.map +1 -1
  37. package/dist/renderer/diff/function.js +13 -12
  38. package/dist/renderer/diff/function.js.map +1 -1
  39. package/dist/renderer/diff/helpers.d.ts.map +1 -1
  40. package/dist/renderer/diff/helpers.js +13 -0
  41. package/dist/renderer/diff/helpers.js.map +1 -1
  42. package/dist/renderer/diff/index.d.ts.map +1 -1
  43. package/dist/renderer/diff/index.js +4 -0
  44. package/dist/renderer/diff/index.js.map +1 -1
  45. package/dist/renderer/diff/primitive.d.ts +12 -0
  46. package/dist/renderer/diff/primitive.d.ts.map +1 -0
  47. package/dist/renderer/diff/primitive.js +50 -0
  48. package/dist/renderer/diff/primitive.js.map +1 -0
  49. package/dist/renderer/mount.d.ts.map +1 -1
  50. package/dist/renderer/mount.js +30 -0
  51. package/dist/renderer/mount.js.map +1 -1
  52. package/dist/renderer/vnode-helpers.d.ts +44 -0
  53. package/dist/renderer/vnode-helpers.d.ts.map +1 -0
  54. package/dist/renderer/vnode-helpers.js +47 -0
  55. package/dist/renderer/vnode-helpers.js.map +1 -0
  56. package/dist/types/class.d.ts +25 -2
  57. package/dist/types/class.d.ts.map +1 -1
  58. package/dist/types/core.d.ts +27 -3
  59. package/dist/types/core.d.ts.map +1 -1
  60. package/dist/types/core.js +1 -0
  61. package/dist/types/core.js.map +1 -1
  62. package/dist/types/index.d.ts +2 -2
  63. package/dist/types/index.d.ts.map +1 -1
  64. package/dist/types/index.js.map +1 -1
  65. package/dist/vnode.d.ts +9 -3
  66. package/dist/vnode.d.ts.map +1 -1
  67. package/dist/vnode.js +71 -2
  68. package/dist/vnode.js.map +1 -1
  69. package/package.json +4 -1
@@ -12,12 +12,9 @@
12
12
  * ```
13
13
  *
14
14
  * @param fn - Function component
15
- * @returns The same function with better types and __COMPONENT_TYPE__ marker
15
+ * @returns The same function with better types
16
16
  */
17
17
  export function defineFukict(fn) {
18
- // Add component type marker for Babel plugin
19
- fn.__COMPONENT_TYPE__ =
20
- 'function';
21
18
  return fn;
22
19
  }
23
20
  //# sourceMappingURL=define.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/component-function/define.ts"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAC1B,EAAwB;IAExB,6CAA6C;IAC5C,EAAiD,CAAC,kBAAkB;QACnE,UAAU,CAAC;IACb,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/component-function/define.ts"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAC1B,EAAwB;IAExB,OAAO,EAAE,CAAC;AACZ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,8 +5,8 @@
5
5
  */
6
6
  import { METADATA } from './metadata.js';
7
7
  export { METADATA };
8
- export declare const VERSION: "0.1.0";
9
- export type { VNode, VNodeChild, ElementVNode, FragmentVNode, FunctionComponentVNode, ClassComponentVNode, UnregisterFn, RefCallback, CSSProperties, ClassValue, RuntimeAttributes, EventHandlers, HTMLAttributes, SVGAttributes, Slots, Ref, FukictLifecycle, FukictComponent, FukictProps, FukictSlots, FukictConstructor, } from './types/index.js';
8
+ export declare const VERSION: "0.1.2";
9
+ export type { VNode, VNodeChild, ElementVNode, FragmentVNode, FunctionComponentVNode, ClassComponentVNode, UnregisterFn, RefCallback, CSSProperties, ClassValue, RuntimeAttributes, EventHandlers, HTMLAttributes, SVGAttributes, Slots, Ref, Refs, FukictLifecycle, FukictComponent, FukictProps, FukictSlots, FukictConstructor, } from './types/index.js';
10
10
  export type { Context, ContextData } from './types/context.js';
11
11
  export { VNodeType } from './types/index.js';
12
12
  export type { JSX } from './types/jsx.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB,eAAO,MAAM,OAAO,SAAmB,CAAC;AAGxC,YAAY,EACV,KAAK,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,aAAa,EACb,KAAK,EACL,GAAG,EACH,eAAe,EACf,eAAe,EACf,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,YAAY,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,OAAO,GACR,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB,eAAO,MAAM,OAAO,SAAmB,CAAC;AAGxC,YAAY,EACV,KAAK,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,aAAa,EACb,KAAK,EACL,GAAG,EACH,IAAI,EACJ,eAAe,EACf,eAAe,EACf,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,YAAY,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,OAAO,GACR,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,mBAAmB;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AA8BxC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAE/D,kBAAkB;AAClB,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,YAAY;AACZ,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEzE,gDAAgD;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,uBAAuB;AACvB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,OAAO,GACR,MAAM,wBAAwB,CAAC;AAEhC,kDAAkD;AAClD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,mBAAmB;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AA+BxC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAE/D,kBAAkB;AAClB,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,YAAY;AACZ,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEzE,gDAAgD;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,uBAAuB;AACvB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,OAAO,GACR,MAAM,wBAAwB,CAAC;AAEhC,kDAAkD;AAClD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  export declare const METADATA: {
6
6
  readonly name: "@fukict/basic";
7
- readonly version: "0.1.0";
7
+ readonly version: "0.1.2";
8
8
  readonly description: "Lightweight DOM rendering basic with extension mechanism";
9
9
  readonly author: "Fukict Team";
10
10
  readonly license: "MIT";
package/dist/metadata.js CHANGED
@@ -4,7 +4,7 @@
4
4
  */
5
5
  export const METADATA = {
6
6
  name: '@fukict/basic',
7
- version: '0.1.0',
7
+ version: '0.1.2',
8
8
  description: 'Lightweight DOM rendering basic with extension mechanism',
9
9
  author: 'Fukict Team',
10
10
  license: 'MIT',
@@ -9,7 +9,7 @@ import type { Fukict } from '../component-class/fukict.js';
9
9
  *
10
10
  * @param element - DOM element
11
11
  * @param props - Props object
12
- * @param componentInstance - Optional component instance for fukict:ref
12
+ * @param _componentInstance - (Unused) Component instance, kept for compatibility
13
13
  */
14
- export declare function setAttributes(element: Element, props: Record<string, unknown>, componentInstance?: Fukict): void;
14
+ export declare function setAttributes(element: Element, props: Record<string, unknown>, _componentInstance?: Fukict): void;
15
15
  //# sourceMappingURL=attributes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/renderer/attributes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAG3D;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,iBAAiB,CAAC,EAAE,MAAM,GACzB,IAAI,CAoEN"}
1
+ {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/renderer/attributes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAG3D;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,IAAI,CAwDN"}
@@ -4,25 +4,15 @@ import * as dom from '../dom/index.js';
4
4
  *
5
5
  * @param element - DOM element
6
6
  * @param props - Props object
7
- * @param componentInstance - Optional component instance for fukict:ref
7
+ * @param _componentInstance - (Unused) Component instance, kept for compatibility
8
8
  */
9
- export function setAttributes(element, props, componentInstance) {
9
+ export function setAttributes(element, props, _componentInstance) {
10
10
  for (const [key, value] of Object.entries(props)) {
11
11
  if (key === 'children') {
12
12
  continue;
13
13
  }
14
- // Handle fukict:ref (class component refs)
15
- if (key === 'fukict:ref' &&
16
- typeof value === 'string' &&
17
- componentInstance) {
18
- // Register ref in component's refs Map
19
- if (!componentInstance.refs.has(value)) {
20
- componentInstance.refs.set(value, { current: null });
21
- }
22
- const ref = componentInstance.refs.get(value);
23
- if (ref) {
24
- ref.current = element;
25
- }
14
+ // Skip fukict:ref (handled in class-helpers.ts)
15
+ if (key === 'fukict:ref') {
26
16
  continue;
27
17
  }
28
18
  // TODO: dom 应该统一处理流程
@@ -1 +1 @@
1
- {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../src/renderer/attributes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,KAA8B,EAC9B,iBAA0B;IAE1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QAED,2CAA2C;QAC3C,IACE,GAAG,KAAK,YAAY;YACpB,OAAO,KAAK,KAAK,QAAQ;YACzB,iBAAiB,EACjB,CAAC;YACD,uCAAuC;YACvC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;YACxB,CAAC;YACD,SAAS;QACX,CAAC;QAED,qBAAqB;QAErB,sBAAsB;QACtB,IAAI,GAAG,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChD,KAAoC,CAAC,OAAO,CAAC,CAAC;YAC/C,SAAS;QACX,CAAC;QAED,6BAA6B;QAC7B,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/B,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAsB,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QAED,sBAAsB;QACtB,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnE,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,GAAG,CAAC,QAAQ,CACV,OAAsB,EACtB,QAAQ,EACR,UAA6B,CAC9B,CAAC;YACJ,CAAC;YACD,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC/D,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QAED,qCAAqC;QACrC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,GAAG,CAAC,QAAQ,CACV,OAAO,EACP,KAAoD,CACrD,CAAC;YACF,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../src/renderer/attributes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,KAA8B,EAC9B,kBAA2B;IAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QAED,gDAAgD;QAChD,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,qBAAqB;QAErB,sBAAsB;QACtB,IAAI,GAAG,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChD,KAAoC,CAAC,OAAO,CAAC,CAAC;YAC/C,SAAS;QACX,CAAC;QAED,6BAA6B;QAC7B,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/B,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAsB,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QAED,sBAAsB;QACtB,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnE,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,GAAG,CAAC,QAAQ,CACV,OAAsB,EACtB,QAAQ,EACR,UAA6B,CAC9B,CAAC;YACJ,CAAC;YACD,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC/D,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QAED,qCAAqC;QACrC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,GAAG,CAAC,QAAQ,CACV,OAAO,EACP,KAAoD,CACrD,CAAC;YACF,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ClassComponentVNode } from '../types/index.js';
2
+ /**
3
+ * Setup ClassComponentVNode with instance, slots, refs, and parent references
4
+ *
5
+ * This function handles the common logic for both creating and updating class components:
6
+ * 1. Saves instance to vnode
7
+ * 2. Extracts and sets slots from children
8
+ * 3. Registers instance to parent's refs (if fukict:ref is specified)
9
+ * 4. Updates wrapper VNode reference
10
+ * 5. Updates parent instance reference on wrapper VNode
11
+ *
12
+ * Used by both renderClassComponent (create) and diffClassComponent (update).
13
+ *
14
+ * @param vnode - The ClassComponentVNode to setup
15
+ * @param instance - The class component instance
16
+ * @param parentInstance - The parent component instance (optional)
17
+ */
18
+ export declare function setupClassComponentVNode(vnode: ClassComponentVNode, instance: unknown, parentInstance?: unknown): void;
19
+ //# sourceMappingURL=class-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-helpers.d.ts","sourceRoot":"","sources":["../../src/renderer/class-helpers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAS,MAAM,mBAAmB,CAAC;AAYpE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,OAAO,EACjB,cAAc,CAAC,EAAE,OAAO,GACvB,IAAI,CAiCN"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @fukict/basic - Class Component Shared Utilities
3
+ *
4
+ * Shared logic for creating and updating class components
5
+ */
6
+ import { extractSlots } from '../component-class/slot.js';
7
+ /**
8
+ * Setup ClassComponentVNode with instance, slots, refs, and parent references
9
+ *
10
+ * This function handles the common logic for both creating and updating class components:
11
+ * 1. Saves instance to vnode
12
+ * 2. Extracts and sets slots from children
13
+ * 3. Registers instance to parent's refs (if fukict:ref is specified)
14
+ * 4. Updates wrapper VNode reference
15
+ * 5. Updates parent instance reference on wrapper VNode
16
+ *
17
+ * Used by both renderClassComponent (create) and diffClassComponent (update).
18
+ *
19
+ * @param vnode - The ClassComponentVNode to setup
20
+ * @param instance - The class component instance
21
+ * @param parentInstance - The parent component instance (optional)
22
+ */
23
+ export function setupClassComponentVNode(vnode, instance, parentInstance) {
24
+ const instanceInternal = instance;
25
+ // 1. Save instance to vnode
26
+ vnode.__instance__ = instance;
27
+ // 2. Extract and set slots from children
28
+ if (vnode.children) {
29
+ instanceInternal.slots = extractSlots(vnode.children);
30
+ }
31
+ // 3. Handle fukict:ref for class components
32
+ // If parent is a class component and this component has fukict:ref,
33
+ // register this instance to parent's refs
34
+ if (parentInstance && vnode.props && vnode.props['fukict:ref']) {
35
+ const refName = vnode.props['fukict:ref'];
36
+ if (typeof refName === 'string') {
37
+ const parentInternal = parentInstance;
38
+ // Directly assign instance to parent's refs (no Ref wrapper)
39
+ parentInternal.refs[refName] = instance;
40
+ }
41
+ }
42
+ // 4. Update wrapper VNode reference
43
+ instanceInternal.__wrapper__ = vnode;
44
+ // 5. Update parent instance reference on wrapper VNode (for context chain)
45
+ if (parentInstance) {
46
+ vnode.__parentInstance__ = parentInstance;
47
+ }
48
+ }
49
+ //# sourceMappingURL=class-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-helpers.js","sourceRoot":"","sources":["../../src/renderer/class-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAa1D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAA0B,EAC1B,QAAiB,EACjB,cAAwB;IAExB,MAAM,gBAAgB,GAAG,QAAqC,CAAC;IAE/D,4BAA4B;IAC5B,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;IAE9B,yCAAyC;IACzC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,gBAAgB,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,4CAA4C;IAC5C,uEAAuE;IACvE,6CAA6C;IAC7C,IAAI,cAAc,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAY,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,cAAc,GAAG,cAA2C,CAAC;YAEnE,6DAA6D;YAC7D,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,gBAAgB,CAAC,WAAW,GAAG,KAAK,CAAC;IAErC,2EAA2E;IAC3E,IAAI,cAAc,EAAE,CAAC;QAEjB,KACD,CAAC,kBAAkB,GAAG,cAAc,CAAC;IACxC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/renderer/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAItD,OAAO,KAAK,EAGV,KAAK,EACL,UAAU,EACX,MAAM,mBAAmB,CAAC;AAI3B;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,UAAU,EACjB,iBAAiB,CAAC,EAAE,MAAM,GACzB,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAkCtB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,EACZ,iBAAiB,CAAC,EAAE,MAAM,GACzB,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAkBtB"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/renderer/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAGtD,OAAO,KAAK,EAMV,KAAK,EACL,UAAU,EACX,MAAM,mBAAmB,CAAC;AAW3B;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,UAAU,EACjB,iBAAiB,CAAC,EAAE,MAAM,GACzB,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAkCtB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,EACZ,iBAAiB,CAAC,EAAE,MAAM,GACzB,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAqBtB"}
@@ -1,7 +1,8 @@
1
- import { extractSlots } from '../component-class/slot.js';
2
1
  import * as dom from '../dom/index.js';
3
2
  import { VNodeType } from '../types/index.js';
4
3
  import { setAttributes } from './attributes.js';
4
+ import { setupClassComponentVNode } from './class-helpers.js';
5
+ import { setupElementVNode, setupFragmentVNode, setupFunctionComponentVNode, setupPrimitiveVNode, } from './vnode-helpers.js';
5
6
  /**
6
7
  * Create real DOM node(s) from VNode
7
8
  *
@@ -65,6 +66,8 @@ export function createElementFromVNode(vnode, componentInstance) {
65
66
  return renderFunctionComponent(vnode, componentInstance);
66
67
  case VNodeType.ClassComponent:
67
68
  return renderClassComponent(vnode, componentInstance);
69
+ case VNodeType.Primitive:
70
+ return renderPrimitive(vnode);
68
71
  default:
69
72
  return null;
70
73
  }
@@ -78,7 +81,8 @@ function renderElement(vnode, componentInstance) {
78
81
  if (vnode.__type__ !== VNodeType.Element) {
79
82
  throw new Error('Expected ElementVNode');
80
83
  }
81
- const { type, props, children } = vnode;
84
+ const elementVNode = vnode;
85
+ const { type, props, children } = elementVNode;
82
86
  const element = dom.createElement(type);
83
87
  // Set attributes and events
84
88
  if (props) {
@@ -102,8 +106,8 @@ function renderElement(vnode, componentInstance) {
102
106
  else {
103
107
  console.warn('Element vnode children is not an array:', vnode);
104
108
  }
105
- // 保存单个节点到 __dom__
106
- vnode.__dom__ = element;
109
+ // Setup ElementVNode: save DOM reference
110
+ setupElementVNode(elementVNode, element);
107
111
  return element;
108
112
  }
109
113
  /**
@@ -115,7 +119,8 @@ function renderFragment(vnode, componentInstance) {
115
119
  if (vnode.__type__ !== VNodeType.Fragment) {
116
120
  throw new Error('Expected FragmentVNode');
117
121
  }
118
- const { children } = vnode;
122
+ const fragmentVNode = vnode;
123
+ const { children } = fragmentVNode;
119
124
  const nodes = [];
120
125
  if (Array.isArray(children)) {
121
126
  for (const child of children) {
@@ -134,8 +139,8 @@ function renderFragment(vnode, componentInstance) {
134
139
  else {
135
140
  console.warn('Element vnode children is not an array:', vnode);
136
141
  }
137
- // 保存所有节点到 __dom__
138
- vnode.__dom__ = nodes;
142
+ // Setup FragmentVNode: save DOM nodes array reference
143
+ setupFragmentVNode(fragmentVNode, nodes);
139
144
  return nodes;
140
145
  }
141
146
  /**
@@ -159,15 +164,14 @@ function renderFunctionComponent(vnode, componentInstance) {
159
164
  const funcComponent = type;
160
165
  const rendered = funcComponent(propsWithChildren);
161
166
  if (!rendered) {
162
- funcVNode.__rendered__ = undefined;
163
- funcVNode.__dom__ = null;
167
+ // Setup FunctionComponentVNode with empty result
168
+ setupFunctionComponentVNode(funcVNode, undefined, null);
164
169
  return null;
165
170
  }
166
171
  // Render result (pass component instance for nested fukict:ref)
167
172
  const domNode = createRealNode(rendered, componentInstance);
168
- // Save rendered VNode and DOM
169
- funcVNode.__rendered__ = rendered;
170
- funcVNode.__dom__ = domNode; // 可能是 Node 或 Node[]
173
+ // Setup FunctionComponentVNode: save rendered VNode and DOM reference
174
+ setupFunctionComponentVNode(funcVNode, rendered, domNode);
171
175
  return domNode;
172
176
  }
173
177
  /**
@@ -181,43 +185,43 @@ function renderClassComponent(vnode, componentInstance) {
181
185
  }
182
186
  // Type assertion after runtime check
183
187
  const classVNode = vnode;
184
- const { type, props, children } = classVNode;
188
+ const { type, props } = classVNode;
185
189
  // 1. Create instance (only props)
186
190
  // Type assertion is safe here because we know it's a class constructor
187
191
  const ComponentClass = type;
188
192
  const instance = new ComponentClass(props ?? {});
189
- // 2. Extract and set slots from children
190
- if (children) {
191
- instance.slots = extractSlots(children);
192
- }
193
- // 3. Handle fukict:ref for class components
194
- // If parent is a class component and this component has fukict:ref,
195
- // register this instance to parent's refs
196
- if (componentInstance && props && props['fukict:ref']) {
197
- const refName = props['fukict:ref'];
198
- if (typeof refName === 'string') {
199
- // Create or update ref in parent component
200
- if (!componentInstance.refs.has(refName)) {
201
- componentInstance.refs.set(refName, { current: null });
202
- }
203
- const ref = componentInstance.refs.get(refName);
204
- if (ref) {
205
- ref.current = instance;
206
- }
207
- }
208
- }
209
- // 4. Save instance to vnode
210
- classVNode.__instance__ = instance;
211
- // 5. Save wrapper VNode to instance (for context traversal)
212
- instance.__wrapper__ = classVNode;
213
- // 6. Save parent instance reference on wrapper VNode (for context chain)
214
- if (componentInstance) {
215
- classVNode.__parentInstance__ = componentInstance;
216
- }
217
- // 7. Create comment placeholder with instance ID and name
193
+ // 2. Setup ClassComponentVNode: instance, slots, refs, wrapper, parent reference
194
+ setupClassComponentVNode(classVNode, instance, componentInstance);
195
+ // 3. Create comment placeholder with instance ID and name
218
196
  const placeholder = dom.createComment(`fukict:${instance.__name__}#${instance.__id__}`);
219
- // 8. Save placeholder to vnode
197
+ // 4. Save placeholder to vnode
220
198
  classVNode.__placeholder__ = placeholder;
221
199
  return placeholder;
222
200
  }
201
+ /**
202
+ * Render Primitive VNode
203
+ * Returns Text node for renderable values, Comment node for non-renderable values
204
+ */
205
+ function renderPrimitive(vnode) {
206
+ // TypeScript now knows vnode is PrimitiveVNode
207
+ if (vnode.__type__ !== VNodeType.Primitive) {
208
+ throw new Error('Expected PrimitiveVNode');
209
+ }
210
+ const primitiveVNode = vnode;
211
+ const { value } = primitiveVNode;
212
+ // Renderable values: string, number
213
+ if (typeof value === 'string' || typeof value === 'number') {
214
+ const textNode = dom.createTextNode(String(value));
215
+ setupPrimitiveVNode(primitiveVNode, textNode);
216
+ return textNode;
217
+ }
218
+ // Non-renderable values: boolean, null, undefined
219
+ // Use comment node as placeholder to maintain structure
220
+ if (typeof value === 'boolean' || value === null || value === undefined) {
221
+ const comment = dom.createComment(`fukict:primitive:${value === null ? 'null' : value === undefined ? 'undefined' : value}`);
222
+ setupPrimitiveVNode(primitiveVNode, comment);
223
+ return comment;
224
+ }
225
+ return null;
226
+ }
223
227
  //# sourceMappingURL=create.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/renderer/create.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAOvC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAiB,EACjB,iBAA0B;IAE1B,mCAAmC;IACnC,2CAA2C;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;YACrD,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3C,CAAC;IAED,4BAA4B;IAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,yCAAyC;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACrD,OAAO,sBAAsB,CAAC,KAAc,EAAE,iBAAiB,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAY,EACZ,iBAA0B;IAE1B,kDAAkD;IAClD,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,SAAS,CAAC,OAAO;YACpB,OAAO,aAAa,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAEjD,KAAK,SAAS,CAAC,QAAQ;YACrB,OAAO,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAElD,KAAK,SAAS,CAAC,iBAAiB;YAC9B,OAAO,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAE3D,KAAK,SAAS,CAAC,cAAc;YAC3B,OAAO,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAExD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,KAAY,EAAE,iBAA0B;IAC7D,6CAA6C;IAC7C,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAExC,4BAA4B;IAC5B,IAAI,KAAK,EAAE,CAAC;QACV,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACnD,CAAC;IAED,kEAAkE;IAClE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YAEtD,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,gBAAgB;YAChB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAExB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,KAAY,EAAE,iBAA0B;IAC9D,8CAA8C;IAC9C,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3B,MAAM,KAAK,GAAW,EAAE,CAAC;IAEzB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YAEtD,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,wCAAwC;YACxC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;IAEtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAC9B,KAAY,EACZ,iBAA0B;IAE1B,uDAAuD;IACvD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,iBAAiB,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,qCAAqC;IACrC,MAAM,SAAS,GAAG,KAA+B,CAAC;IAClD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IAE5C,yCAAyC;IACzC,MAAM,iBAAiB,GAAG;QACxB,GAAG,KAAK;QACR,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;KACzD,CAAC;IAEF,6CAA6C;IAC7C,MAAM,aAAa,GAAG,IAAoC,CAAC;IAC3D,MAAM,QAAQ,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAElD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC;QACnC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gEAAgE;IAChE,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAE5D,8BAA8B;IAC9B,SAAS,CAAC,YAAY,GAAG,QAAQ,CAAC;IAClC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,oBAAoB;IAEjD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,KAAY,EAAE,iBAA0B;IACpE,oDAAoD;IACpD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,cAAc,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,qCAAqC;IACrC,MAAM,UAAU,GAAG,KAA4B,CAAC;IAChD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE7C,kCAAkC;IAClC,uEAAuE;IACvE,MAAM,cAAc,GAAG,IAAkD,CAAC;IAC1E,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEjD,yCAAyC;IACzC,IAAI,QAAQ,EAAE,CAAC;QACZ,QAAoC,CAAC,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,4CAA4C;IAC5C,uEAAuE;IACvE,6CAA6C;IAC7C,IAAI,iBAAiB,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACtD,MAAM,OAAO,GAAY,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,2CAA2C;YAC3C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,UAAU,CAAC,YAAY,GAAG,QAAQ,CAAC;IAEnC,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;IAElC,yEAAyE;IACzE,IAAI,iBAAiB,EAAE,CAAC;QAEpB,UACD,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;IAC3C,CAAC;IAED,0DAA0D;IAC1D,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CACnC,UAAU,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CACjD,CAAC;IAEF,+BAA+B;IAC/B,UAAU,CAAC,eAAe,GAAG,WAAW,CAAC;IAEzC,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/renderer/create.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,15 @@
1
+ /**
2
+ * @fukict/basic - Diff: Class Component
3
+ *
4
+ * Diff class component VNodes
5
+ */
6
+ import type { FukictComponent } from '../../types/class.js';
1
7
  import type { VNode } from '../../types/index.js';
2
8
  /**
3
9
  * Diff Class Component VNode
10
+ * - Update slots and refs
4
11
  * - Call instance.update(newProps)
5
12
  * - Handle detached mode (fukict:detach)
6
13
  */
7
- export declare function diffClassComponent(oldVNode: VNode, newVNode: VNode, container: Element): void;
14
+ export declare function diffClassComponent(oldVNode: VNode, newVNode: VNode, container: Element, parentInstance?: FukictComponent): void;
8
15
  //# sourceMappingURL=class.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../../src/renderer/diff/class.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAuB,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIvE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,OAAO,GACjB,IAAI,CAoCN"}
1
+ {"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../../src/renderer/diff/class.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAuB,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAavE;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,OAAO,EAClB,cAAc,CAAC,EAAE,eAAe,GAC/B,IAAI,CA8CN"}
@@ -1,11 +1,13 @@
1
1
  import { VNodeType } from '../../types/index.js';
2
+ import { setupClassComponentVNode } from '../class-helpers.js';
2
3
  import { replaceNode } from './helpers.js';
3
4
  /**
4
5
  * Diff Class Component VNode
6
+ * - Update slots and refs
5
7
  * - Call instance.update(newProps)
6
8
  * - Handle detached mode (fukict:detach)
7
9
  */
8
- export function diffClassComponent(oldVNode, newVNode, container) {
10
+ export function diffClassComponent(oldVNode, newVNode, container, parentInstance) {
9
11
  if (oldVNode.__type__ !== VNodeType.ClassComponent ||
10
12
  newVNode.__type__ !== VNodeType.ClassComponent) {
11
13
  throw new Error('Expected ClassComponentVNode');
@@ -20,18 +22,23 @@ export function diffClassComponent(oldVNode, newVNode, container) {
20
22
  }
21
23
  // Reuse instance
22
24
  const instance = oldClassVNode.__instance__;
23
- newClassVNode.__instance__ = instance;
25
+ if (!instance) {
26
+ console.warn('[diffClassComponent] Instance is undefined, skipping diff');
27
+ return;
28
+ }
29
+ // Setup ClassComponentVNode: instance, slots, refs, wrapper, parent reference
30
+ setupClassComponentVNode(newClassVNode, instance, parentInstance);
31
+ // Copy placeholder from old vnode
32
+ newClassVNode.__placeholder__ = oldClassVNode.__placeholder__;
24
33
  // Check detached mode
25
34
  if (newClassVNode.props && newClassVNode.props['fukict:detach']) {
26
35
  // Detached mode: only update props, skip update()
27
- if (instance) {
28
- // Use same pattern as Fukict.update() - cast to bypass readonly
29
- instance.props = newClassVNode.props;
30
- }
36
+ // Use same pattern as Fukict.update() - cast to bypass readonly
37
+ instance.props = newClassVNode.props;
31
38
  return;
32
39
  }
33
40
  // Normal mode: call instance.update(newProps)
34
- if (instance && typeof instance.update === 'function') {
41
+ if (typeof instance.update === 'function') {
35
42
  instance.update(newClassVNode.props ?? {});
36
43
  }
37
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"class.js","sourceRoot":"","sources":["../../../src/renderer/diff/class.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAe,EACf,QAAe,EACf,SAAkB;IAElB,IACE,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,cAAc;QAC9C,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,cAAc,EAC9C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,qCAAqC;IACrC,MAAM,aAAa,GAAG,QAA+B,CAAC;IACtD,MAAM,aAAa,GAAG,QAA+B,CAAC;IAEtD,2CAA2C;IAC3C,IAAI,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;QAC9C,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,iBAAiB;IACjB,MAAM,QAAQ,GAAG,aAAa,CAAC,YAA2C,CAAC;IAC3E,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC;IAEtC,sBAAsB;IACtB,IAAI,aAAa,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QAChE,kDAAkD;QAClD,IAAI,QAAQ,EAAE,CAAC;YACb,gEAAgE;YAC/D,QAAQ,CAAC,KAA6B,GAAG,aAAa,CAAC,KAAK,CAAC;QAChE,CAAC;QACD,OAAO;IACT,CAAC;IAED,8CAA8C;IAC9C,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACtD,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"class.js","sourceRoot":"","sources":["../../../src/renderer/diff/class.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAU3C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAe,EACf,QAAe,EACf,SAAkB,EAClB,cAAgC;IAEhC,IACE,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,cAAc;QAC9C,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,cAAc,EAC9C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,qCAAqC;IACrC,MAAM,aAAa,GAAG,QAA+B,CAAC;IACtD,MAAM,aAAa,GAAG,QAA+B,CAAC;IAEtD,2CAA2C;IAC3C,IAAI,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;QAC9C,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,iBAAiB;IACjB,MAAM,QAAQ,GAAG,aAAa,CAAC,YAElB,CAAC;IAEd,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,8EAA8E;IAC9E,wBAAwB,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAElE,kCAAkC;IAClC,aAAa,CAAC,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;IAE9D,sBAAsB;IACtB,IAAI,aAAa,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QAChE,kDAAkD;QAClD,gEAAgE;QAC/D,QAAQ,CAAC,KAA6B,GAAG,aAAa,CAAC,KAAK,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1C,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../../src/renderer/diff/element.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAMlD;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,OAAO,GACjB,IAAI,CA6BN"}
1
+ {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../../src/renderer/diff/element.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAgB,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAOhE;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,OAAO,GACjB,IAAI,CAiCN"}
@@ -1,4 +1,5 @@
1
1
  import { VNodeType } from '../../types/index.js';
2
+ import { setupElementVNode } from '../vnode-helpers.js';
2
3
  import { diffChildren } from './children.js';
3
4
  import { replaceNode } from './helpers.js';
4
5
  import { patchProps } from './props.js';
@@ -13,22 +14,25 @@ export function diffElement(oldVNode, newVNode, container) {
13
14
  newVNode.__type__ !== VNodeType.Element) {
14
15
  throw new Error('Expected ElementVNode');
15
16
  }
17
+ const oldElementVNode = oldVNode;
18
+ const newElementVNode = newVNode;
16
19
  // Tag name changed - replace entire element
17
- if (oldVNode.type !== newVNode.type) {
18
- replaceNode(oldVNode, newVNode, container);
20
+ if (oldElementVNode.type !== newElementVNode.type) {
21
+ replaceNode(oldElementVNode, newElementVNode, container);
19
22
  return;
20
23
  }
21
24
  // Reuse DOM element
22
- const element = oldVNode.__dom__;
25
+ const element = oldElementVNode.__dom__;
23
26
  if (!element) {
24
27
  // DOM doesn't exist, replace node
25
- replaceNode(oldVNode, newVNode, container);
28
+ replaceNode(oldElementVNode, newElementVNode, container);
26
29
  return;
27
30
  }
28
- newVNode.__dom__ = element;
31
+ // Setup ElementVNode: save DOM reference
32
+ setupElementVNode(newElementVNode, element);
29
33
  // Patch props
30
- patchProps(element, oldVNode.props, newVNode.props);
34
+ patchProps(element, oldElementVNode.props, newElementVNode.props);
31
35
  // Diff children
32
- diffChildren(oldVNode.children, newVNode.children, element);
36
+ diffChildren(oldElementVNode.children, newElementVNode.children, element);
33
37
  }
34
38
  //# sourceMappingURL=element.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","sourceRoot":"","sources":["../../../src/renderer/diff/element.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,QAAe,EACf,QAAe,EACf,SAAkB;IAElB,IACE,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO;QACvC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,EACvC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,4CAA4C;IAC5C,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,oBAAoB;IACpB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAkB,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,kCAAkC;QAClC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;IAE3B,cAAc;IACd,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,gBAAgB;IAChB,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../../src/renderer/diff/element.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,QAAe,EACf,QAAe,EACf,SAAkB;IAElB,IACE,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO;QACvC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,EACvC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,eAAe,GAAG,QAAwB,CAAC;IACjD,MAAM,eAAe,GAAG,QAAwB,CAAC;IAEjD,4CAA4C;IAC5C,IAAI,eAAe,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,EAAE,CAAC;QAClD,WAAW,CAAC,eAAe,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,oBAAoB;IACpB,MAAM,OAAO,GAAG,eAAe,CAAC,OAAkB,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,kCAAkC;QAClC,WAAW,CAAC,eAAe,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,yCAAyC;IACzC,iBAAiB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAE5C,cAAc;IACd,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAElE,gBAAgB;IAChB,YAAY,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fragment.d.ts","sourceRoot":"","sources":["../../../src/renderer/diff/fragment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIlD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,OAAO,GACjB,IAAI,CA0BN"}
1
+ {"version":3,"file":"fragment.d.ts","sourceRoot":"","sources":["../../../src/renderer/diff/fragment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAiB,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAKjE;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,OAAO,GACjB,IAAI,CA8BN"}
@@ -1,4 +1,5 @@
1
1
  import { VNodeType } from '../../types/index.js';
2
+ import { setupFragmentVNode } from '../vnode-helpers.js';
2
3
  import { diffChildren } from './children.js';
3
4
  /**
4
5
  * Diff Fragment VNode
@@ -10,11 +11,12 @@ export function diffFragment(oldVNode, newVNode, container) {
10
11
  newVNode.__type__ !== VNodeType.Fragment) {
11
12
  throw new Error('Expected FragmentVNode');
12
13
  }
14
+ const newFragmentVNode = newVNode;
13
15
  // Diff children
14
- diffChildren(oldVNode.children, newVNode.children, container);
16
+ diffChildren(oldVNode.children, newFragmentVNode.children, container);
15
17
  // Update __dom__ reference (collect all current child nodes)
16
18
  const newNodes = [];
17
- for (const child of newVNode.children) {
19
+ for (const child of newFragmentVNode.children) {
18
20
  if (child && typeof child === 'object' && '__dom__' in child) {
19
21
  const dom = child.__dom__;
20
22
  if (dom) {
@@ -27,6 +29,7 @@ export function diffFragment(oldVNode, newVNode, container) {
27
29
  }
28
30
  }
29
31
  }
30
- newVNode.__dom__ = newNodes;
32
+ // Setup FragmentVNode: save DOM nodes array reference
33
+ setupFragmentVNode(newFragmentVNode, newNodes);
31
34
  }
32
35
  //# sourceMappingURL=fragment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fragment.js","sourceRoot":"","sources":["../../../src/renderer/diff/fragment.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAe,EACf,QAAe,EACf,SAAkB;IAElB,IACE,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;QACxC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EACxC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,gBAAgB;IAChB,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE9D,6DAA6D;IAC7D,MAAM,QAAQ,GAAW,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;YAC1B,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"fragment.js","sourceRoot":"","sources":["../../../src/renderer/diff/fragment.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAe,EACf,QAAe,EACf,SAAkB;IAElB,IACE,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;QACxC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EACxC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,gBAAgB,GAAG,QAAyB,CAAC;IAEnD,gBAAgB;IAChB,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEtE,6DAA6D;IAC7D,MAAM,QAAQ,GAAW,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;YAC1B,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/renderer/diff/function.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,KAAK,EAEN,MAAM,sBAAsB,CAAC;AAK9B;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,OAAO,GACjB,IAAI,CA4DN"}
1
+ {"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/renderer/diff/function.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,KAAK,EAEN,MAAM,sBAAsB,CAAC;AAM9B;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,OAAO,GACjB,IAAI,CAkEN"}