{"_id":"flaco","_rev":"19-207c46eb7f8038583e0667341de2fadf","name":"flaco","description":"view engine library","dist-tags":{"latest":"2.0.0-3","next":"2.0.0-0"},"versions":{"0.0.0":{"name":"flaco","version":"0.0.0","description":"view engine library","main":"./dist/index.js","jsnext:main":"./index.js","scripts":{"test":"rollup -c ./test/rollup.conf.js && cat ./test/dist/bundle.js | tape-run","build":"npm run build:dist:modern && npm run build:dist:legacy","build:dist:legacy":"rollup -c rollup.legacy.js","build:dist:modern":"rollup -c rollup.modern.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"rollup":"0.41.6","rollup-plugin-buble":"^0.15.0","rollup-plugin-node-resolve":"^2.0.0","rollup-plugin-replace":"^1.1.1","rollup-plugin-uglify":"1.0.1","tape-run":"^3.0.0","zora":"^0.3.0"},"dependencies":{"smart-table-operators":"^2.0.1"},"gitHead":"6d0cd6864a9b59f64bf06541d4543c16b599f11a","_id":"flaco@0.0.0","_shasum":"a4b42945b28a2a7fe7915f852dd05f7a2a39b737","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.4.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"shasum":"a4b42945b28a2a7fe7915f852dd05f7a2a39b737","tarball":"https://registry.npmjs.org/flaco/-/flaco-0.0.0.tgz","integrity":"sha512-BYoI54RVRgnHMrY8abg5OhxHKeko1r1EH7vZRhnanl18YyrDI1ZTtfJtvO/qVyXptsRF3bP/8AYGXxa744ebmQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAv+Z/bWbwHBO3Jl4a6C+JbhiSHGFga7712mZyyy8N2OAiEAuR7I3ju4FOnow9BWhAjT2o4/UyOsC38N8JQ7geLpsBw="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/flaco-0.0.0.tgz_1491232781792_0.9147613176610321"},"directories":{}},"0.0.1":{"name":"flaco","version":"0.0.1","description":"view engine library","main":"./dist/index.js","jsnext:main":"./index.js","scripts":{"test":"rollup -c ./test/rollup.conf.js && cat ./test/dist/bundle.js | tape-run","build":"npm run build:dist:modern && npm run build:dist:legacy","build:dist:legacy":"rollup -c rollup.legacy.js","build:dist:modern":"rollup -c rollup.modern.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"rollup":"0.41.6","rollup-plugin-buble":"^0.15.0","rollup-plugin-node-resolve":"^2.0.0","rollup-plugin-replace":"^1.1.1","rollup-plugin-uglify":"1.0.1","tape-run":"^3.0.0","zora":"^0.3.0"},"dependencies":{"smart-table-operators":"^2.0.1"},"gitHead":"cc0dbac31d6eff20728b275d13f4b5b1e7d3982a","_id":"flaco@0.0.1","_shasum":"9f4a73868b8d623e3b271ade83815a80743bf3f2","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.4.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"shasum":"9f4a73868b8d623e3b271ade83815a80743bf3f2","tarball":"https://registry.npmjs.org/flaco/-/flaco-0.0.1.tgz","integrity":"sha512-AlrFbnu4MFrXhsaBsCOSqKJVKj8ibiBMjBN7dU+lA5JhV0dEh8HDOKsYFb7QIb9jvGJqFJq4M8dWebCVSLPHXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXmQ8+5v/bQ1Ml5wDSz1GthIxiIUfaPD7udTz9Qw/M6wIhAK5bnYPXE4ezFcY5kIxnZMY3XeEpPigXilD1GAE1nRzq"}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/flaco-0.0.1.tgz_1491232809783_0.9726880798116326"},"directories":{}},"0.1.0":{"name":"flaco","version":"0.1.0","description":"view engine library","main":"./dist/index.js","module":"./index.js","scripts":{"test":"rollup -c ./test/rollup.conf.js && cat ./test/dist/bundle.js | tape-run","build":"npm run build:dist:modern && npm run build:dist:legacy","build:dist:legacy":"rollup -c rollup.legacy.js","build:dist:modern":"rollup -c rollup.modern.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"rollup":"0.41.6","rollup-plugin-buble":"^0.15.0","rollup-plugin-node-resolve":"^3.0.0","rollup-plugin-replace":"^1.1.1","rollup-plugin-uglify":"1.0.1","tape-run":"^3.0.0","zora":"^0.3.0"},"dependencies":{"smart-table-operators":"^2.0.1"},"gitHead":"799292c9c4d372403700a2d53effa717094eaf83","_id":"flaco@0.1.0","_shasum":"43885f7b3a4807560f243118bdab55bd3f1a78f8","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.4.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"shasum":"43885f7b3a4807560f243118bdab55bd3f1a78f8","tarball":"https://registry.npmjs.org/flaco/-/flaco-0.1.0.tgz","integrity":"sha512-jUJhVBkWa9+Vsa3RzMePIu3GHFvNcWt1eyr5YYomrBi3f8H1neApMipAdgnzNk7xGQXctmZVj5LmoWH4GrnlJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDN74xSU9k36C9D/OJO9LNXJ9LwF7xWJgBLbNEYN2HNDQIgYqee0cFhFD3p7nQq3xifI66hzbjUeHCfj/tU4xGvHZs="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/flaco-0.1.0.tgz_1491938122097_0.9219563151709735"},"directories":{}},"0.1.1":{"name":"flaco","version":"0.1.1","description":"view engine library","main":"./dist/index.js","module":"./index.js","scripts":{"test":"rollup -c ./test/rollup.conf.js && cat ./test/dist/bundle.js | tape-run","build":"npm run build:dist:modern && npm run build:dist:legacy","build:dist:legacy":"rollup -c rollup.legacy.js","build:dist:modern":"rollup -c rollup.modern.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"rollup":"0.41.6","rollup-plugin-buble":"^0.15.0","rollup-plugin-node-resolve":"^3.0.0","rollup-plugin-replace":"^1.1.1","rollup-plugin-uglify":"1.0.1","tape-run":"^3.0.0","zora":"^0.3.0"},"dependencies":{"smart-table-operators":"^2.0.1"},"gitHead":"1cbecf28e5e1e215fe14897b7d5369bbda26666f","_id":"flaco@0.1.1","_shasum":"6bb3f627086dd7e2c5076c5b98dbcaceebf0d336","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.4.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"shasum":"6bb3f627086dd7e2c5076c5b98dbcaceebf0d336","tarball":"https://registry.npmjs.org/flaco/-/flaco-0.1.1.tgz","integrity":"sha512-uwn2wiftLfnXj03T5WrMOfZorZr5NOuDUNooRMbeUi5Kfy2XDqTGQT4PCAcY7gmJudubkE74LYgHFVhswNmBcw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA859J0JQRXLtl/IjAig00Z/AkOyDomn4J1o5Qfmg1v4AiEAmHFUkpnh+23y8OEjSw1jFUNPBafjpCzB6FV2omjZTmc="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/flaco-0.1.1.tgz_1492009446059_0.3772062861826271"},"directories":{}},"0.2.0":{"name":"flaco","version":"0.2.0","description":"view engine library","main":"./dist/index.js","module":"./index.js","scripts":{"test":"rollup -c ./test/rollup.conf.js && cat ./test/dist/bundle.js | tape-run","build":"npm run build:dist:modern && npm run build:dist:legacy","build:dist:legacy":"rollup -c rollup.legacy.js","build:dist:modern":"rollup -c rollup.modern.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"rollup":"0.41.6","rollup-plugin-buble":"^0.15.0","rollup-plugin-node-resolve":"^3.0.0","rollup-plugin-replace":"^1.1.1","rollup-plugin-uglify":"1.0.2","tape-run":"^3.0.0","zora":"^0.3.0"},"dependencies":{"smart-table-operators":"^2.0.1"},"gitHead":"c25c8f7873924acfb44a32af5e3005d809b3896d","_id":"flaco@0.2.0","_shasum":"ea258529f46af183194de7f67834a8899d0cd138","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.4.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"shasum":"ea258529f46af183194de7f67834a8899d0cd138","tarball":"https://registry.npmjs.org/flaco/-/flaco-0.2.0.tgz","integrity":"sha512-AfTYGIEAtqyDU9LnYlM/ycy2dkEbhw9T7f8DcdiBwnm3TjccAXLm638XuKVFmJ9CfqWZY4Jf+7RMS4sEti+L8A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFjTlKxQdHrZ6mdpWrFl8LDsGEKGIV8HmfF5R7/yLCDeAiEAkpo/S3iYSiuwbkyQP5NE6aZIJekQuxZ0RaL2zWQ3KLs="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/flaco-0.2.0.tgz_1493911513024_0.464664212660864"},"directories":{}},"0.3.0":{"name":"flaco","version":"0.3.0","description":"view engine library","main":"./dist/index.js","module":"./index.js","scripts":{"test":"rollup -c ./test/rollup.conf.js && cat ./test/dist/bundle.js | tape-run","build":"npm run build:dist:modern && npm run build:dist:legacy","build:dist:legacy":"rollup -c rollup.legacy.js","build:dist:modern":"rollup -c rollup.modern.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"rollup":"0.41.6","rollup-plugin-buble":"^0.15.0","rollup-plugin-node-resolve":"^3.0.0","rollup-plugin-replace":"^1.1.1","rollup-plugin-uglify":"1.0.2","tape-run":"^3.0.0","zora":"^0.3.0"},"dependencies":{"smart-table-operators":"^2.0.1"},"gitHead":"cc45de99f190bd287ed50836f22d1d692e2327a6","_id":"flaco@0.3.0","_shasum":"86c8bb3c889330b8c4d6ea1abdc8f9bd3b433807","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.4.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"shasum":"86c8bb3c889330b8c4d6ea1abdc8f9bd3b433807","tarball":"https://registry.npmjs.org/flaco/-/flaco-0.3.0.tgz","integrity":"sha512-pF1RVXFghwg8BHQ3vt9cBviAizLOzYrSwwF2KWt6fAk9RtkhQmYfwaqB+JOJaf9mszBRwk1ezl7EqSljFGBBEg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDPjYHj1EV1DhYCIWSa++O5zqx51wZw9In564E9dhzWcAiA2YNk672o6Pw+oy4TKqO8H2SdWC2hqsgWDDksj1SlBUQ=="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/flaco-0.3.0.tgz_1493913077259_0.12287040916271508"},"directories":{}},"0.3.1":{"name":"flaco","version":"0.3.1","description":"view engine library","main":"./dist/index.js","module":"./index.js","scripts":{"test":"rollup -c ./test/rollup.conf.js && cat ./test/dist/bundle.js | tape-run","build":"npm run build:dist:modern && npm run build:dist:legacy","build:dist:legacy":"rollup -c rollup.legacy.js","build:dist:modern":"rollup -c rollup.modern.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"rollup":"0.41.6","rollup-plugin-buble":"^0.15.0","rollup-plugin-node-resolve":"^3.0.0","rollup-plugin-replace":"^1.1.1","rollup-plugin-uglify":"1.0.2","tape-run":"^3.0.0","zora":"^0.3.0"},"dependencies":{"rollup-plugin-babel":"^2.7.1","smart-table-operators":"^2.0.1"},"gitHead":"ff25c218d465a512ef54563fb6757443a9179fff","_id":"flaco@0.3.1","_npmVersion":"5.0.1","_nodeVersion":"7.4.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"integrity":"sha512-UIWuzQaloQajX56wpYLq2zDcW9V0uhiQcHHQ5GKDr7f+xPQJu5UOO1ml7XE6cfVZV/r/FqpOcf1IhPWpBwCGuA==","shasum":"2ca80fe70c2c9c90bc55b471ef070b119d41b80f","tarball":"https://registry.npmjs.org/flaco/-/flaco-0.3.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSOOoQeeH08sdWM2Nq1j35HsR7JisixWcTnMk9hkAexgIgX4XONmCJvUw+HLoIluvujZ+qkvBGYQOL4k7noMrZvbc="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/flaco-0.3.1.tgz_1496870964598_0.803136725910008"},"directories":{}},"1.0.0":{"name":"flaco","version":"1.0.0","description":"view engine library","main":"./dist/index.js","module":"./index.js","scripts":{"test:dev":"rollup -c ./test/rollup.conf.js --watch","test":"rollup -c ./test/rollup.conf.js && cat ./test/dist/bundle.js | tape-run","build":"npm run build:dist:modern && npm run build:dist:legacy","build:dist:legacy":"rollup -c rollup.legacy.js","build:dist:modern":"rollup -c rollup.modern.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"redux":"^3.6.0","rollup":"^0.43.0","rollup-plugin-buble":"^0.15.0","rollup-plugin-node-resolve":"^3.0.0","rollup-plugin-replace":"^1.1.1","rollup-plugin-uglify":"^2.0.1","rollup-watch":"^4.0.0","tape-run":"^3.0.0","zora":"^0.3.0"},"dependencies":{"smart-table-operators":"^2.0.1"},"gitHead":"bad58a3c91daf493e0e77720bb21b4391580fa1a","_id":"flaco@1.0.0","_npmVersion":"5.0.3","_nodeVersion":"8.1.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"integrity":"sha512-h7akIYlQfc4Fd9MeBH+S+f/JWnAcTq12nIwnKrFaB/SMFZFdE6AIujVu2pwKW+Wd7K4AgVwHANSW4Y7jBQaW6Q==","shasum":"26980ba9281686d7bee11a52108922a30db1c838","tarball":"https://registry.npmjs.org/flaco/-/flaco-1.0.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIBSvpqHHRQ1HrSo7BXHOyP5ETNa+tQJd2xW3ii8o8pAIhAPhXiZGvFp9ysIg37HDv63FJ5P2nAq/S5INGba5cqx2H"}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/flaco-1.0.0.tgz_1497599529843_0.6075365997385234"},"directories":{}},"1.0.1":{"name":"flaco","version":"1.0.1","description":"view engine library","main":"./dist/flaco.js","module":"./index.js","scripts":{"test:dev":"rollup -c ./test/rollup.conf.js --watch","test":"rollup -c ./test/rollup.conf.js && cat ./test/dist/bundle.js | tape-run","build":"npm run build:dist:modern && npm run build:dist:legacy","build:dist:legacy":"rollup -c rollup.legacy.js","build:dist:modern":"rollup -c rollup.modern.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"redux":"^3.6.0","rollup":"^0.43.0","rollup-plugin-buble":"^0.15.0","rollup-plugin-node-resolve":"^3.0.0","rollup-plugin-replace":"^1.1.1","rollup-plugin-uglify":"^2.0.1","rollup-watch":"^4.0.0","tape-run":"^3.0.0","zora":"^0.3.0"},"dependencies":{"smart-table-operators":"^2.0.1"},"gitHead":"b89653ee7719f9ad5f6c88025e94e31de684d7dd","_id":"flaco@1.0.1","_shasum":"80691c43d30c94b88b16b6523bf1d2ba2b11a85b","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"shasum":"80691c43d30c94b88b16b6523bf1d2ba2b11a85b","tarball":"https://registry.npmjs.org/flaco/-/flaco-1.0.1.tgz","integrity":"sha512-LjSBPGtzz+huIYjCuo0TsFwKO93AaJZwAmod+ieMPtghXrNXCqFH4+V85oM2jCYW1wA70Ze8zCgRkxOJa9f4lA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFWokOmEd301dFzEgDsJ4DPbnHQIKfxsuVGEs5sdOsgLAiAPtaMiE7ukTtGrm3rpjt03D1qXfIpY6VOLPMtOpkRTtQ=="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/flaco-1.0.1.tgz_1498819761188_0.8573663076385856"},"directories":{}},"1.1.0":{"name":"flaco","version":"1.1.0","description":"view engine library","main":"./dist/flaco.js","module":"./index.js","scripts":{"test:dev":"rollup -c ./test/rollup.conf.js --watch","test":"rollup -c ./test/rollup.conf.js && cat ./test/dist/bundle.js | tape-run","build":"npm run build:dist:modern && npm run build:dist:legacy","build:dist:legacy":"rollup -c rollup.legacy.js","build:dist:modern":"rollup -c rollup.modern.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"redux":"^3.6.0","rollup":"^0.43.0","rollup-plugin-buble":"^0.15.0","rollup-plugin-node-resolve":"^3.0.0","rollup-plugin-replace":"^1.1.1","rollup-plugin-uglify":"^2.0.1","rollup-watch":"^4.0.0","tape-run":"^3.0.0","zora":"^0.3.0"},"dependencies":{"smart-table-operators":"^2.0.1"},"gitHead":"3acbf3b390f225d3b2cfea24326d669e7a5cb777","_id":"flaco@1.1.0","_shasum":"9ab06a3471fa989b38baddcc37c11a38fab8ad17","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"shasum":"9ab06a3471fa989b38baddcc37c11a38fab8ad17","tarball":"https://registry.npmjs.org/flaco/-/flaco-1.1.0.tgz","integrity":"sha512-KySsHi2IQjC4/nTJhBTj9/zNt/z2/ob+JNXYX+nKapgI+CrFPiKB+/KGbpUDocxBXYQa8XvuB99bNRJj9Uu3MA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCk/cw9H2E2kNzHoJ0zzLCUglmnFyvZpCgmhFcI6OvlagIhAIKjzNn73REYzkFDxlCTAH2CMSCePqXQxXQxYuK34MUw"}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/flaco-1.1.0.tgz_1499349919595_0.15282893925905228"},"directories":{}},"1.1.1":{"name":"flaco","version":"1.1.1","description":"view engine library","main":"./dist/flaco.js","module":"./index.js","jsnext:main":"./index.js","scripts":{"test:build":"rollup -c ./rollup/test.js","test":"xo ./lib/*.js ./index.js && rollup -c ./rollup/test.js && cat ./test/dist/bundle.js | tape-run","build":"rollup -c ./rollup/umd.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"babel-core":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","redux":"^3.7.2","rollup":"^0.54.0","rollup-plugin-babel":"^3.0.3","rollup-plugin-node-resolve":"^3.0.0","rollup-plugin-replace":"^2.0.0","tape-run":"^3.0.0","xo":"^0.18.2","zora":"^1.1.4"},"dependencies":{"smart-table-operators":"^2.0.1"},"gitHead":"98ff20cdff876f6ced0ccbc8444483c98ee337c8","_id":"flaco@1.1.1","_npmVersion":"5.6.0","_nodeVersion":"8.8.1","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"integrity":"sha512-ffvfSdZCI7qTYqP894T7jn9nP7BtixLSM9kO7YXKy4cmGR625gJ87BxQRwcIgwDhBL6M0PdI5qYP2OWyyWIDqg==","shasum":"8276b3991becb67854830d29d6c142d4a3f3debd","tarball":"https://registry.npmjs.org/flaco/-/flaco-1.1.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpqDXohtbyxLWD2ZiYxmgJTgxgh0/p/Qbw1EL5MqqO1gIhAIpTa6ULqdcmwDSUdY2gNKlXUOGBmGy4IeTuVrtyra3s"}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/flaco-1.1.1.tgz_1516138237573_0.6454485217109323"},"directories":{}},"1.2.0":{"name":"flaco","version":"1.2.0","description":"view engine library","main":"./dist/flaco","module":"./index.js","jsnext:main":"./index.js","scripts":{"build:test":"rollup -c ./rollup/test.js","test":"npm run build:test && cat ./test/dist/bundle.js | tape-run","build":"rollup -c ./rollup/umd.js","xo":"xo ./lib/*.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript","ui","framework"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"babel-core":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","redux":"^3.7.2","rollup":"^0.56.5","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.0.0","rollup-plugin-node-resolve":"^3.2.0","rollup-plugin-replace":"^2.0.0","tape-run":"^3.0.0","xo":"^0.18.2","zora":"^2.0.0"},"dependencies":{"smart-table-operators":"^2.0.4"},"gitHead":"6f1b43568a69c8133ec511593ead9341bad252dc","_id":"flaco@1.2.0","_npmVersion":"5.6.0","_nodeVersion":"8.8.1","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"integrity":"sha512-Sbe66DCTizfixLZUBalQLMHlspNk+HF1mA9SyH+5fxUAnh2jJtmLbO155ETLpOtg96FjRr7yqVCuY807pOZFCg==","shasum":"59999378925c2bdd13e12268a2414923ba92664e","tarball":"https://registry.npmjs.org/flaco/-/flaco-1.2.0.tgz","fileCount":17,"unpackedSize":78603,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2Upu/2aFaRWLRGFoANVUu2Mtxuu7DIpvmBzh5Qk3TrgIhAP25UxXanLtfkJaQ3HY6dMw0Rs90Dl96zda0muHQL5c2"}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/flaco_1.2.0_1520883204204_0.331065315738613"},"_hasShrinkwrap":false},"2.0.0-0":{"name":"flaco","version":"2.0.0-0","description":"view engine library","main":"./dist/flaco","module":"./index.js","jsnext:main":"./index.js","scripts":{"build:test":"rollup -c ./rollup/test.js","test":"npm run build:test && cat ./test/dist/bundle.js | tape-run","build":"rollup -c ./rollup/umd.js","xo":"xo ./lib/*.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript","ui","framework"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"babel-core":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","redux":"^3.7.2","rollup":"^0.56.5","rollup-plugin-babel":"^3.0.3","rollup-plugin-commonjs":"^9.0.0","rollup-plugin-node-resolve":"^3.2.0","rollup-plugin-replace":"^2.0.0","tape-run":"^3.0.0","xo":"^0.18.2","zora":"^2.0.0"},"dependencies":{"smart-table-operators":"^2.0.4"},"readme":"# Flaco\n\n[![CircleCI](https://circleci.com/gh/smart-table/flaco.svg?style=svg)](https://circleci.com/gh/smart-table/flaco)\n\n**currently in Beta**, API may change or break pretty often.\n\nYet another view engine based on [hyperscript](https://github.com/hyperhype/hyperscript) and virtual dom.\n\nIn **Flaco**, the base unit, component, is *just* [pure](https://github.com/hemanth/functional-programming-jargon#purity) and *stateless* functions which should be deterministic and easy to test.\nYou can then use any combinator (aka higher order function) to give more specificity (perhaps loosing the purity or statelessness) to your components and embrace the programming paradigm you prefer (stateful components, [Elm](https://guide.elm-lang.org/) or [Redux](https://github.com/reactjs/redux) like architecture, observables, etc)\n\nAh, and Flaco is about **2kb**  minified and gzipped while providing a wide range of *features*, difficult to beat (that is about 400 lines of source code) !\n\n## Installation\n\n``yarn add flaco``\n\nor \n\n``npm install --save flaco``\n\nIf you wish to benefit from [JSX](https://facebook.github.io/react/docs/introducing-jsx.html) syntax, tell your transpiler to use the **h** pragma instead of the default \"createElement\" set for [React](https://facebook.github.io/react/) in most of the module bundlers.\n\nexample with [Rollup](rollupjs.org) and [buble](https://buble.surge.sh/)\n```Javascript\n//rollup.config.js\n\nimport buble from 'rollup-plugin-buble';\nimport node from 'rollup-plugin-node-resolve';\n\nexport default {\n  entry: \"./path/to/entry/file.js\",\n  plugins: [\n    node({jsnext:true}),\n    buble({\n      jsx: 'h', //here you specify the pragma you want to use\n      target:{chrome:52}\n    })\n  ],\n  dest: \"./path/to/output/bundle.js\",\n  moduleName: \"myBundle\",\n  format: \"iife\"\n};\n```\n\n## Usage\n\n### Create a component\n\n```Jsx\n//hello.js\nimport {h} from 'flaco';\n\nexport const HelloWorld = ({hello:'Hello', world:'World'} = {}) => (<h1>{hello} ... {world} !</h1>);\n```\nIt should have the syntax sugar the JSX can provide.\n\n### Mount a component\n\nHaving a component is pretty useless if you don't put it anywhere. For that, you can use the **mount** function\n\n```Jsx\nimport {mount} from 'flaco';\nimport {HelloWorld} from './hello.js';\n\nmount(HelloWorld, {hello:'Buenas dias', world:'mundo'}, document.getElementById('someContainer'));\n// or mount(<HelloWorld hello='Buenas dias', world='mundo'/>,{},document.getElementById('someContainer'));\n```\n\nNote the mount function is [curried](https://github.com/hemanth/functional-programming-jargon#currying) so you can somehow reuse it to mount it in different places for example\n \n```Jsx\nconst mountInFrench = mount(HelloWorld, {hello:'Bonjour', world:'monde'});    \n \nmountInFrench(document.getElementById('here')); \nmountInFrench(document.getElementById('andThere')); \n```\n\n[See in CodePen](http://codepen.io/lorenzofox3/pen/GmRNzp)\n\nIf the node you try to mount your component in has already a dom tree, flaco will try to *hydrate* the dom tree. It means that with flaco you can have [progressive web app](https://dev.opera.com/articles/pwa-resources/) without changing a single line of code !\n\n### Use combinator to create state ... (or the beginning of the end)\n\nWithout any doubt, you will want the user to interact with your shiny user interface and you will need somehow to manage application states. Flaco itself does not make any assumption on how to do it but provide few combinators (higher order function for your components) to create common patterns.\nThey are shipped with the core module but don't worry with any good module bundler (like Rollup) you'll be able to tree shake the parts you don't use (and anyway the full Flaco lib remains probably one of the smallest UI library you may know)\n   \n#### Self contained state\n\nIn some cases, you don't need the state of a particular component to be managed globally or shared. Only the component itself, should be aware of its own encapsulated state and able to edit it.\nThat could be a collapse/expanding section for example.\n\nTo create such behaviour you can use the **withState** combinator: it will create a scope specific to a component instance and allow it to update itself (by passing an update function as second argument to your component)\n\n```Jsx\n//expandable.js\nimport {withState, h} from 'flaco';\n\nconst ExpandableSection = withState((props, setState) => {\n    const {sectionId, expanded, children} = props;\n    const exp = expanded === 'true' || expanded === true;\n    const toggle = () => setState(Object.assign({}, props, {expanded: !exp}));\n    return (\n      <div>\n        <button\n          onClick={toggle} aria-expanded={exp ? 'true' : 'false'}\n          aria-controls={sectionId}>\n          {exp ? 'Collapse' : 'Expand'}\n        </button>\n        <div aria-hidden={String(!exp)} id={sectionId}>\n          {children}\n        </div>\n      </div>\n    );\n  }\n);\n```\n\nWe have now a \"reusable component\" you can mount anywhere, share across projects, etc.\n\n```Jsx\nimport {mount} from 'flaco';\nimport ExpandableSection from './expandable.js'\n\nmount(() => (\n    <div>\n      <ExpandableSection sectionId=\"first\" expanded=\"true\"><strong>Expanded</strong> by default\n        section</ExpandableSection>\n      <ExpandableSection sectionId=\"second\" expanded=\"false\"><strong>Not expanded</strong> by default\n        section</ExpandableSection>\n    </div>\n  ),\n  {},\n  document.getElementById('main'));\n```\n\n[See in CodePen](http://codepen.io/lorenzofox3/pen/ZKELYj)\n\n#### Global application state (the Elm way)\n\nWith [Elm](https://guide.elm-lang.org/), application state (or **model**) is global and can only be modified through **updates**. Any change in the model will make the **view** render with the updated state.\nFor convenience, Flaco will pass updates as second argument of the view.\nUse the elm combinator on your view component and then mount it anywhere with the initial model and the list of available updates.\nYour updates should return a new state of the model\n\n```Jsx\nimport {elm as app, h, mount} from 'flaco';\n\nconst model = {\n  firstCounter: {count: 3},\n  secondCounter: {count: -1},\n};\n\nconst updates = {\n  incrementFirst: (model, ev) => {\n    console.log(ev) // can use some other parameters if needed !\n    return Object.assign({}, model, {firstCounter: {count: model.firstCounter.count + 1}})\n  },\n  decrementFirst: (model) => Object.assign({}, model, {firstCounter: {count: model.firstCounter.count - 1}}),\n  incrementSecond: (model) => Object.assign({}, model, {secondCounter: {count: model.secondCounter.count + 1}}),\n  decrementSecond: (model) => Object.assign({}, model, {secondCounter: {count: model.secondCounter.count - 1}})\n};\n\nconst view = (model, updates) => {\n  return (<div>\n    <div>\n      <button onClick={updates.incrementFirst}>Increment</button>\n      <button onClick={updates.decrementFirst}>Decrement</button>\n      <span>{model.firstCounter.count}</span>\n    </div>\n    <div>\n      <button onClick={updates.incrementSecond}>Increment</button>\n      <button onClick={updates.decrementSecond}>Decrement</button>\n      <span>{model.secondCounter.count}</span>\n    </div>\n  </div>);\n};\n\nconst App = app(view);\n\nmount((props) => <App model={props.model} updates={props.updates}/>, {model, updates}, document.getElementById('main'));\n```\n\n[CodePen](http://codepen.io/lorenzofox3/pen/NjWdRw)\n\nNote you can have multiple apps in the same document. However you should make sure updates and models are in their isolated silos.\n\n#### Global/Partial application state (Redux store like)\n\nRedux itself has been inspired by Elm architecture and share some patterns. Lately, it has been one of the most popular application state container.\nThe **connect** combinator allows you to create a [Container component](https://medium.com/@learnreact/container-components-c0e67432e005) which will listen to changes of a specific slice of the global state. These containers help you to have a more fine grained control on which part of the dom tree you want to update.\n\nAssuming you have the following redux configuration:\n\n```Javascript\nimport {createStore} from 'redux';\n\n// action creators\nconst fail = () => ({type: 'PASSWORD_FAIL'});\nconst succeed = () => ({type: 'PASSWORD_SUCCEED'});\nconst reset = () => ({type: 'RESET'});\n\n//reducer\nconst initialState = {\n  attempts: 0, secret: {found: false}\n};\nconst reducer = function (state = initialState, action) {\n  const {type} = action;\n  switch (type) {\n    case 'PASSWORD_FAIL': {\n      return Object.assign({}, state, {attempts: state.attempts + 1});\n    }\n    case 'PASSWORD_SUCCEED': {\n      return Object.assign({}, state, {secret: {found: true, timestamp: Date.now()}});\n    }\n    case 'RESET': {\n      return initialState;\n    }\n    default:\n      return state;\n  }\n};\n\n//store\nconst store = createStore(reducer);\n\n//boundActions\nconst actions = {\n  fail: () => store.dispatch(fail()),\n  succeed: () => store.dispatch(succeed()),\n  reset: () => store.dispatch(reset()),\n};\n```\n\nAnd the following presentational components:\n\n```Jsx\nconst FormComp = ({onSubmit}) => (<form onSubmit={onSubmit}>\n  <label>\n    <span>Try to find the secret password (answer is \"flaco\")</span>\n    <input name=\"password\" type=\"password\"/>\n  </label>\n  <input type=\"submit\" value=\"Try !\"/>\n</form>);\n\nconst CountDisplay = ({count = 0}={}) => <p>You already have tried <strong>{count}</strong> times</p>;\n\nconst SecretContent = ({reset, date}) => <div>\n  <p>Congratulations you have found the secret code at <strong>{(new Date(date)).toLocaleTimeString()}</strong></p>\n  <p>To reset, please press the following button\n    <button onClick={reset}>Reset</button>\n  </p>\n</div>;\n```\n\nThen you can create your containers and connect the components as follow\n\n```Jsx\n//the bound containers will subscribe to change in the attempt count and update accordingly but will not be able to trigger actions\nconst attemptSliceState = state => ({attempts: state.attempts});\nconst attemptActions = {}; //empty\nconst subscribeToAttemptsCount = connect(store, attemptActions, attemptSliceState);\n\n//the bound containers will be able to trigger actions but won't be updated:\n//slice state function will return a constant so the component will never be updated\nconst triggerActions = connect(store, actions, state => 'NO_UPDATE');\n\n//the bound containers will be able to trigger some actions and will also listen to changes in the secret slice of the state\nconst secretSliceState = state => state.secret;\nconst secretiveComponents = connect(store, {reset: actions.reset}, secretSliceState);\n\n/**\n * Connected components\n */\n\nconst SecretForm = triggerActions((props, actions) => {\n  const onSubmit = ev => {\n    const input = ev.target['password'];\n    if (input.value === 'falco') {\n      actions.succeed();\n    } else {\n      actions.fail();\n    }\n    ev.preventDefault();\n  };\n\n  return <FormComp onSubmit={onSubmit}/>\n});\n\n//a function that map the return slice of state to a set of properties\nconst mapStateToProp = slice => ({count: slice.attempts});\nconst AttemptCounter = subscribeToAttemptsCount(({count}) => <CountDisplay count={count}/>, mapStateToProp);\n\nconst mapSecretStateToProp = slice => ({isSecretFound: slice.found, date: slice.timestamp});\n// a function which should tell whether the component should update or not (by default it checks with deep equality the state slice)\nconst shouldUpdate = (previousSlice = {}, currentSlice = {}) => previousSlice.found !== currentSlice.found;\nconst SecretSection = secretiveComponents(({isSecretFound, date}, actions) => {\n  return isSecretFound ?\n    <div>\n      <SecretContent date={date} reset={actions.reset}/>\n    </div> :\n    <div>\n      <p>Try to find the secret</p>\n    </div>;\n}, mapSecretStateToProp, shouldUpdate);\n\n\nmount(() => <div>\n  <SecretForm/>\n  <AttemptCounter/>\n  <SecretSection/>\n</div>, {}, document.getElementById('main'));\n```\n\n[CodePen](http://codepen.io/lorenzofox3/pen/eWYgWx)\n\n### Life cycles\n\nFlaco allow you to hook yourself into different life cycles of the components. This is useful to create your own update logic and your own combinators.\n\n#### onMount\n\nWill occur when a component has been mounted into the DOM\n\n#### onUnmount\n\nWill occur when a component has been unmounted (ie removed from the DOM)\n\n#### onUpdate\n\nWill occur before the component is updated (it won't be triggered when the component is mounted)\n\n#### Use an update function\n\nThe lifecycle combined with the **update** factory will be useful to create your own update logic\n\nYou can create a combinator which will force the update every second for example.\n\n```Jsx\nimport {onMount,onUnMount,h,mount} from 'flaco';\nconst main = document.getElementById('main');\n\nconst pollEverySecond = function (comp) {\n  return function (initProp) {\n    let timer;\n\n    const createInterval = onMount(vnode => {\n      const updateFunc = update(comp, vnode);\n      timer = setInterval(() => {\n        updateFunc(Object.assign({}, initProp, {timestamp: Math.floor(Date.now())}));\n      }, 1000);\n    });\n\n    const clean = onUnMount(() => clearInterval(timer));\n\n    return clean(createInterval(comp));\n  };\n};\n\n\nconst DisplaySeconds = ({timestamp, startDate, event}) => <p>\n  <strong>{Math.floor(timestamp - startDate.getTime())}</strong> seconds have passed since <strong>{event}</strong>\n</p>;\n\nconst Clock = pollEverySecond(DisplaySeconds);\n\nmount(() => <div>\n  <Clock startDate={new Date(1987, 4, 21)} event=\"I was born\"/>\n  <Clock startDate={new Date(1955, 8, 27)} event=\"My Mom was born\"/>\n</div>, {}, main);\n```\n\nSee [Codepen](http://codepen.io/lorenzofox3/pen/ybLgEG);\n\n## More examples\n\nThe repo comes with few examples you can run by\n1. going into the folder (ie ``cd ./examples/stateful-counter``)\n2. installing the dependencies with ``yarn`` or ``npm install``\n3. building/bundling the app ``yarn build`` or ``npm run build``\n4. and serving/browsing the index.html file.\n\n### [stateful-counter](./examples/stateful-counter)\n\n//todo\n\n### [benchmark-elm-like](./examples/benchmark-elm-like)\n\n//todo\n\n### [todomvc-redux](./examples/todomvc-redux)\n\n//todo\n\n### [smart-table](./examples/smart-table)\n\n//todo\n\n## Contributing\n\n### Test\n\n``yarn test`` or ``npm test``\n\n### Reporting an issue\n\nAny **bug** or **troubleshooting** need to come with an **isolated running example** (ex: a [codepen]() reproducing your issue only - we don't need the whole app) or will simply be ignored.\n","readmeFilename":"README.MD","gitHead":"3156f694dd94b20d8999ec893c8f7107bdad3e0d","_id":"flaco@2.0.0-0","_npmVersion":"5.7.1","_nodeVersion":"8.8.1","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"integrity":"sha512-e4mZV7ZTL4ajHCo66i7YxOPOeFNHRabBPgYkZZQI0Yr+SIicIwb0K8zsgUEotinRgTErPQfixrPXWYVPKrd1rg==","shasum":"0f237ea18c4e0f829e8fd44da349c84ec0734f97","tarball":"https://registry.npmjs.org/flaco/-/flaco-2.0.0-0.tgz","fileCount":18,"unpackedSize":87004,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAOj5Q06F71oaYWQKDohe5yhRYmgxqVqQtrZ/uKHtmCTAiEAxlDlIHSxRJQmZeNQz4F+bqxDGnTK0sJ2zMsg7983vt0="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/flaco_2.0.0-0_1521225854579_0.1620109031499226"},"_hasShrinkwrap":false},"2.0.0-1":{"name":"flaco","version":"2.0.0-1","description":"view engine library","main":"./dist/bundle/index","types":"./dist/declarations/index.d.ts","module":"./dist/bundle/module.js","directories":{"test":"test"},"scripts":{"test:ci":"npm run build && npm test","test":"npm run build:test && rollup -c ./rollup/test.js | tee ./test/dist/debug.js | tape-run","build:clean":"rm -rf ./dist && mkdir -p ./dist/bundle && cp -r ./src ./dist/src","build:test":"tsc -b test","build:compile":"tsc","build:bundle":"rollup -c ./rollup/build.js && rollup -c ./rollup/cdn.js","build":"npm run build:clean && npm run build:compile && npm run build:bundle","build:example":"tsc -b examples && rollup -c ./examples/statefull-counters/rollup.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript","ui","framework"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"rollup":"^0.66.6","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.4.0","tape-run":"^4.0.0","typescript":"^3.1.4","zora":"^2.0.1"},"dependencies":{"smart-table-operators":"^2.0.10"},"gitHead":"92c938ea4c56ce3291d1ae74991ce819992190d7","_id":"flaco@2.0.0-1","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"integrity":"sha512-zOhpdnxcznclAsYaHkH4OJOoaMt6vmDUlDKVqkwKAyE8ojA9EaK6GgXAemobWrKxpLVRHEtDQ5EiKnyPX+E60w==","shasum":"6dc3958b8c9128258080fc9b121015652522eab8","tarball":"https://registry.npmjs.org/flaco/-/flaco-2.0.0-1.tgz","fileCount":21,"unpackedSize":202747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2ee3CRA9TVsSAnZWagAAii4P/1fX6KOntShzb1bdB6X6\nsf96KRvru52EIuVTXZwDY3o3qtZMKP6tisdydeGC1+umEgSvIvqyOHEJRxLk\nOmQU3PWmaCcNhouFvAXwteh4kTZynU013RW382vc3vLuwotoJB64uUpqFb5u\n+K7u5CxCSAeVo565/k+FamVRrJTTnTUDFjT54mSgc+TJwSif1vvfVRsWDDgy\npUS/Ubi2h5Hc3I0MIAfgI6ovk4T3JEGQLFMK6YAqDO77Z70I/4GWcdrs9ivg\n6S1zLEhv0H5xJe4aMoncXMy2ftl1c48PU5LjF5VCL+/r+LE+cZj8E4zy+YpU\neMgIhYYhEHDfkRYn2BXrBXMRThxWe8CD4bHu5cR4roeqetB65Q1MJPm8HnvG\nXJJroscUmxJPJNW8Y3346puMDJYXrahmsObz9HkARIMROFHX1IpZh9+5EG89\nDNnb4LsY3sHkEkUFWa3nJc39kVe3YoktOb3bhPMRxXjr+CUHlO9AQo2EK9lR\nLfnC1f/fG427C1rwOTm9MjedEGdwET2XlxXX2de97Rx9rXVT2L2P6GK3OoGF\nRkrVUsKB0V+HFvtuCsDNRl1XCjpTdVPKRSjuLre8Y25+bloaVRVzhtmZ63t8\nWVLAkSiYyz38OzB71/aFSjN+BknrS/pNUGIbYxW5KWjJDrhpOwc+3xNkOr79\nI2y5\r\n=fOnU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFD/u1TJ6RiXR/n9Xruc8LGlpD1Z3QpckTnNGFn6KF/2AiBQw1F+3pUzCAvo8ZzZ/bXaV8ZFOmuE6YtRyCk4kuOgBw=="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/flaco_2.0.0-1_1541007287122_0.7458763824433614"},"_hasShrinkwrap":false},"2.0.0-2":{"name":"flaco","version":"2.0.0-2","description":"view engine library","main":"./dist/bundle/index","types":"./dist/declarations/index.d.ts","module":"./dist/bundle/module.js","directories":{"test":"test"},"scripts":{"test:ci":"npm run build && npm test","test":"npm run build:test && rollup -c ./rollup/test.js | tee ./test/dist/debug.js | tape-run","build:clean":"rm -rf ./dist && mkdir -p ./dist/bundle && cp -r ./src ./dist/src","build:test":"tsc -b test","build:compile":"tsc","build:bundle":"rollup -c ./rollup/build.js && rollup -c ./rollup/cdn.js","build":"npm run build:clean && npm run build:compile && npm run build:bundle","build:example":"rm -rf ./examples/dist/*.js ./examples/dist/*.js.map && tsc -b examples && rollup -c ./examples/rollup.js"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript","ui","framework"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"rollup":"^0.66.6","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.4.0","smart-table-core":"^3.0.2","tape-run":"^4.0.0","typescript":"^3.1.4","zora":"^2.0.1"},"dependencies":{"smart-table-operators":"^2.0.10"},"gitHead":"ffc2c1997daf0963a2815406d3bb3e54753c2abc","_id":"flaco@2.0.0-2","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"integrity":"sha512-4BQIzi5anjsS/ksfCs+jdZll8X7/fkAtfHp2hp0yVVFEzEem3UfS+kmBSBmLM6q7SQhTA9vcRg/dkpcGSLkAPw==","shasum":"61b618e30c69ac347adb0cd35775c3c8ee02bcc9","tarball":"https://registry.npmjs.org/flaco/-/flaco-2.0.0-2.tgz","fileCount":21,"unpackedSize":206484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb20WRCRA9TVsSAnZWagAAt1IP/1mbEDdx+NaIDA56nEk0\n2Y0ctbN78zZBu9Ubmv8cT4fy6F53BiB8NY/bolPTYpy39EPXzlZUoJT3gIsl\n4pczM2MRa8FnCqpgrsiwqc20/1f3lpdB5c4kxjslQTYzUGFjhstvmm0TTodr\nPnTZxqXNJTgFCyeHw61ylbxrzSAHqcpbMj+1PTOKDgm2aMYZwkPuleoF4cxk\nLPvJqDKdAgK2boYGuVrP5zmFb5fDvS/6J8bLguPUmTzkPtgUz+sO55pDwa+L\n+P08Qc7yXdMm4gaS+TRQvwcQ+RgwlI+Do/mMI878WTOz8hk7TBSn4aTY4RgQ\nairgTNCKvLwgv/UhdxC+kcITQGaNGr7YsIYjDzqWS/LK6Q9nN1aQmmRNUZ2w\nhXELa+tyI8lRRzLmyRWlDxGJNdTpZ9bM56PnFZN+fMULiwus6bF/sMRyxSD8\n+YIzueRV8m3nRbt8DVrxYt9dRNI0YOK98OGJyZCDunCqGTyEW9Q2hIaulh9+\nMQDPApiBoX/etec7on73ZG45HNyo5J5RBg01tvApZ/XeciKCtygZJMLTI9ti\n2tUHZtJUnli+cbJjb5EP/SUqaNPnDye92/V0W41m95dU0E4r9lAvjMKU78ge\nGUMIWESYccS2bGJeqlIloeMFvoDqUfUQCTvspWgeC/h4nPB7rHgXev91B9dz\n1oTg\r\n=PcUp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEEaUPKcS0diaglXt1BUx6o7S8kpTOPfXK3xHKwhKOiXAiApCud0XNnsisxySxLycqpSAQD/pm50yYgsdDEcPP4jzg=="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/flaco_2.0.0-2_1541096849086_0.8039170738942485"},"_hasShrinkwrap":false},"2.0.0-3":{"name":"flaco","version":"2.0.0-3","description":"view engine library","main":"./dist/bundle/index","types":"./dist/declarations/index.d.ts","module":"./dist/bundle/module.js","directories":{"test":"test"},"scripts":{"test:ci":"npm run build && tsc -b test && rollup -c ./rollup/test.js | tape-run","test":"tsc -b test && rollup -c ./rollup/test.js | tee ./test/dist/debug.js | tape-run","build:clean":"rm -rf ./dist && mkdir -p ./dist/bundle && cp -r ./src ./dist/src","build:compile":"tsc","build:bundle":"rollup -c ./rollup/build.js && rollup -c ./rollup/cdn.js","build:example":"rm -rf ./examples/dist/*.js ./examples/dist/*.js.map && tsc -b examples && rollup -c ./examples/rollup.js","build":"npm run build:clean && npm run build:compile && npm run build:bundle"},"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"keywords":["view","virtual-dom","vdom","jsx","hyperscript","ui","framework"],"author":{"name":"Laurent Renard"},"license":"MIT","bugs":{"url":"https://github.com/smart-table/flaco/issues"},"homepage":"https://github.com/smart-table/flaco#readme","devDependencies":{"rollup":"^0.66.6","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-node-resolve":"^3.4.0","smart-table-core":"^3.0.2","tape-run":"^4.0.0","typescript":"^3.1.4","zora":"^2.0.1"},"dependencies":{"smart-table-operators":"^2.0.10"},"gitHead":"caf1713014716d3a14d8d753d533c80ba4a7b5ef","_id":"flaco@2.0.0-3","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"},"dist":{"integrity":"sha512-ppUfHxsEhCxXlSEjq/oxSQuASZ+3PUVzZ8Pqq+f8VyI0nR6fityPrFZuSYxFpB9StSFwDvwDsuTWxm17riHA/w==","shasum":"e91a99ed622b0f0a437024884780ab987bae202d","tarball":"https://registry.npmjs.org/flaco/-/flaco-2.0.0-3.tgz","fileCount":21,"unpackedSize":207313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4fS0CRA9TVsSAnZWagAAGq4P/3v58FOLSUPceolQUojx\ngOYJ0Skp2ysyBghMp3VWBIG4lC+ptFtubtOzYzEK5IxXJ+1llHShDITrop5R\njEgCHDeE/OU7qr1FHeA1KjntXiJIV5lGfzPYQNbLOqga6xOvUtUQY1IPs1PQ\n1i+mNTJexRZqlDg4f7qrwQDmWJ8KOq8Jlg8a3tI31wihcU7cPJBycOA2+wh5\niexBnAESmp4WkPFSzCxMHVbBQBek8DeTRVu0CzN81/Dz0Gad+lDXjayA4mNS\nkJp4mA+QefLB3a2OGXNXgRxesKoy69B5SB/zduou04W7HTRElGIAy0xtpx/c\nw2tR5WFPAKDUPCiIHqUXS14U7REKJjmIIKOduiefvO9hVEtj490X7KqePvMw\nXLFLj7DfN3VwMEIqh2pb3DFYXStx8rd6mQtf1k05BQfCI6E4e2JojmOMPX02\nAXEJft02QzBeuUweLt6x5fnzr+YxQfn3SR6eB43AdrHvXsy5LI1xyguNzmIa\nGASsoa6+HU7ACdJKuzdE9uAsSynARkPB9F/NkCUkyF11H4a7UjAJje309/t6\nH/wrGdlAZEgmcrVeisyJ0vptHec9VqgFpt6WPnKRLZVkNCqvPisGNLY1LXFD\n+K8YgRUvOwhT1m6ZRBGCANIQW4SC3ULHnOBak0E2ju3O2nWYjuoh9mKy2UOY\nGXIt\r\n=Wgdb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCodAMCwln/Hyii6sl5B+7zq1jVnQ6rJqklUHh4v1x6cgIgOVH3UsVggtMsbpP93JePVNwajcM+NDTCeneKIKmijTk="}]},"maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/flaco_2.0.0-3_1541534899537_0.9031413567440276"},"_hasShrinkwrap":false}},"readme":"# Flaco\n\n[![CircleCI](https://circleci.com/gh/smart-table/flaco.svg?style=svg)](https://circleci.com/gh/smart-table/flaco)\n\nYet another view engine based on [hyperscript](https://github.com/hyperhype/hyperscript) and virtual dom.\n\nIn **Flaco**, the base unit, component, is *just* [pure](https://github.com/hemanth/functional-programming-jargon#purity) functions which should be deterministic and easy to test.\nYou can then use any combinator (aka higher order function) to give more specificity (perhaps loosing the purity or statelessness) to your components and embrace the UI architecture you prefer (stateful components, [Elm](https://guide.elm-lang.org/) or [Redux](https://github.com/reactjs/redux) like architecture, observables, etc)\n\nAh, and Flaco is about **2kb**  minified and gzipped while providing a wide range of *features*, difficult to beat (that is about 400 lines of source code) !\n\n## Installation\n\n``yarn add flaco``\n\nor\n\n``npm install --save flaco``\n\nIf you wish to benefit from [JSX](https://facebook.github.io/react/docs/introducing-jsx.html) syntax, tell your transpiler to use the **h** pragma instead of the default \"createElement\" set for [React](https://facebook.github.io/react/) in most of the module bundlers.\n\n## Usage\n\n### Create a component\n\n```Jsx\n//hello.js\nimport {h} from 'flaco';\n\nexport const HelloWorld = ({hello = 'Hello', world = 'World'} = {}) => (<h1>{hello} ... {world} !</h1>);\n```\nOr if you don't want to use JSX and keep the vanilla JS syntax\n\n```Javascript\nimport {h, NA} from 'flaco';\n\n// NA stands for \"No attributes\" replace by an object if you wish to pass some attributes\nexport const HelloWorld = ({hello = 'Hello', world = 'World'} = {}) => h('h1', NA, `${hello}...${world}`);\n```\nFlaco come with built in convenient functions for standard HTML Elements:\n```Javascript\nimport {h1} from 'flaco';\n\nexport const HelloWorld = ({hello = 'Hello', world = 'World'} = {}) => h1(`${hello}...${world}`);\n```\n\n### Mount a component\n\nHaving a component is pretty useless if you don't put it anywhere. For that, you can use the **mount** function\n\n```Jsx\nimport {mount} from 'flaco';\nimport {HelloWorld} from './hello.js';\n\nmount(HelloWorld, {hello:'Buenas dias', world:'mundo'}, document.getElementById('someContainer'));\n// or mount(<HelloWorld hello='Buenas dias', world='mundo'/>,{},document.getElementById('someContainer'));\n```\n\nNote the mount function is [curried](https://github.com/hemanth/functional-programming-jargon#currying) so you can somehow reuse it to mount it in different places for example\n\n```Jsx\nconst mountInFrench = mount(HelloWorld, {hello:'Bonjour', world:'monde'});\n\nmountInFrench(document.getElementById('here'));\nmountInFrench(document.getElementById('andThere'));\n```\n\n[See in CodePen](http://codepen.io/lorenzofox3/pen/GmRNzp)\n\nIf the node you try to mount your component in has already a dom tree, flaco will try to *hydrate* the dom tree. It means that with flaco you can have [progressive web app](https://dev.opera.com/articles/pwa-resources/) without changing a single line of code !\n\n### Use combinator to create state ... (or the beginning of the end)\n\nWithout any doubt, you will want the user to interact with your shiny user interface and you will need somehow to manage application states. Flaco itself does not make any assumption on how to do it but provide few combinators (higher order function for your components) to create common patterns.\nThey are shipped with the core module but don't worry with any good module bundler (like Rollup) you'll be able to tree shake the parts you don't use (and anyway the full Flaco lib remains probably one of the smallest UI library you may know)\n\n#### Self contained state\n\nIn some cases, you don't need the state of a particular component to be managed globally or shared. Only the component itself, should be aware of its own encapsulated state and able to edit it.\nThat could be a collapse/expanding section for example.\n\nTo create such behaviour you can use the **withState** combinator: it will create a scope specific to a component instance and allow it to update itself (by passing an update function as second argument to your component)\n\n```Jsx\n//expandable.js\nimport {withState, h} from 'flaco';\n\nconst ExpandableSection = withState((props, setState) => {\n    const {sectionId, expanded, children} = props;\n    const exp = expanded === 'true' || expanded === true;\n    const toggle = () => setState(Object.assign({}, props, {expanded: !exp}));\n    return (\n      <div>\n        <button\n          onClick={toggle} aria-expanded={exp ? 'true' : 'false'}\n          aria-controls={sectionId}>\n          {exp ? 'Collapse' : 'Expand'}\n        </button>\n        <div aria-hidden={String(!exp)} id={sectionId}>\n          {children}\n        </div>\n      </div>\n    );\n  }\n);\n```\n\nWe have now a \"reusable component\" you can mount anywhere, share across projects, etc.\n\n```Jsx\nimport {mount} from 'flaco';\nimport ExpandableSection from './expandable.js'\n\nmount(() => (\n    <div>\n      <ExpandableSection sectionId=\"first\" expanded=\"true\"><strong>Expanded</strong> by default\n        section</ExpandableSection>\n      <ExpandableSection sectionId=\"second\" expanded=\"false\"><strong>Not expanded</strong> by default\n        section</ExpandableSection>\n    </div>\n  ),\n  {},\n  document.getElementById('main'));\n```\n\n[See in CodePen](http://codepen.io/lorenzofox3/pen/ZKELYj)\n\n#### Global application state (the Elm way)\n\nNote you can have multiple apps in the same document. However you should make sure updates and models are in their isolated silos.\n\n### Life cycles\n\nFlaco allows you to hook yourself into different life cycles of the components. This is useful to create your own update logic and your own combinators.\n\n#### onMount\n\nWill occur when a component has been mounted into the DOM\n\n#### onUnmount\n\nWill occur when a component has been unmounted (ie removed from the DOM)\n\n#### onUpdate\n\nWill occur before the component is updated (it won't be triggered when the component is mounted)\n\n#### Use an update function\n\nThe lifecycle combined with the **update** factory will be useful to create your own update logic\n\nYou can create a combinator which will force the update every second for example.\n\n```Jsx\nimport {onMount,onUnMount,h,mount} from 'flaco';\nconst main = document.getElementById('main');\n\nconst pollEverySecond = function (comp) {\n  return function (initProp) {\n    let timer;\n\n    const createInterval = onMount(vnode => {\n      const updateFunc = update(comp, vnode);\n      timer = setInterval(() => {\n        updateFunc(Object.assign({}, initProp, {timestamp: Math.floor(Date.now())}));\n      }, 1000);\n    });\n\n    const clean = onUnMount(() => clearInterval(timer));\n\n    return clean(createInterval(comp));\n  };\n};\n\n\nconst DisplaySeconds = ({timestamp, startDate, event}) => <p>\n  <strong>{Math.floor(timestamp - startDate.getTime())}</strong> seconds have passed since <strong>{event}</strong>\n</p>;\n\nconst Clock = pollEverySecond(DisplaySeconds);\n\nmount(() => <div>\n  <Clock startDate={new Date(1987, 4, 21)} event=\"I was born\"/>\n  <Clock startDate={new Date(1955, 8, 27)} event=\"My Mom was born\"/>\n</div>, {}, main);\n```\n\nSee [Codepen](http://codepen.io/lorenzofox3/pen/ybLgEG);\n\n## Contributing\n\n### Test\n\n``yarn test`` or ``npm test``\n\n### Reporting an issue\n\nAny **bug** or **troubleshooting** need to come with an **isolated running example** (ex: a [codepen]() reproducing your issue only - we don't need the whole app) or will simply be ignored.\n","maintainers":[{"name":"lorenzofox3","email":"laurent34azerty@gmail.com"}],"time":{"modified":"2022-06-18T01:53:19.672Z","created":"2017-04-03T15:19:42.533Z","0.0.0":"2017-04-03T15:19:42.533Z","0.0.1":"2017-04-03T15:20:11.768Z","0.1.0":"2017-04-11T19:15:25.775Z","0.1.1":"2017-04-12T15:04:06.289Z","0.2.0":"2017-05-04T15:25:14.917Z","0.3.0":"2017-05-04T15:51:18.268Z","0.3.1":"2017-06-07T21:29:26.015Z","1.0.0":"2017-06-16T07:52:11.022Z","1.0.1":"2017-06-30T10:49:22.360Z","1.1.0":"2017-07-06T14:05:20.861Z","1.1.1":"2018-01-16T21:30:38.833Z","1.2.0":"2018-03-12T19:33:24.257Z","2.0.0-0":"2018-03-16T18:44:14.644Z","2.0.0-1":"2018-10-31T17:34:47.355Z","2.0.0-2":"2018-11-01T18:27:29.194Z","2.0.0-3":"2018-11-06T20:08:19.652Z"},"homepage":"https://github.com/smart-table/flaco#readme","keywords":["view","virtual-dom","vdom","jsx","hyperscript","ui","framework"],"repository":{"type":"git","url":"git+https://github.com/smart-table/flaco.git"},"author":{"name":"Laurent Renard"},"bugs":{"url":"https://github.com/smart-table/flaco/issues"},"license":"MIT","readmeFilename":"README.MD"}