elit 3.3.0 → 3.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/build.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { B as BuildOptions, a as BuildResult } from './server-U0JYnJFs.mjs';
1
+ import { B as BuildOptions, a as BuildResult } from './server-Cz3z-5ls.mjs';
2
2
  import './http.mjs';
3
3
  import 'node:events';
4
4
  import './ws.mjs';
package/dist/cli.js CHANGED
@@ -1435,7 +1435,7 @@ var require_package = __commonJS({
1435
1435
  "package.json"(exports2, module2) {
1436
1436
  module2.exports = {
1437
1437
  name: "elit",
1438
- version: "3.3.0",
1438
+ version: "3.3.2",
1439
1439
  description: "Optimized lightweight library for creating DOM elements with reactive state",
1440
1440
  main: "dist/index.js",
1441
1441
  module: "dist/index.mjs",
@@ -2473,7 +2473,26 @@ var DomNode = class {
2473
2473
  parent.appendChild(document.createTextNode(String(vNode)));
2474
2474
  return;
2475
2475
  }
2476
+ if (Array.isArray(vNode)) {
2477
+ for (const child of vNode) {
2478
+ this.renderToDOM(child, parent);
2479
+ }
2480
+ return;
2481
+ }
2476
2482
  const { tagName, props, children } = vNode;
2483
+ if (!tagName) {
2484
+ for (const child of children) {
2485
+ if (shouldSkipChild(child)) continue;
2486
+ if (Array.isArray(child)) {
2487
+ for (const c of child) {
2488
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
2489
+ }
2490
+ } else {
2491
+ this.renderToDOM(child, parent);
2492
+ }
2493
+ }
2494
+ return;
2495
+ }
2477
2496
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
2478
2497
  const el = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
2479
2498
  for (const key in props) {
package/dist/config.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { D as DevServerOptions, B as BuildOptions, P as PreviewOptions } from './server-U0JYnJFs.mjs';
1
+ import { D as DevServerOptions, B as BuildOptions, P as PreviewOptions } from './server-Cz3z-5ls.mjs';
2
2
  import './http.mjs';
3
3
  import 'node:events';
4
4
  import './ws.mjs';
package/dist/dom.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
package/dist/dom.js CHANGED
@@ -56,7 +56,26 @@ var DomNode = class {
56
56
  parent.appendChild(document.createTextNode(String(vNode)));
57
57
  return;
58
58
  }
59
+ if (Array.isArray(vNode)) {
60
+ for (const child of vNode) {
61
+ this.renderToDOM(child, parent);
62
+ }
63
+ return;
64
+ }
59
65
  const { tagName, props, children } = vNode;
66
+ if (!tagName) {
67
+ for (const child of children) {
68
+ if (shouldSkipChild(child)) continue;
69
+ if (Array.isArray(child)) {
70
+ for (const c of child) {
71
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
72
+ }
73
+ } else {
74
+ this.renderToDOM(child, parent);
75
+ }
76
+ }
77
+ return;
78
+ }
60
79
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
61
80
  const el = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
62
81
  for (const key in props) {
package/dist/dom.mjs CHANGED
@@ -28,7 +28,26 @@ var DomNode = class {
28
28
  parent.appendChild(document.createTextNode(String(vNode)));
29
29
  return;
30
30
  }
31
+ if (Array.isArray(vNode)) {
32
+ for (const child of vNode) {
33
+ this.renderToDOM(child, parent);
34
+ }
35
+ return;
36
+ }
31
37
  const { tagName, props, children } = vNode;
38
+ if (!tagName) {
39
+ for (const child of children) {
40
+ if (shouldSkipChild(child)) continue;
41
+ if (Array.isArray(child)) {
42
+ for (const c of child) {
43
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
44
+ }
45
+ } else {
46
+ this.renderToDOM(child, parent);
47
+ }
48
+ }
49
+ return;
50
+ }
32
51
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
33
52
  const el = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
34
53
  for (const key in props) {
package/dist/el.d.mts CHANGED
@@ -190,6 +190,7 @@ declare const mathMsup: ElementFactory;
190
190
  declare const varElement: ElementFactory;
191
191
  declare const el: Partial<Elements>;
192
192
 
193
+ declare const frag: ElementFactory;
193
194
  declare const doc: any;
194
195
  declare const getEl: any;
195
196
  declare const getEls: any;
@@ -204,4 +205,4 @@ declare const getElClass: any;
204
205
  declare const getElTag: any;
205
206
  declare const getElName: any;
206
207
 
207
- export { a, abbr, address, area, article, aside, audio, b, base, bdi, bdo, blockquote, body, br, button, canvas, caption, cite, code, col, colgroup, commentNode, createEl, createElementFactory, createMathEl, createSvgEl, data, datalist, dd, del, details, dfn, dialog, div, dl, doc, dt, el, elements, em, embed, fieldset, figcaption, figure, footer, form, fragment, getEl, getElClass, getElId, getElName, getElTag, getEls, h1, h2, h3, h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, kbd, label, legend, li, link, main, map, mark, mathMath, mathMfrac, mathMi, mathMn, mathMo, mathMroot, mathMrow, mathMs, mathMsqrt, mathMsub, mathMsup, mathMtext, menu, meta, meter, nav, noscript, object, ol, optgroup, option, output, p, param, picture, portal, pre, progress, q, rp, rt, ruby, s, samp, script, section, select, slot, small, source, span, strong, style, sub, summary, sup, svgAnimate, svgAnimateMotion, svgAnimateTransform, svgCircle, svgClipPath, svgDefs, svgEllipse, svgFeBlend, svgFeColorMatrix, svgFeComponentTransfer, svgFeComposite, svgFeConvolveMatrix, svgFeDiffuseLighting, svgFeDisplacementMap, svgFeFlood, svgFeGaussianBlur, svgFeMorphology, svgFeOffset, svgFeSpecularLighting, svgFeTile, svgFeTurbulence, svgFilter, svgForeignObject, svgG, svgImage, svgLine, svgLinearGradient, svgMarker, svgMask, svgPath, svgPattern, svgPolygon, svgPolyline, svgRadialGradient, svgRect, svgSet, svgStop, svgSvg, svgSymbol, svgText, svgTspan, svgUse, table, tbody, td, template, textNode, textarea, tfoot, th, thead, time, title, tr, track, u, ul, varElement, video, wbr };
208
+ export { a, abbr, address, area, article, aside, audio, b, base, bdi, bdo, blockquote, body, br, button, canvas, caption, cite, code, col, colgroup, commentNode, createEl, createElementFactory, createMathEl, createSvgEl, data, datalist, dd, del, details, dfn, dialog, div, dl, doc, dt, el, elements, em, embed, fieldset, figcaption, figure, footer, form, frag, fragment, getEl, getElClass, getElId, getElName, getElTag, getEls, h1, h2, h3, h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, kbd, label, legend, li, link, main, map, mark, mathMath, mathMfrac, mathMi, mathMn, mathMo, mathMroot, mathMrow, mathMs, mathMsqrt, mathMsub, mathMsup, mathMtext, menu, meta, meter, nav, noscript, object, ol, optgroup, option, output, p, param, picture, portal, pre, progress, q, rp, rt, ruby, s, samp, script, section, select, slot, small, source, span, strong, style, sub, summary, sup, svgAnimate, svgAnimateMotion, svgAnimateTransform, svgCircle, svgClipPath, svgDefs, svgEllipse, svgFeBlend, svgFeColorMatrix, svgFeComponentTransfer, svgFeComposite, svgFeConvolveMatrix, svgFeDiffuseLighting, svgFeDisplacementMap, svgFeFlood, svgFeGaussianBlur, svgFeMorphology, svgFeOffset, svgFeSpecularLighting, svgFeTile, svgFeTurbulence, svgFilter, svgForeignObject, svgG, svgImage, svgLine, svgLinearGradient, svgMarker, svgMask, svgPath, svgPattern, svgPolygon, svgPolyline, svgRadialGradient, svgRect, svgSet, svgStop, svgSvg, svgSymbol, svgText, svgTspan, svgUse, table, tbody, td, template, textNode, textarea, tfoot, th, thead, time, title, tr, track, u, ul, varElement, video, wbr };
package/dist/el.d.ts CHANGED
@@ -19,6 +19,7 @@ declare const elements: Partial<Elements>;
19
19
  export declare const html: ElementFactory, head: ElementFactory, body: ElementFactory, title: ElementFactory, base: ElementFactory, link: ElementFactory, meta: ElementFactory, style: ElementFactory, address: ElementFactory, article: ElementFactory, aside: ElementFactory, footer: ElementFactory, header: ElementFactory, h1: ElementFactory, h2: ElementFactory, h3: ElementFactory, h4: ElementFactory, h5: ElementFactory, h6: ElementFactory, main: ElementFactory, nav: ElementFactory, section: ElementFactory, blockquote: ElementFactory, dd: ElementFactory, div: ElementFactory, dl: ElementFactory, dt: ElementFactory, figcaption: ElementFactory, figure: ElementFactory, hr: ElementFactory, li: ElementFactory, ol: ElementFactory, p: ElementFactory, pre: ElementFactory, ul: ElementFactory, a: ElementFactory, abbr: ElementFactory, b: ElementFactory, bdi: ElementFactory, bdo: ElementFactory, br: ElementFactory, cite: ElementFactory, code: ElementFactory, data: ElementFactory, dfn: ElementFactory, em: ElementFactory, i: ElementFactory, kbd: ElementFactory, mark: ElementFactory, q: ElementFactory, rp: ElementFactory, rt: ElementFactory, ruby: ElementFactory, s: ElementFactory, samp: ElementFactory, small: ElementFactory, span: ElementFactory, strong: ElementFactory, sub: ElementFactory, sup: ElementFactory, time: ElementFactory, u: ElementFactory, wbr: ElementFactory, area: ElementFactory, audio: ElementFactory, img: ElementFactory, map: ElementFactory, track: ElementFactory, video: ElementFactory, embed: ElementFactory, iframe: ElementFactory, object: ElementFactory, param: ElementFactory, picture: ElementFactory, portal: ElementFactory, source: ElementFactory, canvas: ElementFactory, noscript: ElementFactory, script: ElementFactory, del: ElementFactory, ins: ElementFactory, caption: ElementFactory, col: ElementFactory, colgroup: ElementFactory, table: ElementFactory, tbody: ElementFactory, td: ElementFactory, tfoot: ElementFactory, th: ElementFactory, thead: ElementFactory, tr: ElementFactory, button: ElementFactory, datalist: ElementFactory, fieldset: ElementFactory, form: ElementFactory, input: ElementFactory, label: ElementFactory, legend: ElementFactory, meter: ElementFactory, optgroup: ElementFactory, option: ElementFactory, output: ElementFactory, progress: ElementFactory, select: ElementFactory, textarea: ElementFactory, details: ElementFactory, dialog: ElementFactory, menu: ElementFactory, summary: ElementFactory, slot: ElementFactory, template: ElementFactory, svgSvg: ElementFactory, svgCircle: ElementFactory, svgRect: ElementFactory, svgPath: ElementFactory, svgLine: ElementFactory, svgPolyline: ElementFactory, svgPolygon: ElementFactory, svgEllipse: ElementFactory, svgG: ElementFactory, svgText: ElementFactory, svgTspan: ElementFactory, svgDefs: ElementFactory, svgLinearGradient: ElementFactory, svgRadialGradient: ElementFactory, svgStop: ElementFactory, svgPattern: ElementFactory, svgMask: ElementFactory, svgClipPath: ElementFactory, svgUse: ElementFactory, svgSymbol: ElementFactory, svgMarker: ElementFactory, svgImage: ElementFactory, svgForeignObject: ElementFactory, svgAnimate: ElementFactory, svgAnimateTransform: ElementFactory, svgAnimateMotion: ElementFactory, svgSet: ElementFactory, svgFilter: ElementFactory, svgFeBlend: ElementFactory, svgFeColorMatrix: ElementFactory, svgFeComponentTransfer: ElementFactory, svgFeComposite: ElementFactory, svgFeConvolveMatrix: ElementFactory, svgFeDiffuseLighting: ElementFactory, svgFeDisplacementMap: ElementFactory, svgFeFlood: ElementFactory, svgFeGaussianBlur: ElementFactory, svgFeMorphology: ElementFactory, svgFeOffset: ElementFactory, svgFeSpecularLighting: ElementFactory, svgFeTile: ElementFactory, svgFeTurbulence: ElementFactory, mathMath: ElementFactory, mathMi: ElementFactory, mathMn: ElementFactory, mathMo: ElementFactory, mathMs: ElementFactory, mathMtext: ElementFactory, mathMrow: ElementFactory, mathMfrac: ElementFactory, mathMsqrt: ElementFactory, mathMroot: ElementFactory, mathMsub: ElementFactory, mathMsup: ElementFactory, varElement: ElementFactory;
20
20
  export declare const el: Partial<Elements>;
21
21
  export { elements };
22
+ export declare const frag: ElementFactory;
22
23
  export declare const doc: any;
23
24
  export declare const getEl: any;
24
25
  export declare const getEls: any;
package/dist/el.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"el.d.ts","sourceRoot":"","sources":["../src/el.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"el.d.ts","sourceRoot":"","sources":["../src/el.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,SAAS,CAAC;AA+BnE,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,cA8BlD,CAAC;AAGF,QAAA,MAAM,IAAI,w6BAeA,CAAC;AAGX,QAAA,MAAM,OAAO,8hBAOH,CAAC;AAGX,QAAA,MAAM,QAAQ,uGAEJ,CAAC;AAEX,KAAK,QAAQ,GAAG;KACX,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,cAAc;CAC7C,GAAG;KACC,CAAC,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc;CACzE,GAAG;KACC,CAAC,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc;CAC3E,GAAG;IACA,UAAU,EAAE,cAAc,CAAC;CAC9B,CAAC;AAEF,QAAA,MAAM,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAM,CAAC;AAYvC,eAAO,MACH,IAAI,kBAAE,IAAI,kBAAE,IAAI,kBAAE,KAAK,kBAAE,IAAI,kBAAE,IAAI,kBAAE,IAAI,kBAAE,KAAK,kBAChD,OAAO,kBAAE,OAAO,kBAAE,KAAK,kBAAE,MAAM,kBAAE,MAAM,kBAAE,EAAE,kBAAE,EAAE,kBAAE,EAAE,kBAAE,EAAE,kBAAE,EAAE,kBAAE,EAAE,kBAAE,IAAI,kBAAE,GAAG,kBAAE,OAAO,kBACnF,UAAU,kBAAE,EAAE,kBAAE,GAAG,kBAAE,EAAE,kBAAE,EAAE,kBAAE,UAAU,kBAAE,MAAM,kBAAE,EAAE,kBAAE,EAAE,kBAAE,EAAE,kBAAE,CAAC,kBAAE,GAAG,kBAAE,EAAE,kBACvE,CAAC,kBAAE,IAAI,kBAAE,CAAC,kBAAE,GAAG,kBAAE,GAAG,kBAAE,EAAE,kBAAE,IAAI,kBAAE,IAAI,kBAAE,IAAI,kBAAE,GAAG,kBAAE,EAAE,kBAAE,CAAC,kBAAE,GAAG,kBAAE,IAAI,kBAAE,CAAC,kBACpE,EAAE,kBAAE,EAAE,kBAAE,IAAI,kBAAE,CAAC,kBAAE,IAAI,kBAAE,KAAK,kBAAE,IAAI,kBAAE,MAAM,kBAAE,GAAG,kBAAE,GAAG,kBAAE,IAAI,kBAAE,CAAC,kBAAE,GAAG,kBAClE,IAAI,kBAAE,KAAK,kBAAE,GAAG,kBAAE,GAAG,kBAAE,KAAK,kBAAE,KAAK,kBACnC,KAAK,kBAAE,MAAM,kBAAE,MAAM,kBAAE,KAAK,kBAAE,OAAO,kBAAE,MAAM,kBAAE,MAAM,kBACrD,MAAM,kBAAE,QAAQ,kBAAE,MAAM,kBACxB,GAAG,kBAAE,GAAG,kBACR,OAAO,kBAAE,GAAG,kBAAE,QAAQ,kBAAE,KAAK,kBAAE,KAAK,kBAAE,EAAE,kBAAE,KAAK,kBAAE,EAAE,kBAAE,KAAK,kBAAE,EAAE,kBAC9D,MAAM,kBAAE,QAAQ,kBAAE,QAAQ,kBAAE,IAAI,kBAAE,KAAK,kBAAE,KAAK,kBAAE,MAAM,kBAAE,KAAK,kBAC7D,QAAQ,kBAAE,MAAM,kBAAE,MAAM,kBAAE,QAAQ,kBAAE,MAAM,kBAAE,QAAQ,kBACpD,OAAO,kBAAE,MAAM,kBAAE,IAAI,kBAAE,OAAO,kBAC9B,IAAI,kBAAE,QAAQ,kBACd,MAAM,kBAAE,SAAS,kBAAE,OAAO,kBAAE,OAAO,kBAAE,OAAO,kBAAE,WAAW,kBAAE,UAAU,kBAAE,UAAU,kBAAE,IAAI,kBAAE,OAAO,kBAAE,QAAQ,kBAC1G,OAAO,kBAAE,iBAAiB,kBAAE,iBAAiB,kBAAE,OAAO,kBAAE,UAAU,kBAAE,OAAO,kBAAE,WAAW,kBAAE,MAAM,kBAAE,SAAS,kBAC3G,SAAS,kBAAE,QAAQ,kBAAE,gBAAgB,kBAAE,UAAU,kBAAE,mBAAmB,kBAAE,gBAAgB,kBAAE,MAAM,kBAAE,SAAS,kBAC3G,UAAU,kBAAE,gBAAgB,kBAAE,sBAAsB,kBAAE,cAAc,kBAAE,mBAAmB,kBAAE,oBAAoB,kBAC/G,oBAAoB,kBAAE,UAAU,kBAAE,iBAAiB,kBAAE,eAAe,kBAAE,WAAW,kBAAE,qBAAqB,kBACxG,SAAS,kBAAE,eAAe,kBAC1B,QAAQ,kBAAE,MAAM,kBAAE,MAAM,kBAAE,MAAM,kBAAE,MAAM,kBAAE,SAAS,kBAAE,QAAQ,kBAAE,SAAS,kBAAE,SAAS,kBAAE,SAAS,kBAAE,QAAQ,kBAAE,QAAQ,kBAClH,UAAU,gBACU,CAAC;AACzB,eAAO,MAAM,EAAE,mBAAW,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,CAAC;AAGpB,eAAO,MAAM,IAAI,EAAE,cAgBA,CAAC;AAGpB,eAAO,MAAM,GAAG,KAA4C,CAAC;AAC7D,eAAO,MAAM,KAAK,KAAoC,CAAC;AACvD,eAAO,MAAM,MAAM,KAAuC,CAAC;AAC3D,eAAO,MAAM,QAAQ,KAAoC,CAAC;AAC1D,eAAO,MAAM,WAAW,KAA+F,CAAC;AACxH,eAAO,MAAM,YAAY,KAAuG,CAAC;AACjI,eAAO,MAAM,QAAQ,KAA6C,CAAC;AACnE,eAAO,MAAM,QAAQ,KAAqC,CAAC;AAC3D,eAAO,MAAM,WAAW,KAAoC,CAAC;AAC7D,eAAO,MAAM,OAAO,KAAqC,CAAC;AAC1D,eAAO,MAAM,UAAU,KAA6C,CAAC;AACrE,eAAO,MAAM,QAAQ,KAA2C,CAAC;AACjE,eAAO,MAAM,SAAS,KAAwC,CAAC"}
package/dist/el.js CHANGED
@@ -66,6 +66,7 @@ __export(el_exports, {
66
66
  figure: () => figure,
67
67
  footer: () => footer,
68
68
  form: () => form,
69
+ frag: () => frag,
69
70
  fragment: () => fragment,
70
71
  getEl: () => getEl,
71
72
  getElClass: () => getElClass,
@@ -589,6 +590,22 @@ var {
589
590
  varElement
590
591
  } = elements;
591
592
  var el = elements;
593
+ var frag = function(...children) {
594
+ const flatChildren = [];
595
+ for (let i2 = 0, len = children.length; i2 < len; i2++) {
596
+ const child = children[i2];
597
+ if (child == null || child === false) continue;
598
+ if (Array.isArray(child)) {
599
+ for (let j = 0, cLen = child.length; j < cLen; j++) {
600
+ const c = child[j];
601
+ c != null && c !== false && flatChildren.push(c);
602
+ }
603
+ } else {
604
+ flatChildren.push(child);
605
+ }
606
+ }
607
+ return { tagName: "", props: {}, children: flatChildren };
608
+ };
592
609
  var doc = hasDocument ? document : void 0;
593
610
  var getEl = bindDocMethod(doc?.querySelector);
594
611
  var getEls = bindDocMethod(doc?.querySelectorAll);
@@ -650,6 +667,7 @@ var getElName = bindDocMethod(doc?.getElementsByName);
650
667
  figure,
651
668
  footer,
652
669
  form,
670
+ frag,
653
671
  fragment,
654
672
  getEl,
655
673
  getElClass,
package/dist/el.mjs CHANGED
@@ -384,6 +384,22 @@ var {
384
384
  varElement
385
385
  } = elements;
386
386
  var el = elements;
387
+ var frag = function(...children) {
388
+ const flatChildren = [];
389
+ for (let i2 = 0, len = children.length; i2 < len; i2++) {
390
+ const child = children[i2];
391
+ if (child == null || child === false) continue;
392
+ if (Array.isArray(child)) {
393
+ for (let j = 0, cLen = child.length; j < cLen; j++) {
394
+ const c = child[j];
395
+ c != null && c !== false && flatChildren.push(c);
396
+ }
397
+ } else {
398
+ flatChildren.push(child);
399
+ }
400
+ }
401
+ return { tagName: "", props: {}, children: flatChildren };
402
+ };
387
403
  var doc = hasDocument ? document : void 0;
388
404
  var getEl = bindDocMethod(doc?.querySelector);
389
405
  var getEls = bindDocMethod(doc?.querySelectorAll);
@@ -444,6 +460,7 @@ export {
444
460
  figure,
445
461
  footer,
446
462
  form,
463
+ frag,
447
464
  fragment,
448
465
  getEl,
449
466
  getElClass,
package/dist/index.d.mts CHANGED
@@ -2,7 +2,7 @@ export { BuildOptions, BuildResult, Child, Children, ClientConfig, DevServer, De
2
2
  export { DomNode, dom, mount, render, renderToString } from './dom.mjs';
3
3
  export { SharedState, batchRender, bindChecked, bindValue, cleanupUnused, computed, createSharedState, createState, createVirtualList, debounce, effect, lazy, reactive, reactiveAs, renderChunked, sharedStateManager, text, throttle } from './state.mjs';
4
4
  export { CSSRule, CSSVariable, ContainerRule, CreateStyle, FontFace, KeyframeStep, Keyframes, LayerRule, MediaRule, SupportsRule, addAttribute, addClass, addContainer, addId, addName, addPseudoClass, addPseudoElement, addStyle, addTag, addVar, adjacentSibling, attrContains, attrContainsWord, attrEndsWith, attrEquals, attrStartsWith, childStyle, clearStyle, container, descendant, fontFace, generalSibling, getVar, importStyle, important, injectStyle, keyframe, keyframeFromTo, layer, layerOrder, mediaDark, mediaLight, mediaMaxWidth, mediaMinWidth, mediaPrint, mediaReducedMotion, mediaScreen, mediaStyle, multipleStyle, nesting, renderStyle, default as styles, supportsStyle } from './style.mjs';
5
- export { a, abbr, address, area, article, aside, audio, b, base, bdi, bdo, blockquote, body, br, button, canvas, caption, cite, code, col, colgroup, commentNode, createEl, createElementFactory, createMathEl, createSvgEl, data, datalist, dd, del, details, dfn, dialog, div, dl, doc, dt, el, elements, em, embed, fieldset, figcaption, figure, footer, form, fragment, getEl, getElClass, getElId, getElName, getElTag, getEls, h1, h2, h3, h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, kbd, label, legend, li, link, main, map, mark, mathMath, mathMfrac, mathMi, mathMn, mathMo, mathMroot, mathMrow, mathMs, mathMsqrt, mathMsub, mathMsup, mathMtext, menu, meta, meter, nav, noscript, object, ol, optgroup, option, output, p, param, picture, portal, pre, progress, q, rp, rt, ruby, s, samp, script, section, select, slot, small, source, span, strong, style, sub, summary, sup, svgAnimate, svgAnimateMotion, svgAnimateTransform, svgCircle, svgClipPath, svgDefs, svgEllipse, svgFeBlend, svgFeColorMatrix, svgFeComponentTransfer, svgFeComposite, svgFeConvolveMatrix, svgFeDiffuseLighting, svgFeDisplacementMap, svgFeFlood, svgFeGaussianBlur, svgFeMorphology, svgFeOffset, svgFeSpecularLighting, svgFeTile, svgFeTurbulence, svgFilter, svgForeignObject, svgG, svgImage, svgLine, svgLinearGradient, svgMarker, svgMask, svgPath, svgPattern, svgPolygon, svgPolyline, svgRadialGradient, svgRect, svgSet, svgStop, svgSvg, svgSymbol, svgText, svgTspan, svgUse, table, tbody, td, template, textNode, textarea, tfoot, th, thead, time, title, tr, track, u, ul, varElement, video, wbr } from './el.mjs';
5
+ export { a, abbr, address, area, article, aside, audio, b, base, bdi, bdo, blockquote, body, br, button, canvas, caption, cite, code, col, colgroup, commentNode, createEl, createElementFactory, createMathEl, createSvgEl, data, datalist, dd, del, details, dfn, dialog, div, dl, doc, dt, el, elements, em, embed, fieldset, figcaption, figure, footer, form, frag, fragment, getEl, getElClass, getElId, getElName, getElTag, getEls, h1, h2, h3, h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, kbd, label, legend, li, link, main, map, mark, mathMath, mathMfrac, mathMi, mathMn, mathMo, mathMroot, mathMrow, mathMs, mathMsqrt, mathMsub, mathMsup, mathMtext, menu, meta, meter, nav, noscript, object, ol, optgroup, option, output, p, param, picture, portal, pre, progress, q, rp, rt, ruby, s, samp, script, section, select, slot, small, source, span, strong, style, sub, summary, sup, svgAnimate, svgAnimateMotion, svgAnimateTransform, svgCircle, svgClipPath, svgDefs, svgEllipse, svgFeBlend, svgFeColorMatrix, svgFeComponentTransfer, svgFeComposite, svgFeConvolveMatrix, svgFeDiffuseLighting, svgFeDisplacementMap, svgFeFlood, svgFeGaussianBlur, svgFeMorphology, svgFeOffset, svgFeSpecularLighting, svgFeTile, svgFeTurbulence, svgFilter, svgForeignObject, svgG, svgImage, svgLine, svgLinearGradient, svgMarker, svgMask, svgPath, svgPattern, svgPolygon, svgPolyline, svgRadialGradient, svgRect, svgSet, svgStop, svgSvg, svgSymbol, svgText, svgTspan, svgUse, table, tbody, td, template, textNode, textarea, tfoot, th, thead, time, title, tr, track, u, ul, varElement, video, wbr } from './el.mjs';
6
6
  export { Route, RouteLocation, RouteParams, Router, RouterOptions, createRouter, createRouterView, routerLink } from './router.mjs';
7
7
  export { HMRClient, default as hmr } from './hmr.mjs';
8
8
  import 'node:events';
package/dist/index.js CHANGED
@@ -103,6 +103,7 @@ __export(src_exports, {
103
103
  fontFace: () => fontFace,
104
104
  footer: () => footer,
105
105
  form: () => form,
106
+ frag: () => frag,
106
107
  fragment: () => fragment,
107
108
  generalSibling: () => generalSibling,
108
109
  getEl: () => getEl,
@@ -306,7 +307,26 @@ var DomNode = class {
306
307
  parent.appendChild(document.createTextNode(String(vNode)));
307
308
  return;
308
309
  }
310
+ if (Array.isArray(vNode)) {
311
+ for (const child of vNode) {
312
+ this.renderToDOM(child, parent);
313
+ }
314
+ return;
315
+ }
309
316
  const { tagName, props, children } = vNode;
317
+ if (!tagName) {
318
+ for (const child of children) {
319
+ if (shouldSkipChild(child)) continue;
320
+ if (Array.isArray(child)) {
321
+ for (const c of child) {
322
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
323
+ }
324
+ } else {
325
+ this.renderToDOM(child, parent);
326
+ }
327
+ }
328
+ return;
329
+ }
310
330
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
311
331
  const el2 = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
312
332
  for (const key in props) {
@@ -1121,7 +1141,11 @@ var scheduleRAFUpdate = (rafId, updateFn) => {
1121
1141
  };
1122
1142
  var renderToFragment = (content, isVNode) => {
1123
1143
  const fragment2 = document.createDocumentFragment();
1124
- if (isVNode && content && typeof content === "object" && "tagName" in content) {
1144
+ if (Array.isArray(content)) {
1145
+ for (const child of content) {
1146
+ dom.renderToDOM(child, fragment2);
1147
+ }
1148
+ } else if (isVNode && content && typeof content === "object" && "tagName" in content) {
1125
1149
  const { children } = content;
1126
1150
  for (const child of children) {
1127
1151
  dom.renderToDOM(child, fragment2);
@@ -1208,7 +1232,8 @@ var reactive = (state, renderFn) => {
1208
1232
  children: vnode.children
1209
1233
  };
1210
1234
  }
1211
- return { tagName: "span", props: { ref: refCallback }, children: [initialResult] };
1235
+ const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];
1236
+ return { tagName: "span", props: { ref: refCallback, style: { display: "contents" } }, children: initialChildren };
1212
1237
  };
1213
1238
  var reactiveAs = (tagName, state, renderFn, props = {}) => {
1214
1239
  let rafId = null;
@@ -1234,7 +1259,9 @@ var reactiveAs = (tagName, state, renderFn, props = {}) => {
1234
1259
  const refCallback = (el2) => {
1235
1260
  elementRef = el2;
1236
1261
  };
1237
- return { tagName, props: { ...props, ref: refCallback }, children: [renderFn(state.value)] };
1262
+ const initialResult = renderFn(state.value);
1263
+ const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];
1264
+ return { tagName, props: { ...props, ref: refCallback }, children: initialChildren };
1238
1265
  };
1239
1266
  var text = (state) => state && state.value !== void 0 ? reactive(state, (v) => ({ tagName: "span", props: {}, children: [String(v)] })) : String(state);
1240
1267
  var bindValue = (state) => ({
@@ -2072,6 +2099,22 @@ var {
2072
2099
  varElement
2073
2100
  } = elements;
2074
2101
  var el = elements;
2102
+ var frag = function(...children) {
2103
+ const flatChildren = [];
2104
+ for (let i2 = 0, len = children.length; i2 < len; i2++) {
2105
+ const child = children[i2];
2106
+ if (child == null || child === false) continue;
2107
+ if (Array.isArray(child)) {
2108
+ for (let j = 0, cLen = child.length; j < cLen; j++) {
2109
+ const c = child[j];
2110
+ c != null && c !== false && flatChildren.push(c);
2111
+ }
2112
+ } else {
2113
+ flatChildren.push(child);
2114
+ }
2115
+ }
2116
+ return { tagName: "", props: {}, children: flatChildren };
2117
+ };
2075
2118
  var doc = hasDocument ? document : void 0;
2076
2119
  var getEl = bindDocMethod(doc?.querySelector);
2077
2120
  var getEls = bindDocMethod(doc?.querySelectorAll);
@@ -2173,7 +2216,20 @@ function createRouter(options) {
2173
2216
  if (match?.route.beforeEnter) {
2174
2217
  if (!executeGuard(match.route.beforeEnter, location2, currentRoute.value, navigate, replace)) return;
2175
2218
  }
2176
- const url = mode === "hash" ? "#" + path : base2 + path;
2219
+ let urlPath = path;
2220
+ let url;
2221
+ if (mode === "hash") {
2222
+ url = "#" + path;
2223
+ } else {
2224
+ const hasBaseSlash = base2.endsWith("/");
2225
+ const hasPathSlash = path.startsWith("/");
2226
+ if (hasBaseSlash && hasPathSlash) {
2227
+ urlPath = path.slice(1);
2228
+ } else if (!hasBaseSlash && !hasPathSlash && path !== "/") {
2229
+ urlPath = "/" + path;
2230
+ }
2231
+ url = base2 + urlPath;
2232
+ }
2177
2233
  if (replace) {
2178
2234
  window.history.replaceState({ path }, "", url);
2179
2235
  } else {
@@ -2195,6 +2251,7 @@ function createRouter(options) {
2195
2251
  }
2196
2252
  return {
2197
2253
  currentRoute,
2254
+ mode,
2198
2255
  navigate,
2199
2256
  push: (path) => navigate(path, false),
2200
2257
  replace: (path) => navigate(path, true),
@@ -2230,11 +2287,12 @@ function createRouterView(router, options) {
2230
2287
  };
2231
2288
  }
2232
2289
  var routerLink = (router, props, ...children) => {
2290
+ const href = router.mode === "hash" ? `#${props.to}` : props.to;
2233
2291
  return {
2234
2292
  tagName: "a",
2235
2293
  props: {
2236
2294
  ...props,
2237
- href: props.to,
2295
+ href,
2238
2296
  onclick: (e) => {
2239
2297
  e.preventDefault();
2240
2298
  router.push(props.to);
@@ -2420,6 +2478,7 @@ var hmr_default = hmr;
2420
2478
  fontFace,
2421
2479
  footer,
2422
2480
  form,
2481
+ frag,
2423
2482
  fragment,
2424
2483
  generalSibling,
2425
2484
  getEl,
package/dist/index.mjs CHANGED
@@ -28,7 +28,26 @@ var DomNode = class {
28
28
  parent.appendChild(document.createTextNode(String(vNode)));
29
29
  return;
30
30
  }
31
+ if (Array.isArray(vNode)) {
32
+ for (const child of vNode) {
33
+ this.renderToDOM(child, parent);
34
+ }
35
+ return;
36
+ }
31
37
  const { tagName, props, children } = vNode;
38
+ if (!tagName) {
39
+ for (const child of children) {
40
+ if (shouldSkipChild(child)) continue;
41
+ if (Array.isArray(child)) {
42
+ for (const c of child) {
43
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
44
+ }
45
+ } else {
46
+ this.renderToDOM(child, parent);
47
+ }
48
+ }
49
+ return;
50
+ }
32
51
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
33
52
  const el2 = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
34
53
  for (const key in props) {
@@ -843,7 +862,11 @@ var scheduleRAFUpdate = (rafId, updateFn) => {
843
862
  };
844
863
  var renderToFragment = (content, isVNode) => {
845
864
  const fragment2 = document.createDocumentFragment();
846
- if (isVNode && content && typeof content === "object" && "tagName" in content) {
865
+ if (Array.isArray(content)) {
866
+ for (const child of content) {
867
+ dom.renderToDOM(child, fragment2);
868
+ }
869
+ } else if (isVNode && content && typeof content === "object" && "tagName" in content) {
847
870
  const { children } = content;
848
871
  for (const child of children) {
849
872
  dom.renderToDOM(child, fragment2);
@@ -930,7 +953,8 @@ var reactive = (state, renderFn) => {
930
953
  children: vnode.children
931
954
  };
932
955
  }
933
- return { tagName: "span", props: { ref: refCallback }, children: [initialResult] };
956
+ const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];
957
+ return { tagName: "span", props: { ref: refCallback, style: { display: "contents" } }, children: initialChildren };
934
958
  };
935
959
  var reactiveAs = (tagName, state, renderFn, props = {}) => {
936
960
  let rafId = null;
@@ -956,7 +980,9 @@ var reactiveAs = (tagName, state, renderFn, props = {}) => {
956
980
  const refCallback = (el2) => {
957
981
  elementRef = el2;
958
982
  };
959
- return { tagName, props: { ...props, ref: refCallback }, children: [renderFn(state.value)] };
983
+ const initialResult = renderFn(state.value);
984
+ const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];
985
+ return { tagName, props: { ...props, ref: refCallback }, children: initialChildren };
960
986
  };
961
987
  var text = (state) => state && state.value !== void 0 ? reactive(state, (v) => ({ tagName: "span", props: {}, children: [String(v)] })) : String(state);
962
988
  var bindValue = (state) => ({
@@ -1794,6 +1820,22 @@ var {
1794
1820
  varElement
1795
1821
  } = elements;
1796
1822
  var el = elements;
1823
+ var frag = function(...children) {
1824
+ const flatChildren = [];
1825
+ for (let i2 = 0, len = children.length; i2 < len; i2++) {
1826
+ const child = children[i2];
1827
+ if (child == null || child === false) continue;
1828
+ if (Array.isArray(child)) {
1829
+ for (let j = 0, cLen = child.length; j < cLen; j++) {
1830
+ const c = child[j];
1831
+ c != null && c !== false && flatChildren.push(c);
1832
+ }
1833
+ } else {
1834
+ flatChildren.push(child);
1835
+ }
1836
+ }
1837
+ return { tagName: "", props: {}, children: flatChildren };
1838
+ };
1797
1839
  var doc = hasDocument ? document : void 0;
1798
1840
  var getEl = bindDocMethod(doc?.querySelector);
1799
1841
  var getEls = bindDocMethod(doc?.querySelectorAll);
@@ -1895,7 +1937,20 @@ function createRouter(options) {
1895
1937
  if (match?.route.beforeEnter) {
1896
1938
  if (!executeGuard(match.route.beforeEnter, location2, currentRoute.value, navigate, replace)) return;
1897
1939
  }
1898
- const url = mode === "hash" ? "#" + path : base2 + path;
1940
+ let urlPath = path;
1941
+ let url;
1942
+ if (mode === "hash") {
1943
+ url = "#" + path;
1944
+ } else {
1945
+ const hasBaseSlash = base2.endsWith("/");
1946
+ const hasPathSlash = path.startsWith("/");
1947
+ if (hasBaseSlash && hasPathSlash) {
1948
+ urlPath = path.slice(1);
1949
+ } else if (!hasBaseSlash && !hasPathSlash && path !== "/") {
1950
+ urlPath = "/" + path;
1951
+ }
1952
+ url = base2 + urlPath;
1953
+ }
1899
1954
  if (replace) {
1900
1955
  window.history.replaceState({ path }, "", url);
1901
1956
  } else {
@@ -1917,6 +1972,7 @@ function createRouter(options) {
1917
1972
  }
1918
1973
  return {
1919
1974
  currentRoute,
1975
+ mode,
1920
1976
  navigate,
1921
1977
  push: (path) => navigate(path, false),
1922
1978
  replace: (path) => navigate(path, true),
@@ -1952,11 +2008,12 @@ function createRouterView(router, options) {
1952
2008
  };
1953
2009
  }
1954
2010
  var routerLink = (router, props, ...children) => {
2011
+ const href = router.mode === "hash" ? `#${props.to}` : props.to;
1955
2012
  return {
1956
2013
  tagName: "a",
1957
2014
  props: {
1958
2015
  ...props,
1959
- href: props.to,
2016
+ href,
1960
2017
  onclick: (e) => {
1961
2018
  e.preventDefault();
1962
2019
  router.push(props.to);
@@ -2141,6 +2198,7 @@ export {
2141
2198
  fontFace,
2142
2199
  footer,
2143
2200
  form,
2201
+ frag,
2144
2202
  fragment,
2145
2203
  generalSibling,
2146
2204
  getEl,
package/dist/router.d.mts CHANGED
@@ -30,6 +30,7 @@ interface RouterOptions {
30
30
  }
31
31
  interface Router {
32
32
  currentRoute: State<RouteLocation>;
33
+ mode: 'history' | 'hash';
33
34
  navigate: (path: string, replace?: boolean) => void;
34
35
  push: (path: string) => void;
35
36
  replace: (path: string) => void;
package/dist/router.d.ts CHANGED
@@ -24,6 +24,7 @@ export interface RouterOptions {
24
24
  }
25
25
  export interface Router {
26
26
  currentRoute: State<RouteLocation>;
27
+ mode: 'history' | 'hash';
27
28
  navigate: (path: string, replace?: boolean) => void;
28
29
  push: (path: string) => void;
29
30
  replace: (path: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAG1D,MAAM,WAAW,KAAK;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,KAAK,GAAG,KAAK,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;CAC5F;AAED,MAAM,WAAW,WAAW;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,KAAK,GAAG,KAAK,CAAC;CACrD;AAED,MAAM,WAAW,MAAM;IACnB,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,OAAO,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACxG,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AA6DD,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAiG3D;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,KAAK,CAoBpF;AAGD,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,OAAO,KAAK,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,UAAU,KAAK,EAAE,KAAG,KAahG,CAAC"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAG1D,MAAM,WAAW,KAAK;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,KAAK,GAAG,KAAK,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;CAC5F;AAED,MAAM,WAAW,WAAW;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,KAAK,GAAG,KAAK,CAAC;CACrD;AAED,MAAM,WAAW,MAAM;IACnB,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACnC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,OAAO,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACxG,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AA6DD,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAkH3D;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,KAAK,CAoBpF;AAGD,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,OAAO,KAAK,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,UAAU,KAAK,EAAE,KAAG,KAgBhG,CAAC"}
package/dist/router.js CHANGED
@@ -56,7 +56,26 @@ var DomNode = class {
56
56
  parent.appendChild(document.createTextNode(String(vNode)));
57
57
  return;
58
58
  }
59
+ if (Array.isArray(vNode)) {
60
+ for (const child of vNode) {
61
+ this.renderToDOM(child, parent);
62
+ }
63
+ return;
64
+ }
59
65
  const { tagName, props, children } = vNode;
66
+ if (!tagName) {
67
+ for (const child of children) {
68
+ if (shouldSkipChild(child)) continue;
69
+ if (Array.isArray(child)) {
70
+ for (const c of child) {
71
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
72
+ }
73
+ } else {
74
+ this.renderToDOM(child, parent);
75
+ }
76
+ }
77
+ return;
78
+ }
60
79
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
61
80
  const el = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
62
81
  for (const key in props) {
@@ -753,7 +772,20 @@ function createRouter(options) {
753
772
  if (match?.route.beforeEnter) {
754
773
  if (!executeGuard(match.route.beforeEnter, location, currentRoute.value, navigate, replace)) return;
755
774
  }
756
- const url = mode === "hash" ? "#" + path : base + path;
775
+ let urlPath = path;
776
+ let url;
777
+ if (mode === "hash") {
778
+ url = "#" + path;
779
+ } else {
780
+ const hasBaseSlash = base.endsWith("/");
781
+ const hasPathSlash = path.startsWith("/");
782
+ if (hasBaseSlash && hasPathSlash) {
783
+ urlPath = path.slice(1);
784
+ } else if (!hasBaseSlash && !hasPathSlash && path !== "/") {
785
+ urlPath = "/" + path;
786
+ }
787
+ url = base + urlPath;
788
+ }
757
789
  if (replace) {
758
790
  window.history.replaceState({ path }, "", url);
759
791
  } else {
@@ -775,6 +807,7 @@ function createRouter(options) {
775
807
  }
776
808
  return {
777
809
  currentRoute,
810
+ mode,
778
811
  navigate,
779
812
  push: (path) => navigate(path, false),
780
813
  replace: (path) => navigate(path, true),
@@ -810,11 +843,12 @@ function createRouterView(router, options) {
810
843
  };
811
844
  }
812
845
  var routerLink = (router, props, ...children) => {
846
+ const href = router.mode === "hash" ? `#${props.to}` : props.to;
813
847
  return {
814
848
  tagName: "a",
815
849
  props: {
816
850
  ...props,
817
- href: props.to,
851
+ href,
818
852
  onclick: (e) => {
819
853
  e.preventDefault();
820
854
  router.push(props.to);
package/dist/router.mjs CHANGED
@@ -28,7 +28,26 @@ var DomNode = class {
28
28
  parent.appendChild(document.createTextNode(String(vNode)));
29
29
  return;
30
30
  }
31
+ if (Array.isArray(vNode)) {
32
+ for (const child of vNode) {
33
+ this.renderToDOM(child, parent);
34
+ }
35
+ return;
36
+ }
31
37
  const { tagName, props, children } = vNode;
38
+ if (!tagName) {
39
+ for (const child of children) {
40
+ if (shouldSkipChild(child)) continue;
41
+ if (Array.isArray(child)) {
42
+ for (const c of child) {
43
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
44
+ }
45
+ } else {
46
+ this.renderToDOM(child, parent);
47
+ }
48
+ }
49
+ return;
50
+ }
32
51
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
33
52
  const el = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
34
53
  for (const key in props) {
@@ -725,7 +744,20 @@ function createRouter(options) {
725
744
  if (match?.route.beforeEnter) {
726
745
  if (!executeGuard(match.route.beforeEnter, location, currentRoute.value, navigate, replace)) return;
727
746
  }
728
- const url = mode === "hash" ? "#" + path : base + path;
747
+ let urlPath = path;
748
+ let url;
749
+ if (mode === "hash") {
750
+ url = "#" + path;
751
+ } else {
752
+ const hasBaseSlash = base.endsWith("/");
753
+ const hasPathSlash = path.startsWith("/");
754
+ if (hasBaseSlash && hasPathSlash) {
755
+ urlPath = path.slice(1);
756
+ } else if (!hasBaseSlash && !hasPathSlash && path !== "/") {
757
+ urlPath = "/" + path;
758
+ }
759
+ url = base + urlPath;
760
+ }
729
761
  if (replace) {
730
762
  window.history.replaceState({ path }, "", url);
731
763
  } else {
@@ -747,6 +779,7 @@ function createRouter(options) {
747
779
  }
748
780
  return {
749
781
  currentRoute,
782
+ mode,
750
783
  navigate,
751
784
  push: (path) => navigate(path, false),
752
785
  replace: (path) => navigate(path, true),
@@ -782,11 +815,12 @@ function createRouterView(router, options) {
782
815
  };
783
816
  }
784
817
  var routerLink = (router, props, ...children) => {
818
+ const href = router.mode === "hash" ? `#${props.to}` : props.to;
785
819
  return {
786
820
  tagName: "a",
787
821
  props: {
788
822
  ...props,
789
- href: props.to,
823
+ href,
790
824
  onclick: (e) => {
791
825
  e.preventDefault();
792
826
  router.push(props.to);
@@ -11,7 +11,7 @@ interface VNode {
11
11
  props: Props;
12
12
  children: Children;
13
13
  }
14
- type Child = VNode | string | number | boolean | null | undefined;
14
+ type Child = VNode | string | number | boolean | null | undefined | Child[];
15
15
  type Children = Child[];
16
16
  interface Props {
17
17
  [key: string]: any;
@@ -11,7 +11,7 @@ interface VNode {
11
11
  props: Props;
12
12
  children: Children;
13
13
  }
14
- type Child = VNode | string | number | boolean | null | undefined;
14
+ type Child = VNode | string | number | boolean | null | undefined | Child[];
15
15
  type Children = Child[];
16
16
  interface Props {
17
17
  [key: string]: any;
package/dist/server.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import './http.mjs';
2
2
  import './ws.mjs';
3
- export { E as ElitRequest, b as ElitResponse, H as HttpMethod, M as Middleware, S as ServerRouteContext, c as ServerRouteHandler, d as ServerRouter, u as SharedState, q as SharedStateOptions, p as StateChangeHandler, v as StateManager, i as bodyLimit, k as cacheControl, e as clearImportMapCache, m as compress, f as cors, w as createDevServer, o as createProxyHandler, g as errorHandler, h as html, j as json, l as logger, r as rateLimit, n as security, s as status, t as text } from './server-U0JYnJFs.mjs';
3
+ export { E as ElitRequest, b as ElitResponse, H as HttpMethod, M as Middleware, S as ServerRouteContext, c as ServerRouteHandler, d as ServerRouter, u as SharedState, q as SharedStateOptions, p as StateChangeHandler, v as StateManager, i as bodyLimit, k as cacheControl, e as clearImportMapCache, m as compress, f as cors, w as createDevServer, o as createProxyHandler, g as errorHandler, h as html, j as json, l as logger, r as rateLimit, n as security, s as status, t as text } from './server-Cz3z-5ls.mjs';
4
4
  import 'node:events';
5
5
  import 'events';
6
6
  import 'http';
package/dist/server.js CHANGED
@@ -2070,7 +2070,26 @@ var DomNode = class {
2070
2070
  parent.appendChild(document.createTextNode(String(vNode)));
2071
2071
  return;
2072
2072
  }
2073
+ if (Array.isArray(vNode)) {
2074
+ for (const child of vNode) {
2075
+ this.renderToDOM(child, parent);
2076
+ }
2077
+ return;
2078
+ }
2073
2079
  const { tagName, props, children } = vNode;
2080
+ if (!tagName) {
2081
+ for (const child of children) {
2082
+ if (shouldSkipChild(child)) continue;
2083
+ if (Array.isArray(child)) {
2084
+ for (const c of child) {
2085
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
2086
+ }
2087
+ } else {
2088
+ this.renderToDOM(child, parent);
2089
+ }
2090
+ }
2091
+ return;
2092
+ }
2074
2093
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
2075
2094
  const el = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
2076
2095
  for (const key in props) {
package/dist/server.mjs CHANGED
@@ -2044,7 +2044,26 @@ var DomNode = class {
2044
2044
  parent.appendChild(document.createTextNode(String(vNode)));
2045
2045
  return;
2046
2046
  }
2047
+ if (Array.isArray(vNode)) {
2048
+ for (const child of vNode) {
2049
+ this.renderToDOM(child, parent);
2050
+ }
2051
+ return;
2052
+ }
2047
2053
  const { tagName, props, children } = vNode;
2054
+ if (!tagName) {
2055
+ for (const child of children) {
2056
+ if (shouldSkipChild(child)) continue;
2057
+ if (Array.isArray(child)) {
2058
+ for (const c of child) {
2059
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
2060
+ }
2061
+ } else {
2062
+ this.renderToDOM(child, parent);
2063
+ }
2064
+ }
2065
+ return;
2066
+ }
2048
2067
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
2049
2068
  const el = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
2050
2069
  for (const key in props) {
package/dist/state.d.mts CHANGED
@@ -102,8 +102,8 @@ declare class SharedStateManager {
102
102
  clear(): void;
103
103
  }
104
104
  declare const sharedStateManager: SharedStateManager;
105
- declare const reactive: <T>(state: State<T>, renderFn: (value: T) => VNode | Child) => VNode;
106
- declare const reactiveAs: <T>(tagName: string, state: State<T>, renderFn: (value: T) => VNode | Child, props?: Props) => VNode;
105
+ declare const reactive: <T>(state: State<T>, renderFn: (value: T) => VNode | Child | Child[]) => VNode;
106
+ declare const reactiveAs: <T>(tagName: string, state: State<T>, renderFn: (value: T) => VNode | Child | Child[], props?: Props) => VNode;
107
107
  declare const text: (state: State<any> | any) => VNode | string;
108
108
  declare const bindValue: <T extends string | number>(state: State<T>) => Props;
109
109
  declare const bindChecked: (state: State<boolean>) => Props;
package/dist/state.d.ts CHANGED
@@ -96,8 +96,8 @@ declare class SharedStateManager {
96
96
  clear(): void;
97
97
  }
98
98
  export declare const sharedStateManager: SharedStateManager;
99
- export declare const reactive: <T>(state: State<T>, renderFn: (value: T) => VNode | Child) => VNode;
100
- export declare const reactiveAs: <T>(tagName: string, state: State<T>, renderFn: (value: T) => VNode | Child, props?: Props) => VNode;
99
+ export declare const reactive: <T>(state: State<T>, renderFn: (value: T) => VNode | Child | Child[]) => VNode;
100
+ export declare const reactiveAs: <T>(tagName: string, state: State<T>, renderFn: (value: T) => VNode | Child | Child[], props?: Props) => VNode;
101
101
  export declare const text: (state: State<any> | any) => VNode | string;
102
102
  export declare const bindValue: <T extends string | number>(state: State<T>) => Props;
103
103
  export declare const bindChecked: (state: State<boolean>) => Props;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
package/dist/state.js CHANGED
@@ -71,7 +71,26 @@ var DomNode = class {
71
71
  parent.appendChild(document.createTextNode(String(vNode)));
72
72
  return;
73
73
  }
74
+ if (Array.isArray(vNode)) {
75
+ for (const child of vNode) {
76
+ this.renderToDOM(child, parent);
77
+ }
78
+ return;
79
+ }
74
80
  const { tagName, props, children } = vNode;
81
+ if (!tagName) {
82
+ for (const child of children) {
83
+ if (shouldSkipChild(child)) continue;
84
+ if (Array.isArray(child)) {
85
+ for (const c of child) {
86
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
87
+ }
88
+ } else {
89
+ this.renderToDOM(child, parent);
90
+ }
91
+ }
92
+ return;
93
+ }
75
94
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
76
95
  const el = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
77
96
  for (const key in props) {
@@ -885,7 +904,11 @@ var scheduleRAFUpdate = (rafId, updateFn) => {
885
904
  };
886
905
  var renderToFragment = (content, isVNode) => {
887
906
  const fragment = document.createDocumentFragment();
888
- if (isVNode && content && typeof content === "object" && "tagName" in content) {
907
+ if (Array.isArray(content)) {
908
+ for (const child of content) {
909
+ dom.renderToDOM(child, fragment);
910
+ }
911
+ } else if (isVNode && content && typeof content === "object" && "tagName" in content) {
889
912
  const { children } = content;
890
913
  for (const child of children) {
891
914
  dom.renderToDOM(child, fragment);
@@ -972,7 +995,8 @@ var reactive = (state, renderFn) => {
972
995
  children: vnode.children
973
996
  };
974
997
  }
975
- return { tagName: "span", props: { ref: refCallback }, children: [initialResult] };
998
+ const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];
999
+ return { tagName: "span", props: { ref: refCallback, style: { display: "contents" } }, children: initialChildren };
976
1000
  };
977
1001
  var reactiveAs = (tagName, state, renderFn, props = {}) => {
978
1002
  let rafId = null;
@@ -998,7 +1022,9 @@ var reactiveAs = (tagName, state, renderFn, props = {}) => {
998
1022
  const refCallback = (el) => {
999
1023
  elementRef = el;
1000
1024
  };
1001
- return { tagName, props: { ...props, ref: refCallback }, children: [renderFn(state.value)] };
1025
+ const initialResult = renderFn(state.value);
1026
+ const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];
1027
+ return { tagName, props: { ...props, ref: refCallback }, children: initialChildren };
1002
1028
  };
1003
1029
  var text = (state) => state && state.value !== void 0 ? reactive(state, (v) => ({ tagName: "span", props: {}, children: [String(v)] })) : String(state);
1004
1030
  var bindValue = (state) => ({
package/dist/state.mjs CHANGED
@@ -28,7 +28,26 @@ var DomNode = class {
28
28
  parent.appendChild(document.createTextNode(String(vNode)));
29
29
  return;
30
30
  }
31
+ if (Array.isArray(vNode)) {
32
+ for (const child of vNode) {
33
+ this.renderToDOM(child, parent);
34
+ }
35
+ return;
36
+ }
31
37
  const { tagName, props, children } = vNode;
38
+ if (!tagName) {
39
+ for (const child of children) {
40
+ if (shouldSkipChild(child)) continue;
41
+ if (Array.isArray(child)) {
42
+ for (const c of child) {
43
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
44
+ }
45
+ } else {
46
+ this.renderToDOM(child, parent);
47
+ }
48
+ }
49
+ return;
50
+ }
32
51
  const isSVG = tagName === "svg" || tagName[0] === "s" && tagName[1] === "v" && tagName[2] === "g" || parent.namespaceURI === "http://www.w3.org/2000/svg";
33
52
  const el = isSVG ? document.createElementNS("http://www.w3.org/2000/svg", tagName.replace("svg", "").toLowerCase() || tagName) : document.createElement(tagName);
34
53
  for (const key in props) {
@@ -842,7 +861,11 @@ var scheduleRAFUpdate = (rafId, updateFn) => {
842
861
  };
843
862
  var renderToFragment = (content, isVNode) => {
844
863
  const fragment = document.createDocumentFragment();
845
- if (isVNode && content && typeof content === "object" && "tagName" in content) {
864
+ if (Array.isArray(content)) {
865
+ for (const child of content) {
866
+ dom.renderToDOM(child, fragment);
867
+ }
868
+ } else if (isVNode && content && typeof content === "object" && "tagName" in content) {
846
869
  const { children } = content;
847
870
  for (const child of children) {
848
871
  dom.renderToDOM(child, fragment);
@@ -929,7 +952,8 @@ var reactive = (state, renderFn) => {
929
952
  children: vnode.children
930
953
  };
931
954
  }
932
- return { tagName: "span", props: { ref: refCallback }, children: [initialResult] };
955
+ const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];
956
+ return { tagName: "span", props: { ref: refCallback, style: { display: "contents" } }, children: initialChildren };
933
957
  };
934
958
  var reactiveAs = (tagName, state, renderFn, props = {}) => {
935
959
  let rafId = null;
@@ -955,7 +979,9 @@ var reactiveAs = (tagName, state, renderFn, props = {}) => {
955
979
  const refCallback = (el) => {
956
980
  elementRef = el;
957
981
  };
958
- return { tagName, props: { ...props, ref: refCallback }, children: [renderFn(state.value)] };
982
+ const initialResult = renderFn(state.value);
983
+ const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];
984
+ return { tagName, props: { ...props, ref: refCallback }, children: initialChildren };
959
985
  };
960
986
  var text = (state) => state && state.value !== void 0 ? reactive(state, (v) => ({ tagName: "span", props: {}, children: [String(v)] })) : String(state);
961
987
  var bindValue = (state) => ({
package/dist/types.d.mts CHANGED
@@ -235,7 +235,7 @@ interface VNode {
235
235
  props: Props;
236
236
  children: Children;
237
237
  }
238
- type Child = VNode | string | number | boolean | null | undefined;
238
+ type Child = VNode | string | number | boolean | null | undefined | Child[];
239
239
  type Children = Child[];
240
240
  interface Props {
241
241
  [key: string]: any;
package/dist/types.d.ts CHANGED
@@ -6,7 +6,7 @@ export interface VNode {
6
6
  props: Props;
7
7
  children: Children;
8
8
  }
9
- export type Child = VNode | string | number | boolean | null | undefined;
9
+ export type Child = VNode | string | number | boolean | null | undefined | Child[];
10
10
  export type Children = Child[];
11
11
  export interface Props {
12
12
  [key: string]: any;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "elit",
3
- "version": "3.3.0",
3
+ "version": "3.3.2",
4
4
  "description": "Optimized lightweight library for creating DOM elements with reactive state",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
package/src/dom.ts CHANGED
@@ -47,12 +47,42 @@ export class DomNode {
47
47
  renderToDOM(vNode: Child, parent: HTMLElement | SVGElement | DocumentFragment): void {
48
48
  if (vNode == null || vNode === false) return;
49
49
 
50
+ // Handle primitive values (strings, numbers)
50
51
  if (typeof vNode !== 'object') {
51
52
  parent.appendChild(document.createTextNode(String(vNode)));
52
53
  return;
53
54
  }
54
55
 
56
+ // Handle arrays (Child[])
57
+ if (Array.isArray(vNode)) {
58
+ for (const child of vNode) {
59
+ this.renderToDOM(child, parent);
60
+ }
61
+ return;
62
+ }
63
+
64
+ // Handle VNode
55
65
  const { tagName, props, children } = vNode;
66
+
67
+ // Handle fragment (empty tagName) - render children directly to parent
68
+ if (!tagName) {
69
+ // Fragments don't have their own element, so skip ref handling
70
+ // The ref will be handled by the wrapper element created by reactive()
71
+ // Render children directly to parent
72
+ for (const child of children) {
73
+ if (shouldSkipChild(child)) continue;
74
+
75
+ if (Array.isArray(child)) {
76
+ for (const c of child) {
77
+ !shouldSkipChild(c) && this.renderToDOM(c, parent);
78
+ }
79
+ } else {
80
+ this.renderToDOM(child, parent);
81
+ }
82
+ }
83
+ return;
84
+ }
85
+
56
86
  const isSVG = tagName === 'svg' || (tagName[0] === 's' && tagName[1] === 'v' && tagName[2] === 'g') ||
57
87
  (parent as any).namespaceURI === 'http://www.w3.org/2000/svg';
58
88
 
package/src/el.ts CHANGED
@@ -147,6 +147,25 @@ export const {
147
147
  export const el = elements;
148
148
  // Export elements object for dynamic access
149
149
  export { elements };
150
+ // Fragment element factory - groups children without a wrapper element
151
+ // Similar to React's Fragment: <><div>1</div><div>2</div></>
152
+ export const frag: ElementFactory = function(...children: Child[]): VNode {
153
+ const flatChildren: Child[] = [];
154
+ for (let i = 0, len = children.length; i < len; i++) {
155
+ const child = children[i];
156
+ if (child == null || child === false) continue;
157
+
158
+ if (Array.isArray(child)) {
159
+ for (let j = 0, cLen = child.length; j < cLen; j++) {
160
+ const c = child[j];
161
+ c != null && c !== false && flatChildren.push(c);
162
+ }
163
+ } else {
164
+ flatChildren.push(child);
165
+ }
166
+ }
167
+ return { tagName: '', props: {}, children: flatChildren };
168
+ } as ElementFactory;
150
169
 
151
170
  // DOM utility functions - Shorthand helpers for common document operations
152
171
  export const doc = hasDocument ? document : undefined as any;
package/src/router.ts CHANGED
@@ -31,6 +31,7 @@ export interface RouterOptions {
31
31
 
32
32
  export interface Router {
33
33
  currentRoute: State<RouteLocation>;
34
+ mode: 'history' | 'hash';
34
35
  navigate: (path: string, replace?: boolean) => void;
35
36
  push: (path: string) => void;
36
37
  replace: (path: string) => void;
@@ -157,7 +158,23 @@ export function createRouter(options: RouterOptions): Router {
157
158
  if (!executeGuard(match.route.beforeEnter, location, currentRoute.value, navigate, replace)) return;
158
159
  }
159
160
 
160
- const url = mode === 'hash' ? '#' + path : base + path;
161
+ // Remove leading slash from path if base has trailing slash, or add slash if needed
162
+ let urlPath = path;
163
+ let url: string;
164
+ if (mode === 'hash') {
165
+ url = '#' + path;
166
+ } else {
167
+ // Ensure proper path joining
168
+ const hasBaseSlash = base.endsWith('/');
169
+ const hasPathSlash = path.startsWith('/');
170
+ if (hasBaseSlash && hasPathSlash) {
171
+ urlPath = path.slice(1); // Remove duplicate slash
172
+ } else if (!hasBaseSlash && !hasPathSlash && path !== '/') {
173
+ urlPath = '/' + path; // Add slash between
174
+ }
175
+ url = base + urlPath;
176
+ }
177
+
161
178
  if (replace) {
162
179
  window.history.replaceState({ path }, '', url);
163
180
  } else {
@@ -183,6 +200,7 @@ export function createRouter(options: RouterOptions): Router {
183
200
 
184
201
  return {
185
202
  currentRoute,
203
+ mode,
186
204
  navigate,
187
205
  push: (path: string) => navigate(path, false),
188
206
  replace: (path: string) => navigate(path, true),
@@ -224,11 +242,14 @@ export function createRouterView(router: Router, options: RouterOptions): () =>
224
242
 
225
243
  // Link component - prevents default and uses router
226
244
  export const routerLink = (router: Router, props: Props & { to: string }, ...children: Child[]): VNode => {
245
+ // Use router.mode to determine href format
246
+ const href = router.mode === 'hash' ? `#${props.to}` : props.to;
247
+
227
248
  return {
228
249
  tagName: 'a',
229
250
  props: {
230
251
  ...props,
231
- href: props.to,
252
+ href,
232
253
  onclick: (e: MouseEvent) => {
233
254
  e.preventDefault();
234
255
  router.push(props.to);
package/src/state.ts CHANGED
@@ -307,10 +307,15 @@ const scheduleRAFUpdate = (rafId: number | null, updateFn: () => void): number =
307
307
  };
308
308
 
309
309
  // Helper function to render content to fragment (reused in reactive and reactiveAs)
310
- const renderToFragment = (content: VNode | Child, isVNode?: boolean): DocumentFragment => {
310
+ const renderToFragment = (content: VNode | Child | Child[], isVNode?: boolean): DocumentFragment => {
311
311
  const fragment = document.createDocumentFragment();
312
312
 
313
- if (isVNode && content && typeof content === 'object' && 'tagName' in content) {
313
+ if (Array.isArray(content)) {
314
+ // Handle array of children
315
+ for (const child of content) {
316
+ dom.renderToDOM(child, fragment);
317
+ }
318
+ } else if (isVNode && content && typeof content === 'object' && 'tagName' in content) {
314
319
  const { children } = content as VNode;
315
320
  for (const child of children) {
316
321
  dom.renderToDOM(child, fragment);
@@ -344,7 +349,7 @@ const updateElementProps = (element: HTMLElement | SVGElement, props: Props): vo
344
349
  };
345
350
 
346
351
  // Reactive element helpers
347
- export const reactive = <T>(state: State<T>, renderFn: (value: T) => VNode | Child): VNode => {
352
+ export const reactive = <T>(state: State<T>, renderFn: (value: T) => VNode | Child | Child[]): VNode => {
348
353
  let rafId: number | null = null;
349
354
  let elementRef: HTMLElement | SVGElement | null = null;
350
355
  let placeholder: Comment | null = null;
@@ -379,7 +384,7 @@ export const reactive = <T>(state: State<T>, renderFn: (value: T) => VNode | Chi
379
384
  const { props } = newResult as VNode;
380
385
  updateElementProps(elementRef, props);
381
386
  }
382
- const fragment = renderToFragment(newResult, isCurrentVNode);
387
+ const fragment = renderToFragment(newResult as any, isCurrentVNode);
383
388
  elementRef.textContent = '';
384
389
  elementRef.appendChild(fragment);
385
390
  dom.getElementCache().set(elementRef, true);
@@ -412,14 +417,18 @@ export const reactive = <T>(state: State<T>, renderFn: (value: T) => VNode | Chi
412
417
  };
413
418
  }
414
419
 
415
- return { tagName: 'span', props: { ref: refCallback }, children: [initialResult] };
420
+ // Handle array result - wrap in fragment-like VNode
421
+ const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];
422
+
423
+ // Use span with display: contents as wrapper (doesn't affect layout)
424
+ return { tagName: 'span', props: { ref: refCallback, style: { display: 'contents' } }, children: initialChildren };
416
425
  };
417
426
 
418
427
  // Reactive element with custom wrapper tag
419
428
  export const reactiveAs = <T>(
420
429
  tagName: string,
421
430
  state: State<T>,
422
- renderFn: (value: T) => VNode | Child,
431
+ renderFn: (value: T) => VNode | Child | Child[],
423
432
  props: Props = {}
424
433
  ): VNode => {
425
434
  let rafId: number | null = null;
@@ -435,7 +444,7 @@ export const reactiveAs = <T>(
435
444
  elementRef.textContent = '';
436
445
  } else {
437
446
  (elementRef as HTMLElement).style.display = '';
438
- const fragment = renderToFragment(newResult, false);
447
+ const fragment = renderToFragment(newResult as any, false);
439
448
  elementRef.textContent = '';
440
449
  elementRef.appendChild(fragment);
441
450
  }
@@ -449,7 +458,10 @@ export const reactiveAs = <T>(
449
458
  elementRef = el;
450
459
  };
451
460
 
452
- return { tagName, props: { ...props, ref: refCallback }, children: [renderFn(state.value)] };
461
+ const initialResult = renderFn(state.value);
462
+ const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];
463
+
464
+ return { tagName, props: { ...props, ref: refCallback }, children: initialChildren };
453
465
  };
454
466
 
455
467
  export const text = (state: State<any> | any): VNode | string =>
package/src/types.ts CHANGED
@@ -8,7 +8,7 @@ export interface VNode {
8
8
  children: Children;
9
9
  }
10
10
 
11
- export type Child = VNode | string | number | boolean | null | undefined;
11
+ export type Child = VNode | string | number | boolean | null | undefined | Child[];
12
12
  export type Children = Child[];
13
13
 
14
14
  export interface Props {