{"version":3,"file":"create-element-9Co6scJx.cjs","sources":["../lib/core/utils/index.ts","../lib/core/signal/signal.utils.ts","../lib/core/dom-render/create-element/element-factory.ts","../lib/core/dom-render/create-element/adapt-virtual-element-child.ts","../lib/core/dom-render/create-element/create-element.ts"],"sourcesContent":["import { VirtualElement } from \"@/types\";\n\nexport function isNodeElement(node: unknown): node is Element {\n  return !!node && (node as Node)?.nodeType === Node.ELEMENT_NODE;\n}\n\nexport function isNodeText(node: unknown): node is Text {\n  return !!node && (node as Node)?.nodeType === Node.TEXT_NODE;\n}\n\nexport function isHTMLElement(value: any): value is HTMLElement {\n  return value instanceof HTMLElement;\n}\n\nexport function isSVGElement(value: any): value is SVGElement {\n  return value instanceof SVGElement;\n}\n\nexport function isRawElement(value: any): value is Element | Text {\n  return isNodeElement(value) || isSVGElement(value) || isNodeText(value);\n}\n\n\nexport function isVirtualElement(value: unknown): value is VirtualElement {\n  return typeof value === 'object' && value !== null && 'type' in value && 'props' in value;\n}","import { signal } from \"./signal\";\nimport type { Signal, Unsignalize } from \"./signal.types\";\n\nexport function getSignalValue<T>(signal: Signal<T> | T): T {\n    return isSignal<T>(signal) ? signal.value : signal;\n}\n\nexport function unsignalizeObject<T extends object>(object: T): Unsignalize<T> {\n    const result = {} as Unsignalize<T>;\n    for (const key in object) {\n        const value = object[key];\n        result[key as string] = getSignalValue(value) as any;\n    }\n    return result;\n}\n\n\nexport function isSignal<T = unknown>(value: unknown): value is Signal<T> {\n    return typeof value === 'function' && typeof (value as Signal<T>).subscribe === 'function';\n}\n\n\nexport function listen(\n    listener: (changeEvent: { initiator: Signal }) => void, \n    signals: Signal<unknown>[]\n): (() => void ){\n    const unsubscribe = signals.map(signal => signal.subscribe(() => listener({ initiator: signal })));\n    return () => unsubscribe.forEach(unsubscribe => unsubscribe());\n}\n\nexport function combineLatest<T0, T1 = T0, T2 = T1, T3 = T2, T4 = T3, T5 = T4>(signals: [Signal<T0>, Signal<T1>, Signal<T2>, Signal<T3>, Signal<T4>, Signal<T5>]): Signal<[T0, T1, T2, T3, T4, T5]>;\nexport function combineLatest<T0, T1 = T0, T2 = T1, T3 = T2, T4 = T3>(signals: [Signal<T0>, Signal<T1>, Signal<T2>, Signal<T3>, Signal<T4>]): Signal<[T0, T1, T2, T3, T4]>;\nexport function combineLatest<T0, T1 = T0, T2 = T1, T3 = T2>(signals: [Signal<T0>, Signal<T1>, Signal<T2>, Signal<T3>]): Signal<[T0, T1, T2, T3]>;\nexport function combineLatest<T0, T1 = T0, T2 = T1>(signals: [Signal<T0>, Signal<T1>, Signal<T2>]): Signal<[T0, T1, T2]>;\nexport function combineLatest<T0, T1 = T0>(signals: [Signal<T0>, Signal<T1>]): Signal<[T0, T1]>;\nexport function combineLatest<T>(signals: Signal<T>[]): Signal<any> {\n    const latestValues: T[] = signals.map(signal => signal.value);\n    const combinedSignal = signal<T[]>(latestValues);\n    signals.forEach((signal, index) => {\n        signal.subscribe(value => {\n            latestValues[index] = value;\n            combinedSignal.emit([...latestValues]);\n        });\n    });\n    return combinedSignal;\n}","import type { Renderable, VirtualElement, ComponentFunction, AsyncComponentFunction, Props } from \"@/types\";\nimport type { Signal } from \"@/core/signal\";\nimport { ELEMENT_TYPE, COMPONENT_NAME_SYMBOL } from \"@/constants\";\n\nexport function createTextElement(text: string): VirtualElement {\n    return {\n        type: ELEMENT_TYPE.TEXT,\n        props: {\n            nodeValue: text,\n            children: []\n        }\n    };\n}\n\nexport function createSignalElement<T = unknown>(signal: Signal<T>): VirtualElement {\n    return {\n        type: ELEMENT_TYPE.SIGNAL,\n        props: {\n            signal,\n            children: []\n        },\n    };\n}\n\nexport function createEmptyElement(): VirtualElement {\n    return {\n        type: ELEMENT_TYPE.EMPTY,\n        props: {\n            children: []\n        }\n    };\n}\n\nexport function createComponentElement(component: ComponentFunction | AsyncComponentFunction, props: object, ...children: Renderable[]): VirtualElement {\n    const componentName = component.name;\n    return {\n        type: ELEMENT_TYPE.COMPONENT,\n        props: {\n            ...props,\n            children,\n        },\n        meta: {\n            component,\n            [COMPONENT_NAME_SYMBOL]: componentName,\n        }\n    };\n}\n\nexport function createRawElement(rawElement: HTMLElement | Element | Text, props: Props, ...children: Renderable[]): VirtualElement {\n    return {\n        type: ELEMENT_TYPE.RAW,\n        props: {\n            ...props,\n            rawElement,\n            children\n        }\n    };\n}\n\nexport function createDomElement(tagName: string, props: Props, ...children: Renderable[]): VirtualElement {\n    return {\n        type: ELEMENT_TYPE.DOM,\n        props: {\n            ...props,\n            tagName,\n            children,\n        }\n    };\n}\n","import { isSignal } from \"@/core/signal\";\nimport { Renderable, VirtualElement } from \"@/types\";\nimport { createSignalElement, createEmptyElement, createTextElement } from \"../create-element\";\nimport { createRawElement } from \"./element-factory\";\nimport { isRawElement } from \"@/core/utils\";\n\n\n\nexport function adaptVirtualElementChild(child: Renderable): VirtualElement {\n    switch (true) {\n        case isSignal(child):\n            return createSignalElement(child);\n        case child === null:\n        case child === undefined:\n        case child === false:\n            return createEmptyElement();\n        case isRawElement(child):\n            return createRawElement(child, {});\n        case typeof child === 'object':\n            return <VirtualElement>child ;\n        case typeof child === 'string':\n        case typeof child === 'number':\n        case typeof child === 'boolean':\n            return createTextElement(String(child));\n        default:\n            throw new Error(`Invalid child type: ${typeof child}`);\n    }\n}\n","import type { Renderable, VirtualElement, ComponentFunction, Props } from \"@/types\";\nimport { isRawElement } from \"@/core/utils\";\nimport { adaptVirtualElementChild } from \"./adapt-virtual-element-child\";\nimport { createComponentElement, createRawElement, createDomElement } from \"./element-factory\";\n\n\nexport function createElement(type: string | ComponentFunction | HTMLElement | Element | Text,): VirtualElement;\nexport function createElement<T = Record<string, unknown>>(type: string | ComponentFunction<T> | HTMLElement | Element | Text, props: Props<T>, ...children: Renderable[]): VirtualElement\nexport function createElement(\n    type: string | ComponentFunction | HTMLElement | Element | Text,\n    props: Props | undefined = {},\n    ...children: Renderable[]\n): VirtualElement {\n    const flatChildren = children.filter(Boolean).flat(Infinity).filter(Boolean);\n    const adaptedChildren = flatChildren.map(adaptVirtualElementChild);\n    return typeof type === 'function'\n        ? createComponentElement(type, props, ...adaptedChildren)\n        : isRawElement(type) ? \n            createRawElement(type, props, ...adaptedChildren) :\n            createDomElement(type, props, ...adaptedChildren);\n}\n"],"names":["isNodeElement","node","isNodeText","isSVGElement","value","isRawElement","isVirtualElement","getSignalValue","signal","isSignal","listen","listener","signals","unsubscribe","combineLatest","latestValues","combinedSignal","index","createTextElement","text","ELEMENT_TYPE","createSignalElement","createEmptyElement","createComponentElement","component","props","children","componentName","COMPONENT_NAME_SYMBOL","createRawElement","rawElement","createDomElement","tagName","adaptVirtualElementChild","child","createElement","type","adaptedChildren"],"mappings":"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"}