{"_id":"kofi","_rev":"41-567d0d2960b1fd40dfd1beadb8b793c0","name":"kofi","dist-tags":{"latest":"0.14.0"},"versions":{"0.6.0":{"name":"kofi","version":"0.6.0","keywords":["kofi","vdom","virtual-dom","browser"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.6.0","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"2c1eb1136979b0b010f598dee16205d81d5cc9af","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.6.0.tgz","fileCount":4,"integrity":"sha512-fYzH3Akq0sivuI/GhD6BnM3O8ueDdzaoSX6CLqDFJXigr6V6jUMcI1hLVvoZ62JVI7ZxxKdBT96FTEUvpnq0Gg==","signatures":[{"sig":"MEUCIF6dCkuZWkdt/DcGTKqH1hL9b/yKJqWBQ+IQcpvP2Gb2AiEA6lLqUU6TIMNCSeO98cuvmhj8DIxlKZ4qWt1pTKojlcA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13580},"main":"kofi.js","type":"module","module":"kofi.js","exports":{".":"./kofi.js","./kofi.js":"./kofi.js","./package.json":"./package.json"},"gitHead":"efa6e91c538ffe6eb1590eb1c8f7b9c911afd913","private":false,"scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"10.2.4","description":"Tasty takeaway Virtual DOM toolkit. Just pour it and go!","directories":{},"_nodeVersion":"21.6.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.6.0_1713280761691_0.2704836432547635","host":"s3://npm-registry-packages"}},"0.6.1":{"name":"kofi","version":"0.6.1","keywords":["kofi","vdom","virtual-dom","browser"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.6.1","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"de3896733344b445646c55ebcce28a75154affd1","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.6.1.tgz","fileCount":5,"integrity":"sha512-YKuuPTVSUVm8jl3+WjI6/TMA01LoE9xBf0R3Ui/ESk5AW89YoP6g4sdan1UuykTN9XAPfjHHoSViYl9x17vXAA==","signatures":[{"sig":"MEUCIQCBk3HSOLS0pMf908qui4CiOJyCWcptl/paCIT+Z5YKmgIgH0H/9+ED773IW/7ig+6bvf6RB+9saxjX3wKJBjOAUh4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13581},"main":"kofi.js","type":"module","module":"kofi.js","exports":{".":"./kofi.js","./kofi.js":"./kofi.js","./package.json":"./package.json"},"private":false,"scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"https://github.com/jmjuanes/kofi","type":"git"},"description":"Tasty takeaway Virtual DOM toolkit. Just pour it and go!","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2018 Josemi Juanes\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.6.1_1713291030270_0.9120930284718956","host":"s3://npm-registry-packages"}},"0.7.0":{"name":"kofi","version":"0.7.0","keywords":["kofi","vdom","virtual-dom","browser"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.7.0","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"c9c1478a60df813964b9ed654ad856c4925fc18d","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.7.0.tgz","fileCount":5,"integrity":"sha512-x2qj3yFrzFYFGkQmP3hpAxRNymfN+etnZG4klC7VjoFfzbFVVfbxv5JxfatpfM6mMZ8qPaS6wRq3Dl4PbdQdSw==","signatures":[{"sig":"MEQCICPe1HIp0VdcCExtfW9MXxD0bwD+Gwhc6DbeNc2v8K9GAiAiQBr5OP7Tf26I0ehNRHI6lPRXmqQu4pikJ1PGHAg06g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20683},"main":"kofi.js","type":"module","module":"kofi.js","exports":{".":"./kofi.js","./kofi.js":"./kofi.js","./package.json":"./package.json"},"private":false,"scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"https://github.com/jmjuanes/kofi","type":"git"},"description":"Tasty takeaway frontend toolkit for creating small applications.","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2018 Josemi Juanes\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.7.0_1714072841125_0.5644348554673269","host":"s3://npm-registry-packages"}},"0.8.0":{"name":"kofi","version":"0.8.0","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.8.0","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"a08be85b0889cff2cfc006062d0344ddea7a99e4","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.8.0.tgz","fileCount":4,"integrity":"sha512-luknNYsN6cJRFaBACma746y6sJvgJftjBg7uodOYk5TYMJszCJiNlWyZCgD7X3hIZvVZ7rNQMif8KiBT/Ned8w==","signatures":[{"sig":"MEUCICH9Lj09J802I3auf+PASqpDRDK+eV3K8oljSJJR+3+EAiEArBKv/gsKCtM7TfYUJK2sOWi4ug5SAWHguKHTE4ODkUQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20999},"main":"kofi.js","type":"module","module":"kofi.js","exports":{".":"./kofi.js","./kofi.js":"./kofi.js","./package.json":"./package.json"},"gitHead":"2c1489382d66f1d928890a7b1a3aecadc60ffe25","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"10.8.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.8.0_1726081154273_0.7826903556231042","host":"s3://npm-registry-packages"}},"0.9.0":{"name":"kofi","version":"0.9.0","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.9.0","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"c4e2b58ed2ed505fdabead10eeb07d94ac822f47","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.9.0.tgz","fileCount":4,"integrity":"sha512-ho4AmX4lYSGbGeSLvzMsuI4AviHmYLR6SVVU0PjZPHFU0ODM5T8KmSz/AweBfRPkDvZayNwu51jdEZH8/fDwxA==","signatures":[{"sig":"MEYCIQCnCNasIgssIylC5YLGfYLQoKczxpNGOFgkKJojow7oUAIhAM/8z3xmpHJScciKox9d9kBlHIJ/HLHjS223sNawuamO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23642},"main":"kofi.js","type":"module","module":"kofi.js","exports":{".":"./kofi.js","./kofi.js":"./kofi.js","./package.json":"./package.json"},"gitHead":"83d0a3b82161d47e4db8f7a46476ed013d26f8be","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"10.8.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.9.0_1726159769389_0.1967772356517159","host":"s3://npm-registry-packages"}},"0.9.1":{"name":"kofi","version":"0.9.1","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.9.1","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"3223fdcad5cae627b47924355a8131ac11840677","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.9.1.tgz","fileCount":4,"integrity":"sha512-y2aGuTLM+Hzq/SyqNZx8EV50aBaSZFbdOJl8SdVfR+MwlnYBjY3tV/kGsRfHCmkx2dLfIu61clu8FOjtRNP6Ow==","signatures":[{"sig":"MEYCIQCcYy6jhShv/o601NIvixMOi9bUBvU3yrbVepIrg1t7NgIhAISaHgB6WU+TljyD/luBCFic/9x1jyvoY3cLKbMCG3rk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25709},"main":"kofi.js","type":"module","module":"kofi.js","exports":{".":"./kofi.js","./kofi.js":"./kofi.js","./package.json":"./package.json"},"gitHead":"6de1c0d7e6ee1675dfb055061c8a637d317ad051","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"10.8.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.9.1_1726679414382_0.7680406373864996","host":"s3://npm-registry-packages"}},"0.9.2":{"name":"kofi","version":"0.9.2","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.9.2","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"b51380b022a5f0d10dc65e9704f2965df5e58c2c","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.9.2.tgz","fileCount":4,"integrity":"sha512-yTrDxYB63ACwy5Beay+BFMNkfzpWwH7csqsjDk7JungJctwWIE8wHlT08DCxJhxd/vebuEC15NLngCnTOdEZEg==","signatures":[{"sig":"MEQCIEpUf8yzQM6+t7rjHB3p5sEftpg022x1HJtC5U9RUfpfAiB1DeQDyUlHrl5yG6aR5WA8OWXj5jNfOLZbYOTLIKfTvQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25245},"main":"kofi.js","type":"module","module":"kofi.js","exports":{".":"./kofi.js","./kofi.js":"./kofi.js","./package.json":"./package.json"},"gitHead":"be19bd81dfd24d2c3a39b63876fc8bb2b181aebc","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"10.8.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.9.2_1726914737103_0.38995220989751744","host":"s3://npm-registry-packages"}},"0.10.0":{"name":"kofi","version":"0.10.0","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.10.0","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"c3b79ccfea0ff0c5519cc16138ebc3d6d6bb604a","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.10.0.tgz","fileCount":4,"integrity":"sha512-dzt+9VXyMpqln9VNZ9Ms9BiF2RKYixOx/r1Z8P5Y2nHqXrJCtvlQBJ5k/gWUZU6yj+IXJf/UFy4v3ysByVo+yw==","signatures":[{"sig":"MEUCID+w/N09gHFuvHcCbnOHrrKRpTvho7raqI++efQGdBFZAiEAuKwwXztwxjctvAahBwTpRGj0acdVNPZCErvcpneQ034=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26547},"main":"kofi.js","type":"module","module":"kofi.js","exports":{".":"./kofi.js","./kofi.js":"./kofi.js","./package.json":"./package.json"},"gitHead":"c0b59092c74822b7fa884094e0551766496f7481","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"10.8.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.10.0_1727019483447_0.5017522646303458","host":"s3://npm-registry-packages"}},"0.10.1":{"name":"kofi","version":"0.10.1","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.10.1","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"c242e3531c033448b8ad81752099b60ec2dc3ca0","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.10.1.tgz","fileCount":4,"integrity":"sha512-TZow+ZcswPHRheYJ4HzRsFIGgtmap8COsfzM0BbYDmAWhwjRRWWB8q0qZzirm3xmH3TkfCh0C9qsDyHZv2whHA==","signatures":[{"sig":"MEQCICaWVCoOQYTudoS+E61bEZm9z/ct60txPRSuZe0iY19aAiBfIorPOOcZzX/8aJql9I1bVBl2dbf6nxd2ufMcPp7hbg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26801},"main":"kofi.js","type":"module","module":"kofi.js","exports":{".":"./kofi.js","./kofi.js":"./kofi.js","./package.json":"./package.json"},"gitHead":"f4f62346e8d4dbe45dbe65f7e806f17e936de31f","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"10.8.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.10.1_1727117805298_0.21157759876526216","host":"s3://npm-registry-packages"}},"0.11.0":{"name":"kofi","version":"0.11.0","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.11.0","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"c311736e9b2722baaf00ea6c5a0e3bcd69ed44cc","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.11.0.tgz","fileCount":4,"integrity":"sha512-5CpL5BxwHnGUkedvs8mr8BYj0aRIub6JSmSykKyaKpLvAYckwNBU/W+AubyqCfihD6Yqcie9XhBprx7JW4K0rA==","signatures":[{"sig":"MEQCIBlXwweGWBsie4s6RHal8OW/ymcwxzS5W9pN968PHHSEAiB6TvSywmYsPLNGRNnXvgxtmE8XEn+YIuGx/rxcfURm1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27863},"main":"index.js","type":"module","module":"index.js","exports":{".":"./index.js","./package.json":"./package.json"},"gitHead":"64cc34afb3847b07308aadfe49e7af8480bea3a0","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"11.6.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.11.0_1767545542561_0.47717169624814537","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"kofi","version":"0.11.1","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.11.1","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"8a6b85ff476d60ebce1a717ac92ddcc9816d165c","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.11.1.tgz","fileCount":4,"integrity":"sha512-yTVwnOT3jCYCKXs8U4BDn9r9kMXYnMwVRz9QxZKPf2YwzD7ko6ucmUsarB2aWMs4FMkC/oCqqgJ+tubkduqB7g==","signatures":[{"sig":"MEQCIAXglbUzcFRlx25hcj+t7FetWSYMkelcjMfEsjQYohpyAiBb91z5HE5GbWEZTAusspahUN/TLKdtTo7GKxTeBwse1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27868},"main":"index.js","type":"module","module":"index.js","exports":{".":"./index.js","./package.json":"./package.json"},"gitHead":"091e51ea7c1439017ee161736985023249d590e9","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"11.6.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/kofi_0.11.1_1767567681415_0.5067993895606016","host":"s3://npm-registry-packages-npm-production"}},"0.11.2":{"name":"kofi","version":"0.11.2","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.11.2","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"b061161d9bacf99dbe96cab731dda9b79fcc1afc","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.11.2.tgz","fileCount":4,"integrity":"sha512-Wjgiw7ioWfNl4fhEXfgjqlBQPBFyw9yeBHS1y4gnpFhDa/PhXrHO+YciyYO+vrknStp1JwUCnZxDs3wHuZczhQ==","signatures":[{"sig":"MEUCIQC8T4ZGp9cJ/R1tmVcZ0ih+y7wBEhamm10QmPUAbdsLGgIgeA2jKD/HN/ZTQhjMfU2LoxPi+WhXQk2gxxa2En5HjvQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27923},"main":"index.js","type":"module","module":"index.js","exports":{".":"./index.js","./package.json":"./package.json"},"gitHead":"64042c77cda15e0072a2b6055ee472ed399f7ed2","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"11.6.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.4.0"},"_npmOperationalInternal":{"tmp":"tmp/kofi_0.11.2_1767643359979_0.8351716721606417","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"kofi","version":"0.12.0","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.12.0","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"7d599f1a45ba0cc79f22b1f5bc3927f56e0879c1","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.12.0.tgz","fileCount":4,"integrity":"sha512-xpZMGdIJ9mywoXb83ud78jx05byq8/Laq7zhMtK3E6k1USACgbW+X4+eAun78iKVcRxkEoOlcfz6E/tpwszsoQ==","signatures":[{"sig":"MEYCIQCMAu+iVv10QCCruZBAWTc5SjGH/HvIi0LMNxoiKYj+wQIhAJZkCv2e/I36uF7ueKkTlasKKZAPenHm2bUalzPtn/99","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28692},"main":"index.js","type":"module","module":"index.js","exports":{".":"./index.js","./package.json":"./package.json"},"gitHead":"b4cbd1588085b3351d02e20dd2ace7bb949eeeef","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"11.6.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.4.0"},"_npmOperationalInternal":{"tmp":"tmp/kofi_0.12.0_1767696946861_0.027246566416422313","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"kofi","version":"0.12.1","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.12.1","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"1819fa16a9a9817b92ee179308ebe75a6a5741b1","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.12.1.tgz","fileCount":4,"integrity":"sha512-2U7aK1HR7BgztB/WtoA3D1FezV+jyp7dFyzaLCZ0NsDdGRS0C3tpjiG6DvEVPesnE/XgpGFb4BOOvZD0+1BXIg==","signatures":[{"sig":"MEUCIC/lrWG3GLXpd05wJyefitZF78OT/hUohM1XvcxHt8FhAiEAsTf1Xshe0RxR3Fm7qOCMhJnGEsYQbjt5yO3dpgYEsco=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28708},"main":"index.js","type":"module","module":"index.js","exports":{".":"./index.js","./package.json":"./package.json"},"gitHead":"1081db27326e339a67a11839155685f308f6c63e","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"11.6.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.4.0"},"_npmOperationalInternal":{"tmp":"tmp/kofi_0.12.1_1768502058871_0.6119260769443129","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"kofi","version":"0.13.0","keywords":["vdom","frontend","library","ui"],"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","_id":"kofi@0.13.0","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"homepage":"https://github.com/jmjuanes/kofi#readme","bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"dist":{"shasum":"53ecde0abcbd51e0ab783e411f9a4f4f61bb2f06","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.13.0.tgz","fileCount":4,"integrity":"sha512-IT9uLREfzLaCwDIHpjI71t0WvC/5ixAbO3MDM/U68U7Sd43RMn8rM4e3CRbzihYqI446sli8LgBb2prexDpRgg==","signatures":[{"sig":"MEQCIBp2sH4TcD0cJPRhSR+TT45uJmm0iZyhDwV2oQsDJhN1AiAnbfuX+HgBYyRAFfMYZdXvDj55jmE97LuYbUCFzkyznA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31723},"main":"index.js","type":"module","module":"index.js","exports":{".":"./index.js","./package.json":"./package.json"},"gitHead":"f9f58761b3f425ce1ef624b047dc587cb838d14b","scripts":{"test":"node test.js"},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"repository":{"url":"git+https://github.com/jmjuanes/kofi.git","type":"git"},"_npmVersion":"11.6.2","description":"Tasty takeaway frontend library for creating small applications.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.4.0"},"_npmOperationalInternal":{"tmp":"tmp/kofi_0.13.0_1768583362372_0.018211335098377246","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"kofi","version":"0.14.0","description":"Tasty takeaway frontend library for creating small applications.","type":"module","repository":{"type":"git","url":"git+https://github.com/jmjuanes/kofi.git"},"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"license":"MIT","main":"index.js","module":"index.js","exports":{".":"./index.js","./package.json":"./package.json"},"scripts":{"test":"node test.js"},"devDependencies":{"jsdom":"^27.4.0"},"keywords":["vdom","frontend","library","ui"],"gitHead":"b294d85d09b5e014b7742f725abc4ba72fc2d183","_id":"kofi@0.14.0","homepage":"https://github.com/jmjuanes/kofi#readme","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-jRReLXaps8Qhto8jGBM7owasAbOmZj9fsP+H9STGbKxYuFhU32uu1ob3aDFQkanGuaLVSbC5w4U2qI97+pG5xw==","shasum":"78a591505dd9aabbc33ad9f7277bbfb4391623af","tarball":"https://registry.npmjs.org/kofi/-/kofi-0.14.0.tgz","fileCount":4,"unpackedSize":34780,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDg8J1ou4VwCgQuTay9TgLozfVqUlNYXZrsyLeB5UcRAgIgNGhnPnOmnSo4AxKhZ2anjTiRURjJVK3GQeTQLFe6yLM="}]},"_npmUser":{"name":"jmjuanes","email":"josemijuanes@gmail.com"},"directories":{},"maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kofi_0.14.0_1768679770360_0.8037385800166523"},"_hasShrinkwrap":false}},"time":{"created":"2024-04-16T15:19:21.691Z","modified":"2026-01-17T19:56:10.600Z","0.0.1":"2017-02-03T13:59:54.841Z","0.0.2":"2017-02-03T17:09:26.143Z","0.0.3":"2017-02-04T19:09:46.085Z","0.0.4":"2017-02-07T17:54:35.563Z","0.1.0":"2018-03-29T16:03:06.923Z","0.1.1":"2018-04-05T13:43:43.566Z","0.1.2":"2018-04-07T18:56:25.025Z","0.1.3":"2018-04-15T16:25:07.539Z","0.2.0":"2019-07-04T10:25:26.182Z","0.3.0":"2019-09-29T12:13:47.521Z","0.3.1":"2019-10-22T11:22:22.710Z","0.4.0":"2020-01-11T18:05:07.572Z","0.4.1":"2020-12-16T22:26:52.553Z","0.4.2":"2021-01-20T20:05:44.602Z","0.4.3":"2021-01-22T16:09:52.492Z","0.4.4":"2021-05-07T22:40:35.629Z","0.4.5":"2021-05-26T13:54:19.554Z","0.5.0":"2022-01-07T19:06:31.241Z","0.5.1":"2022-01-09T17:01:19.993Z","0.6.0":"2024-04-16T15:19:21.837Z","0.6.1":"2024-04-16T18:10:30.442Z","0.7.0":"2024-04-25T19:20:41.266Z","0.8.0":"2024-09-11T18:59:14.479Z","0.9.0":"2024-09-12T16:49:29.526Z","0.9.1":"2024-09-18T17:10:14.532Z","0.9.2":"2024-09-21T10:32:17.274Z","0.10.0":"2024-09-22T15:38:03.717Z","0.10.1":"2024-09-23T18:56:45.489Z","0.11.0":"2026-01-04T16:52:22.711Z","0.11.1":"2026-01-04T23:01:21.576Z","0.11.2":"2026-01-05T20:02:40.137Z","0.12.0":"2026-01-06T10:55:46.993Z","0.12.1":"2026-01-15T18:34:18.991Z","0.13.0":"2026-01-16T17:09:22.507Z","0.14.0":"2026-01-17T19:56:10.497Z"},"bugs":{"url":"https://github.com/jmjuanes/kofi/issues"},"author":{"name":"Josemi Juanes","email":"hello@josemi.xyz"},"license":"MIT","homepage":"https://github.com/jmjuanes/kofi#readme","keywords":["vdom","frontend","library","ui"],"repository":{"type":"git","url":"git+https://github.com/jmjuanes/kofi.git"},"description":"Tasty takeaway frontend library for creating small applications.","maintainers":[{"name":"jmjuanes","email":"josemijuanes@gmail.com"}],"readme":"# kofi\n\n![npm version](https://badgen.net/npm/v/kofi?labelColor=1d2734&color=21bf81)\n![license](https://badgen.net/github/license/jmjuanes/kofi?labelColor=1d2734&color=21bf81)\n![PRs welcome](https://badgen.net/badge/PRs/welcome/kofi?labelColor=1d2734&color=21bf81)\n![status](https://badgen.net/badge/status/on_development?labelColor=1d2734&color=orange)\n![stability](https://badgen.net/badge/stability/experimental?labelColor=1d2734&color=orange)\n\n**Kofi** is a JavaScript library (less than 400 lines of code) for building small **frontend applications**. \n\n\n## Installation\n\nYou can add **kofi** to your project using NPM or Yarn:\n\n```\n## Install using NPM\n$ npm install --save kofi\n\n## Install using Yarn\n$ yarn add kofi\n```\n\n## Getting started\n\nThe **kofi** package can be used via modules:\n\n```html\n<script type=\"module\">\n    import kofi from \"node_modules/kofi/index.js\";\n</script>\n```\n\n## API\n\n### kofi(type, props[, ...children])\n\nCreates a new VDOM Node element of the specified `type`, with the specified `props` and `children`.\n\n```javascript\nkofi(\"div\", {\"align\": \"center\"}); // --> <div align=\"center\"></div>\n\nkofi(\"div\", {}, \"Hello world\"); // --> <div>Hello world</div>\n```\n\nThis method does not return a DOM element. It returns a Virtual DOM Node element, which is a JSON representation of the DOM element. \n\nTo transform it into a real DOM element, use `kofi.render`.\n\n#### Type\n\nThe `type` argument can be either a tag name string (such as `\"div\"` or `\"a\"`) or a function.\n\n```javascript\n//Using a tag name\nkofi(\"a\", {\"href\": \"https://google.es\"}, \"Click me!\"); \n//Renders to: <a href=\"https://google.es\">Click me!</a>\n\n//Using a function\nconst Welcome = (props, children) => {\n    return kofi(\"span\", {}, `Hello ${props.name}`);\n};\n\nkofi(Welcome, {\"name\": \"Bob\"}); \n//Renders to: <span>Hello Bob</span>\n```\n\n#### Props\n\nThe `props` argument is an object with the data of the element. This can include HTML attributes, events listeners or custom properties that our functional element will use.\n\n```javascript\nkofi(\"div\", {\n    \"className\": \"button\",\n    \"onclick\": event => { /* Handle click event */ },\n    \"id\": \"button1\",\n});\n```\n\n##### Class names\n\nUse the `className` property to set the CSS class.\n\n```javascript\nkofi(\"div\", {\"className\": \"button\"}, \"Button\");\n```\n\n##### Events\n\nAttach a callback listener to an event.\n\n```javascript\nkofi(\"div\", {\n    \"onclick\": event => { /* Handle click event */ },\n    \"onmousedown\": event => { /* Handle mouse down event */ },\n    \"onmouseup\": event => { /* Handle mouse up event */ },\n});\n```\n\n##### References\n\nUse the `ref` property to save a reference of the element.\n\n```javascript\n// 1. use kofi.ref to generate a reference variable\nconst inputRef = kofi.ref();\n\n// 2. assign inputRef to an element\nkofi(\"input\", {ref: inputRef});\n\n// 3. now you can access to the referenced element\nconsole.log(inputRef.current.value);\n```\n\n##### Styles\n\nYou can provide an object with the style of the element. All styles attributes should be in camel-case format.\n\n```javascript\nkofi(\"div\", {\n    style: {\n        backgroundColor: \"blue\",\n        color: \"white\",\n    },\n    align: \"center\"\n}, \"Hello\");\n```\n\n#### Use it with JSX\n\nYou can use the babel's plugin [@babel/plugin-transform-react-jsx](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx) for creating DOM elements using JSX. \n\nThis example using JSX: \n\n```jsx\n/** @jsx k */\nimport k from \"kofi\";\n\nconst user = (\n    <div>\n        <img className=\"avatar\" src=\"/path/to/user.png\" />\n        <span>Hello user</span>\n    </div>\n);\n```\n\nCompiles to:\n\n```javascript\n/** @jsx k */\nconst k = require(\"kofi\");\n\nconst user = k(\"div\", null, \n    k(\"img\", {\"className\": \"avatar\", \"src\": \"/path/to/user.png\"}),\n    k(\"span\", null, \"Hello user\"),\n);\n```\n\n### kofi.html\n\nA JavaScript [template tag](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates) that converts a JSX-like syntax into a VDOM tree, that you can use with `kofi.render`.\n\nExample:\n\n```javascript\nimport k from \"kofi\";\n\nconst user = k.html`\n    <div align=\"center\">\n        <img className=\"avatar\" src=\"/path/to/user.png\" />\n        <span>Hello user</span>\n    </div>\n`;\n```\n\nFeatures:\n- Dynamic props: `<div align=\"${currentAlign}\" />`.\n- Dynamic content: `<div>Hello ${name}</div>`.\n- Events: `<div onClick=\"${() => console.log(\"clicked\")}\"></div>`.\n- Spread props: `<div ...${extraProps}>`.\n\n### kofi.ref()\n\nReturns a new object with a single key `current` initialized to `null`. Use this object to save a reference to rendered elements with `kofi.render`.\n\n\n### kofi.render(element, parent)\n\nRenders a VDOM Node to the DOM.\n\n```javascript\nconst el = kofi(\"div\", {}, \"Hello world!\");\n\nkofi.render(el, document.getElementById(\"root\"));\n```\n\nThe first arguments is the VDOM Node to render, and the second argument is the parent DOM element. Returns a reference to the rendered DOM element.\n\n### kofi.portal(child, parent)\n\nCreates a special VDOM node that renders its child into a different DOM container. Portals allow you to place UI elements outside of their natural position in the DOM tree while keeping them inside the same VDOM tree.\n\nThis is useful for modals, tooltips, dropdowns, and any UI that must visually escape its parent container.\n\n```javascript\nconst App = (state) => {\n    return kofi.html`\n        <div>\n            <button onClick=\"${() => state.open = true}\">\n                Open modal\n            </button>\n            ${state.open ? kofi.portal(kofi.html`\n                <div class=\"modal\">\n                    <p>This is a modal</p>\n                    <button onClick=\"${() => state.open = false}\">\n                        Close\n                    </button>\n                </div>\n            `, document.querySelector(\"#modal-root\")) : \"\"}\n        </div>\n    `;\n};\n\nkofi.render(App({ open: false }), document.body);\n```\n\nNotes:\n\n- `child` must be a single VDOM node (e.g. the result of `kofi.html`).\n- The portal does not support arrays of children.\n- The `parent` must be a real DOM element.\n\n### kofi.state(initialState)\n\nA simplified state management utility for handling object-based state. It provides an easy-to-use API for updating state and managing listeners for state changes.\n\n```javascript\n// 1. initialize state with an object\nconst state = kofi.state({ count: 0 });\n\n// 2. update state\nstate.setState(prevState => {\n    return { count: prevState.count + 1 };\n});\n\n// 3. register a listener for state changes\nconst listener = currentState => {\n    console.log(\"Count updated:\", currentState.count);\n};\nstate.on(listener);\n\n// 4. remove the listener when no longer needed\nstate.off(listener);\n```\n\nThis method returns an object containing the following methods:\n\n#### `state.getState()`\n\nReturns the current state.\n\n#### `state.setState(partialState)`\n\nUpdates the current state by merging the `partialState` with the existing state. It also supports a function as argument that will be called with the current state object.\n\n```javascript\nstate.setState(prevState => {\n    // return a new object with the derivered state\n});\n```\n\nAfter the state is updated, any registered listeners will be notified.\n\n#### `state.on(listener)`\n\nRegisters a listener function that will be called whenever the state is updated. The listener will be called with the current state.\n\n#### `state.off(listener)`\n\nUnregisters a previously registered listener, preventing it from being called on future state updates.\n\nNotes:\n\n- State changes are shallow, meaning only top-level properties are merged. Nested objects will not be deeply merged.\n- You can register multiple listeners, and they will all be notified upon a state change.\n- Updating the state is an async operation. The `state.setState` method returns a promise that will resolve when the state have been updated.\n\n### kofi.emitter(initialEvents)\n\nA tiny event emitter designed for simple message passing between parts of your application. Create a new emitter instance by calling:\n\n```javascript\nconst emitter = kofi.emitter();\n```\n\nYou can also use the constructor to register message listeners:\n\n```javascript\nconst emitter = kofi.emitter({\n    \"foo\": data => {\n        console.log(data);\n    },\n});\n\nemitter.emit(\"foo\", \"bar\");\n```\n\nEach emitter instance is isolated and manages its own set of listeners. An emitter exposes three methods:\n\n#### `emitter.on(name, listener)`\n\nRegisters a listener for a given event name.\n\n```javascript\nemitter.on(\"ready\", () => {\n    console.log(\"The app is ready\");\n});\n```\nListeners are stored in order of registration and are called synchronously.\n\n#### `emitter.off(name, listener)`\n\nRemoves a previously registered listener.\n\n```javascript\nfunction onReady() {\n    console.log(\"Ready!\");\n};\n\nemitter.on(\"ready\", onReady);\nemitter.off(\"ready\", onReady);\n```\n\nIf the listener is not registered, the call is ignored.\n\n#### `emitter.emit(name, data)`\n\nEmits an event, calling all listeners registered under that name. Listeners receive the payload as their only argument.\n\n```javascript\nemitter.emit(\"ready\", { time: Date.now() });\n```\n\nNotes about the emitter implementation: \n\n-  The bus is intentionally minimal: no wildcard events, no once - listeners, no async scheduling.\n-  Perfect for small apps, local communication, or lightweight state propagation.\n-  Multiple bus instances can coexist without interfering with each other.\n- You can also use `kofi.bus` as an alias of `kofi.emitter`.\n\n### kofi.ready(fn)\n\nExecutes the provided function `fn` when the DOM becomes ready. This utility is similar to [jQuery's ready method](https://api.jquery.com/ready/).\n\n```javascript \n// Execute this function when the DOM is ready\nkofi.ready(() => {\n    console.log(\"DOM is ready\");\n});\n```\n\n## Directives\n\n> Added in `v0.14.0`.\n\nDirectives are small declarative utilities that extend template behavior without adding weight to kofi’s core. They act as focused, opt‑in building blocks you can apply directly in your markup, keeping components expressive and intention‑driven.\n\nUnlike generic helpers, directives are designed to feel native to kofi’s philosophy: minimal, predictable, and free of hidden mechanics. Each directive does one thing, does it well, and stays out of the rendering pipeline unless explicitly used.\n\nAll directives live under the `kofi.directives` namespace and can be used inside any kofi template literal.\n\n### kofi.directives.uid(size)\n\nGenerates a unique, stable identifier for the lifetime of a component instance. Ideal for attributes like `id`, `for`, or any scenario where you need a collision‑free value without manually managing state.\n\nThe directive is evaluated once per template instance, ensuring the value remains consistent across renders.\n\n```javascript\nimport kofi from \"kofi\";\n\nconst MyInput = () => {\n    const uid = kofi.directives.uid();\n    return kofi.html`\n        <label for=${uid}>Name</label>\n        <input id=${uid} type=\"text\" />\n    `;\n};\n```\n\n### kofi.directives.classMap(...)\n\nA tiny utility for conditionally joining classNames. This function takes any number of arguments which can be an string, an object or an array. When providing an object, if the value associated with a given key is truthly, that key will be included in the generated classNames string. Non string values will be also ignored.\n\n```javascript\nkofi.directives.classMap(\"foo\", \"bar\"); // -> \"foo bar\"\nkofi.directives.classMap(\"foo\", null, false, \"bar\"); // -> \"foo bar\"\nkofi.directives.classMap(\"foo\", [\"bar\", null]); // -> \"foo bar\"\nkofi.directives.classMap({\n    \"foo\": true,\n    \"bar\": false,\n}); // -> \"foo\"\n```\n\n### kofi.directives.styleMap({ ... })\n\nThe `styleMap` directive is a function that takes an object as input, where keys represent CSS attribute names, and values represent corresponding attribute values. It returns a valid CSS style string based on the input object.\n\n```javascript\nconst styles = kofi.directives.styleMap({\n    fontSize: \"16px\",\n    color: \"blue\",\n    backgroundColor: \"lightgray\",\n});\n\nconsole.log(styles);\n// Output: 'font-size: 16px; color: blue; background-color: lightgray;'\n```\n\n### kofi.directives.when(condition, trueTemplate, falseTemplate)\n\nRenders one of the two templates based on the value of `condition`.\n\n\n## License\n\n**kofi** is released under the [MIT LICENSE](./LICENSE).\n","readmeFilename":"README.md"}