{"version":3,"file":"index.mjs","sources":["../node_modules/mitt/dist/mitt.mjs","../index.ts"],"sourcesContent":["export default function(n){return{all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e])},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]))},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e)}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e)})}}}\n//# sourceMappingURL=mitt.mjs.map\n","/**\n * @source https://github.com/artemsites/dom\n * @source https://gitverse.ru/artemsites/dom\n *\n * @api:\n * createScope - creating an object in the DOM for working with the library\n * ref - reactive state\n * data-class is an attribute of an HTML element for dynamic class management\n */\nimport mitt from \"mitt\";\n\nexport const emitter = mitt();\n\ntype Wrapper = any;\n\ninterface ComponentInstance {\n    [key: string]: any;\n}\n\ninterface State {\n    value: any;\n}\n\ndeclare global {\n    interface Window {\n        [key: string]: any;\n    }\n}\n\nlet stateNamesHashes = new Map();\n\nlet createUUID = ()=>{}\nif (window && typeof window.crypto.randomUUID === 'function') {\n    createUUID = window.crypto.randomUUID.bind(window.crypto)\n} else {\n    createUUID = generateUniqueId\n}\n\nexport function createScope(\n    scopeId: string,\n    scope: (e) => ComponentInstance,\n    alias: string = \"\"\n) {\n    const $wrapper = document.getElementById(scopeId);\n\n    if ($wrapper) {\n        const scopeInstance = scope($wrapper);\n\n        // @note handle data-ref\n        handlerRefsInDom($wrapper as Wrapper, scopeInstance);\n\n        // @note handle data-click\n        handlerClickReactive($wrapper, scopeInstance);\n\n        // @note handle data-class\n        handlerClassesReactive($wrapper, scopeInstance);\n\n        // @note handle input[data-value]\n        handlerInputDataValueReactive($wrapper, scopeInstance);\n\n        // @note handle data-change\n        handlerChangeReactive($wrapper, scopeInstance);\n\n        // @note handle data-input\n        handlerInputReactive($wrapper, scopeInstance);\n\n        if (alias !== \"\") {\n            window[alias] = scopeInstance;\n        } else {\n            window[scopeId] = scopeInstance;\n        }\n    } else {\n        console.warn(\"Not found wrapper: #\" + scopeId);\n    }\n}\n\nexport function createComponent(wrapperClass: string, component: (e) => {}) {\n    const wrappers = document.getElementsByClassName(\n        wrapperClass\n    ) as HTMLCollection;\n    for (let $wrapper of wrappers) {\n        if ($wrapper) {\n            const componentInstance: ComponentInstance = component($wrapper);\n            if (isObject(componentInstance)) {\n                // @note handle data-ref\n                handlerRefsInDom($wrapper as Wrapper, componentInstance);\n\n                // @note handle data-click\n                handlerClickReactive($wrapper as Wrapper, componentInstance);\n\n                // @note handle data-class\n                handlerClassesReactive($wrapper as Wrapper, componentInstance);\n\n                // @note handle input[data-value]\n                // ! @todo not tested!!!\n                handlerInputDataValueReactive(\n                    $wrapper as Wrapper,\n                    componentInstance\n                );\n\n                // @note handle data-change\n                handlerChangeReactive($wrapper as Wrapper, componentInstance);\n\n                // @note handle data-input\n                handlerInputReactive($wrapper, componentInstance);\n            }\n        } else {\n            console.warn(\"Not found wrapper: .\" + wrapperClass);\n        }\n    }\n}\n\nexport function ref(defaultValue: any): State {\n    const stateNameHash = `state_${createUUID()}`;\n    let state: State = { value: defaultValue };\n\n    const proxyState = new Proxy<State>(state, {\n        set(stateTarget, prop, valueNew) {\n            if (prop === \"value\") {\n                if (stateTarget[\"value\"] !== valueNew) {\n                    stateTarget[\"value\"] = valueNew;\n                    emitter.emit(stateNameHash, stateTarget);\n                }\n                return true;\n            }\n            return false;\n        },\n    });\n\n    stateNamesHashes.set(proxyState, stateNameHash);\n\n    emitter.emit(stateNameHash, proxyState);\n\n    return proxyState;\n}\n\nfunction handlerRefsInDom($wrapper: Wrapper, instance: ComponentInstance) {\n    const refsInDomAll = findAllByAttr(\"data-ref\", $wrapper);\n\n    refsInDomAll.forEach(($refEl) => {\n        const refName = $refEl.getAttribute(\"data-ref\");\n        if (refName && instance[refName]) {\n            instance[refName].value = $refEl;\n        } else {\n            console.warn(\"The data-ref name was not found in: \", $refEl);\n        }\n    });\n}\n\nfunction handlerInputDataValueReactive(\n    $wrapper: Wrapper,\n    instance: ComponentInstance\n) {\n    const dataValues = findAllByAttr(\"data-value\", $wrapper);\n\n    dataValues.forEach(($dataValue) => {\n        if ($dataValue instanceof HTMLInputElement) {\n            const dataValue: string | null = $dataValue.getAttribute('data-value') || null;\n\n            if (dataValue) {\n                const jsExpressionWithPrefix: string = dataValue;\n                let jsExpression = deleteWordPrefix(jsExpressionWithPrefix);\n                const state = instance[jsExpression];\n                if (state) {\n                    $dataValue.value = state.value;\n                    const stateNameHash = stateNamesHashes.get(state);\n                    emitter.on(stateNameHash, (newState: any) => {\n                        $dataValue.value = newState.value;\n                    });\n                }\n            }\n        }\n    });\n}\n\nfunction handlerClickReactive($wrapper: Wrapper, instance: ComponentInstance) {\n    const elClicks = findAllByAttr(\"data-click\", $wrapper);\n\n    if (elClicks.length) {\n        elClicks.forEach(($elOnClick) => {\n            let methodNameOnClick = $elOnClick.getAttribute('data-click');\n\n            if (methodNameOnClick) {\n                // ! Это для убирания префикса например header. - оно пока не мешает в случае если его нет вообще\n                const methodNameOnClickWithoutPrefix =\n                    deleteWordPrefix(methodNameOnClick);\n\n                const methodOnClick = instance[methodNameOnClickWithoutPrefix];\n                if (methodOnClick) {\n                    $elOnClick.addEventListener(\"click\", function (e) {\n                        methodOnClick(e);\n                    });\n                }\n            } else {\n                console.warn(\n                    \"The name of the data-click method was not found in: \",\n                    $elOnClick\n                );\n            }\n        });\n    }\n}\n\nfunction handlerChangeReactive($wrapper: Wrapper, instance: ComponentInstance) {\n    const elChanges = findAllByAttr(\"data-change\", $wrapper);\n\n    if (elChanges.length) {\n        elChanges.forEach(($elOnchange) => {\n            if ($elOnchange) {\n                let methodNameOnChange = $elOnchange.getAttribute('data-change');\n                if (methodNameOnChange) {\n                    // ! Это для убирания префикса например header. - оно пока не мешает в случае если его нет вообще\n                    const methodNameOnChangeWithoutPrefix =\n                        deleteWordPrefix(methodNameOnChange);\n                    const methodOnChange =\n                        instance[methodNameOnChangeWithoutPrefix];\n                    if (methodOnChange) {\n                        $elOnchange.addEventListener(\"change\", function (e) {\n                            methodOnChange(e);\n                        });\n                    }\n                }\n            } else {\n                console.warn(\n                    \"The name of the data-click method was not found in: \",\n                    $elOnchange\n                );\n            }\n        });\n    }\n}\n\nfunction handlerInputReactive($wrapper: Wrapper, instance: ComponentInstance) {\n    const elInputs = findAllByAttr(\"data-input\", $wrapper);\n    if (elInputs.length) {\n        elInputs.forEach(($elOnInput) => {\n            if ($elOnInput) {\n                let methodNameOnInput = $elOnInput.getAttribute('data-input');\n                if (methodNameOnInput) {\n                    // ! Это для убирания префикса например header. - оно пока не мешает в случае если его нет вообще\n                    const methodNameOnInputWithoutPrefix =\n                        deleteWordPrefix(methodNameOnInput);\n                    const methodOnInput =\n                        instance[methodNameOnInputWithoutPrefix];\n                    if (methodOnInput) {\n                        $elOnInput.addEventListener(\"input\", function (e) {\n                            methodOnInput(e);\n                        });\n                    }\n                }\n            } else {\n                console.warn(\n                    \"The name of the data-click method was not found in: \",\n                    $elOnInput\n                );\n            }\n        });\n    }\n}\n\nfunction handlerClassesReactive(\n    $wrapper: Wrapper,\n    instance: ComponentInstance\n) {\n    const elClasses = findAllByAttr(\"data-class\", $wrapper);\n\n    elClasses.forEach(($el) => {\n        handlerClassesReactiveSubFunc1($el);\n    });\n\n    function handlerClassesReactiveSubFunc1($el: HTMLElement) {\n        let jsonString = $el.getAttribute('data-class');\n        if (jsonString) {\n            // @todo deletion is necessary in another place so that one component does not delete the data-class of another component.\n            // $el.removeAttribute(\"data-class\");\n\n            let parsedJson;\n            try {\n                parsedJson = JSON.parse(jsonString);\n            } catch (error) {\n                console.error(\"Error at JSON string: \" + jsonString);\n                console.error(error);\n            }\n\n            if (Array.isArray(parsedJson)) {\n                for (let i in parsedJson) {\n                    let jsExpressionTernary = parsedJson[i];\n\n                    const regex = /(.+?)\\s*\\?\\s*(.+?)\\s*:\\s*(.+)/;\n                    const match = jsExpressionTernary.match(regex);\n\n                    let jsNameWithPrefix = match[1];\n                    const classNameTrue = match[2];\n                    const classNameFalse = match[3];\n                    const className = [classNameTrue, classNameFalse];\n\n                    handlerClassesReactiveSubFunc2(\n                        $el,\n                        className,\n                        jsNameWithPrefix\n                    );\n                }\n            } else if (isObject(parsedJson)) {\n                for (let className in parsedJson) {\n                    let jsNameWithPrefix = parsedJson[className];\n\n                    handlerClassesReactiveSubFunc2(\n                        $el,\n                        className,\n                        jsNameWithPrefix\n                    );\n                }\n            }\n        } else {\n            console.warn(\"The data-class JSON string was not found in: \", $el);\n        }\n    }\n\n    function handlerClassesReactiveSubFunc2(\n        $el: HTMLElement,\n        className: string | string[],\n        jsNameWithPrefix: string\n    ) {\n        let isRevertVal = false;\n        if (jsNameWithPrefix[0] === \"!\") {\n            isRevertVal = true;\n            jsNameWithPrefix = jsNameWithPrefix.slice(1);\n        }\n\n        let jsExpression = deleteWordPrefix(jsNameWithPrefix);\n\n        const isNotEqualExpression = jsExpression.includes(\"!=\");\n        const isEqualExpression = jsExpression.includes(\"==\");\n        if (isNotEqualExpression || isEqualExpression) {\n            if (isNotEqualExpression) {\n                const regex = /!=/;\n                const operator = \"!=\";\n                splitExpressionAndCompareAndUpdateClassesReactive(\n                    jsExpression,\n                    regex,\n                    operator,\n                    isRevertVal,\n                    className,\n                    $el\n                );\n            } else if (isEqualExpression) {\n                const regex = /==/;\n                const operator = \"==\";\n                splitExpressionAndCompareAndUpdateClassesReactive(\n                    jsExpression,\n                    regex,\n                    operator,\n                    isRevertVal,\n                    className,\n                    $el\n                );\n            }\n        } else {\n            const operator = \"==\";\n            const jsName = jsExpression;\n            const jsVal = true;\n            compareAndUpdateClassesReactive(\n                jsName,\n                jsVal,\n                operator,\n                isRevertVal,\n                className,\n                $el\n            );\n        }\n    }\n\n    function splitExpressionAndCompareAndUpdateClassesReactive(\n        jsExpression: any,\n        regex: any,\n        operator: any,\n        isRevertVal: any,\n        className: any,\n        $el: any\n    ) {\n        const res = splitExpression(jsExpression, regex);\n        if (res && res.length === 2) {\n            const [jsName, jsVal] = res;\n            compareAndUpdateClassesReactive(\n                jsName,\n                jsVal,\n                operator,\n                isRevertVal,\n                className,\n                $el\n            );\n        }\n    }\n\n    function compareAndUpdateClassesReactive(\n        jsName: any,\n        jsVal: any,\n        operator: any,\n        isRevertVal: any,\n        className: any,\n        $el: any\n    ) {\n        const state = instance[jsName];\n        if (!state) {\n            showWarnIfRefNotFound($wrapper, jsName);\n        } else {\n            const isTrue = compare(state.value, jsVal, operator);\n\n            toggleClass(isTrue, className, $el, isRevertVal);\n            const stateNameHash = stateNamesHashes.get(state);\n\n            emitter.on(stateNameHash, (newState: any) => {\n                const isTrue = compare(newState.value, jsVal, operator);\n                toggleClass(isTrue, className, $el, isRevertVal);\n            });\n        }\n    }\n\n    function toggleClass(\n        value: any,\n        className: string | string[],\n        where: HTMLElement,\n        isRevertVal = false\n    ) {\n        try {\n            const isTrue = (value && !isRevertVal) || (!value && isRevertVal);\n            if (typeof className === \"string\") {\n                if (isTrue) {\n                    where.classList.add(className);\n                } else {\n                    where.classList.remove(className);\n                }\n            } else if (Array.isArray(className)) {\n                const [classIfTrue, classIfFalse] = className;\n                if (isTrue) {\n                    where.classList.remove(classIfFalse);\n                    where.classList.add(classIfTrue);\n                } else {\n                    where.classList.remove(classIfTrue);\n                    where.classList.add(classIfFalse);\n                }\n            }\n        } catch (error) {\n            console.error(error);\n        }\n    }\n}\n\nfunction showWarnIfRefNotFound($wrapper: Wrapper, jsName: string) {\n    const instanceId =\n        \"#\" + $wrapper.getAttribute(\"id\") ||\n        \".\" + $wrapper.getAttribute(\"class\");\n    console.warn(\n        `Ref ${jsName} is not exists at ${instanceId}. Perhaps the component is located in another component.`\n    );\n}\n\n// ! tools:\nfunction isObject(value: any) {\n    return value !== null && typeof value === \"object\";\n}\n\nfunction deleteWordPrefix(strWithprefixWithDot: string) {\n    return strWithprefixWithDot.replace(/^\\w+\\./, \"\");\n}\n\nfunction splitExpression(\n    expression: string,\n    regex: RegExp\n): [string, string] | null {\n    const parts = expression.split(regex);\n\n    if (parts.length === 2) {\n        return [parts[0].trim(), parts[1].trim()];\n    }\n\n    return null;\n}\n\nfunction compare(value1: any, value2: any, operator: string) {\n    switch (operator) {\n        case \"!=\":\n            return value1 != value2;\n        case \"==\":\n            return value1 == value2;\n        case \"<\":\n            return value1 < value2;\n        case \">\":\n            return value1 > value2;\n        case \"<=\":\n            return value1 <= value2;\n        case \">=\":\n            return value1 >= value2;\n        default:\n            throw new Error(\"Invalid operator\");\n    }\n}\n\nfunction findAllByAttr(attr: string, $wrapper: HTMLElement) {\n    const els = $wrapper.querySelectorAll(`[${attr}]`) as NodeListOf<\n        HTMLElement | HTMLInputElement\n    >;\n\n    const elsAll = [...Array.from(els)];\n\n    if ($wrapper.dataset && $wrapper.getAttribute(attr)) {\n        elsAll.push($wrapper);\n    }\n\n    return elsAll;\n}\n\nfunction generateUniqueId() {\n    // 4 - версия UUID\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n        const r = Math.random() * 16 | 0;\n        const v = c === 'x' ? r : (r & 0x3 | 0x8); // Установка варианта UUID\n        return v.toString(16);\n    });\n}\n"],"names":["mitt","n","t","e","i","emitter","stateNamesHashes","createUUID","generateUniqueId","createScope","scopeId","scope","alias","$wrapper","scopeInstance","handlerRefsInDom","handlerClickReactive","handlerClassesReactive","handlerInputDataValueReactive","handlerChangeReactive","handlerInputReactive","createComponent","wrapperClass","component","wrappers","componentInstance","isObject","ref","defaultValue","stateNameHash","state","proxyState","stateTarget","prop","valueNew","instance","findAllByAttr","$refEl","refName","$dataValue","dataValue","jsExpression","deleteWordPrefix","newState","elClicks","$elOnClick","methodNameOnClick","methodNameOnClickWithoutPrefix","methodOnClick","elChanges","$elOnchange","methodNameOnChange","methodNameOnChangeWithoutPrefix","methodOnChange","elInputs","$elOnInput","methodNameOnInput","methodNameOnInputWithoutPrefix","methodOnInput","$el","handlerClassesReactiveSubFunc1","jsonString","parsedJson","error","jsExpressionTernary","regex","match","jsNameWithPrefix","classNameTrue","classNameFalse","handlerClassesReactiveSubFunc2","className","isRevertVal","isNotEqualExpression","isEqualExpression","splitExpressionAndCompareAndUpdateClassesReactive","compareAndUpdateClassesReactive","operator","res","splitExpression","jsName","jsVal","showWarnIfRefNotFound","isTrue","compare","toggleClass","value","where","classIfTrue","classIfFalse","instanceId","strWithprefixWithDot","expression","parts","value1","value2","attr","els","elsAll","c","r"],"mappings":"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","x_google_ignoreList":[0]}