nuclo 0.2.33 → 0.2.34

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 (110) hide show
  1. package/README.md +2 -0
  2. package/dist/{Element-DXd2npjS.cjs → Element-BUdteOsZ.cjs} +2 -2
  3. package/dist/{Element-C3mU75-a.mjs.map → Element-BUdteOsZ.cjs.map} +1 -1
  4. package/dist/{Element-C3mU75-a.mjs → Element-Djosl17E.mjs} +2 -2
  5. package/dist/{Element-DXd2npjS.cjs.map → Element-Djosl17E.mjs.map} +1 -1
  6. package/dist/bootstrap.d.ts +5 -0
  7. package/dist/bootstrap.d.ts.map +1 -0
  8. package/dist/element/attributes.d.ts +6 -0
  9. package/dist/element/attributes.d.ts.map +1 -0
  10. package/dist/element/class-name.d.ts +6 -0
  11. package/dist/element/class-name.d.ts.map +1 -0
  12. package/dist/element/event-attributes.d.ts +5 -0
  13. package/dist/element/event-attributes.d.ts.map +1 -0
  14. package/dist/element/events.d.ts +46 -0
  15. package/dist/element/events.d.ts.map +1 -0
  16. package/dist/element/factory-meta.d.ts +25 -0
  17. package/dist/element/factory-meta.d.ts.map +1 -0
  18. package/dist/element/factory.d.ts +32 -0
  19. package/dist/element/factory.d.ts.map +1 -0
  20. package/dist/element/inline-style.d.ts +9 -0
  21. package/dist/element/inline-style.d.ts.map +1 -0
  22. package/dist/element/lifecycle.d.ts +106 -0
  23. package/dist/element/lifecycle.d.ts.map +1 -0
  24. package/dist/element/modifiers.d.ts +11 -0
  25. package/dist/element/modifiers.d.ts.map +1 -0
  26. package/dist/element/tags.d.ts +5 -0
  27. package/dist/element/tags.d.ts.map +1 -0
  28. package/dist/hydration.d.ts +73 -0
  29. package/dist/hydration.d.ts.map +1 -0
  30. package/dist/index.d.ts +17 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/list/index.d.ts +7 -0
  33. package/dist/list/index.d.ts.map +1 -0
  34. package/dist/list/runtime.d.ts +6 -0
  35. package/dist/list/runtime.d.ts.map +1 -0
  36. package/dist/list/template.d.ts +113 -0
  37. package/dist/list/template.d.ts.map +1 -0
  38. package/dist/list/types.d.ts +57 -0
  39. package/dist/list/types.d.ts.map +1 -0
  40. package/dist/nuclo.cjs +1 -1
  41. package/dist/nuclo.cjs.map +1 -1
  42. package/dist/nuclo.mjs +1 -1
  43. package/dist/nuclo.mjs.map +1 -1
  44. package/dist/nuclo.umd.js +1 -1
  45. package/dist/nuclo.umd.js.map +1 -1
  46. package/dist/polyfill/Document.d.ts +19 -0
  47. package/dist/polyfill/Document.d.ts.map +1 -0
  48. package/dist/polyfill/Element.d.ts +48 -0
  49. package/dist/polyfill/Element.d.ts.map +1 -0
  50. package/dist/polyfill/Event.d.ts +43 -0
  51. package/dist/polyfill/Event.d.ts.map +1 -0
  52. package/dist/polyfill/Node.d.ts +13 -0
  53. package/dist/polyfill/Node.d.ts.map +1 -0
  54. package/dist/polyfill/Text.d.ts +11 -0
  55. package/dist/polyfill/Text.d.ts.map +1 -0
  56. package/dist/polyfill/index.d.ts +24 -0
  57. package/dist/polyfill/index.d.ts.map +1 -0
  58. package/dist/polyfill/nuclo.polyfill.cjs +1 -1
  59. package/dist/polyfill/nuclo.polyfill.cjs.map +1 -1
  60. package/dist/polyfill/nuclo.polyfill.mjs +1 -1
  61. package/dist/polyfill/nuclo.polyfill.mjs.map +1 -1
  62. package/dist/render.d.ts +33 -0
  63. package/dist/render.d.ts.map +1 -0
  64. package/dist/shared/conditions.d.ts +4 -0
  65. package/dist/shared/conditions.d.ts.map +1 -0
  66. package/dist/shared/dom.d.ts +80 -0
  67. package/dist/shared/dom.d.ts.map +1 -0
  68. package/dist/shared/environment.d.ts +5 -0
  69. package/dist/shared/environment.d.ts.map +1 -0
  70. package/dist/shared/errors.d.ts +2 -0
  71. package/dist/shared/errors.d.ts.map +1 -0
  72. package/dist/shared/renderables.d.ts +4 -0
  73. package/dist/shared/renderables.d.ts.map +1 -0
  74. package/dist/shared/strings.d.ts +19 -0
  75. package/dist/shared/strings.d.ts.map +1 -0
  76. package/dist/shared/type-guards.d.ts +16 -0
  77. package/dist/shared/type-guards.d.ts.map +1 -0
  78. package/dist/ssr/index.d.ts +19 -0
  79. package/dist/ssr/index.d.ts.map +1 -0
  80. package/dist/ssr/nuclo.ssr.cjs +1 -1
  81. package/dist/ssr/nuclo.ssr.cjs.map +1 -1
  82. package/dist/ssr/nuclo.ssr.mjs +1 -1
  83. package/dist/ssr/nuclo.ssr.mjs.map +1 -1
  84. package/dist/ssr/render-to-string.d.ts +41 -0
  85. package/dist/ssr/render-to-string.d.ts.map +1 -0
  86. package/dist/style/css.d.ts +26 -0
  87. package/dist/style/css.d.ts.map +1 -0
  88. package/dist/style/engine.d.ts +94 -0
  89. package/dist/style/engine.d.ts.map +1 -0
  90. package/dist/style/index.d.ts +3 -0
  91. package/dist/style/index.d.ts.map +1 -0
  92. package/dist/update/conditional.d.ts +3 -0
  93. package/dist/update/conditional.d.ts.map +1 -0
  94. package/dist/update/reactive-attributes.d.ts +45 -0
  95. package/dist/update/reactive-attributes.d.ts.map +1 -0
  96. package/dist/update/reactive-text.d.ts +38 -0
  97. package/dist/update/reactive-text.d.ts.map +1 -0
  98. package/dist/update/registry.d.ts +116 -0
  99. package/dist/update/registry.d.ts.map +1 -0
  100. package/dist/update/scope.d.ts +7 -0
  101. package/dist/update/scope.d.ts.map +1 -0
  102. package/dist/update/update.d.ts +4 -0
  103. package/dist/update/update.d.ts.map +1 -0
  104. package/dist/when/builder.d.ts +16 -0
  105. package/dist/when/builder.d.ts.map +1 -0
  106. package/dist/when/index.d.ts +44 -0
  107. package/dist/when/index.d.ts.map +1 -0
  108. package/dist/when/runtime.d.ts +59 -0
  109. package/dist/when/runtime.d.ts.map +1 -0
  110. package/package.json +6 -6
@@ -0,0 +1,19 @@
1
+ export declare class NucloDocument {
2
+ head: ExpandedElement;
3
+ body: ExpandedElement;
4
+ private _listeners;
5
+ constructor();
6
+ createElement(tagName: string, _options?: unknown): ExpandedElement;
7
+ createElementNS(namespace: string, tagName: string, _options?: unknown): ExpandedElement;
8
+ createTextNode(data: string): Text;
9
+ createComment(data: string): Comment;
10
+ createDocumentFragment(): DocumentFragment;
11
+ querySelector(selector: string): Element | null;
12
+ querySelectorAll(_selector: string): NodeListOf<Element>;
13
+ addEventListener(type: string, listener: EventListener, options?: boolean | AddEventListenerOptions): void;
14
+ removeEventListener(type: string, listener: EventListener, _options?: boolean | AddEventListenerOptions): void;
15
+ dispatchEvent(event: Event): boolean;
16
+ contains(_node: Node): boolean;
17
+ }
18
+ export declare const document: Document;
19
+ //# sourceMappingURL=Document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Document.d.ts","sourceRoot":"","sources":["../../src/polyfill/Document.ts"],"names":[],"mappings":"AA8EA,qBAAa,aAAa;IACxB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,CAAC,UAAU,CAA4G;IAE9H,cAIC;IAED,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,eAAe,CAElE;IAED,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,eAAe,CAIvF;IAED,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEjC;IAED,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYnC;IAED,sBAAsB,IAAI,gBAAgB,CAEzC;IAED,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAa9C;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAEvD;IAED,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAAG,IAAI,CAMzG;IAED,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAAG,IAAI,CAS7G;IAED,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAgBnC;IAED,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAE7B;CACF;AAED,eAAO,MAAM,QAAQ,UAA6C,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { NucloNode } from './Node';
2
+ export declare class NucloElement extends NucloNode {
3
+ tagName: string;
4
+ children: unknown[];
5
+ className: string;
6
+ textContent: string;
7
+ private _innerHTML;
8
+ parentNode: unknown;
9
+ rawMods?: unknown[];
10
+ mods?: unknown[];
11
+ id: string;
12
+ namespaceURI?: string;
13
+ sheet?: CSSStyleSheet | null;
14
+ private _listeners;
15
+ private _style?;
16
+ private _classList?;
17
+ private _attributes?;
18
+ get attributes(): Map<string, string>;
19
+ set attributes(value: Map<string, string>);
20
+ get style(): CSSStyleDeclaration;
21
+ set style(value: CSSStyleDeclaration);
22
+ get classList(): DOMTokenList;
23
+ set classList(value: DOMTokenList);
24
+ get innerHTML(): string;
25
+ set innerHTML(value: string);
26
+ private serializeChildren;
27
+ private serializeElement;
28
+ constructor(tagName: string);
29
+ appendChild<T extends Node>(child: T): T;
30
+ setAttribute(name: string, value: string): void;
31
+ getAttribute(name: string): string | null;
32
+ removeAttribute(name: string): void;
33
+ hasAttribute(name: string): boolean;
34
+ insertBefore<T extends Node>(newNode: T, referenceNode: Node | null): T;
35
+ removeChild<T extends Node>(child: T): T;
36
+ replaceChild<T extends Node>(newChild: Node, oldChild: T): T;
37
+ addEventListener(type: string, listener: EventListener): void;
38
+ removeEventListener(type: string, listener: EventListener): void;
39
+ dispatchEvent(event: Event): boolean;
40
+ querySelector(selector: string): Element | null;
41
+ private querySelectorById;
42
+ private querySelectorByClass;
43
+ private querySelectorByTag;
44
+ querySelectorAll(selector: string): NodeListOf<Element>;
45
+ private querySelectorAllByClass;
46
+ private querySelectorAllByTag;
47
+ }
48
+ //# sourceMappingURL=Element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Element.d.ts","sourceRoot":"","sources":["../../src/polyfill/Element.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAqGnC,qBAAa,YAAa,SAAQ,SAAS;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAM;IACvB,WAAW,EAAE,MAAM,CAAM;IACzB,OAAO,CAAC,UAAU,CAAc;IAChC,UAAU,EAAE,OAAO,CAAQ;IAC3B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,EAAE,EAAE,MAAM,CAAM;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,UAAU,CAAyC;IAO3D,OAAO,CAAC,MAAM,CAAC,CAAsB;IACrC,OAAO,CAAC,UAAU,CAAC,CAAe;IAOlC,OAAO,CAAC,WAAW,CAAC,CAAsB;IAE1C,IAAI,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAEpC;IACD,IAAI,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAExC;IAED,IAAI,KAAK,IAAI,mBAAmB,CAE/B;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,mBAAmB,EAEnC;IAED,IAAI,SAAS,IAAI,YAAY,CAE5B;IACD,IAAI,SAAS,CAAC,KAAK,EAAE,YAAY,EAEhC;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAE1B;IAED,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,gBAAgB;IAsCxB,YAAY,OAAO,EAAE,MAAM,EA6D1B;IAED,WAAW,CAAC,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAuBvC;IAED,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAO9C;IAED,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAExC;IAED,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKlC;IAED,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElC;IAED,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,CA2BtE;IAED,WAAW,CAAC,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAevC;IAED,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAkB3D;IAED,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAM5D;IAED,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAK/D;IAED,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAgBnC;IAED,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAa9C;IAED,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,kBAAkB;IAmB1B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAetD;IAED,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,qBAAqB;CAU9B"}
@@ -0,0 +1,43 @@
1
+ export declare class NucloEvent implements Event {
2
+ type: string;
3
+ bubbles: boolean;
4
+ cancelable: boolean;
5
+ composed: boolean;
6
+ currentTarget: EventTarget | null;
7
+ defaultPrevented: boolean;
8
+ eventPhase: number;
9
+ isTrusted: boolean;
10
+ target: EventTarget | null;
11
+ timeStamp: number;
12
+ readonly AT_TARGET = 2;
13
+ readonly BUBBLING_PHASE = 3;
14
+ readonly CAPTURING_PHASE = 1;
15
+ readonly NONE = 0;
16
+ returnValue: boolean;
17
+ srcElement: EventTarget | null;
18
+ cancelBubble: boolean;
19
+ constructor(type: string, eventInitDict?: EventInit);
20
+ composedPath(): EventTarget[];
21
+ initEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean): void;
22
+ preventDefault(): void;
23
+ stopImmediatePropagation(): void;
24
+ stopPropagation(): void;
25
+ }
26
+ export declare class NucloCustomEvent<T = any> extends NucloEvent implements CustomEvent<T> {
27
+ detail: T;
28
+ constructor(type: string, eventInitDict?: CustomEventInit<T>);
29
+ initCustomEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean, _detail?: T): void;
30
+ }
31
+ export declare const Event: {
32
+ new (type: string, eventInitDict?: EventInit): Event;
33
+ prototype: Event;
34
+ readonly NONE: 0;
35
+ readonly CAPTURING_PHASE: 1;
36
+ readonly AT_TARGET: 2;
37
+ readonly BUBBLING_PHASE: 3;
38
+ };
39
+ export declare const CustomEvent: {
40
+ new <T>(type: string, eventInitDict?: CustomEventInit<T>): CustomEvent<T>;
41
+ prototype: CustomEvent;
42
+ };
43
+ //# sourceMappingURL=Event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../src/polyfill/Event.ts"],"names":[],"mappings":"AACA,qBAAa,UAAW,YAAW,KAAK;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,WAAW,GAAG,IAAI,CAAQ;IACzC,gBAAgB,EAAE,OAAO,CAAS;IAClC,UAAU,EAAE,MAAM,CAAK;IACvB,SAAS,EAAE,OAAO,CAAS;IAC3B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAQ;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,SAAS,KAAK;IACvB,QAAQ,CAAC,cAAc,KAAK;IAC5B,QAAQ,CAAC,eAAe,KAAK;IAC7B,QAAQ,CAAC,IAAI,KAAK;IAClB,WAAW,EAAE,OAAO,CAAQ;IAC5B,UAAU,EAAE,WAAW,GAAG,IAAI,CAAQ;IACtC,YAAY,EAAE,OAAO,CAAS;IAE9B,YAAY,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,SAAS,EAMlD;IAED,YAAY,IAAI,WAAW,EAAE,CAE5B;IAED,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAExE;IAED,cAAc,IAAI,IAAI,CAIrB;IAED,wBAAwB,IAAI,IAAI,CAE/B;IAED,eAAe,IAAI,IAAI,CAEtB;CACF;AAED,qBAAa,gBAAgB,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAW,YAAW,WAAW,CAAC,CAAC,CAAC;IACjF,MAAM,EAAE,CAAC,CAAC;IAEV,YAAY,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAG3D;IAED,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAE3F;CACF;AAGD,eAAO,MAAM,KAAK;;;;;;;CAAiC,CAAC;AACpD,eAAO,MAAM,WAAW;;;CAA6C,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Base Node class for instanceof checks in Node.js polyfill
3
+ */
4
+ export declare class NucloNode {
5
+ nodeType: number;
6
+ nodeName: string;
7
+ nodeValue: string | null;
8
+ parentNode: unknown;
9
+ _childNodes: Node[] | null;
10
+ textContent: string;
11
+ get childNodes(): NodeListOf<ChildNode>;
12
+ }
13
+ //# sourceMappingURL=Node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../src/polyfill/Node.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,SAAS;IACpB,QAAQ,EAAE,MAAM,CAAK;IACrB,QAAQ,EAAE,MAAM,CAAM;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,UAAU,EAAE,OAAO,CAAQ;IAC3B,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAQ;IAClC,WAAW,EAAE,MAAM,CAAM;IAEzB,IAAI,UAAU,IAAI,UAAU,CAAC,SAAS,CAAC,CAgCtC;CACF"}
@@ -0,0 +1,11 @@
1
+ export declare class NucloText {
2
+ nodeType: number;
3
+ nodeName: string;
4
+ data: string;
5
+ textContent: string;
6
+ parentNode: unknown;
7
+ constructor(data: string);
8
+ get nodeValue(): string;
9
+ set nodeValue(value: string);
10
+ }
11
+ //# sourceMappingURL=Text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../src/polyfill/Text.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IACpB,QAAQ,SAAK;IACb,QAAQ,SAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAQ;IAE3B,YAAY,IAAI,EAAE,MAAM,EAGvB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAG1B;CACF"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Polyfills for Node.js environments
3
+ *
4
+ * This module provides minimal browser API polyfills to allow Nuclo to run in Node.js
5
+ * for server-side rendering (SSR) scenarios.
6
+ *
7
+ * To use in Node.js:
8
+ * ```typescript
9
+ * import 'nuclo/polyfill';
10
+ * // or
11
+ * import { document, Event, CustomEvent } from 'nuclo/polyfill';
12
+ * ```
13
+ */
14
+ export { NucloDocument, document } from './Document';
15
+ export { NucloElement } from './Element';
16
+ export { NucloText } from './Text';
17
+ export { NucloEvent, NucloCustomEvent, Event, CustomEvent } from './Event';
18
+ export { NucloNode } from './Node';
19
+ import { NucloElement } from './Element';
20
+ import { NucloNode } from './Node';
21
+ export declare const Node: typeof NucloNode;
22
+ export declare const Element: typeof NucloElement;
23
+ export declare const HTMLElement: typeof NucloElement;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/polyfill/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAInC,eAAO,MAAM,IAAI,kBAAY,CAAC;AAC9B,eAAO,MAAM,OAAO,qBAAe,CAAC;AACpC,eAAO,MAAM,WAAW,qBAAe,CAAC"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../Element-DXd2npjS.cjs");var t=class{nodeType=3;nodeName=`#text`;data;textContent;parentNode=null;constructor(e){this.data=e,this.textContent=e}get nodeValue(){return this.data}set nodeValue(e){this.data=e,this.textContent=e}},n=class{nodeType=11;nodeName=`#document-fragment`;childNodes=[];children=[];textContent=``;get firstChild(){return this.childNodes.length>0?this.childNodes[0]:null}get lastChild(){return this.childNodes.length>0?this.childNodes[this.childNodes.length-1]:null}appendChild(e){return this.childNodes.push(e),e.nodeType===1&&this.children.push(e),e.parentNode=this,e}insertBefore(e,t){if(!t)return this.appendChild(e);let n=this.childNodes.indexOf(t);if(n!==-1&&(this.childNodes.splice(n,0,e),e.nodeType===1)){let n=this.children.indexOf(t);n!==-1&&this.children.splice(n,0,e)}return e.parentNode=this,e}removeChild(e){let t=this.childNodes.indexOf(e);if(t!==-1&&this.childNodes.splice(t,1),e.nodeType===1){let t=this.children.indexOf(e);t!==-1&&this.children.splice(t,1)}return e.parentNode=null,e}replaceChild(e,t){let n=this.childNodes.indexOf(t);if(n!==-1&&(this.childNodes[n]=e,t.nodeType===1&&e.nodeType===1)){let n=this.children.indexOf(t);n!==-1&&(this.children[n]=e)}return e.parentNode=this,t.parentNode=null,e}querySelector(){return null}querySelectorAll(){return[]}},r=class{head;body;_listeners;constructor(){this.head=new e.t(`head`),this.body=new e.t(`body`),this._listeners=new Map}createElement(t,n){return new e.t(t)}createElementNS(t,n,r){let i=new e.t(n);return i.namespaceURI=t,i}createTextNode(e){return new t(e)}createComment(e){return{nodeType:8,nodeName:`#comment`,data:e,textContent:e,nodeValue:e,parentNode:null,nextSibling:null,previousSibling:null}}createDocumentFragment(){return new n}querySelector(e){if(e.startsWith(`#`)){let t=e.slice(1);if(t===`nuclo-styles`&&this.head.children){for(let e of this.head.children)if(e.id===t)return e}}return null}querySelectorAll(e){return[]}addEventListener(e,t,n){this._listeners.has(e)||this._listeners.set(e,new Map),this._listeners.get(e).set(t,{listener:t,options:n})}removeEventListener(e,t,n){let r=this._listeners.get(e);r&&(r.delete(t),r.size===0&&this._listeners.delete(e))}dispatchEvent(e){let t=this._listeners.get(e.type);if(t){let n=Array.from(t.values());for(let t=0;t<n.length;t++){let{listener:r}=n[t];try{r(e)}catch(e){console.error(`Error in event listener:`,e)}}}return!0}contains(e){return!1}};const i=globalThis.document||new r;var a=class{type;bubbles;cancelable;composed;currentTarget=null;defaultPrevented=!1;eventPhase=0;isTrusted=!1;target=null;timeStamp;AT_TARGET=2;BUBBLING_PHASE=3;CAPTURING_PHASE=1;NONE=0;returnValue=!0;srcElement=null;cancelBubble=!1;constructor(e,t){this.type=e,this.bubbles=t?.bubbles||!1,this.cancelable=t?.cancelable||!1,this.composed=t?.composed||!1,this.timeStamp=Date.now()}composedPath(){return[]}initEvent(e,t,n){}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopImmediatePropagation(){this.cancelBubble=!0}stopPropagation(){this.cancelBubble=!0}},o=class extends a{detail;constructor(e,t){super(e,t),this.detail=t?.detail}initCustomEvent(e,t,n,r){}};const s=globalThis.Event||a,c=globalThis.CustomEvent||o,l=e.n,u=e.t,d=e.t;if(typeof window>`u`&&typeof globalThis<`u`){let t=globalThis;t.document||=i,t.Event||=s,t.CustomEvent||=c,t.Node||=e.n,t.Element||=e.t,t.HTMLElement||=e.t}exports.CustomEvent=c,exports.Element=u,exports.Event=s,exports.HTMLElement=d,exports.Node=l,exports.NucloCustomEvent=o,exports.NucloDocument=r,exports.NucloElement=e.t,exports.NucloEvent=a,exports.NucloNode=e.n,exports.NucloText=t,exports.document=i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../Element-BUdteOsZ.cjs");var t=class{nodeType=3;nodeName=`#text`;data;textContent;parentNode=null;constructor(e){this.data=e,this.textContent=e}get nodeValue(){return this.data}set nodeValue(e){this.data=e,this.textContent=e}},n=class{nodeType=11;nodeName=`#document-fragment`;childNodes=[];children=[];textContent=``;get firstChild(){return this.childNodes.length>0?this.childNodes[0]:null}get lastChild(){return this.childNodes.length>0?this.childNodes[this.childNodes.length-1]:null}appendChild(e){return this.childNodes.push(e),e.nodeType===1&&this.children.push(e),e.parentNode=this,e}insertBefore(e,t){if(!t)return this.appendChild(e);let n=this.childNodes.indexOf(t);if(n!==-1&&(this.childNodes.splice(n,0,e),e.nodeType===1)){let n=this.children.indexOf(t);n!==-1&&this.children.splice(n,0,e)}return e.parentNode=this,e}removeChild(e){let t=this.childNodes.indexOf(e);if(t!==-1&&this.childNodes.splice(t,1),e.nodeType===1){let t=this.children.indexOf(e);t!==-1&&this.children.splice(t,1)}return e.parentNode=null,e}replaceChild(e,t){let n=this.childNodes.indexOf(t);if(n!==-1&&(this.childNodes[n]=e,t.nodeType===1&&e.nodeType===1)){let n=this.children.indexOf(t);n!==-1&&(this.children[n]=e)}return e.parentNode=this,t.parentNode=null,e}querySelector(){return null}querySelectorAll(){return[]}},r=class{head;body;_listeners;constructor(){this.head=new e.t(`head`),this.body=new e.t(`body`),this._listeners=/* @__PURE__ */ new Map}createElement(t,n){return new e.t(t)}createElementNS(t,n,r){let i=new e.t(n);return i.namespaceURI=t,i}createTextNode(e){return new t(e)}createComment(e){return{nodeType:8,nodeName:`#comment`,data:e,textContent:e,nodeValue:e,parentNode:null,nextSibling:null,previousSibling:null}}createDocumentFragment(){return new n}querySelector(e){if(e.startsWith(`#`)){let t=e.slice(1);if(t===`nuclo-styles`&&this.head.children){for(let e of this.head.children)if(e.id===t)return e}}return null}querySelectorAll(e){return[]}addEventListener(e,t,n){this._listeners.has(e)||this._listeners.set(e,/* @__PURE__ */ new Map),this._listeners.get(e).set(t,{listener:t,options:n})}removeEventListener(e,t,n){let r=this._listeners.get(e);r&&(r.delete(t),r.size===0&&this._listeners.delete(e))}dispatchEvent(e){let t=this._listeners.get(e.type);if(t){let n=Array.from(t.values());for(let t=0;t<n.length;t++){let{listener:r}=n[t];try{r(e)}catch(e){console.error(`Error in event listener:`,e)}}}return!0}contains(e){return!1}};const i=globalThis.document||new r;var a=class{type;bubbles;cancelable;composed;currentTarget=null;defaultPrevented=!1;eventPhase=0;isTrusted=!1;target=null;timeStamp;AT_TARGET=2;BUBBLING_PHASE=3;CAPTURING_PHASE=1;NONE=0;returnValue=!0;srcElement=null;cancelBubble=!1;constructor(e,t){this.type=e,this.bubbles=t?.bubbles||!1,this.cancelable=t?.cancelable||!1,this.composed=t?.composed||!1,this.timeStamp=Date.now()}composedPath(){return[]}initEvent(e,t,n){}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopImmediatePropagation(){this.cancelBubble=!0}stopPropagation(){this.cancelBubble=!0}},o=class extends a{detail;constructor(e,t){super(e,t),this.detail=t?.detail}initCustomEvent(e,t,n,r){}};const s=globalThis.Event||a,c=globalThis.CustomEvent||o,l=e.n,u=e.t,d=e.t;if(typeof window>`u`&&typeof globalThis<`u`){let t=globalThis;t.document||=i,t.Event||=s,t.CustomEvent||=c,t.Node||=e.n,t.Element||=e.t,t.HTMLElement||=e.t}exports.CustomEvent=c,exports.Element=u,exports.Event=s,exports.HTMLElement=d,exports.Node=l,exports.NucloCustomEvent=o,exports.NucloDocument=r,exports.NucloElement=e.t,exports.NucloEvent=a,exports.NucloNode=e.n,exports.NucloText=t,exports.document=i;
2
2
  //# sourceMappingURL=nuclo.polyfill.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"nuclo.polyfill.cjs","names":["NucloElement","NucloNode","NucloElement"],"sources":["../../src/polyfill/Text.ts","../../src/polyfill/Document.ts","../../src/polyfill/Event.ts","../../src/polyfill/index.ts"],"sourcesContent":["export class NucloText {\n nodeType = 3; // Node.TEXT_NODE\n nodeName = '#text';\n data: string;\n textContent: string;\n parentNode: unknown = null;\n \n constructor(data: string) {\n this.data = data;\n this.textContent = data;\n }\n \n get nodeValue(): string {\n return this.data;\n }\n \n set nodeValue(value: string) {\n this.data = value;\n this.textContent = value;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NucloElement } from './Element';\nimport { NucloText } from './Text';\n\n/**\n * Lightweight DocumentFragment for SSR — prototype methods instead of per-instance closures.\n */\nclass SSRDocumentFragment {\n nodeType: number = 11;\n nodeName: string = '#document-fragment';\n childNodes: Node[] = [];\n children: Element[] = [];\n textContent: string = '';\n\n get firstChild(): Node | null {\n return this.childNodes.length > 0 ? this.childNodes[0] : null;\n }\n\n get lastChild(): Node | null {\n return this.childNodes.length > 0 ? this.childNodes[this.childNodes.length - 1] : null;\n }\n\n appendChild<T extends Node>(child: T): T {\n this.childNodes.push(child);\n if ((child as any).nodeType === 1) {\n this.children.push(child as unknown as Element);\n }\n (child as any).parentNode = this;\n return child;\n }\n\n insertBefore<T extends Node>(newNode: T, refNode: Node | null): T {\n if (!refNode) return this.appendChild(newNode);\n const index = this.childNodes.indexOf(refNode);\n if (index !== -1) {\n this.childNodes.splice(index, 0, newNode);\n if ((newNode as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(refNode as Element);\n if (elementIndex !== -1) {\n this.children.splice(elementIndex, 0, newNode as unknown as Element);\n }\n }\n }\n (newNode as any).parentNode = this;\n return newNode;\n }\n\n removeChild<T extends Node>(child: T): T {\n const index = this.childNodes.indexOf(child);\n if (index !== -1) this.childNodes.splice(index, 1);\n if ((child as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(child as unknown as Element);\n if (elementIndex !== -1) this.children.splice(elementIndex, 1);\n }\n (child as any).parentNode = null;\n return child;\n }\n\n replaceChild<T extends Node>(newChild: T, oldChild: Node): T {\n const index = this.childNodes.indexOf(oldChild);\n if (index !== -1) {\n this.childNodes[index] = newChild;\n if ((oldChild as any).nodeType === 1 && (newChild as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(oldChild as Element);\n if (elementIndex !== -1) {\n this.children[elementIndex] = newChild as unknown as Element;\n }\n }\n }\n (newChild as any).parentNode = this;\n (oldChild as any).parentNode = null;\n return newChild;\n }\n\n querySelector(): null { return null; }\n querySelectorAll(): NodeListOf<Element> { return [] as unknown as NodeListOf<Element>; }\n}\n\nexport class NucloDocument {\n head: ExpandedElement;\n body: ExpandedElement;\n private _listeners: Map<string, Map<EventListener, { listener: EventListener; options?: boolean | AddEventListenerOptions }>>;\n \n constructor() {\n this.head = new NucloElement('head') as unknown as ExpandedElement;\n this.body = new NucloElement('body') as unknown as ExpandedElement;\n this._listeners = new Map();\n }\n \n createElement(tagName: string, _options?: unknown): ExpandedElement {\n return new NucloElement(tagName) as unknown as ExpandedElement;\n }\n \n createElementNS(namespace: string, tagName: string, _options?: unknown): ExpandedElement {\n const element = new NucloElement(tagName) as unknown as ExpandedElement;\n (element as any).namespaceURI = namespace;\n return element;\n }\n \n createTextNode(data: string): Text {\n return new NucloText(data) as unknown as Text;\n }\n \n createComment(data: string): Comment {\n const comment = {\n nodeType: 8,\n nodeName: '#comment',\n data,\n textContent: data,\n nodeValue: data,\n parentNode: null,\n nextSibling: null,\n previousSibling: null\n };\n return comment as unknown as Comment;\n }\n \n createDocumentFragment(): DocumentFragment {\n return new SSRDocumentFragment() as unknown as DocumentFragment;\n }\n \n querySelector(selector: string): Element | null {\n // Simple implementation - only supports ID selector for #nuclo-styles\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n if (id === 'nuclo-styles' && this.head.children) {\n for (const child of this.head.children) {\n if ((child as any).id === id) {\n return child as unknown as Element;\n }\n }\n }\n }\n return null;\n }\n \n querySelectorAll(_selector: string): NodeListOf<Element> {\n return [] as unknown as NodeListOf<Element>;\n }\n \n addEventListener(type: string, listener: EventListener, options?: boolean | AddEventListenerOptions): void {\n if (!this._listeners.has(type)) {\n this._listeners.set(type, new Map());\n }\n const listenersMap = this._listeners.get(type)!;\n listenersMap.set(listener, { listener, options });\n }\n \n removeEventListener(type: string, listener: EventListener, _options?: boolean | AddEventListenerOptions): void {\n const listeners = this._listeners.get(type);\n if (listeners) {\n listeners.delete(listener);\n // Clean up empty maps to prevent memory leaks\n if (listeners.size === 0) {\n this._listeners.delete(type);\n }\n }\n }\n \n dispatchEvent(event: Event): boolean {\n const listeners = this._listeners.get(event.type);\n if (listeners) {\n // Create a copy to avoid issues if listeners are modified during dispatch\n const listenersCopy = Array.from(listeners.values());\n for (let i = 0; i < listenersCopy.length; i++) {\n const { listener } = listenersCopy[i];\n try {\n listener(event);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error in event listener:', error);\n }\n }\n }\n return true;\n }\n \n contains(_node: Node): boolean {\n return false;\n }\n}\n\nexport const document = globalThis.document || new NucloDocument();","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class NucloEvent implements Event {\n type: string;\n bubbles: boolean;\n cancelable: boolean;\n composed: boolean;\n currentTarget: EventTarget | null = null;\n defaultPrevented: boolean = false;\n eventPhase: number = 0;\n isTrusted: boolean = false;\n target: EventTarget | null = null;\n timeStamp: number;\n readonly AT_TARGET = 2;\n readonly BUBBLING_PHASE = 3;\n readonly CAPTURING_PHASE = 1;\n readonly NONE = 0;\n returnValue: boolean = true;\n srcElement: EventTarget | null = null;\n cancelBubble: boolean = false;\n \n constructor(type: string, eventInitDict?: EventInit) {\n this.type = type;\n this.bubbles = eventInitDict?.bubbles || false;\n this.cancelable = eventInitDict?.cancelable || false;\n this.composed = eventInitDict?.composed || false;\n this.timeStamp = Date.now();\n }\n \n composedPath(): EventTarget[] {\n return [];\n }\n \n initEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean): void {\n // Legacy method - no-op\n }\n \n preventDefault(): void {\n if (this.cancelable) {\n this.defaultPrevented = true;\n }\n }\n \n stopImmediatePropagation(): void {\n this.cancelBubble = true;\n }\n \n stopPropagation(): void {\n this.cancelBubble = true;\n }\n}\n\nexport class NucloCustomEvent<T = any> extends NucloEvent implements CustomEvent<T> {\n detail: T;\n \n constructor(type: string, eventInitDict?: CustomEventInit<T>) {\n super(type, eventInitDict);\n this.detail = eventInitDict?.detail as T;\n }\n \n initCustomEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean, _detail?: T): void {\n // Legacy method - no-op\n }\n}\n\n// Export polyfills if browser globals don't exist\nexport const Event = globalThis.Event || NucloEvent;\nexport const CustomEvent = globalThis.CustomEvent || NucloCustomEvent;\n","/**\n * Polyfills for Node.js environments\n * \n * This module provides minimal browser API polyfills to allow Nuclo to run in Node.js\n * for server-side rendering (SSR) scenarios.\n * \n * To use in Node.js:\n * ```typescript\n * import 'nuclo/polyfill';\n * // or\n * import { document, Event, CustomEvent } from 'nuclo/polyfill';\n * ```\n */\n\nexport { NucloDocument, document } from './Document';\nexport { NucloElement } from './Element';\nexport { NucloText } from './Text';\nexport { NucloEvent, NucloCustomEvent, Event, CustomEvent } from './Event';\nexport { NucloNode } from './Node';\n\n// Import for local use\nimport { NucloElement } from './Element';\nimport { NucloNode } from './Node';\nimport { document } from './Document';\nimport { Event, CustomEvent } from './Event';\n\nexport const Node = NucloNode;\nexport const Element = NucloElement;\nexport const HTMLElement = NucloElement;\n\n// Auto-apply polyfills to globalThis if in Node environment (synchronous — no top-level await)\nif (typeof window === 'undefined' && typeof globalThis !== 'undefined') {\n interface GlobalWithPolyfills {\n document?: typeof document;\n Event?: typeof Event;\n CustomEvent?: typeof CustomEvent;\n Node?: typeof NucloNode;\n Element?: typeof NucloElement;\n HTMLElement?: typeof NucloElement;\n }\n\n const g = globalThis as unknown as GlobalWithPolyfills;\n\n if (!g.document) g.document = document;\n if (!g.Event) g.Event = Event;\n if (!g.CustomEvent) g.CustomEvent = CustomEvent;\n if (!g.Node) g.Node = NucloNode;\n if (!g.Element) g.Element = NucloElement;\n if (!g.HTMLElement) g.HTMLElement = NucloElement;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"nuclo.polyfill.cjs","names":["NucloElement","NucloNode","NucloElement"],"sources":["../../src/polyfill/Text.ts","../../src/polyfill/Document.ts","../../src/polyfill/Event.ts","../../src/polyfill/index.ts"],"sourcesContent":["export class NucloText {\n nodeType = 3; // Node.TEXT_NODE\n nodeName = '#text';\n data: string;\n textContent: string;\n parentNode: unknown = null;\n \n constructor(data: string) {\n this.data = data;\n this.textContent = data;\n }\n \n get nodeValue(): string {\n return this.data;\n }\n \n set nodeValue(value: string) {\n this.data = value;\n this.textContent = value;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NucloElement } from './Element';\nimport { NucloText } from './Text';\n\n/**\n * Lightweight DocumentFragment for SSR — prototype methods instead of per-instance closures.\n */\nclass SSRDocumentFragment {\n nodeType: number = 11;\n nodeName: string = '#document-fragment';\n childNodes: Node[] = [];\n children: Element[] = [];\n textContent: string = '';\n\n get firstChild(): Node | null {\n return this.childNodes.length > 0 ? this.childNodes[0] : null;\n }\n\n get lastChild(): Node | null {\n return this.childNodes.length > 0 ? this.childNodes[this.childNodes.length - 1] : null;\n }\n\n appendChild<T extends Node>(child: T): T {\n this.childNodes.push(child);\n if ((child as any).nodeType === 1) {\n this.children.push(child as unknown as Element);\n }\n (child as any).parentNode = this;\n return child;\n }\n\n insertBefore<T extends Node>(newNode: T, refNode: Node | null): T {\n if (!refNode) return this.appendChild(newNode);\n const index = this.childNodes.indexOf(refNode);\n if (index !== -1) {\n this.childNodes.splice(index, 0, newNode);\n if ((newNode as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(refNode as Element);\n if (elementIndex !== -1) {\n this.children.splice(elementIndex, 0, newNode as unknown as Element);\n }\n }\n }\n (newNode as any).parentNode = this;\n return newNode;\n }\n\n removeChild<T extends Node>(child: T): T {\n const index = this.childNodes.indexOf(child);\n if (index !== -1) this.childNodes.splice(index, 1);\n if ((child as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(child as unknown as Element);\n if (elementIndex !== -1) this.children.splice(elementIndex, 1);\n }\n (child as any).parentNode = null;\n return child;\n }\n\n replaceChild<T extends Node>(newChild: T, oldChild: Node): T {\n const index = this.childNodes.indexOf(oldChild);\n if (index !== -1) {\n this.childNodes[index] = newChild;\n if ((oldChild as any).nodeType === 1 && (newChild as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(oldChild as Element);\n if (elementIndex !== -1) {\n this.children[elementIndex] = newChild as unknown as Element;\n }\n }\n }\n (newChild as any).parentNode = this;\n (oldChild as any).parentNode = null;\n return newChild;\n }\n\n querySelector(): null { return null; }\n querySelectorAll(): NodeListOf<Element> { return [] as unknown as NodeListOf<Element>; }\n}\n\nexport class NucloDocument {\n head: ExpandedElement;\n body: ExpandedElement;\n private _listeners: Map<string, Map<EventListener, { listener: EventListener; options?: boolean | AddEventListenerOptions }>>;\n \n constructor() {\n this.head = new NucloElement('head') as unknown as ExpandedElement;\n this.body = new NucloElement('body') as unknown as ExpandedElement;\n this._listeners = new Map();\n }\n \n createElement(tagName: string, _options?: unknown): ExpandedElement {\n return new NucloElement(tagName) as unknown as ExpandedElement;\n }\n \n createElementNS(namespace: string, tagName: string, _options?: unknown): ExpandedElement {\n const element = new NucloElement(tagName) as unknown as ExpandedElement;\n (element as any).namespaceURI = namespace;\n return element;\n }\n \n createTextNode(data: string): Text {\n return new NucloText(data) as unknown as Text;\n }\n \n createComment(data: string): Comment {\n const comment = {\n nodeType: 8,\n nodeName: '#comment',\n data,\n textContent: data,\n nodeValue: data,\n parentNode: null,\n nextSibling: null,\n previousSibling: null\n };\n return comment as unknown as Comment;\n }\n \n createDocumentFragment(): DocumentFragment {\n return new SSRDocumentFragment() as unknown as DocumentFragment;\n }\n \n querySelector(selector: string): Element | null {\n // Simple implementation - only supports ID selector for #nuclo-styles\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n if (id === 'nuclo-styles' && this.head.children) {\n for (const child of this.head.children) {\n if ((child as any).id === id) {\n return child as unknown as Element;\n }\n }\n }\n }\n return null;\n }\n \n querySelectorAll(_selector: string): NodeListOf<Element> {\n return [] as unknown as NodeListOf<Element>;\n }\n \n addEventListener(type: string, listener: EventListener, options?: boolean | AddEventListenerOptions): void {\n if (!this._listeners.has(type)) {\n this._listeners.set(type, new Map());\n }\n const listenersMap = this._listeners.get(type)!;\n listenersMap.set(listener, { listener, options });\n }\n \n removeEventListener(type: string, listener: EventListener, _options?: boolean | AddEventListenerOptions): void {\n const listeners = this._listeners.get(type);\n if (listeners) {\n listeners.delete(listener);\n // Clean up empty maps to prevent memory leaks\n if (listeners.size === 0) {\n this._listeners.delete(type);\n }\n }\n }\n \n dispatchEvent(event: Event): boolean {\n const listeners = this._listeners.get(event.type);\n if (listeners) {\n // Create a copy to avoid issues if listeners are modified during dispatch\n const listenersCopy = Array.from(listeners.values());\n for (let i = 0; i < listenersCopy.length; i++) {\n const { listener } = listenersCopy[i];\n try {\n listener(event);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error in event listener:', error);\n }\n }\n }\n return true;\n }\n \n contains(_node: Node): boolean {\n return false;\n }\n}\n\nexport const document = globalThis.document || new NucloDocument();","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class NucloEvent implements Event {\n type: string;\n bubbles: boolean;\n cancelable: boolean;\n composed: boolean;\n currentTarget: EventTarget | null = null;\n defaultPrevented: boolean = false;\n eventPhase: number = 0;\n isTrusted: boolean = false;\n target: EventTarget | null = null;\n timeStamp: number;\n readonly AT_TARGET = 2;\n readonly BUBBLING_PHASE = 3;\n readonly CAPTURING_PHASE = 1;\n readonly NONE = 0;\n returnValue: boolean = true;\n srcElement: EventTarget | null = null;\n cancelBubble: boolean = false;\n \n constructor(type: string, eventInitDict?: EventInit) {\n this.type = type;\n this.bubbles = eventInitDict?.bubbles || false;\n this.cancelable = eventInitDict?.cancelable || false;\n this.composed = eventInitDict?.composed || false;\n this.timeStamp = Date.now();\n }\n \n composedPath(): EventTarget[] {\n return [];\n }\n \n initEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean): void {\n // Legacy method - no-op\n }\n \n preventDefault(): void {\n if (this.cancelable) {\n this.defaultPrevented = true;\n }\n }\n \n stopImmediatePropagation(): void {\n this.cancelBubble = true;\n }\n \n stopPropagation(): void {\n this.cancelBubble = true;\n }\n}\n\nexport class NucloCustomEvent<T = any> extends NucloEvent implements CustomEvent<T> {\n detail: T;\n \n constructor(type: string, eventInitDict?: CustomEventInit<T>) {\n super(type, eventInitDict);\n this.detail = eventInitDict?.detail as T;\n }\n \n initCustomEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean, _detail?: T): void {\n // Legacy method - no-op\n }\n}\n\n// Export polyfills if browser globals don't exist\nexport const Event = globalThis.Event || NucloEvent;\nexport const CustomEvent = globalThis.CustomEvent || NucloCustomEvent;\n","/**\n * Polyfills for Node.js environments\n * \n * This module provides minimal browser API polyfills to allow Nuclo to run in Node.js\n * for server-side rendering (SSR) scenarios.\n * \n * To use in Node.js:\n * ```typescript\n * import 'nuclo/polyfill';\n * // or\n * import { document, Event, CustomEvent } from 'nuclo/polyfill';\n * ```\n */\n\nexport { NucloDocument, document } from './Document';\nexport { NucloElement } from './Element';\nexport { NucloText } from './Text';\nexport { NucloEvent, NucloCustomEvent, Event, CustomEvent } from './Event';\nexport { NucloNode } from './Node';\n\n// Import for local use\nimport { NucloElement } from './Element';\nimport { NucloNode } from './Node';\nimport { document } from './Document';\nimport { Event, CustomEvent } from './Event';\n\nexport const Node = NucloNode;\nexport const Element = NucloElement;\nexport const HTMLElement = NucloElement;\n\n// Auto-apply polyfills to globalThis if in Node environment (synchronous — no top-level await)\nif (typeof window === 'undefined' && typeof globalThis !== 'undefined') {\n interface GlobalWithPolyfills {\n document?: typeof document;\n Event?: typeof Event;\n CustomEvent?: typeof CustomEvent;\n Node?: typeof NucloNode;\n Element?: typeof NucloElement;\n HTMLElement?: typeof NucloElement;\n }\n\n const g = globalThis as unknown as GlobalWithPolyfills;\n\n if (!g.document) g.document = document;\n if (!g.Event) g.Event = Event;\n if (!g.CustomEvent) g.CustomEvent = CustomEvent;\n if (!g.Node) g.Node = NucloNode;\n if (!g.Element) g.Element = NucloElement;\n if (!g.HTMLElement) g.HTMLElement = NucloElement;\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{n as e,t}from"../Element-C3mU75-a.mjs";var n=class{nodeType=3;nodeName=`#text`;data;textContent;parentNode=null;constructor(e){this.data=e,this.textContent=e}get nodeValue(){return this.data}set nodeValue(e){this.data=e,this.textContent=e}},r=class{nodeType=11;nodeName=`#document-fragment`;childNodes=[];children=[];textContent=``;get firstChild(){return this.childNodes.length>0?this.childNodes[0]:null}get lastChild(){return this.childNodes.length>0?this.childNodes[this.childNodes.length-1]:null}appendChild(e){return this.childNodes.push(e),e.nodeType===1&&this.children.push(e),e.parentNode=this,e}insertBefore(e,t){if(!t)return this.appendChild(e);let n=this.childNodes.indexOf(t);if(n!==-1&&(this.childNodes.splice(n,0,e),e.nodeType===1)){let n=this.children.indexOf(t);n!==-1&&this.children.splice(n,0,e)}return e.parentNode=this,e}removeChild(e){let t=this.childNodes.indexOf(e);if(t!==-1&&this.childNodes.splice(t,1),e.nodeType===1){let t=this.children.indexOf(e);t!==-1&&this.children.splice(t,1)}return e.parentNode=null,e}replaceChild(e,t){let n=this.childNodes.indexOf(t);if(n!==-1&&(this.childNodes[n]=e,t.nodeType===1&&e.nodeType===1)){let n=this.children.indexOf(t);n!==-1&&(this.children[n]=e)}return e.parentNode=this,t.parentNode=null,e}querySelector(){return null}querySelectorAll(){return[]}},i=class{head;body;_listeners;constructor(){this.head=new t(`head`),this.body=new t(`body`),this._listeners=new Map}createElement(e,n){return new t(e)}createElementNS(e,n,r){let i=new t(n);return i.namespaceURI=e,i}createTextNode(e){return new n(e)}createComment(e){return{nodeType:8,nodeName:`#comment`,data:e,textContent:e,nodeValue:e,parentNode:null,nextSibling:null,previousSibling:null}}createDocumentFragment(){return new r}querySelector(e){if(e.startsWith(`#`)){let t=e.slice(1);if(t===`nuclo-styles`&&this.head.children){for(let e of this.head.children)if(e.id===t)return e}}return null}querySelectorAll(e){return[]}addEventListener(e,t,n){this._listeners.has(e)||this._listeners.set(e,new Map),this._listeners.get(e).set(t,{listener:t,options:n})}removeEventListener(e,t,n){let r=this._listeners.get(e);r&&(r.delete(t),r.size===0&&this._listeners.delete(e))}dispatchEvent(e){let t=this._listeners.get(e.type);if(t){let n=Array.from(t.values());for(let t=0;t<n.length;t++){let{listener:r}=n[t];try{r(e)}catch(e){console.error(`Error in event listener:`,e)}}}return!0}contains(e){return!1}};const a=globalThis.document||new i;var o=class{type;bubbles;cancelable;composed;currentTarget=null;defaultPrevented=!1;eventPhase=0;isTrusted=!1;target=null;timeStamp;AT_TARGET=2;BUBBLING_PHASE=3;CAPTURING_PHASE=1;NONE=0;returnValue=!0;srcElement=null;cancelBubble=!1;constructor(e,t){this.type=e,this.bubbles=t?.bubbles||!1,this.cancelable=t?.cancelable||!1,this.composed=t?.composed||!1,this.timeStamp=Date.now()}composedPath(){return[]}initEvent(e,t,n){}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopImmediatePropagation(){this.cancelBubble=!0}stopPropagation(){this.cancelBubble=!0}},s=class extends o{detail;constructor(e,t){super(e,t),this.detail=t?.detail}initCustomEvent(e,t,n,r){}};const c=globalThis.Event||o,l=globalThis.CustomEvent||s,u=e,d=t,f=t;if(typeof window>`u`&&typeof globalThis<`u`){let n=globalThis;n.document||=a,n.Event||=c,n.CustomEvent||=l,n.Node||=e,n.Element||=t,n.HTMLElement||=t}export{l as CustomEvent,d as Element,c as Event,f as HTMLElement,u as Node,s as NucloCustomEvent,i as NucloDocument,t as NucloElement,o as NucloEvent,e as NucloNode,n as NucloText,a as document};
1
+ import{n as e,t}from"../Element-Djosl17E.mjs";var n=class{nodeType=3;nodeName=`#text`;data;textContent;parentNode=null;constructor(e){this.data=e,this.textContent=e}get nodeValue(){return this.data}set nodeValue(e){this.data=e,this.textContent=e}},r=class{nodeType=11;nodeName=`#document-fragment`;childNodes=[];children=[];textContent=``;get firstChild(){return this.childNodes.length>0?this.childNodes[0]:null}get lastChild(){return this.childNodes.length>0?this.childNodes[this.childNodes.length-1]:null}appendChild(e){return this.childNodes.push(e),e.nodeType===1&&this.children.push(e),e.parentNode=this,e}insertBefore(e,t){if(!t)return this.appendChild(e);let n=this.childNodes.indexOf(t);if(n!==-1&&(this.childNodes.splice(n,0,e),e.nodeType===1)){let n=this.children.indexOf(t);n!==-1&&this.children.splice(n,0,e)}return e.parentNode=this,e}removeChild(e){let t=this.childNodes.indexOf(e);if(t!==-1&&this.childNodes.splice(t,1),e.nodeType===1){let t=this.children.indexOf(e);t!==-1&&this.children.splice(t,1)}return e.parentNode=null,e}replaceChild(e,t){let n=this.childNodes.indexOf(t);if(n!==-1&&(this.childNodes[n]=e,t.nodeType===1&&e.nodeType===1)){let n=this.children.indexOf(t);n!==-1&&(this.children[n]=e)}return e.parentNode=this,t.parentNode=null,e}querySelector(){return null}querySelectorAll(){return[]}},i=class{head;body;_listeners;constructor(){this.head=new t(`head`),this.body=new t(`body`),this._listeners=/* @__PURE__ */ new Map}createElement(e,n){return new t(e)}createElementNS(e,n,r){let i=new t(n);return i.namespaceURI=e,i}createTextNode(e){return new n(e)}createComment(e){return{nodeType:8,nodeName:`#comment`,data:e,textContent:e,nodeValue:e,parentNode:null,nextSibling:null,previousSibling:null}}createDocumentFragment(){return new r}querySelector(e){if(e.startsWith(`#`)){let t=e.slice(1);if(t===`nuclo-styles`&&this.head.children){for(let e of this.head.children)if(e.id===t)return e}}return null}querySelectorAll(e){return[]}addEventListener(e,t,n){this._listeners.has(e)||this._listeners.set(e,/* @__PURE__ */ new Map),this._listeners.get(e).set(t,{listener:t,options:n})}removeEventListener(e,t,n){let r=this._listeners.get(e);r&&(r.delete(t),r.size===0&&this._listeners.delete(e))}dispatchEvent(e){let t=this._listeners.get(e.type);if(t){let n=Array.from(t.values());for(let t=0;t<n.length;t++){let{listener:r}=n[t];try{r(e)}catch(e){console.error(`Error in event listener:`,e)}}}return!0}contains(e){return!1}};const a=globalThis.document||new i;var o=class{type;bubbles;cancelable;composed;currentTarget=null;defaultPrevented=!1;eventPhase=0;isTrusted=!1;target=null;timeStamp;AT_TARGET=2;BUBBLING_PHASE=3;CAPTURING_PHASE=1;NONE=0;returnValue=!0;srcElement=null;cancelBubble=!1;constructor(e,t){this.type=e,this.bubbles=t?.bubbles||!1,this.cancelable=t?.cancelable||!1,this.composed=t?.composed||!1,this.timeStamp=Date.now()}composedPath(){return[]}initEvent(e,t,n){}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopImmediatePropagation(){this.cancelBubble=!0}stopPropagation(){this.cancelBubble=!0}},s=class extends o{detail;constructor(e,t){super(e,t),this.detail=t?.detail}initCustomEvent(e,t,n,r){}};const c=globalThis.Event||o,l=globalThis.CustomEvent||s,u=e,d=t,f=t;if(typeof window>`u`&&typeof globalThis<`u`){let n=globalThis;n.document||=a,n.Event||=c,n.CustomEvent||=l,n.Node||=e,n.Element||=t,n.HTMLElement||=t}export{l as CustomEvent,d as Element,c as Event,f as HTMLElement,u as Node,s as NucloCustomEvent,i as NucloDocument,t as NucloElement,o as NucloEvent,e as NucloNode,n as NucloText,a as document};
2
2
  //# sourceMappingURL=nuclo.polyfill.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"nuclo.polyfill.mjs","names":[],"sources":["../../src/polyfill/Text.ts","../../src/polyfill/Document.ts","../../src/polyfill/Event.ts","../../src/polyfill/index.ts"],"sourcesContent":["export class NucloText {\n nodeType = 3; // Node.TEXT_NODE\n nodeName = '#text';\n data: string;\n textContent: string;\n parentNode: unknown = null;\n \n constructor(data: string) {\n this.data = data;\n this.textContent = data;\n }\n \n get nodeValue(): string {\n return this.data;\n }\n \n set nodeValue(value: string) {\n this.data = value;\n this.textContent = value;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NucloElement } from './Element';\nimport { NucloText } from './Text';\n\n/**\n * Lightweight DocumentFragment for SSR — prototype methods instead of per-instance closures.\n */\nclass SSRDocumentFragment {\n nodeType: number = 11;\n nodeName: string = '#document-fragment';\n childNodes: Node[] = [];\n children: Element[] = [];\n textContent: string = '';\n\n get firstChild(): Node | null {\n return this.childNodes.length > 0 ? this.childNodes[0] : null;\n }\n\n get lastChild(): Node | null {\n return this.childNodes.length > 0 ? this.childNodes[this.childNodes.length - 1] : null;\n }\n\n appendChild<T extends Node>(child: T): T {\n this.childNodes.push(child);\n if ((child as any).nodeType === 1) {\n this.children.push(child as unknown as Element);\n }\n (child as any).parentNode = this;\n return child;\n }\n\n insertBefore<T extends Node>(newNode: T, refNode: Node | null): T {\n if (!refNode) return this.appendChild(newNode);\n const index = this.childNodes.indexOf(refNode);\n if (index !== -1) {\n this.childNodes.splice(index, 0, newNode);\n if ((newNode as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(refNode as Element);\n if (elementIndex !== -1) {\n this.children.splice(elementIndex, 0, newNode as unknown as Element);\n }\n }\n }\n (newNode as any).parentNode = this;\n return newNode;\n }\n\n removeChild<T extends Node>(child: T): T {\n const index = this.childNodes.indexOf(child);\n if (index !== -1) this.childNodes.splice(index, 1);\n if ((child as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(child as unknown as Element);\n if (elementIndex !== -1) this.children.splice(elementIndex, 1);\n }\n (child as any).parentNode = null;\n return child;\n }\n\n replaceChild<T extends Node>(newChild: T, oldChild: Node): T {\n const index = this.childNodes.indexOf(oldChild);\n if (index !== -1) {\n this.childNodes[index] = newChild;\n if ((oldChild as any).nodeType === 1 && (newChild as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(oldChild as Element);\n if (elementIndex !== -1) {\n this.children[elementIndex] = newChild as unknown as Element;\n }\n }\n }\n (newChild as any).parentNode = this;\n (oldChild as any).parentNode = null;\n return newChild;\n }\n\n querySelector(): null { return null; }\n querySelectorAll(): NodeListOf<Element> { return [] as unknown as NodeListOf<Element>; }\n}\n\nexport class NucloDocument {\n head: ExpandedElement;\n body: ExpandedElement;\n private _listeners: Map<string, Map<EventListener, { listener: EventListener; options?: boolean | AddEventListenerOptions }>>;\n \n constructor() {\n this.head = new NucloElement('head') as unknown as ExpandedElement;\n this.body = new NucloElement('body') as unknown as ExpandedElement;\n this._listeners = new Map();\n }\n \n createElement(tagName: string, _options?: unknown): ExpandedElement {\n return new NucloElement(tagName) as unknown as ExpandedElement;\n }\n \n createElementNS(namespace: string, tagName: string, _options?: unknown): ExpandedElement {\n const element = new NucloElement(tagName) as unknown as ExpandedElement;\n (element as any).namespaceURI = namespace;\n return element;\n }\n \n createTextNode(data: string): Text {\n return new NucloText(data) as unknown as Text;\n }\n \n createComment(data: string): Comment {\n const comment = {\n nodeType: 8,\n nodeName: '#comment',\n data,\n textContent: data,\n nodeValue: data,\n parentNode: null,\n nextSibling: null,\n previousSibling: null\n };\n return comment as unknown as Comment;\n }\n \n createDocumentFragment(): DocumentFragment {\n return new SSRDocumentFragment() as unknown as DocumentFragment;\n }\n \n querySelector(selector: string): Element | null {\n // Simple implementation - only supports ID selector for #nuclo-styles\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n if (id === 'nuclo-styles' && this.head.children) {\n for (const child of this.head.children) {\n if ((child as any).id === id) {\n return child as unknown as Element;\n }\n }\n }\n }\n return null;\n }\n \n querySelectorAll(_selector: string): NodeListOf<Element> {\n return [] as unknown as NodeListOf<Element>;\n }\n \n addEventListener(type: string, listener: EventListener, options?: boolean | AddEventListenerOptions): void {\n if (!this._listeners.has(type)) {\n this._listeners.set(type, new Map());\n }\n const listenersMap = this._listeners.get(type)!;\n listenersMap.set(listener, { listener, options });\n }\n \n removeEventListener(type: string, listener: EventListener, _options?: boolean | AddEventListenerOptions): void {\n const listeners = this._listeners.get(type);\n if (listeners) {\n listeners.delete(listener);\n // Clean up empty maps to prevent memory leaks\n if (listeners.size === 0) {\n this._listeners.delete(type);\n }\n }\n }\n \n dispatchEvent(event: Event): boolean {\n const listeners = this._listeners.get(event.type);\n if (listeners) {\n // Create a copy to avoid issues if listeners are modified during dispatch\n const listenersCopy = Array.from(listeners.values());\n for (let i = 0; i < listenersCopy.length; i++) {\n const { listener } = listenersCopy[i];\n try {\n listener(event);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error in event listener:', error);\n }\n }\n }\n return true;\n }\n \n contains(_node: Node): boolean {\n return false;\n }\n}\n\nexport const document = globalThis.document || new NucloDocument();","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class NucloEvent implements Event {\n type: string;\n bubbles: boolean;\n cancelable: boolean;\n composed: boolean;\n currentTarget: EventTarget | null = null;\n defaultPrevented: boolean = false;\n eventPhase: number = 0;\n isTrusted: boolean = false;\n target: EventTarget | null = null;\n timeStamp: number;\n readonly AT_TARGET = 2;\n readonly BUBBLING_PHASE = 3;\n readonly CAPTURING_PHASE = 1;\n readonly NONE = 0;\n returnValue: boolean = true;\n srcElement: EventTarget | null = null;\n cancelBubble: boolean = false;\n \n constructor(type: string, eventInitDict?: EventInit) {\n this.type = type;\n this.bubbles = eventInitDict?.bubbles || false;\n this.cancelable = eventInitDict?.cancelable || false;\n this.composed = eventInitDict?.composed || false;\n this.timeStamp = Date.now();\n }\n \n composedPath(): EventTarget[] {\n return [];\n }\n \n initEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean): void {\n // Legacy method - no-op\n }\n \n preventDefault(): void {\n if (this.cancelable) {\n this.defaultPrevented = true;\n }\n }\n \n stopImmediatePropagation(): void {\n this.cancelBubble = true;\n }\n \n stopPropagation(): void {\n this.cancelBubble = true;\n }\n}\n\nexport class NucloCustomEvent<T = any> extends NucloEvent implements CustomEvent<T> {\n detail: T;\n \n constructor(type: string, eventInitDict?: CustomEventInit<T>) {\n super(type, eventInitDict);\n this.detail = eventInitDict?.detail as T;\n }\n \n initCustomEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean, _detail?: T): void {\n // Legacy method - no-op\n }\n}\n\n// Export polyfills if browser globals don't exist\nexport const Event = globalThis.Event || NucloEvent;\nexport const CustomEvent = globalThis.CustomEvent || NucloCustomEvent;\n","/**\n * Polyfills for Node.js environments\n * \n * This module provides minimal browser API polyfills to allow Nuclo to run in Node.js\n * for server-side rendering (SSR) scenarios.\n * \n * To use in Node.js:\n * ```typescript\n * import 'nuclo/polyfill';\n * // or\n * import { document, Event, CustomEvent } from 'nuclo/polyfill';\n * ```\n */\n\nexport { NucloDocument, document } from './Document';\nexport { NucloElement } from './Element';\nexport { NucloText } from './Text';\nexport { NucloEvent, NucloCustomEvent, Event, CustomEvent } from './Event';\nexport { NucloNode } from './Node';\n\n// Import for local use\nimport { NucloElement } from './Element';\nimport { NucloNode } from './Node';\nimport { document } from './Document';\nimport { Event, CustomEvent } from './Event';\n\nexport const Node = NucloNode;\nexport const Element = NucloElement;\nexport const HTMLElement = NucloElement;\n\n// Auto-apply polyfills to globalThis if in Node environment (synchronous — no top-level await)\nif (typeof window === 'undefined' && typeof globalThis !== 'undefined') {\n interface GlobalWithPolyfills {\n document?: typeof document;\n Event?: typeof Event;\n CustomEvent?: typeof CustomEvent;\n Node?: typeof NucloNode;\n Element?: typeof NucloElement;\n HTMLElement?: typeof NucloElement;\n }\n\n const g = globalThis as unknown as GlobalWithPolyfills;\n\n if (!g.document) g.document = document;\n if (!g.Event) g.Event = Event;\n if (!g.CustomEvent) g.CustomEvent = CustomEvent;\n if (!g.Node) g.Node = NucloNode;\n if (!g.Element) g.Element = NucloElement;\n if (!g.HTMLElement) g.HTMLElement = NucloElement;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"nuclo.polyfill.mjs","names":[],"sources":["../../src/polyfill/Text.ts","../../src/polyfill/Document.ts","../../src/polyfill/Event.ts","../../src/polyfill/index.ts"],"sourcesContent":["export class NucloText {\n nodeType = 3; // Node.TEXT_NODE\n nodeName = '#text';\n data: string;\n textContent: string;\n parentNode: unknown = null;\n \n constructor(data: string) {\n this.data = data;\n this.textContent = data;\n }\n \n get nodeValue(): string {\n return this.data;\n }\n \n set nodeValue(value: string) {\n this.data = value;\n this.textContent = value;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NucloElement } from './Element';\nimport { NucloText } from './Text';\n\n/**\n * Lightweight DocumentFragment for SSR — prototype methods instead of per-instance closures.\n */\nclass SSRDocumentFragment {\n nodeType: number = 11;\n nodeName: string = '#document-fragment';\n childNodes: Node[] = [];\n children: Element[] = [];\n textContent: string = '';\n\n get firstChild(): Node | null {\n return this.childNodes.length > 0 ? this.childNodes[0] : null;\n }\n\n get lastChild(): Node | null {\n return this.childNodes.length > 0 ? this.childNodes[this.childNodes.length - 1] : null;\n }\n\n appendChild<T extends Node>(child: T): T {\n this.childNodes.push(child);\n if ((child as any).nodeType === 1) {\n this.children.push(child as unknown as Element);\n }\n (child as any).parentNode = this;\n return child;\n }\n\n insertBefore<T extends Node>(newNode: T, refNode: Node | null): T {\n if (!refNode) return this.appendChild(newNode);\n const index = this.childNodes.indexOf(refNode);\n if (index !== -1) {\n this.childNodes.splice(index, 0, newNode);\n if ((newNode as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(refNode as Element);\n if (elementIndex !== -1) {\n this.children.splice(elementIndex, 0, newNode as unknown as Element);\n }\n }\n }\n (newNode as any).parentNode = this;\n return newNode;\n }\n\n removeChild<T extends Node>(child: T): T {\n const index = this.childNodes.indexOf(child);\n if (index !== -1) this.childNodes.splice(index, 1);\n if ((child as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(child as unknown as Element);\n if (elementIndex !== -1) this.children.splice(elementIndex, 1);\n }\n (child as any).parentNode = null;\n return child;\n }\n\n replaceChild<T extends Node>(newChild: T, oldChild: Node): T {\n const index = this.childNodes.indexOf(oldChild);\n if (index !== -1) {\n this.childNodes[index] = newChild;\n if ((oldChild as any).nodeType === 1 && (newChild as any).nodeType === 1) {\n const elementIndex = this.children.indexOf(oldChild as Element);\n if (elementIndex !== -1) {\n this.children[elementIndex] = newChild as unknown as Element;\n }\n }\n }\n (newChild as any).parentNode = this;\n (oldChild as any).parentNode = null;\n return newChild;\n }\n\n querySelector(): null { return null; }\n querySelectorAll(): NodeListOf<Element> { return [] as unknown as NodeListOf<Element>; }\n}\n\nexport class NucloDocument {\n head: ExpandedElement;\n body: ExpandedElement;\n private _listeners: Map<string, Map<EventListener, { listener: EventListener; options?: boolean | AddEventListenerOptions }>>;\n \n constructor() {\n this.head = new NucloElement('head') as unknown as ExpandedElement;\n this.body = new NucloElement('body') as unknown as ExpandedElement;\n this._listeners = new Map();\n }\n \n createElement(tagName: string, _options?: unknown): ExpandedElement {\n return new NucloElement(tagName) as unknown as ExpandedElement;\n }\n \n createElementNS(namespace: string, tagName: string, _options?: unknown): ExpandedElement {\n const element = new NucloElement(tagName) as unknown as ExpandedElement;\n (element as any).namespaceURI = namespace;\n return element;\n }\n \n createTextNode(data: string): Text {\n return new NucloText(data) as unknown as Text;\n }\n \n createComment(data: string): Comment {\n const comment = {\n nodeType: 8,\n nodeName: '#comment',\n data,\n textContent: data,\n nodeValue: data,\n parentNode: null,\n nextSibling: null,\n previousSibling: null\n };\n return comment as unknown as Comment;\n }\n \n createDocumentFragment(): DocumentFragment {\n return new SSRDocumentFragment() as unknown as DocumentFragment;\n }\n \n querySelector(selector: string): Element | null {\n // Simple implementation - only supports ID selector for #nuclo-styles\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n if (id === 'nuclo-styles' && this.head.children) {\n for (const child of this.head.children) {\n if ((child as any).id === id) {\n return child as unknown as Element;\n }\n }\n }\n }\n return null;\n }\n \n querySelectorAll(_selector: string): NodeListOf<Element> {\n return [] as unknown as NodeListOf<Element>;\n }\n \n addEventListener(type: string, listener: EventListener, options?: boolean | AddEventListenerOptions): void {\n if (!this._listeners.has(type)) {\n this._listeners.set(type, new Map());\n }\n const listenersMap = this._listeners.get(type)!;\n listenersMap.set(listener, { listener, options });\n }\n \n removeEventListener(type: string, listener: EventListener, _options?: boolean | AddEventListenerOptions): void {\n const listeners = this._listeners.get(type);\n if (listeners) {\n listeners.delete(listener);\n // Clean up empty maps to prevent memory leaks\n if (listeners.size === 0) {\n this._listeners.delete(type);\n }\n }\n }\n \n dispatchEvent(event: Event): boolean {\n const listeners = this._listeners.get(event.type);\n if (listeners) {\n // Create a copy to avoid issues if listeners are modified during dispatch\n const listenersCopy = Array.from(listeners.values());\n for (let i = 0; i < listenersCopy.length; i++) {\n const { listener } = listenersCopy[i];\n try {\n listener(event);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error in event listener:', error);\n }\n }\n }\n return true;\n }\n \n contains(_node: Node): boolean {\n return false;\n }\n}\n\nexport const document = globalThis.document || new NucloDocument();","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class NucloEvent implements Event {\n type: string;\n bubbles: boolean;\n cancelable: boolean;\n composed: boolean;\n currentTarget: EventTarget | null = null;\n defaultPrevented: boolean = false;\n eventPhase: number = 0;\n isTrusted: boolean = false;\n target: EventTarget | null = null;\n timeStamp: number;\n readonly AT_TARGET = 2;\n readonly BUBBLING_PHASE = 3;\n readonly CAPTURING_PHASE = 1;\n readonly NONE = 0;\n returnValue: boolean = true;\n srcElement: EventTarget | null = null;\n cancelBubble: boolean = false;\n \n constructor(type: string, eventInitDict?: EventInit) {\n this.type = type;\n this.bubbles = eventInitDict?.bubbles || false;\n this.cancelable = eventInitDict?.cancelable || false;\n this.composed = eventInitDict?.composed || false;\n this.timeStamp = Date.now();\n }\n \n composedPath(): EventTarget[] {\n return [];\n }\n \n initEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean): void {\n // Legacy method - no-op\n }\n \n preventDefault(): void {\n if (this.cancelable) {\n this.defaultPrevented = true;\n }\n }\n \n stopImmediatePropagation(): void {\n this.cancelBubble = true;\n }\n \n stopPropagation(): void {\n this.cancelBubble = true;\n }\n}\n\nexport class NucloCustomEvent<T = any> extends NucloEvent implements CustomEvent<T> {\n detail: T;\n \n constructor(type: string, eventInitDict?: CustomEventInit<T>) {\n super(type, eventInitDict);\n this.detail = eventInitDict?.detail as T;\n }\n \n initCustomEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean, _detail?: T): void {\n // Legacy method - no-op\n }\n}\n\n// Export polyfills if browser globals don't exist\nexport const Event = globalThis.Event || NucloEvent;\nexport const CustomEvent = globalThis.CustomEvent || NucloCustomEvent;\n","/**\n * Polyfills for Node.js environments\n * \n * This module provides minimal browser API polyfills to allow Nuclo to run in Node.js\n * for server-side rendering (SSR) scenarios.\n * \n * To use in Node.js:\n * ```typescript\n * import 'nuclo/polyfill';\n * // or\n * import { document, Event, CustomEvent } from 'nuclo/polyfill';\n * ```\n */\n\nexport { NucloDocument, document } from './Document';\nexport { NucloElement } from './Element';\nexport { NucloText } from './Text';\nexport { NucloEvent, NucloCustomEvent, Event, CustomEvent } from './Event';\nexport { NucloNode } from './Node';\n\n// Import for local use\nimport { NucloElement } from './Element';\nimport { NucloNode } from './Node';\nimport { document } from './Document';\nimport { Event, CustomEvent } from './Event';\n\nexport const Node = NucloNode;\nexport const Element = NucloElement;\nexport const HTMLElement = NucloElement;\n\n// Auto-apply polyfills to globalThis if in Node environment (synchronous — no top-level await)\nif (typeof window === 'undefined' && typeof globalThis !== 'undefined') {\n interface GlobalWithPolyfills {\n document?: typeof document;\n Event?: typeof Event;\n CustomEvent?: typeof CustomEvent;\n Node?: typeof NucloNode;\n Element?: typeof NucloElement;\n HTMLElement?: typeof NucloElement;\n }\n\n const g = globalThis as unknown as GlobalWithPolyfills;\n\n if (!g.document) g.document = document;\n if (!g.Event) g.Event = Event;\n if (!g.CustomEvent) g.CustomEvent = CustomEvent;\n if (!g.Node) g.Node = NucloNode;\n if (!g.Element) g.Element = NucloElement;\n if (!g.HTMLElement) g.HTMLElement = NucloElement;\n}\n"],"mappings":"8CAAA,IAAa,EAAb,KAAuB,CACrB,SAAW,EACX,SAAW,QACX,KACA,YACA,WAAsB,KAEtB,YAAY,EAAc,CACxB,KAAK,KAAO,EACZ,KAAK,YAAc,CACrB,CAEA,IAAI,WAAoB,CACtB,OAAO,KAAK,IACd,CAEA,IAAI,UAAU,EAAe,CAC3B,KAAK,KAAO,EACZ,KAAK,YAAc,CACrB,CACF,ECbM,EAAN,KAA0B,CACxB,SAAmB,GACnB,SAAmB,qBACnB,WAAqB,CAAC,EACtB,SAAsB,CAAC,EACvB,YAAsB,GAEtB,IAAI,YAA0B,CAC5B,OAAO,KAAK,WAAW,OAAS,EAAI,KAAK,WAAW,GAAK,IAC3D,CAEA,IAAI,WAAyB,CAC3B,OAAO,KAAK,WAAW,OAAS,EAAI,KAAK,WAAW,KAAK,WAAW,OAAS,GAAK,IACpF,CAEA,YAA4B,EAAa,CAMvC,OALA,KAAK,WAAW,KAAK,CAAK,EACrB,EAAc,WAAa,GAC9B,KAAK,SAAS,KAAK,CAA2B,EAEhD,EAAe,WAAa,KACrB,CACT,CAEA,aAA6B,EAAY,EAAyB,CAChE,GAAI,CAAC,EAAS,OAAO,KAAK,YAAY,CAAO,EAC7C,IAAM,EAAQ,KAAK,WAAW,QAAQ,CAAO,EAC7C,GAAI,IAAU,KACZ,KAAK,WAAW,OAAO,EAAO,EAAG,CAAO,EACnC,EAAgB,WAAa,GAAG,CACnC,IAAM,EAAe,KAAK,SAAS,QAAQ,CAAkB,EACzD,IAAiB,IACnB,KAAK,SAAS,OAAO,EAAc,EAAG,CAA6B,CAEvE,CAGF,MADA,GAAiB,WAAa,KACvB,CACT,CAEA,YAA4B,EAAa,CACvC,IAAM,EAAQ,KAAK,WAAW,QAAQ,CAAK,EAE3C,GADI,IAAU,IAAI,KAAK,WAAW,OAAO,EAAO,CAAC,EAC5C,EAAc,WAAa,EAAG,CACjC,IAAM,EAAe,KAAK,SAAS,QAAQ,CAA2B,EAClE,IAAiB,IAAI,KAAK,SAAS,OAAO,EAAc,CAAC,CAC/D,CAEA,MADA,GAAe,WAAa,KACrB,CACT,CAEA,aAA6B,EAAa,EAAmB,CAC3D,IAAM,EAAQ,KAAK,WAAW,QAAQ,CAAQ,EAC9C,GAAI,IAAU,KACZ,KAAK,WAAW,GAAS,EACpB,EAAiB,WAAa,GAAM,EAAiB,WAAa,GAAG,CACxE,IAAM,EAAe,KAAK,SAAS,QAAQ,CAAmB,EAC1D,IAAiB,KACnB,KAAK,SAAS,GAAgB,EAElC,CAIF,MAFA,GAAkB,WAAa,KAC/B,EAAkB,WAAa,KACxB,CACT,CAEA,eAAsB,CAAE,OAAO,IAAM,CACrC,kBAAwC,CAAE,MAAO,CAAC,CAAqC,CACzF,EAEa,EAAb,KAA2B,CACzB,KACA,KACA,WAEA,aAAc,CACZ,KAAK,KAAO,IAAI,EAAa,MAAM,EACnC,KAAK,KAAO,IAAI,EAAa,MAAM,EACnC,KAAK,2BAAa,IAAI,GACxB,CAEA,cAAc,EAAiB,EAAqC,CAClE,OAAO,IAAI,EAAa,CAAO,CACjC,CAEA,gBAAgB,EAAmB,EAAiB,EAAqC,CACvF,IAAM,EAAU,IAAI,EAAa,CAAO,EAExC,MADA,GAAiB,aAAe,EACzB,CACT,CAEA,eAAe,EAAoB,CACjC,OAAO,IAAI,EAAU,CAAI,CAC3B,CAEA,cAAc,EAAuB,CAWnC,MAAO,CATL,SAAU,EACV,SAAU,WACV,OACA,YAAa,EACb,UAAW,EACX,WAAY,KACZ,YAAa,KACb,gBAAiB,IAEN,CACf,CAEA,wBAA2C,CACzC,OAAO,IAAI,CACb,CAEA,cAAc,EAAkC,CAE9C,GAAI,EAAS,WAAW,GAAG,EAAG,CAC5B,IAAM,EAAK,EAAS,MAAM,CAAC,EAC3B,GAAI,IAAO,gBAAkB,KAAK,KAAK,SAChC,KAAA,IAAM,KAAS,KAAK,KAAK,SAC5B,GAAK,EAAc,KAAO,EACxB,OAAO,CAAA,CAIf,CACA,OAAO,IACT,CAEA,iBAAiB,EAAwC,CACvD,MAAO,CAAC,CACV,CAEA,iBAAiB,EAAc,EAAyB,EAAmD,CACpG,KAAK,WAAW,IAAI,CAAI,GAC3B,KAAK,WAAW,IAAI,kBAAM,IAAI,GAAK,EAGrC,KAD0B,WAAW,IAAI,CAC9B,CAAC,CAAC,IAAI,EAAU,CAAE,WAAU,SAAQ,CAAC,CAClD,CAEA,oBAAoB,EAAc,EAAyB,EAAoD,CAC7G,IAAM,EAAY,KAAK,WAAW,IAAI,CAAI,EACtC,IACF,EAAU,OAAO,CAAQ,EAErB,EAAU,OAAS,GACrB,KAAK,WAAW,OAAO,CAAI,EAGjC,CAEA,cAAc,EAAuB,CACnC,IAAM,EAAY,KAAK,WAAW,IAAI,EAAM,IAAI,EAChD,GAAI,EAAW,CAEb,IAAM,EAAgB,MAAM,KAAK,EAAU,OAAO,CAAC,EACnD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAc,OAAQ,IAAK,CAC7C,GAAM,CAAE,YAAa,EAAc,GACnC,GAAI,CACF,EAAS,CAAK,CAChB,OAAS,EAAO,CAEd,QAAQ,MAAM,2BAA4B,CAAK,CACjD,CACF,CACF,CACA,MAAO,EACT,CAEA,SAAS,EAAsB,CAC7B,MAAO,EACT,CACF,EAEA,MAAa,EAAW,WAAW,UAAY,IAAI,ECrLnD,IAAa,EAAb,KAAyC,CACvC,KACA,QACA,WACA,SACA,cAAoC,KACpC,iBAA4B,GAC5B,WAAqB,EACrB,UAAqB,GACrB,OAA6B,KAC7B,UACA,UAAqB,EACrB,eAA0B,EAC1B,gBAA2B,EAC3B,KAAgB,EAChB,YAAuB,GACvB,WAAiC,KACjC,aAAwB,GAExB,YAAY,EAAc,EAA2B,CACnD,KAAK,KAAO,EACZ,KAAK,QAAU,GAAe,SAAW,GACzC,KAAK,WAAa,GAAe,YAAc,GAC/C,KAAK,SAAW,GAAe,UAAY,GAC3C,KAAK,UAAY,KAAK,IAAI,CAC5B,CAEA,cAA8B,CAC5B,MAAO,CAAC,CACV,CAEA,UAAU,EAAe,EAAoB,EAA6B,CAE1E,CAEA,gBAAuB,CACjB,KAAK,aACP,KAAK,iBAAmB,GAE5B,CAEA,0BAAiC,CAC/B,KAAK,aAAe,EACtB,CAEA,iBAAwB,CACtB,KAAK,aAAe,EACtB,CACF,EAEa,EAAb,cAA+C,CAAqC,CAClF,OAEA,YAAY,EAAc,EAAoC,CAC5D,MAAM,EAAM,CAAa,EACzB,KAAK,OAAS,GAAe,MAC/B,CAEA,gBAAgB,EAAe,EAAoB,EAAuB,EAAmB,CAE7F,CACF,EAGA,MAAa,EAAQ,WAAW,OAAS,EAC5B,EAAc,WAAW,aAAe,ECxCxC,EAAO,EACP,EAAU,EACV,EAAc,EAG3B,GAAI,OAAO,OAAW,KAAe,OAAO,WAAe,IAAa,CAUtE,IAAM,EAAI,WAEV,AAAiB,EAAE,WAAW,EAC9B,AAAc,EAAE,QAAQ,EACxB,AAAoB,EAAE,cAAc,EACpC,AAAa,EAAE,OAAO,EACtB,AAAgB,EAAE,UAAU,EAC5B,AAAoB,EAAE,cAAc,CACtC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Renders a NodeModFn to a parent element by calling it and appending the result.
3
+ *
4
+ * @param nodeModFn The NodeModFn to render (created by tag builders like div(), h1(), etc.)
5
+ * @param parent The parent element to render into (defaults to document.body)
6
+ * @param index The index to pass to the NodeModFn (defaults to 0)
7
+ * @returns The rendered element
8
+ */
9
+ export declare function render<TTagName extends ElementTagName = ElementTagName>(nodeModFn: NodeModFn<TTagName>, parent?: Element, index?: number): ExpandedElement<TTagName>;
10
+ /**
11
+ * Hydrates an existing server-rendered DOM tree by walking it in parallel with
12
+ * the component tree, reusing existing nodes and re-attaching reactivity.
13
+ *
14
+ * Instead of clearing the container and creating new DOM nodes (like render()),
15
+ * hydrate() claims existing nodes from the SSR output and registers reactive
16
+ * text nodes, attributes, event listeners, list runtimes, and when runtimes
17
+ * on them.
18
+ *
19
+ * @param nodeModFn The NodeModFn to hydrate (same component used for SSR)
20
+ * @param parent The parent element containing the SSR HTML (defaults to document.body)
21
+ * @returns The hydrated root element
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * // Server: const html = renderToString(div(h1("Hello")));
26
+ * // Client:
27
+ * const app = document.getElementById("app")!;
28
+ * // app.innerHTML already contains the SSR HTML
29
+ * hydrate(div(h1("Hello")), app);
30
+ * ```
31
+ */
32
+ export declare function hydrate<TTagName extends ElementTagName = ElementTagName>(nodeModFn: NodeModFn<TTagName>, parent?: Element): ExpandedElement<TTagName>;
33
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,QAAQ,SAAS,cAAc,GAAG,cAAc,EACrE,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC9B,MAAM,CAAC,EAAE,OAAO,EAChB,KAAK,GAAE,MAAU,GAChB,eAAe,CAAC,QAAQ,CAAC,CAQ3B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,OAAO,CAAC,QAAQ,SAAS,cAAc,GAAG,cAAc,EACtE,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC9B,MAAM,CAAC,EAAE,OAAO,GACf,eAAe,CAAC,QAAQ,CAAC,CAqC3B"}
@@ -0,0 +1,4 @@
1
+ export type ConditionInput = boolean | (() => boolean);
2
+ export declare function runCondition(condition: () => boolean, onError?: (error: unknown) => void): boolean;
3
+ export declare function resolveCondition(value: ConditionInput, onError?: (error: unknown) => void): boolean;
4
+ //# sourceMappingURL=conditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../src/shared/conditions.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;AAEvD,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,OAAO,EACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACjC,OAAO,CAUT;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACjC,OAAO,CAET"}
@@ -0,0 +1,80 @@
1
+ export declare const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
2
+ /**
3
+ * Creates an HTML element.
4
+ * Wrapper for document.createElement with type safety.
5
+ */
6
+ export declare function createElement<K extends keyof HTMLElementTagNameMap>(tagName: K): HTMLElementTagNameMap[K] | null;
7
+ export declare function createElement(tagName: string): ExpandedElement | null;
8
+ /**
9
+ * Creates an element in the given namespace (typically for SVG elements).
10
+ * Wrapper for document.createElementNS with type safety.
11
+ */
12
+ export declare function createElementNS(namespace: string, tagName: string): ExpandedElement | null;
13
+ /**
14
+ * Creates a text node with the given content.
15
+ * Wrapper for document.createTextNode.
16
+ */
17
+ export declare function createTextNode(text: string): Text | null;
18
+ /**
19
+ * Creates a document fragment.
20
+ * Wrapper for document.createDocumentFragment.
21
+ */
22
+ export declare function createDocumentFragment(): DocumentFragment | null;
23
+ /**
24
+ * Fires onDestroy for a subtree that a fast removal path (list()'s bulk
25
+ * clear/replace, the single-element when()/else() swap) is about to drop
26
+ * without walking through cleanupNodeTree()/safeRemoveChild(). Short-circuits
27
+ * to a single comparison when nothing on the page has ever registered a
28
+ * lifecycle callback — the common case — so those fast paths stay fast.
29
+ *
30
+ * Same post-order (children, then self) as cleanupNodeTree() above, for the
31
+ * same reason — see the comment there.
32
+ */
33
+ export declare function disposeLifecyclesInSubtree(node: Node): void;
34
+ export declare function safeRemoveChild(child: Node): boolean;
35
+ export declare function createComment(text: string): Comment | null;
36
+ export declare function createConditionalComment(tagName: string, suffix?: string): Comment | null;
37
+ export declare function createMarkerPair(prefix: string, id: number | string): {
38
+ start: Comment;
39
+ end: Comment;
40
+ };
41
+ export declare function clearBetweenMarkers(startMarker: Comment, endMarker: Comment): void;
42
+ export declare function insertNodesBefore(nodes: Node[], referenceNode: Node): void;
43
+ export declare function appendChildren(parent: Element | Node, ...children: Array<Element | Node | string | null | undefined>): Element | Node;
44
+ export declare function isNodeConnected(node: Node | null | undefined): boolean;
45
+ /**
46
+ * Safely replaces an old node with a new node in the DOM.
47
+ * Returns true on success, false on failure (and logs the error).
48
+ */
49
+ export declare function replaceNodeSafely(oldNode: Node, newNode: Node): boolean;
50
+ /**
51
+ * Safely casts an Element-like object to Node & ParentNode interface.
52
+ * This is a common pattern needed when working with DOM manipulation.
53
+ *
54
+ * @param element - The element to cast
55
+ * @returns The element typed as Node & ParentNode
56
+ */
57
+ export declare function asParentNode<T extends Element | object>(element: T): Node & ParentNode;
58
+ /**
59
+ * Creates a scoped DOM insertion context that temporarily redirects appendChild
60
+ * to insertBefore at a specific reference node. This is useful for inserting
61
+ * content at specific positions in the DOM tree.
62
+ *
63
+ * @param host - The host element
64
+ * @param referenceNode - The node before which new nodes should be inserted
65
+ * @param callback - Function to execute with the scoped context
66
+ * @returns The result of the callback
67
+ */
68
+ export declare function withScopedInsertion<T, THost extends Element | object>(host: THost, referenceNode: Node, callback: () => T): T;
69
+ /**
70
+ * Type-safe wrapper for setting CSS style properties.
71
+ * Provides better error handling than direct CSSStyleDeclaration access.
72
+ * Supports both camelCase and kebab-case property names.
73
+ *
74
+ * @param element - The element to apply styles to
75
+ * @param property - The CSS property name (camelCase or kebab-case)
76
+ * @param value - The value to set (string, number, or null to remove)
77
+ * @returns true if the style was applied successfully, false otherwise
78
+ */
79
+ export declare function setStyleProperty(element: HTMLElement, property: string, value: string | number | null): boolean;
80
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/shared/dom.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,+BAA+B,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,qBAAqB,EACjE,OAAO,EAAE,CAAC,GACT,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACnC,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;AAKvE;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,eAAe,GAAG,IAAI,CAExB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAExD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,GAAG,IAAI,CAEhE;AA0DD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAS3D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAYpD;AAYD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAE1D;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,GAAG,IAAI,CAE3F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAMtG;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAOlF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,GAAG,IAAI,CAO1E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,GAAG,QAAQ,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAC7D,OAAO,GAAG,IAAI,CAwBhB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEtE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CASvE;AAID;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,UAAU,CAEtF;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,SAAS,OAAO,GAAG,MAAM,EACnE,IAAI,EAAE,KAAK,EACX,aAAa,EAAE,IAAI,EACnB,QAAQ,EAAE,MAAM,CAAC,GAChB,CAAC,CAkBH;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAC5B,OAAO,CAgBT"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Simplified environment detection - minimal overhead for smaller bundle size
3
+ */
4
+ export declare const isBrowser: boolean;
5
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/shared/environment.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,eAAO,MAAM,SAAS,SAAmE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function logError(message: string, error?: Error | unknown): void;
2
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI,CAKvE"}
@@ -0,0 +1,4 @@
1
+ type RenderableInput<TTagName extends ElementTagName = ElementTagName> = NodeModFn<TTagName> | DetachedExpandedElementFactory<TTagName> | DetachedSVGElementFactory | SVGElementModifierFn | ExpandedElement<TTagName> | SVGElement | Node | null | undefined;
2
+ export declare function resolveRenderable<TTagName extends ElementTagName = ElementTagName>(result: RenderableInput<TTagName>, host: ExpandedElement<TTagName>, index: number): ExpandedElement<TTagName> | null;
3
+ export {};
4
+ //# sourceMappingURL=renderables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderables.d.ts","sourceRoot":"","sources":["../../src/shared/renderables.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,CAAC,QAAQ,SAAS,cAAc,GAAG,cAAc,IACjE,SAAS,CAAC,QAAQ,CAAC,GACnB,8BAA8B,CAAC,QAAQ,CAAC,GACxC,yBAAyB,GACzB,oBAAoB,GACpB,eAAe,CAAC,QAAQ,CAAC,GACzB,UAAU,GACV,IAAI,GACJ,IAAI,GACJ,SAAS,CAAC;AAEd,wBAAgB,iBAAiB,CAAC,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChF,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,EACjC,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,EAC/B,KAAK,EAAE,MAAM,GACZ,eAAe,CAAC,QAAQ,CAAC,GAAG,IAAI,CAclC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * String utility functions
3
+ */
4
+ /**
5
+ * Converts camelCase to kebab-case (optimized for performance)
6
+ * Uses direct character code manipulation for maximum speed
7
+ * @example camelToKebab('backgroundColor') => 'background-color'
8
+ */
9
+ export declare function camelToKebab(str: string): string;
10
+ /**
11
+ * Escapes HTML special characters in attribute values (includes " and ')
12
+ */
13
+ export declare function escapeHtml(text: string): string;
14
+ /**
15
+ * Escapes HTML special characters in text node content.
16
+ * Only &, < and > need escaping — quotes are safe inside text nodes.
17
+ */
18
+ export declare function escapeText(text: string): string;
19
+ //# sourceMappingURL=strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/shared/strings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqBhD;AAKD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqB/C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB/C"}
@@ -0,0 +1,16 @@
1
+ export declare function isPrimitive(value: unknown): value is Primitive;
2
+ export declare function isNode<T>(value: T): value is T & Node;
3
+ export declare function isObject(value: unknown): value is object;
4
+ export declare function isTagLike<T>(value: T): value is T & {
5
+ tagName?: string;
6
+ };
7
+ export declare function isBoolean(value: unknown): value is boolean;
8
+ /**
9
+ * Narrows `value` to a callable. The generic `<T extends Function>` is intentionally
10
+ * removed: it allowed callers to assert any specific function signature via the type
11
+ * parameter without a runtime check, which is unsafe. Use explicit casts at call sites
12
+ * when a more specific signature is needed.
13
+ */
14
+ export declare function isFunction(value: unknown): value is (...args: unknown[]) => unknown;
15
+ export declare function isZeroArityFunction(value: unknown): value is () => unknown;
16
+ //# sourceMappingURL=type-guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-guards.d.ts","sourceRoot":"","sources":["../../src/shared/type-guards.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,CAKrD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAExE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAEnF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,OAAO,CAE1E"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Server-Side Rendering (SSR) entry point for Nuclo
3
+ *
4
+ * This module provides utilities for rendering Nuclo components to HTML strings
5
+ * in Node.js environments for server-side rendering.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { renderToString } from 'nuclo/ssr';
10
+ * import '../polyfill'; // Load polyfills for Node.js
11
+ * import { div } from 'nuclo';
12
+ *
13
+ * const html = renderToString(div("Hello, World!"));
14
+ * console.log(html); // '<div>Hello, World!</div>'
15
+ * ```
16
+ */
17
+ export { renderToString, renderManyToString, renderToStringWithContainer } from './render-to-string';
18
+ export { setSSRCollector, getCssText } from '../style/engine';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ssr/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}